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 1a3d30a234d..a3fe6e04350 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java @@ -18,7 +18,6 @@ package org.jetbrains.jet.lang.resolve; import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import com.google.common.collect.Multimap; import com.google.common.collect.Sets; import com.intellij.lang.ASTNode; import com.intellij.psi.PsiElement; @@ -40,7 +39,6 @@ import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.checker.JetTypeChecker; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.lexer.JetTokens; -import org.jetbrains.jet.utils.CommonSuppliers; import javax.inject.Inject; import java.util.*; @@ -224,7 +222,7 @@ public class OverrideResolver { } } - protected void checkOverridesInAClass(@NotNull MutableClassDescriptor classDescriptor, @NotNull JetClassOrObject klass) { + private void checkOverridesInAClass(@NotNull MutableClassDescriptor classDescriptor, @NotNull JetClassOrObject klass) { if (topDownAnalysisParameters.isAnalyzingBootstrapLibrary()) return; // Check overrides for internal consistency @@ -422,36 +420,6 @@ public class OverrideResolver { return overriddenDeclarationsByDirectParent; } - public static Multimap collectSuperMethods(ClassDescriptor classDescriptor) { - Set inheritedFunctions = Sets.newLinkedHashSet(); - for (JetType supertype : classDescriptor.getTypeConstructor().getSupertypes()) { - for (DeclarationDescriptor descriptor : supertype.getMemberScope().getAllDescriptors()) { - if (descriptor instanceof CallableMemberDescriptor) { - CallableMemberDescriptor memberDescriptor = (CallableMemberDescriptor) descriptor; - inheritedFunctions.add(memberDescriptor); - } - } - } - - // Only those actually inherited - Set filteredMembers = OverridingUtil.filterOutOverridden(inheritedFunctions); - - // Group members with "the same" signature - Multimap factoredMembers = CommonSuppliers.newLinkedHashSetHashSetMultimap(); - for (CallableMemberDescriptor one : filteredMembers) { - if (factoredMembers.values().contains(one)) continue; - for (CallableMemberDescriptor another : filteredMembers) { -// if (one == another) continue; - factoredMembers.put(one, one); - if (OverridingUtil.isOverridableBy(one, another).getResult() == OVERRIDABLE - || OverridingUtil.isOverridableBy(another, one).getResult() == OVERRIDABLE) { - factoredMembers.put(one, another); - } - } - } - return factoredMembers; - } - private interface CheckOverrideReportStrategy { void overridingFinalMember(@NotNull CallableMemberDescriptor overridden); diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideMethodsHandler.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideMethodsHandler.java index f94c5846523..7ccf96eba31 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideMethodsHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/OverrideMethodsHandler.java @@ -16,19 +16,26 @@ package org.jetbrains.jet.plugin.codeInsight; +import com.google.common.collect.LinkedHashMultimap; +import com.google.common.collect.Multimap; +import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; -import org.jetbrains.jet.lang.resolve.OverrideResolver; +import org.jetbrains.jet.lang.resolve.OverridingUtil; import org.jetbrains.jet.lang.resolve.calls.CallResolverUtil; +import org.jetbrains.jet.lang.types.JetType; import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.Set; +import static org.jetbrains.jet.lang.resolve.OverridingUtil.OverrideCompatibilityInfo.Result.OVERRIDABLE; + public class OverrideMethodsHandler extends OverrideImplementMethodsHandler { @Override protected Set collectMethodsToGenerate(ClassDescriptor descriptor) { - Set superMethods = OverrideResolver.collectSuperMethods(descriptor).keySet(); + Set superMethods = collectSuperMethods(descriptor); for (DeclarationDescriptor member : descriptor.getDefaultType().getMemberScope().getAllDescriptors()) { if (member instanceof CallableMemberDescriptor) { CallableMemberDescriptor callable = (CallableMemberDescriptor) member; @@ -48,6 +55,37 @@ public class OverrideMethodsHandler extends OverrideImplementMethodsHandler { return result; } + @NotNull + private static Set collectSuperMethods(@NotNull ClassDescriptor classDescriptor) { + Set inheritedFunctions = new LinkedHashSet(); + for (JetType supertype : classDescriptor.getTypeConstructor().getSupertypes()) { + for (DeclarationDescriptor descriptor : supertype.getMemberScope().getAllDescriptors()) { + if (descriptor instanceof CallableMemberDescriptor) { + inheritedFunctions.add((CallableMemberDescriptor) descriptor); + } + } + } + + // Only those actually inherited + Set filteredMembers = OverridingUtil.filterOutOverridden(inheritedFunctions); + + // Group members with "the same" signature + Multimap factoredMembers = LinkedHashMultimap.create(); + for (CallableMemberDescriptor one : filteredMembers) { + if (factoredMembers.values().contains(one)) continue; + for (CallableMemberDescriptor another : filteredMembers) { +// if (one == another) continue; + factoredMembers.put(one, one); + if (OverridingUtil.isOverridableBy(one, another).getResult() == OVERRIDABLE + || OverridingUtil.isOverridableBy(another, one).getResult() == OVERRIDABLE) { + factoredMembers.put(one, another); + } + } + } + + return factoredMembers.keySet(); + } + @Override protected String getChooserTitle() { return "Override Members";