use of org.elixir_lang.structure_view.element.Exception in project intellij-elixir by KronicDeth.
the class Module method childCallTreeElements.
/*
* Private Static Methods
*/
@Contract(pure = true)
@Nullable
private static TreeElement[] childCallTreeElements(@NotNull Modular modular, Call[] childCalls) {
TreeElement[] treeElements = null;
if (childCalls != null) {
int length = childCalls.length;
final List<TreeElement> treeElementList = new ArrayList<TreeElement>(length);
FunctionByNameArity functionByNameArity = new FunctionByNameArity(length, treeElementList, modular);
MacroByNameArity macroByNameArity = new MacroByNameArity(length, treeElementList, modular);
Set<Overridable> overridableSet = new HashSet<Overridable>();
Set<org.elixir_lang.structure_view.element.Use> useSet = new HashSet<org.elixir_lang.structure_view.element.Use>();
for (Call childCall : childCalls) {
if (Callback.is(childCall)) {
treeElementList.add(new Callback(modular, childCall));
} else if (Delegation.is(childCall)) {
functionByNameArity.addDelegationToTreeElementList(childCall);
} else if (Exception.is(childCall)) {
functionByNameArity.setException(new Exception(modular, childCall));
} else if (CallDefinitionClause.isFunction(childCall)) {
functionByNameArity.addClausesToCallDefinition(childCall);
} else if (CallDefinitionSpecification.is(childCall)) {
functionByNameArity.addSpecificationToCallDefinition(childCall);
} else if (Implementation.is(childCall)) {
treeElementList.add(new Implementation(modular, childCall));
} else if (CallDefinitionClause.isMacro(childCall)) {
macroByNameArity.addClausesToCallDefinition(childCall);
} else if (Module.is(childCall)) {
treeElementList.add(new Module(modular, childCall));
} else if (Overridable.is(childCall)) {
Overridable overridable = new Overridable(modular, childCall);
overridableSet.add(overridable);
treeElementList.add(overridable);
} else if (Protocol.is(childCall)) {
treeElementList.add(new Protocol(modular, childCall));
} else if (org.elixir_lang.structure_view.element.Quote.is(childCall)) {
treeElementList.add(new Quote(modular, childCall));
} else if (Structure.is(childCall)) {
treeElementList.add(new Structure(modular, childCall));
} else if (Type.is(childCall)) {
treeElementList.add(Type.fromCall(modular, childCall));
} else if (org.elixir_lang.structure_view.element.Use.is(childCall)) {
org.elixir_lang.structure_view.element.Use use = new org.elixir_lang.structure_view.element.Use(modular, childCall);
useSet.add(use);
treeElementList.add(use);
} else if (Unknown.is(childCall)) {
// Should always be last since it will match all macro calls
treeElementList.add(new Unknown(modular, childCall));
}
}
for (Overridable overridable : overridableSet) {
for (TreeElement treeElement : overridable.getChildren()) {
CallReference callReference = (CallReference) treeElement;
Integer arity = callReference.arity();
if (arity != null) {
String name = callReference.name();
CallDefinition function = functionByNameArity.get(pair(name, arity));
if (function != null) {
function.setOverridable(true);
}
}
}
}
Collection<TreeElement> useCollection = new HashSet<TreeElement>(useSet.size());
useCollection.addAll(useSet);
Collection<TreeElement> nodesFromUses = Used.provideNodesFromChildren(useCollection);
Map<Pair<String, Integer>, CallDefinition> useFunctionByNameArity = Used.functionByNameArity(nodesFromUses);
for (Map.Entry<Pair<String, Integer>, CallDefinition> useNameArityFunction : useFunctionByNameArity.entrySet()) {
CallDefinition useFunction = useNameArityFunction.getValue();
if (useFunction.isOverridable()) {
Pair<String, Integer> useNameArity = useNameArityFunction.getKey();
CallDefinition function = functionByNameArity.get(useNameArity);
if (function != null) {
function.setOverride(true);
}
}
}
treeElements = treeElementList.toArray(new TreeElement[treeElementList.size()]);
}
return treeElements;
}
Aggregations