private static Operation chooseFunctionForInvocation( LinkedList<Operation> functions, FileScope scope) { Operation candidate = null; int candidatePriority = 0; int curPriority; for (Operation f : functions) { curPriority = 0; // Scoped private functions override global ones if (f.getScope() == scope) { curPriority = 2; if (f.isOverride()) { curPriority = 4; } } else if (f.getVisibility() != Visibility.PRIVATE) { curPriority = 1; if (f.isOverride()) { curPriority = 3; } } if (curPriority > candidatePriority) { candidate = f; candidatePriority = curPriority; } } return candidate; }
void addMethod(Operation f) { // Enrichment methods may not declared override if (f.isOverride()) throw Problem.ofType(ProblemId.NATIVE_ENRICHMENT_METHOD_DECLARED_OVERRIDE) .at(f.getDefinition()) .raiseUnrecoverable(); String uid = f.getUid(); LinkedHashMap<Signature, LinkedList<Operation>> meths = methods.get(uid); if (meths == null) { meths = new LinkedHashMap<Signature, LinkedList<Operation>>(); methods.put(uid, meths); } addMethod(f, meths); }