diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaToKotlinMethodMap.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaToKotlinMethodMap.java index b9e35155d5b..c2d3ea3bd10 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaToKotlinMethodMap.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaToKotlinMethodMap.java @@ -26,8 +26,6 @@ import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.name.Name; -import org.jetbrains.jet.lang.types.JetType; -import org.jetbrains.jet.lang.types.TypeUtils; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.renderer.DescriptorRenderer; @@ -46,25 +44,13 @@ public class JavaToKotlinMethodMap { private JavaToKotlinMethodMap() { } - @NotNull - private static Set getAllSuperClasses(@NotNull ClassDescriptor klass) { - Set allSupertypes = TypeUtils.getAllSupertypes(klass.getDefaultType()); - Set allSuperclasses = Sets.newHashSet(); - for (JetType supertype : allSupertypes) { - ClassDescriptor superclass = TypeUtils.getClassDescriptor(supertype); - assert superclass != null; - allSuperclasses.add(superclass); - } - return allSuperclasses; - } - @NotNull public List getFunctions(@NotNull PsiMethod psiMethod, @NotNull ClassDescriptor containingClass) { ImmutableCollection classDatas = mapContainer.map.get(psiMethod.getContainingClass().getQualifiedName()); List result = Lists.newArrayList(); - Set allSuperClasses = getAllSuperClasses(containingClass); + Set allSuperClasses = DescriptorUtils.getAllSuperClasses(containingClass); String serializedPsiMethod = serializePsiMethod(psiMethod); for (ClassData classData : classDatas) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java index 368cf5ecfe9..73d15c0171f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java @@ -18,6 +18,7 @@ package org.jetbrains.jet.lang.resolve; import com.google.common.base.Predicate; import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; @@ -545,4 +546,16 @@ public class DescriptorUtils { return "values".equals(functionDescriptor.getName().getName()) && methodTypeParameters.isEmpty(); } + + @NotNull + public static Set getAllSuperClasses(@NotNull ClassDescriptor klass) { + Set allSupertypes = TypeUtils.getAllSupertypes(klass.getDefaultType()); + Set allSuperclasses = Sets.newHashSet(); + for (JetType supertype : allSupertypes) { + ClassDescriptor superclass = TypeUtils.getClassDescriptor(supertype); + assert superclass != null; + allSuperclasses.add(superclass); + } + return allSuperclasses; + } } diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/ChangeMemberFunctionSignatureFix.java b/idea/src/org/jetbrains/jet/plugin/quickfix/ChangeMemberFunctionSignatureFix.java index 64b2cc71779..21e14bf9684 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/ChangeMemberFunctionSignatureFix.java +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/ChangeMemberFunctionSignatureFix.java @@ -31,6 +31,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.impl.FunctionDescriptorUtil; import org.jetbrains.jet.lang.diagnostics.Diagnostic; +import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetNamedFunction; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.DescriptorUtils; @@ -75,7 +76,7 @@ public class ChangeMemberFunctionSignatureFix extends JetHintAction computePossibleSignatures(JetNamedFunction functionElement) { + private static List computePossibleSignatures(JetNamedFunction functionElement) { BindingContext context = KotlinCacheManagerUtil.getDeclarationsFromProject(functionElement).getBindingContext(); FunctionDescriptor functionDescriptor = context.get(BindingContext.FUNCTION, functionElement); if (functionDescriptor == null) return Lists.newArrayList(); @@ -234,7 +235,7 @@ public class ChangeMemberFunctionSignatureFix extends JetHintActionoverride fun f(a: Int) {} +} diff --git a/idea/testData/quickfix/override/nothingToOverride/beforeAddParameterTwoSupertraits.kt b/idea/testData/quickfix/override/nothingToOverride/beforeAddParameterTwoSupertraits.kt new file mode 100644 index 00000000000..37ec0c70c1b --- /dev/null +++ b/idea/testData/quickfix/override/nothingToOverride/beforeAddParameterTwoSupertraits.kt @@ -0,0 +1,11 @@ +// "Change function signature to 'override fun f(a: Int)'" "true" +trait A { + fun f(a: Int) +} + +trait B : A { +} + +class C : B { + override fun f() {} +} diff --git a/idea/testData/quickfix/override/nothingToOverride/beforeAddParameterTwoSupertypes.kt b/idea/testData/quickfix/override/nothingToOverride/beforeAddParameterTwoSupertypes.kt new file mode 100644 index 00000000000..144907eca27 --- /dev/null +++ b/idea/testData/quickfix/override/nothingToOverride/beforeAddParameterTwoSupertypes.kt @@ -0,0 +1,11 @@ +// "Change function signature to 'override fun f(a: Int)'" "true" +open class A { + open fun f(a: Int) {} +} + +open class B : A() { +} + +class C : B() { + override fun f() {} +} diff --git a/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java index 9697cd550b8..9b32c411512 100644 --- a/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java @@ -16,14 +16,17 @@ package org.jetbrains.jet.plugin.quickfix; +import junit.framework.Assert; import junit.framework.Test; import junit.framework.TestSuite; + +import java.io.File; +import java.util.regex.Pattern; import org.jetbrains.jet.JetTestUtils; import org.jetbrains.jet.test.InnerTestClasses; import org.jetbrains.jet.test.TestMetadata; -import java.io.File; -import java.util.regex.Pattern; +import org.jetbrains.jet.plugin.quickfix.AbstractQuickFixTest; /** This class is generated by {@link org.jetbrains.jet.generators.tests.GenerateTests}. DO NOT MODIFY MANUALLY */ @SuppressWarnings("all") @@ -848,6 +851,16 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest("idea/testData/quickfix/override/nothingToOverride/beforeAddParameterPreserveVisibility.kt"); } + @TestMetadata("beforeAddParameterTwoSupertraits.kt") + public void testAddParameterTwoSupertraits() throws Exception { + doTest("idea/testData/quickfix/override/nothingToOverride/beforeAddParameterTwoSupertraits.kt"); + } + + @TestMetadata("beforeAddParameterTwoSupertypes.kt") + public void testAddParameterTwoSupertypes() throws Exception { + doTest("idea/testData/quickfix/override/nothingToOverride/beforeAddParameterTwoSupertypes.kt"); + } + public void testAllFilesPresentInNothingToOverride() throws Exception { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/quickfix/override/nothingToOverride"), Pattern.compile("^before(\\w+)\\.kt$"), true); }