diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java index 7efe6e22aab..7b037b3950d 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java @@ -112,7 +112,11 @@ public class OverrideResolver { } } - List functionsFromSupertypes = getDescriptorsFromSupertypes(classDescriptor); + doGenerateOverridesInAClass(classDescriptor); + } + + private void doGenerateOverridesInAClass(final MutableClassDescriptor classDescriptor) { + List functionsFromSupertypes = getCallableMembersFromSupertypes(classDescriptor); MultiMap functionsFromSupertypesByName = groupDescriptorsByName(functionsFromSupertypes); @@ -122,11 +126,12 @@ public class OverrideResolver { functionNames.addAll(functionsFromSupertypesByName.keySet()); functionNames.addAll(functionsFromCurrentByName.keySet()); - Set fakeOverrides = Sets.newHashSet(); for (Name functionName : functionNames) { - generateOverridesInFunctionGroup(functionName, fakeOverrides, - functionsFromSupertypesByName.get(functionName), - functionsFromCurrentByName.get(functionName), + Collection fromSupertypes = functionsFromSupertypesByName.get(functionName); + Collection fromCurrent = functionsFromCurrentByName.get(functionName); + generateOverridesInFunctionGroup(functionName, + fromSupertypes, + fromCurrent, classDescriptor, new DescriptorSink() { @Override @@ -144,7 +149,8 @@ public class OverrideResolver { @Override public void conflict(@NotNull CallableMemberDescriptor fromSuper, @NotNull CallableMemberDescriptor fromCurrent) { - JetDeclaration jetProperty = (JetDeclaration) BindingContextUtils.descriptorToDeclaration(trace.getBindingContext(), fromCurrent); + JetDeclaration jetProperty = (JetDeclaration) BindingContextUtils + .descriptorToDeclaration(trace.getBindingContext(), fromCurrent); trace.report(Errors.CONFLICTING_OVERLOADS.on(jetProperty, fromCurrent, fromCurrent.getContainingDeclaration().getName().getName())); } }); @@ -160,7 +166,7 @@ public class OverrideResolver { resolveUnknownVisibilityForMember(declaration, memberDescriptor); } } - + public interface DescriptorSink { void addToScope(@NotNull CallableMemberDescriptor fakeOverride); @@ -169,7 +175,6 @@ public class OverrideResolver { public static void generateOverridesInFunctionGroup( @NotNull Name name, - @Nullable Set fakeOverrides, @NotNull Collection functionsFromSupertypes, @NotNull Collection functionsFromCurrent, @NotNull ClassDescriptor current, @@ -207,9 +212,6 @@ public class OverrideResolver { CallableMemberDescriptor fakeOverride = functionFromSupertype.copy(current, false, !isVisible, CallableMemberDescriptor.Kind.FAKE_OVERRIDE, false); OverridingUtil.bindOverride(fakeOverride, functionFromSupertype); fakeOverrideList.add(fakeOverride); - if (fakeOverrides != null) { - fakeOverrides.add(fakeOverride); - } sink.addToScope(fakeOverride); } } @@ -224,16 +226,15 @@ public class OverrideResolver { } - private static List getDescriptorsFromSupertypes(ClassDescriptor classDescriptor) { + private static List getCallableMembersFromSupertypes(ClassDescriptor classDescriptor) { Set r = Sets.newLinkedHashSet(); for (JetType supertype : classDescriptor.getTypeConstructor().getSupertypes()) { - r.addAll(getDescriptorsOfType(supertype.getMemberScope())); + r.addAll(getCallableMembersFromType(supertype.getMemberScope())); } return new ArrayList(r); } - private static List getDescriptorsOfType( - JetScope scope) { + private static List getCallableMembersFromType(JetScope scope) { List r = Lists.newArrayList(); for (DeclarationDescriptor decl : scope.getAllDescriptors()) { if (decl instanceof PropertyDescriptor || decl instanceof SimpleFunctionDescriptor) {