package org.elixir_lang.psi.operation; import com.intellij.psi.PsiElement; import org.elixir_lang.psi.Operator; import org.elixir_lang.psi.operation.Operation; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; /** * Canonical children of an {@link Operation}, which converts any errors to `null`. */ public class Normalized { /* * * Static Methods * */ /* * Public Static Methods */ @Contract(pure = true) @NotNull public static Operator operator(@NotNull Operation operation) { PsiElement[] children = operation.getChildren(); int operatorIndex = operatorIndex(children); return operator(children, operatorIndex); } @Contract(pure = true) public static int operatorIndex(@NotNull PsiElement[] children) { int operatorIndex = -1; for (int i = 0; i < children.length; i++) { if (children[i] instanceof Operator) { operatorIndex = i; break; } } assert operatorIndex != -1; return operatorIndex; } /* * Private Static Methods */ @Contract(pure = true) @NotNull private static Operator operator(@NotNull PsiElement[] children, int operatorIndex) { return (Operator) children[operatorIndex]; } }