public boolean isOverridden(JvmFeature overriding, JvmFeature overridden, ITypeArgumentContext context, boolean isCheckInheritance) { if (overriding == overridden) return false; if (overridden.getClass() != overriding.getClass()) return false; if (!isNameEqual(overriding, overridden)) return false; if (isCheckInheritance && !isInheritanceRelation(overriding, overridden)) return false; return internalIsOverridden(overriding, overridden, context, isCheckInheritance); }
protected Iterable<JvmFeature> removeOverridden(Multimap<Triple<EClass, String, Integer>, JvmFeature> featureIndex, ITypeArgumentContext ctx) { Set<JvmFeature> result = Sets.newLinkedHashSet(featureIndex.values()); for (Collection<JvmFeature> featuresWithSameName : featureIndex.asMap().values()) { if (featuresWithSameName.size() > 1) { for (JvmFeature op1 : featuresWithSameName) { for (JvmFeature op2 : featuresWithSameName) { if (result.contains(op1) && op1.getDeclaringType() != op2.getDeclaringType() && internalIsOverridden(op1, op2, ctx, true)) result.remove(op2); } } } } return result; }