Operation (@NotNull String name, @NotNull PsiType type, PsiExpression @NotNull [] args) { Operation operation = IntermediateOperation.create(name, args); if (operation != null) return operation; operation = TerminalOperation.create(name, args); if (operation != null) return operation; return SourceOperation.create(name, type, args); }