From 40638de67cf0cf1c05c7976c7b0db6ef890f10d8 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Tue, 25 Aug 2015 20:32:07 +0300 Subject: [PATCH] Override members does not generate qualified super when not needed --- .../ImplementMembersHandler.kt | 2 +- .../OverrideImplementMembersHandler.kt | 22 +++++++++---------- .../OverrideMemberChooserObject.kt | 19 +++++++++++----- .../OverrideMembersHandler.kt | 13 ++++++++--- .../overrideImplement/ambiguousSuper.kt.after | 8 ++++--- .../doNotOverrideFinal.kt.after | 8 +++---- .../overrideImplement/escapeIdentifiers.kt | 2 +- .../escapeIdentifiers.kt.after | 2 +- .../functionWithTypeParameters.kt | 3 ++- .../functionWithTypeParameters.kt.after | 5 ++++- .../overrideImplement/genericSuperClass.kt | 2 +- .../genericSuperClass.kt.after | 6 ++--- .../inheritVisibilities.kt.after | 12 +++++----- .../overrideImplement/localClass.kt | 2 +- .../overrideImplement/localClass.kt.after | 2 +- .../overrideImplement/multipleSupers.kt.after | 8 +++---- .../overrideFunctionProperty.kt.after | 1 + .../overrideGenericFunction.kt.after | 1 + .../overrideJavaMethod/foo/A.java | 2 +- .../overrideRespectCaretPosition.kt.after | 1 + .../overrideImplement/overrideUnitFunction.kt | 2 +- .../overrideUnitFunction.kt.after | 2 +- .../privateJavaMethod/foo/Impl.kt.after | 8 +++---- .../qualifySuperType.kt.after | 2 +- .../sameTypeName/foo/Impl.kt | 2 +- .../sameTypeName/foo/Impl.kt.after | 3 ++- .../superPreference.kt.after | 8 +++---- .../AbstractOverrideImplementTest.kt | 7 ++++++ 28 files changed, 92 insertions(+), 63 deletions(-) diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/ImplementMembersHandler.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/ImplementMembersHandler.kt index 6f35e0c15a6..6482e6a00ca 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/ImplementMembersHandler.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/ImplementMembersHandler.kt @@ -27,7 +27,7 @@ import org.jetbrains.kotlin.resolve.OverrideResolver public class ImplementMembersHandler : OverrideImplementMembersHandler(), IntentionAction { override fun collectMembersToGenerate(descriptor: ClassDescriptor, project: Project): Collection { return OverrideResolver.getMissingImplementations(descriptor) - .map { OverrideMemberChooserObject.create(project, it, it) } + .map { OverrideMemberChooserObject.create(project, it, it, OverrideMemberChooserObject.BodyType.EMPTY) } } override fun getChooserTitle() = "Implement Members" diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideImplementMembersHandler.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideImplementMembersHandler.kt index b003bb0fe5a..b1f36b5b066 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideImplementMembersHandler.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideImplementMembersHandler.kt @@ -189,15 +189,15 @@ public abstract class OverrideImplementMembersHandler : LanguageCodeInsightActio for (selectedElement in selectedElements) { val descriptor = selectedElement.immediateSuper when (descriptor) { - is SimpleFunctionDescriptor -> overridingMembers.add(overrideFunction(classOrObject, descriptor)) - is PropertyDescriptor -> overridingMembers.add(overrideProperty(classOrObject, descriptor)) + is SimpleFunctionDescriptor -> overridingMembers.add(overrideFunction(classOrObject, descriptor, selectedElement.bodyType)) + is PropertyDescriptor -> overridingMembers.add(overrideProperty(classOrObject, descriptor, selectedElement.bodyType)) else -> error("Unknown member to override: $descriptor") } } return overridingMembers } - private fun overrideProperty(classOrObject: JetClassOrObject, descriptor: PropertyDescriptor): JetElement { + private fun overrideProperty(classOrObject: JetClassOrObject, descriptor: PropertyDescriptor, bodyType: OverrideMemberChooserObject.BodyType): JetElement { val newDescriptor = descriptor.copy(descriptor.containingDeclaration, Modality.OPEN, descriptor.visibility, descriptor.kind, /* copyOverrides = */ true) as PropertyDescriptor newDescriptor.addOverriddenDescriptor(descriptor) @@ -205,7 +205,7 @@ public abstract class OverrideImplementMembersHandler : LanguageCodeInsightActio val body = StringBuilder { append("\nget()") append(" = ") - append(generateUnsupportedOrSuperCall(classOrObject, descriptor)) + append(generateUnsupportedOrSuperCall(descriptor, bodyType)) if (descriptor.isVar) { append("\nset(value) {}") } @@ -213,31 +213,29 @@ public abstract class OverrideImplementMembersHandler : LanguageCodeInsightActio return JetPsiFactory(classOrObject.project).createProperty(OVERRIDE_RENDERER.render(newDescriptor) + body) } - private fun overrideFunction(classOrObject: JetClassOrObject, descriptor: FunctionDescriptor): JetNamedFunction { + private fun overrideFunction(classOrObject: JetClassOrObject, descriptor: FunctionDescriptor, bodyType: OverrideMemberChooserObject.BodyType): JetNamedFunction { val newDescriptor = descriptor.copy(descriptor.containingDeclaration, Modality.OPEN, descriptor.visibility, descriptor.kind, /* copyOverrides = */ true) newDescriptor.addOverriddenDescriptor(descriptor) val returnType = descriptor.returnType val returnsNotUnit = returnType != null && !KotlinBuiltIns.isUnit(returnType) - val isAbstract = descriptor.modality == Modality.ABSTRACT - val delegation = generateUnsupportedOrSuperCall(classOrObject, descriptor) + val delegation = generateUnsupportedOrSuperCall(descriptor, bodyType) - val body = "{" + (if (returnsNotUnit && !isAbstract) "return " else "") + delegation + "}" + val body = "{" + (if (returnsNotUnit && bodyType != OverrideMemberChooserObject.BodyType.EMPTY) "return " else "") + delegation + "}" return JetPsiFactory(classOrObject.project).createFunction(OVERRIDE_RENDERER.render(newDescriptor) + body) } - private fun generateUnsupportedOrSuperCall(classOrObject: JetClassOrObject, descriptor: CallableMemberDescriptor): String { - val isAbstract = descriptor.modality == Modality.ABSTRACT - if (isAbstract) { + private fun generateUnsupportedOrSuperCall(descriptor: CallableMemberDescriptor, bodyType: OverrideMemberChooserObject.BodyType): String { + if (bodyType == OverrideMemberChooserObject.BodyType.EMPTY) { return "throw UnsupportedOperationException()" } else { return StringBuilder { append("super") - if (classOrObject.getDelegationSpecifiers().size() > 1) { + if (bodyType == OverrideMemberChooserObject.BodyType.QUALIFIED_SUPER) { val superClassFqName = IdeDescriptorRenderers.SOURCE_CODE.renderClassifierName(descriptor.containingDeclaration as ClassifierDescriptor) append("<").append(superClassFqName).append(">") } diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideMemberChooserObject.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideMemberChooserObject.kt index 4a46bbbef1b..521fea8fdc5 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideMemberChooserObject.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideMemberChooserObject.kt @@ -27,24 +27,32 @@ import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde import org.jetbrains.kotlin.idea.core.util.DescriptorMemberChooserObject interface OverrideMemberChooserObject : ClassMember { + enum class BodyType { + EMPTY, + SUPER, + QUALIFIED_SUPER + } + val descriptor: CallableMemberDescriptor val immediateSuper: CallableMemberDescriptor + val bodyType: BodyType companion object { - fun create(project: Project, descriptor: CallableMemberDescriptor, immediateSuper: CallableMemberDescriptor): OverrideMemberChooserObject { + fun create(project: Project, descriptor: CallableMemberDescriptor, immediateSuper: CallableMemberDescriptor, bodyType: BodyType): OverrideMemberChooserObject { val declaration = DescriptorToSourceUtilsIde.getAnyDeclaration(project, descriptor) if (declaration != null) { - return WithDeclaration(descriptor, declaration, immediateSuper) + return WithDeclaration(descriptor, declaration, immediateSuper, bodyType) } else { - return WithoutDeclaration(descriptor, immediateSuper) + return WithoutDeclaration(descriptor, immediateSuper, bodyType) } } private class WithDeclaration( descriptor: CallableMemberDescriptor, declaration: PsiElement, - override val immediateSuper: CallableMemberDescriptor + override val immediateSuper: CallableMemberDescriptor, + override val bodyType: BodyType ) : DescriptorMemberChooserObject(declaration, descriptor), OverrideMemberChooserObject { override val descriptor: CallableMemberDescriptor @@ -53,7 +61,8 @@ interface OverrideMemberChooserObject : ClassMember { private class WithoutDeclaration( override val descriptor: CallableMemberDescriptor, - override val immediateSuper: CallableMemberDescriptor + override val immediateSuper: CallableMemberDescriptor, + override val bodyType: BodyType ) : MemberChooserObjectBase(DescriptorMemberChooserObject.getText(descriptor), DescriptorMemberChooserObject.getIcon(null, descriptor)), OverrideMemberChooserObject { override fun getParentNodeDelegate(): MemberChooserObject? { diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideMembersHandler.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideMembersHandler.kt index 16425cbb73d..166481c452b 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideMembersHandler.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideMembersHandler.kt @@ -18,8 +18,7 @@ package org.jetbrains.kotlin.idea.core.overrideImplement import com.intellij.openapi.project.Project import org.jetbrains.kotlin.descriptors.* -import java.util.ArrayList -import java.util.LinkedHashMap +import java.util.* public class OverrideMembersHandler : OverrideImplementMembersHandler() { override fun collectMembersToGenerate(descriptor: ClassDescriptor, project: Project): Collection { @@ -56,7 +55,15 @@ public class OverrideMembersHandler : OverrideImplementMembersHandler() { else { immediateSupers.singleOrNull { (it.containingDeclaration as? ClassDescriptor)?.kind == ClassKind.CLASS } ?: immediateSupers.first() } - result.add(OverrideMemberChooserObject.create(project, realSuper, immediateSuperToUse)) + + val bodyType = if (immediateSuperToUse.modality == Modality.ABSTRACT) + OverrideMemberChooserObject.BodyType.EMPTY + else if (realSupersToUse.size() == 1) + OverrideMemberChooserObject.BodyType.SUPER + else + OverrideMemberChooserObject.BodyType.QUALIFIED_SUPER + + result.add(OverrideMemberChooserObject.create(project, realSuper, immediateSuperToUse, bodyType)) } } } diff --git a/idea/testData/codeInsight/overrideImplement/ambiguousSuper.kt.after b/idea/testData/codeInsight/overrideImplement/ambiguousSuper.kt.after index a6c470bc28c..ab05e82da81 100644 --- a/idea/testData/codeInsight/overrideImplement/ambiguousSuper.kt.after +++ b/idea/testData/codeInsight/overrideImplement/ambiguousSuper.kt.after @@ -1,3 +1,5 @@ +// ERROR: 'internal open fun foo(): kotlin.Unit' is already defined in C +// ERROR: 'internal open fun foo(): kotlin.Unit' is already defined in C interface I { open fun foo(){} } @@ -8,7 +10,7 @@ open class A { class C : A(), I { override fun equals(other: Any?): Boolean { - return super.equals(other) + return super.equals(other) } override fun foo() { @@ -20,10 +22,10 @@ class C : A(), I { } override fun hashCode(): Int { - return super.hashCode() + return super.hashCode() } override fun toString(): String { - return super.toString() + return super.toString() } } \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/doNotOverrideFinal.kt.after b/idea/testData/codeInsight/overrideImplement/doNotOverrideFinal.kt.after index cb95729e021..286a0986de8 100644 --- a/idea/testData/codeInsight/overrideImplement/doNotOverrideFinal.kt.after +++ b/idea/testData/codeInsight/overrideImplement/doNotOverrideFinal.kt.after @@ -15,11 +15,11 @@ abstract class B : A() { class C : B(), I { override fun equals(other: Any?): Boolean { - return super.equals(other) + return super.equals(other) } override fun f() { - super.f() + super.f() } override fun g() { @@ -27,10 +27,10 @@ class C : B(), I { } override fun hashCode(): Int { - return super.hashCode() + return super.hashCode() } override fun toString(): String { - return super.toString() + return super.toString() } } diff --git a/idea/testData/codeInsight/overrideImplement/escapeIdentifiers.kt b/idea/testData/codeInsight/overrideImplement/escapeIdentifiers.kt index 80dd444501c..8a2c2c6c0a8 100644 --- a/idea/testData/codeInsight/overrideImplement/escapeIdentifiers.kt +++ b/idea/testData/codeInsight/overrideImplement/escapeIdentifiers.kt @@ -2,6 +2,6 @@ open class A { open fun foo(`object` : Any): Int = 0 } -class C : A { +class C : A() { } diff --git a/idea/testData/codeInsight/overrideImplement/escapeIdentifiers.kt.after b/idea/testData/codeInsight/overrideImplement/escapeIdentifiers.kt.after index 69769498632..bb203955961 100644 --- a/idea/testData/codeInsight/overrideImplement/escapeIdentifiers.kt.after +++ b/idea/testData/codeInsight/overrideImplement/escapeIdentifiers.kt.after @@ -2,7 +2,7 @@ open class A { open fun foo(`object` : Any): Int = 0 } -class C : A { +class C : A() { override fun foo(`object`: Any): Int { return super.foo(`object`) } diff --git a/idea/testData/codeInsight/overrideImplement/functionWithTypeParameters.kt b/idea/testData/codeInsight/overrideImplement/functionWithTypeParameters.kt index 67f474a828b..18562d33499 100644 --- a/idea/testData/codeInsight/overrideImplement/functionWithTypeParameters.kt +++ b/idea/testData/codeInsight/overrideImplement/functionWithTypeParameters.kt @@ -1,5 +1,6 @@ +// see KT-8942 interface Trait { - fun > foo() where B : Cloneable, B : Comparable; + fun > foo() where B : Cloneable, B : Comparable } class TraitImpl : Trait { diff --git a/idea/testData/codeInsight/overrideImplement/functionWithTypeParameters.kt.after b/idea/testData/codeInsight/overrideImplement/functionWithTypeParameters.kt.after index 113fbac465e..31adc083f39 100644 --- a/idea/testData/codeInsight/overrideImplement/functionWithTypeParameters.kt.after +++ b/idea/testData/codeInsight/overrideImplement/functionWithTypeParameters.kt.after @@ -1,5 +1,8 @@ +// ERROR: 'foo' overrides nothing +// ERROR: Class 'TraitImpl' must be declared abstract or implement abstract member internal abstract fun > foo(): kotlin.Unit where B : kotlin.Cloneable, B : kotlin.Comparable defined in Trait +// see KT-8942 interface Trait { - fun > foo() where B : Cloneable, B : Comparable; + fun > foo() where B : Cloneable, B : Comparable } class TraitImpl : Trait { diff --git a/idea/testData/codeInsight/overrideImplement/genericSuperClass.kt b/idea/testData/codeInsight/overrideImplement/genericSuperClass.kt index 8c97db59bb7..b25271f40e6 100644 --- a/idea/testData/codeInsight/overrideImplement/genericSuperClass.kt +++ b/idea/testData/codeInsight/overrideImplement/genericSuperClass.kt @@ -1,3 +1,3 @@ -class X : java.util.ArrayList(), Runnable { +abstract class X : java.util.ArrayList(), Runnable { } \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/genericSuperClass.kt.after b/idea/testData/codeInsight/overrideImplement/genericSuperClass.kt.after index c0fb4d50ec5..3082ffd0e3d 100644 --- a/idea/testData/codeInsight/overrideImplement/genericSuperClass.kt.after +++ b/idea/testData/codeInsight/overrideImplement/genericSuperClass.kt.after @@ -1,7 +1,5 @@ -import java.util.ArrayList - -class X : java.util.ArrayList(), Runnable { +abstract class X : java.util.ArrayList(), Runnable { override fun size(): Int { - return super.size() + return super.size() } } \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/inheritVisibilities.kt.after b/idea/testData/codeInsight/overrideImplement/inheritVisibilities.kt.after index 50a4d049947..1e154b9f4f3 100644 --- a/idea/testData/codeInsight/overrideImplement/inheritVisibilities.kt.after +++ b/idea/testData/codeInsight/overrideImplement/inheritVisibilities.kt.after @@ -12,35 +12,35 @@ interface B { class C : A(), B { override fun equals(other: Any?): Boolean { - return super.equals(other) + return super.equals(other) } override fun hashCode(): Int { - return super.hashCode() + return super.hashCode() } override fun internalFun() { - super.internalFun() + super.internalFun() } override val internalProperty: Int get() = throw UnsupportedOperationException() override fun protectedFun() { - super.protectedFun() + super.protectedFun() } override val protectedProperty: Int get() = throw UnsupportedOperationException() override fun publicFun() { - super.publicFun() + super.publicFun() } override val publicProperty: Int get() = throw UnsupportedOperationException() override fun toString(): String { - return super.toString() + return super.toString() } } diff --git a/idea/testData/codeInsight/overrideImplement/localClass.kt b/idea/testData/codeInsight/overrideImplement/localClass.kt index be6a2026ec1..b258decd4e1 100644 --- a/idea/testData/codeInsight/overrideImplement/localClass.kt +++ b/idea/testData/codeInsight/overrideImplement/localClass.kt @@ -5,7 +5,7 @@ abstract class C { fun f() { class R - object : C { + object : C() { } } diff --git a/idea/testData/codeInsight/overrideImplement/localClass.kt.after b/idea/testData/codeInsight/overrideImplement/localClass.kt.after index cff12bd2677..0e1e4ced4ae 100644 --- a/idea/testData/codeInsight/overrideImplement/localClass.kt.after +++ b/idea/testData/codeInsight/overrideImplement/localClass.kt.after @@ -5,7 +5,7 @@ abstract class C { fun f() { class R - object : C { + object : C() { override fun f(a: R) { throw UnsupportedOperationException() } diff --git a/idea/testData/codeInsight/overrideImplement/multipleSupers.kt.after b/idea/testData/codeInsight/overrideImplement/multipleSupers.kt.after index 9bf200b5b69..f0dc6541c1e 100644 --- a/idea/testData/codeInsight/overrideImplement/multipleSupers.kt.after +++ b/idea/testData/codeInsight/overrideImplement/multipleSupers.kt.after @@ -12,18 +12,18 @@ class C : A(), B { } override fun equals(other: Any?): Boolean { - return super.equals(other) + return super.equals(other) } override fun foo() { - super.foo() + super.foo() } override fun hashCode(): Int { - return super.hashCode() + return super.hashCode() } override fun toString(): String { - return super.toString() + return super.toString() } } diff --git a/idea/testData/codeInsight/overrideImplement/overrideFunctionProperty.kt.after b/idea/testData/codeInsight/overrideImplement/overrideFunctionProperty.kt.after index 0d439333af0..93d07fcb0ea 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideFunctionProperty.kt.after +++ b/idea/testData/codeInsight/overrideImplement/overrideFunctionProperty.kt.after @@ -1,3 +1,4 @@ +// ERROR: Unresolved reference: println open class A() { open val method : () -> Unit? = {println("hello")} } diff --git a/idea/testData/codeInsight/overrideImplement/overrideGenericFunction.kt.after b/idea/testData/codeInsight/overrideImplement/overrideGenericFunction.kt.after index faaaf25d70c..8fe7ef7df91 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideGenericFunction.kt.after +++ b/idea/testData/codeInsight/overrideImplement/overrideGenericFunction.kt.after @@ -1,3 +1,4 @@ +// ERROR: Unresolved reference: println interface A { fun foo(value : T) : Unit = println(value) } diff --git a/idea/testData/codeInsight/overrideImplement/overrideJavaMethod/foo/A.java b/idea/testData/codeInsight/overrideImplement/overrideJavaMethod/foo/A.java index 1aa001dbe1d..6e5b43b1dac 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideJavaMethod/foo/A.java +++ b/idea/testData/codeInsight/overrideImplement/overrideJavaMethod/foo/A.java @@ -1,6 +1,6 @@ package foo; -class A { +public class A { public int getAnswer(String[] array, int number, Object value) { return 42; } diff --git a/idea/testData/codeInsight/overrideImplement/overrideRespectCaretPosition.kt.after b/idea/testData/codeInsight/overrideImplement/overrideRespectCaretPosition.kt.after index 62d5cbf3cd7..240b4493fe4 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideRespectCaretPosition.kt.after +++ b/idea/testData/codeInsight/overrideImplement/overrideRespectCaretPosition.kt.after @@ -1,3 +1,4 @@ +// ERROR: Unresolved reference: println open class A() { open fun foo(value : Int) : Unit = println(value) open val bar : Int = 0 diff --git a/idea/testData/codeInsight/overrideImplement/overrideUnitFunction.kt b/idea/testData/codeInsight/overrideImplement/overrideUnitFunction.kt index 3e194ab46c7..7375e815b2e 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideUnitFunction.kt +++ b/idea/testData/codeInsight/overrideImplement/overrideUnitFunction.kt @@ -1,5 +1,5 @@ interface A { - fun foo(value : String) : Unit = 0 + fun foo(value : String) : Unit {} } class C : A { diff --git a/idea/testData/codeInsight/overrideImplement/overrideUnitFunction.kt.after b/idea/testData/codeInsight/overrideImplement/overrideUnitFunction.kt.after index d9d39beb533..3dd5ebc41f0 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideUnitFunction.kt.after +++ b/idea/testData/codeInsight/overrideImplement/overrideUnitFunction.kt.after @@ -1,5 +1,5 @@ interface A { - fun foo(value : String) : Unit = 0 + fun foo(value : String) : Unit {} } class C : A { diff --git a/idea/testData/codeInsight/overrideImplement/privateJavaMethod/foo/Impl.kt.after b/idea/testData/codeInsight/overrideImplement/privateJavaMethod/foo/Impl.kt.after index 085b904a80c..7ba1f2d7b09 100644 --- a/idea/testData/codeInsight/overrideImplement/privateJavaMethod/foo/Impl.kt.after +++ b/idea/testData/codeInsight/overrideImplement/privateJavaMethod/foo/Impl.kt.after @@ -4,19 +4,19 @@ interface I { class C : A(), I { override fun equals(other: Any?): Boolean { - return super.equals(other) + return super.equals(other) } override fun hashCode(): Int { - return super.hashCode() + return super.hashCode() } override fun toString(): String { - return super.toString() + return super.toString() } override fun x() { - super.x() + super.x() } override fun z() { diff --git a/idea/testData/codeInsight/overrideImplement/qualifySuperType.kt.after b/idea/testData/codeInsight/overrideImplement/qualifySuperType.kt.after index 4ccbdd0ca2f..69e22efeea3 100644 --- a/idea/testData/codeInsight/overrideImplement/qualifySuperType.kt.after +++ b/idea/testData/codeInsight/overrideImplement/qualifySuperType.kt.after @@ -10,6 +10,6 @@ class Outer { class X : Outer.Inner1, Outer.Inner2 { override fun f() { - super.f() + super.f() } } \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/sameTypeName/foo/Impl.kt b/idea/testData/codeInsight/overrideImplement/sameTypeName/foo/Impl.kt index 34bc3e6edf3..db3e72d17d2 100644 --- a/idea/testData/codeInsight/overrideImplement/sameTypeName/foo/Impl.kt +++ b/idea/testData/codeInsight/overrideImplement/sameTypeName/foo/Impl.kt @@ -5,4 +5,4 @@ public class Impl : ArrayFactory { } -val array: Array \ No newline at end of file +val array: Array = emptyArray() \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/sameTypeName/foo/Impl.kt.after b/idea/testData/codeInsight/overrideImplement/sameTypeName/foo/Impl.kt.after index 26ed2a06b70..f0510220e06 100644 --- a/idea/testData/codeInsight/overrideImplement/sameTypeName/foo/Impl.kt.after +++ b/idea/testData/codeInsight/overrideImplement/sameTypeName/foo/Impl.kt.after @@ -1,3 +1,4 @@ +// ERROR: Unresolved reference: emptyArray //KT-1602 import lib.ArrayFactory @@ -7,4 +8,4 @@ public class Impl : ArrayFactory { } } -val array: Array \ No newline at end of file +val array: Array = emptyArray() \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/superPreference.kt.after b/idea/testData/codeInsight/overrideImplement/superPreference.kt.after index c2dcad42755..a5eb409eb05 100644 --- a/idea/testData/codeInsight/overrideImplement/superPreference.kt.after +++ b/idea/testData/codeInsight/overrideImplement/superPreference.kt.after @@ -18,15 +18,15 @@ interface I3 { abstract class B : I2, A(), I3 { override fun a() { - super.a() + super.a() } override fun equals(other: Any?): Boolean { - return super.equals(other) + return super.equals(other) } override fun hashCode(): Int { - return super.hashCode() + return super.hashCode() } override fun i() { @@ -42,6 +42,6 @@ abstract class B : I2, A(), I3 { } override fun toString(): String { - return super.toString() + return super.toString() } } diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/AbstractOverrideImplementTest.kt b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/AbstractOverrideImplementTest.kt index 981a8d7a217..7d5fcf5b4c1 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/AbstractOverrideImplementTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/AbstractOverrideImplementTest.kt @@ -34,8 +34,10 @@ import org.jetbrains.kotlin.idea.core.overrideImplement.OverrideMemberChooserObj import org.jetbrains.kotlin.idea.core.overrideImplement.OverrideMembersHandler import org.jetbrains.kotlin.idea.test.JetLightCodeInsightFixtureTestCase import org.jetbrains.kotlin.idea.test.JetLightProjectDescriptor +import org.jetbrains.kotlin.idea.test.dumpTextWithErrors import org.jetbrains.kotlin.idea.util.application.executeWriteCommand import org.jetbrains.kotlin.psi.JetClassOrObject +import org.jetbrains.kotlin.psi.JetFile import org.jetbrains.kotlin.test.JetTestUtils import org.jetbrains.kotlin.test.TagsTestDataUtil import org.jetbrains.kotlin.utils.rethrow @@ -187,6 +189,11 @@ public abstract class AbstractOverrideImplementTest : JetLightCodeInsightFixture val expectedFile = File(myFixture.testDataPath, fileName) try { Assert.assertTrue(expectedFile.exists()) + val file = myFixture.file as JetFile + val document = myFixture.getDocument(file) + myFixture.project.executeWriteCommand("") { + document.replaceString(0, document.textLength, file.dumpTextWithErrors()) + } myFixture.checkResultByFile(fileName) } catch (error: AssertionError) {