diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/codeinsight/FirJava8OverrideImplementTest.kt b/idea/idea-fir/tests/org/jetbrains/kotlin/codeinsight/FirJava8OverrideImplementTest.kt new file mode 100644 index 00000000000..1ac32cdbaeb --- /dev/null +++ b/idea/idea-fir/tests/org/jetbrains/kotlin/codeinsight/FirJava8OverrideImplementTest.kt @@ -0,0 +1,24 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.codeinsight + +import org.jetbrains.kotlin.idea.codeInsight.Java8OverrideImplementTest +import org.jetbrains.kotlin.idea.core.overrideImplement.KtClassMember +import org.jetbrains.kotlin.idea.invalidateCaches +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner +import org.junit.runner.RunWith + +@RunWith(JUnit3WithIdeaConfigurationRunner::class) +internal class FirJava8OverrideImplementTest : Java8OverrideImplementTest(), FirOverrideImplementTestMixIn { + override fun isFirPlugin(): Boolean = true + + override fun tearDown() { + project.invalidateCaches(file as? KtFile) + super.tearDown() + } +} + diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/codeinsight/FirOverrideImplementTest.kt b/idea/idea-fir/tests/org/jetbrains/kotlin/codeinsight/FirOverrideImplementTest.kt new file mode 100644 index 00000000000..8d330f0b79a --- /dev/null +++ b/idea/idea-fir/tests/org/jetbrains/kotlin/codeinsight/FirOverrideImplementTest.kt @@ -0,0 +1,24 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.codeinsight + +import org.jetbrains.kotlin.idea.codeInsight.OverrideImplementTest +import org.jetbrains.kotlin.idea.core.overrideImplement.KtClassMember +import org.jetbrains.kotlin.idea.invalidateCaches +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner +import org.junit.runner.RunWith + +@RunWith(JUnit3WithIdeaConfigurationRunner::class) +internal class FirOverrideImplementTest : OverrideImplementTest(), FirOverrideImplementTestMixIn { + override fun isFirPlugin(): Boolean = true + + override fun tearDown() { + project.invalidateCaches(file as? KtFile) + super.tearDown() + } +} + diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/codeinsight/FirOverrideImplementTestMixIn.kt b/idea/idea-fir/tests/org/jetbrains/kotlin/codeinsight/FirOverrideImplementTestMixIn.kt new file mode 100644 index 00000000000..5179be2c5b0 --- /dev/null +++ b/idea/idea-fir/tests/org/jetbrains/kotlin/codeinsight/FirOverrideImplementTestMixIn.kt @@ -0,0 +1,53 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.codeinsight + +import org.jetbrains.kotlin.idea.codeInsight.OverrideImplementTestMixIn +import org.jetbrains.kotlin.idea.core.overrideImplement.AbstractGenerateMembersHandler +import org.jetbrains.kotlin.idea.core.overrideImplement.KtClassMember +import org.jetbrains.kotlin.idea.core.overrideImplement.KtImplementMembersHandler +import org.jetbrains.kotlin.idea.core.overrideImplement.KtOverrideMembersHandler +import org.jetbrains.kotlin.idea.frontend.api.analyse +import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtNamedSymbol +import org.jetbrains.kotlin.idea.frontend.api.tokens.HackToForceAllowRunningAnalyzeOnEDT +import org.jetbrains.kotlin.idea.frontend.api.tokens.hackyAllowRunningOnEdt +import org.jetbrains.kotlin.idea.invalidateCaches +import org.jetbrains.kotlin.name.StandardClassIds +import org.jetbrains.kotlin.psi.KtClassOrObject +import org.jetbrains.kotlin.psi.KtFile + +internal interface FirOverrideImplementTestMixIn : OverrideImplementTestMixIn { + override fun createImplementMembersHandler(): AbstractGenerateMembersHandler = KtImplementMembersHandler() + + override fun createOverrideMembersHandler(): AbstractGenerateMembersHandler = KtOverrideMembersHandler() + + @OptIn(HackToForceAllowRunningAnalyzeOnEDT::class) + override fun isMemberOfAny(parentClass: KtClassOrObject, chooserObject: KtClassMember): Boolean { + return hackyAllowRunningOnEdt { + analyse(parentClass) { + chooserObject.symbol.callableIdIfNonLocal?.classId == StandardClassIds.Any + } + } + } + + @OptIn(HackToForceAllowRunningAnalyzeOnEDT::class) + override fun getMemberName(parentClass: KtClassOrObject, chooserObject: KtClassMember): String { + return hackyAllowRunningOnEdt { + analyse(parentClass) { + (chooserObject.symbol as? KtNamedSymbol)?.name?.asString() ?: "" + } + } + } + + @OptIn(HackToForceAllowRunningAnalyzeOnEDT::class) + override fun getContainingClassName(parentClass: KtClassOrObject, chooserObject: KtClassMember): String { + return hackyAllowRunningOnEdt { + analyse(parentClass) { + chooserObject.symbol.callableIdIfNonLocal?.classId?.shortClassName?.asString() ?: "" + } + } + } +} \ No newline at end of file diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/codeinsight/FirOverrideImplementWithLibTest.kt b/idea/idea-fir/tests/org/jetbrains/kotlin/codeinsight/FirOverrideImplementWithLibTest.kt new file mode 100644 index 00000000000..26855613027 --- /dev/null +++ b/idea/idea-fir/tests/org/jetbrains/kotlin/codeinsight/FirOverrideImplementWithLibTest.kt @@ -0,0 +1,24 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.codeinsight + +import org.jetbrains.kotlin.idea.codeInsight.OverrideImplementWithLibTest +import org.jetbrains.kotlin.idea.core.overrideImplement.KtClassMember +import org.jetbrains.kotlin.idea.invalidateCaches +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner +import org.junit.runner.RunWith + +@RunWith(JUnit3WithIdeaConfigurationRunner::class) +internal class FirOverrideImplementWithLibTest : OverrideImplementWithLibTest(), FirOverrideImplementTestMixIn { + override fun isFirPlugin(): Boolean = true + + override fun tearDown() { + project.invalidateCaches(file as? KtFile) + super.tearDown() + } +} + diff --git a/idea/idea-frontend-independent/tests/org/jetbrains/kotlin/test/uitls/IgnoreTests.kt b/idea/idea-frontend-independent/tests/org/jetbrains/kotlin/test/uitls/IgnoreTests.kt index f87e461ec40..02f5078bf95 100644 --- a/idea/idea-frontend-independent/tests/org/jetbrains/kotlin/test/uitls/IgnoreTests.kt +++ b/idea/idea-frontend-independent/tests/org/jetbrains/kotlin/test/uitls/IgnoreTests.kt @@ -204,22 +204,22 @@ object IgnoreTests { } - fun cleanUpIdenticalFirTestFile(originalTestFile: File) { - val firTestFile = deriveFirTestFile(originalTestFile) + fun cleanUpIdenticalFirTestFile( + originalTestFile: File, + firTestFile: File = deriveFirTestFile(originalTestFile), + additionalFileToMarkFirIdentical: File? = null + ) { if (firTestFile.exists() && firTestFile.readText().trim() == originalTestFile.readText().trim()) { val message = if (isTeamCityBuild) { - "Please remove .fir.kt dump and add // FIR_IDENTICAL to test source" + "Please remove $firTestFile and add // FIR_IDENTICAL to test source file $originalTestFile" } else { // The FIR test file is identical with the original file. We should remove the FIR file and mark "FIR_IDENTICAL" in the // original file firTestFile.delete() - val content = originalTestFile.readText() - originalTestFile.writer().use { - it.appendLine(DIRECTIVES.FIR_IDENTICAL) - it.append(content) - } + originalTestFile.prependFirIdentical() + additionalFileToMarkFirIdentical?.prependFirIdentical() - "Deleted .fir.kt dump, added // FIR_IDENTICAL to test source" + "Deleted $firTestFile, added // FIR_IDENTICAL to test source file $originalTestFile" } KtAssert.fail( """ @@ -231,6 +231,14 @@ object IgnoreTests { } } + private fun File.prependFirIdentical() { + val content = readText() + writer().use { + it.appendLine(DIRECTIVES.FIR_IDENTICAL) + it.append(content) + } + } + private fun deriveFirTestFile(originalTestFile: File) = originalTestFile.parentFile.resolve(originalTestFile.name.removeSuffix(".kt") + ".fir.kt") } diff --git a/idea/idea-test-framework/test/org/jetbrains/kotlin/idea/test/testUtils.kt b/idea/idea-test-framework/test/org/jetbrains/kotlin/idea/test/testUtils.kt index 1d302defc54..efaf97e0179 100644 --- a/idea/idea-test-framework/test/org/jetbrains/kotlin/idea/test/testUtils.kt +++ b/idea/idea-test-framework/test/org/jetbrains/kotlin/idea/test/testUtils.kt @@ -5,10 +5,12 @@ package org.jetbrains.kotlin.idea.test +import com.intellij.lang.annotation.HighlightSeverity import com.intellij.openapi.editor.Document import com.intellij.openapi.project.Project import com.intellij.psi.PsiDocumentManager import com.intellij.testFramework.LightPlatformTestCase +import com.intellij.testFramework.fixtures.JavaCodeInsightTestFixture import org.jetbrains.kotlin.diagnostics.DiagnosticFactory import org.jetbrains.kotlin.diagnostics.Severity import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages @@ -17,7 +19,6 @@ import org.jetbrains.kotlin.idea.caches.resolve.analyzeWithContent import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.test.InTextDirectivesUtils -import java.util.* fun KtFile.dumpTextWithErrors(ignoreErrors: Set> = emptySet()): String { val text = text @@ -31,6 +32,13 @@ fun KtFile.dumpTextWithErrors(ignoreErrors: Set> = emptySet return header + text } +fun JavaCodeInsightTestFixture.dumpErrorLines(): List { + if (InTextDirectivesUtils.isDirectiveDefined(file.text, "// DISABLE-ERRORS")) return emptyList() + return doHighlighting().filter { it.severity == HighlightSeverity.ERROR }.map { + "// ERROR: ${it.description.replace('\n', ' ')}" + } +} + fun closeAndDeleteProject() = LightPlatformTestCase.closeAndDeleteProject() fun invalidateLibraryCache(project: Project) { diff --git a/idea/testData/codeInsight/overrideImplement/abstractAndNonAbstractInheritedFromInterface.kt b/idea/testData/codeInsight/overrideImplement/abstractAndNonAbstractInheritedFromInterface.kt index 084a486e855..4ea4d3fd438 100644 --- a/idea/testData/codeInsight/overrideImplement/abstractAndNonAbstractInheritedFromInterface.kt +++ b/idea/testData/codeInsight/overrideImplement/abstractAndNonAbstractInheritedFromInterface.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface T { fun getFoo(): String = "" } diff --git a/idea/testData/codeInsight/overrideImplement/abstractAndNonAbstractInheritedFromInterface.kt.after b/idea/testData/codeInsight/overrideImplement/abstractAndNonAbstractInheritedFromInterface.kt.after index e8a7a55f468..6ead03a16cd 100644 --- a/idea/testData/codeInsight/overrideImplement/abstractAndNonAbstractInheritedFromInterface.kt.after +++ b/idea/testData/codeInsight/overrideImplement/abstractAndNonAbstractInheritedFromInterface.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface T { fun getFoo(): String = "" } diff --git a/idea/testData/codeInsight/overrideImplement/ambiguousSuper.kt.after b/idea/testData/codeInsight/overrideImplement/ambiguousSuper.kt.after index 9ee7d98a582..e0b4ab6620e 100644 --- a/idea/testData/codeInsight/overrideImplement/ambiguousSuper.kt.after +++ b/idea/testData/codeInsight/overrideImplement/ambiguousSuper.kt.after @@ -1,5 +1,5 @@ -// ERROR: Conflicting overloads: public open fun foo(): Unit defined in C, public open fun foo(): Unit defined in C -// ERROR: Conflicting overloads: public open fun foo(): Unit defined in C, public open fun foo(): Unit defined in C +// ERROR: [CONFLICTING_OVERLOADS] Conflicting overloads: public open fun foo(): Unit defined in C, public open fun foo(): Unit defined in C +// ERROR: [CONFLICTING_OVERLOADS] Conflicting overloads: public open fun foo(): Unit defined in C, public open fun foo(): Unit defined in C interface I { open fun foo(){} } diff --git a/idea/testData/codeInsight/overrideImplement/ambiguousSuper.kt.fir.after b/idea/testData/codeInsight/overrideImplement/ambiguousSuper.kt.fir.after new file mode 100644 index 00000000000..d1c660e5cf1 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/ambiguousSuper.kt.fir.after @@ -0,0 +1,31 @@ +// ERROR: [CONFLICTING_OVERLOADS] Conflicting overloads: [/C.foo] +// ERROR: [CONFLICTING_OVERLOADS] Conflicting overloads: [/C.foo] +interface I { + open fun foo(){} +} + +open class A { + open fun foo(){} +} + +class C : A(), I { + override fun equals(other: Any?): Boolean { + return super.equals(other) + } + + override fun foo() { + super.foo() + } + + override fun foo() { + super.foo() + } + + override fun hashCode(): Int { + return super.hashCode() + } + + override fun toString(): String { + return super.toString() + } +} \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/androidxNotNull/foo/Impl.kt.fir.after b/idea/testData/codeInsight/overrideImplement/androidxNotNull/foo/Impl.kt.fir.after new file mode 100644 index 00000000000..7a9b8b67cf8 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/androidxNotNull/foo/Impl.kt.fir.after @@ -0,0 +1,10 @@ +import androidx.annotation.RecentlyNonNull +import androidx.annotation.RecentlyNullable +import foo.A + +class B : A() { + @RecentlyNonNull + override fun foo(@RecentlyNonNull s1: String, @RecentlyNullable s2: String?): String { + return super.foo(s1, s2) + } +} diff --git a/idea/testData/codeInsight/overrideImplement/complexMultiOverride.kt.fir.after b/idea/testData/codeInsight/overrideImplement/complexMultiOverride.kt.fir.after new file mode 100644 index 00000000000..db7a017900a --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/complexMultiOverride.kt.fir.after @@ -0,0 +1,30 @@ +open class Base() { + open val method : (A?) -> A = { it!! } + open fun foo(value : B) : B = value + open fun bar(value : () -> C) : (String) -> C = { value() } +} + +class C : Base() { + override fun bar(value: () -> Unit): (String) -> Unit { + return super.bar(value) + } + + override fun equals(other: Any?): Boolean { + return super.equals(other) + } + + override fun foo(value: C): C { + return super.foo(value) + } + + override fun hashCode(): Int { + return super.hashCode() + } + + override val method: (String?) -> String + get() = method + + override fun toString(): String { + return super.toString() + } +} diff --git a/idea/testData/codeInsight/overrideImplement/convertJavaDoc/foo/Impl.kt b/idea/testData/codeInsight/overrideImplement/convertJavaDoc/foo/Impl.kt index 2af8ba23706..8cd825d28c2 100644 --- a/idea/testData/codeInsight/overrideImplement/convertJavaDoc/foo/Impl.kt +++ b/idea/testData/codeInsight/overrideImplement/convertJavaDoc/foo/Impl.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // COPY_DOC import foo.A diff --git a/idea/testData/codeInsight/overrideImplement/convertJavaDoc/foo/Impl.kt.after b/idea/testData/codeInsight/overrideImplement/convertJavaDoc/foo/Impl.kt.after index 0bf06f98b56..07d01eccec1 100644 --- a/idea/testData/codeInsight/overrideImplement/convertJavaDoc/foo/Impl.kt.after +++ b/idea/testData/codeInsight/overrideImplement/convertJavaDoc/foo/Impl.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // COPY_DOC import foo.A diff --git a/idea/testData/codeInsight/overrideImplement/copyExperimental.kt b/idea/testData/codeInsight/overrideImplement/copyExperimental.kt index e37a19e524a..0dd40950d7c 100644 --- a/idea/testData/codeInsight/overrideImplement/copyExperimental.kt +++ b/idea/testData/codeInsight/overrideImplement/copyExperimental.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // DISABLE-ERRORS @RequiresOptIn diff --git a/idea/testData/codeInsight/overrideImplement/copyExperimental.kt.after b/idea/testData/codeInsight/overrideImplement/copyExperimental.kt.after index 944347c728c..417a52307c8 100644 --- a/idea/testData/codeInsight/overrideImplement/copyExperimental.kt.after +++ b/idea/testData/codeInsight/overrideImplement/copyExperimental.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // DISABLE-ERRORS @RequiresOptIn diff --git a/idea/testData/codeInsight/overrideImplement/copyKDoc.kt b/idea/testData/codeInsight/overrideImplement/copyKDoc.kt index 4e33c92f8fd..f4a1c7e3e88 100644 --- a/idea/testData/codeInsight/overrideImplement/copyKDoc.kt +++ b/idea/testData/codeInsight/overrideImplement/copyKDoc.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // COPY_DOC abstract class A { /** diff --git a/idea/testData/codeInsight/overrideImplement/copyKDoc.kt.after b/idea/testData/codeInsight/overrideImplement/copyKDoc.kt.after index d6b83b23f36..71b98ae6e22 100644 --- a/idea/testData/codeInsight/overrideImplement/copyKDoc.kt.after +++ b/idea/testData/codeInsight/overrideImplement/copyKDoc.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // COPY_DOC abstract class A { /** diff --git a/idea/testData/codeInsight/overrideImplement/dataClassEquals.kt.fir.after b/idea/testData/codeInsight/overrideImplement/dataClassEquals.kt.fir.after new file mode 100644 index 00000000000..87e80e0d164 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/dataClassEquals.kt.fir.after @@ -0,0 +1,5 @@ +data class Foo(val name: String) { + override fun equals(other: Any?): Boolean { + return super.equals(other) + } +} \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/defaultValues.kt b/idea/testData/codeInsight/overrideImplement/defaultValues.kt index 2ee15a92dca..a1bc9a79568 100644 --- a/idea/testData/codeInsight/overrideImplement/defaultValues.kt +++ b/idea/testData/codeInsight/overrideImplement/defaultValues.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface T { fun foo(a:Int = 1) } diff --git a/idea/testData/codeInsight/overrideImplement/defaultValues.kt.after b/idea/testData/codeInsight/overrideImplement/defaultValues.kt.after index 584f17b7574..059c97ad8b3 100644 --- a/idea/testData/codeInsight/overrideImplement/defaultValues.kt.after +++ b/idea/testData/codeInsight/overrideImplement/defaultValues.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface T { fun foo(a:Int = 1) } diff --git a/idea/testData/codeInsight/overrideImplement/delegatedMembers.kt b/idea/testData/codeInsight/overrideImplement/delegatedMembers.kt index 9696f8659aa..621221e4ac0 100644 --- a/idea/testData/codeInsight/overrideImplement/delegatedMembers.kt +++ b/idea/testData/codeInsight/overrideImplement/delegatedMembers.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface T { fun foo() fun bar() diff --git a/idea/testData/codeInsight/overrideImplement/delegatedMembers.kt.after b/idea/testData/codeInsight/overrideImplement/delegatedMembers.kt.after index 3d08904a47c..34413e9d39d 100644 --- a/idea/testData/codeInsight/overrideImplement/delegatedMembers.kt.after +++ b/idea/testData/codeInsight/overrideImplement/delegatedMembers.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface T { fun foo() fun bar() diff --git a/idea/testData/codeInsight/overrideImplement/doNotOverrideFinal.kt b/idea/testData/codeInsight/overrideImplement/doNotOverrideFinal.kt index 9d121663483..915f91a9207 100644 --- a/idea/testData/codeInsight/overrideImplement/doNotOverrideFinal.kt +++ b/idea/testData/codeInsight/overrideImplement/doNotOverrideFinal.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL open class A { fun a(){} fun b(){} diff --git a/idea/testData/codeInsight/overrideImplement/doNotOverrideFinal.kt.after b/idea/testData/codeInsight/overrideImplement/doNotOverrideFinal.kt.after index 8b856c84c1a..636f714a1ff 100644 --- a/idea/testData/codeInsight/overrideImplement/doNotOverrideFinal.kt.after +++ b/idea/testData/codeInsight/overrideImplement/doNotOverrideFinal.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL open class A { fun a(){} fun b(){} diff --git a/idea/testData/codeInsight/overrideImplement/duplicatedAnyMembersBug.kt b/idea/testData/codeInsight/overrideImplement/duplicatedAnyMembersBug.kt index adffe1ffe58..3e3f825d9a0 100644 --- a/idea/testData/codeInsight/overrideImplement/duplicatedAnyMembersBug.kt +++ b/idea/testData/codeInsight/overrideImplement/duplicatedAnyMembersBug.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL open class A { } diff --git a/idea/testData/codeInsight/overrideImplement/duplicatedAnyMembersBug.kt.after b/idea/testData/codeInsight/overrideImplement/duplicatedAnyMembersBug.kt.after index bba212e0262..1c0bea8d97e 100644 --- a/idea/testData/codeInsight/overrideImplement/duplicatedAnyMembersBug.kt.after +++ b/idea/testData/codeInsight/overrideImplement/duplicatedAnyMembersBug.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL open class A { } diff --git a/idea/testData/codeInsight/overrideImplement/emptyClassBodyFunctionMethod.kt b/idea/testData/codeInsight/overrideImplement/emptyClassBodyFunctionMethod.kt index f3c61ea0f14..890387446da 100644 --- a/idea/testData/codeInsight/overrideImplement/emptyClassBodyFunctionMethod.kt +++ b/idea/testData/codeInsight/overrideImplement/emptyClassBodyFunctionMethod.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // From KT-1254 interface T { fun Foo() : (String) -> Unit diff --git a/idea/testData/codeInsight/overrideImplement/emptyClassBodyFunctionMethod.kt.after b/idea/testData/codeInsight/overrideImplement/emptyClassBodyFunctionMethod.kt.after index 51cae0f3b91..f75697a9f8e 100644 --- a/idea/testData/codeInsight/overrideImplement/emptyClassBodyFunctionMethod.kt.after +++ b/idea/testData/codeInsight/overrideImplement/emptyClassBodyFunctionMethod.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // From KT-1254 interface T { fun Foo() : (String) -> Unit diff --git a/idea/testData/codeInsight/overrideImplement/enumClass.kt b/idea/testData/codeInsight/overrideImplement/enumClass.kt index d51af681e76..cd561c4f252 100644 --- a/idea/testData/codeInsight/overrideImplement/enumClass.kt +++ b/idea/testData/codeInsight/overrideImplement/enumClass.kt @@ -1 +1,2 @@ +// FIR_IDENTICAL enum class Foo \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/enumClass.kt.after b/idea/testData/codeInsight/overrideImplement/enumClass.kt.after index 48c1f9c4513..a3527106057 100644 --- a/idea/testData/codeInsight/overrideImplement/enumClass.kt.after +++ b/idea/testData/codeInsight/overrideImplement/enumClass.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL enum class Foo { ; diff --git a/idea/testData/codeInsight/overrideImplement/enumClass2.kt b/idea/testData/codeInsight/overrideImplement/enumClass2.kt index ed190cf4420..6812cf4fe52 100644 --- a/idea/testData/codeInsight/overrideImplement/enumClass2.kt +++ b/idea/testData/codeInsight/overrideImplement/enumClass2.kt @@ -1,2 +1,3 @@ +// FIR_IDENTICAL enum class Foo { } \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/enumClass2.kt.after b/idea/testData/codeInsight/overrideImplement/enumClass2.kt.after index 48c1f9c4513..a3527106057 100644 --- a/idea/testData/codeInsight/overrideImplement/enumClass2.kt.after +++ b/idea/testData/codeInsight/overrideImplement/enumClass2.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL enum class Foo { ; diff --git a/idea/testData/codeInsight/overrideImplement/enumClass3.kt b/idea/testData/codeInsight/overrideImplement/enumClass3.kt index c2c7e7cae0a..39cf42817f2 100644 --- a/idea/testData/codeInsight/overrideImplement/enumClass3.kt +++ b/idea/testData/codeInsight/overrideImplement/enumClass3.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL enum class Foo { A } \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/enumClass3.kt.after b/idea/testData/codeInsight/overrideImplement/enumClass3.kt.after index 88f97a67189..d5c14754889 100644 --- a/idea/testData/codeInsight/overrideImplement/enumClass3.kt.after +++ b/idea/testData/codeInsight/overrideImplement/enumClass3.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL enum class Foo { A; diff --git a/idea/testData/codeInsight/overrideImplement/enumClass4.kt b/idea/testData/codeInsight/overrideImplement/enumClass4.kt index 38f95ab2abe..7d68a9cd09b 100644 --- a/idea/testData/codeInsight/overrideImplement/enumClass4.kt +++ b/idea/testData/codeInsight/overrideImplement/enumClass4.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL enum class Foo { A; } \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/enumClass4.kt.after b/idea/testData/codeInsight/overrideImplement/enumClass4.kt.after index 88f97a67189..d5c14754889 100644 --- a/idea/testData/codeInsight/overrideImplement/enumClass4.kt.after +++ b/idea/testData/codeInsight/overrideImplement/enumClass4.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL enum class Foo { A; diff --git a/idea/testData/codeInsight/overrideImplement/equalsInInterface.kt.fir.after b/idea/testData/codeInsight/overrideImplement/equalsInInterface.kt.fir.after new file mode 100644 index 00000000000..650cb5b18be --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/equalsInInterface.kt.fir.after @@ -0,0 +1,5 @@ +interface A + +interface B : A { + override fun equals(other: Any?): Boolean +} \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/escapeIdentifiers.kt b/idea/testData/codeInsight/overrideImplement/escapeIdentifiers.kt index 8a2c2c6c0a8..cdab82aeb7e 100644 --- a/idea/testData/codeInsight/overrideImplement/escapeIdentifiers.kt +++ b/idea/testData/codeInsight/overrideImplement/escapeIdentifiers.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL open class A { open fun foo(`object` : Any): Int = 0 } diff --git a/idea/testData/codeInsight/overrideImplement/escapeIdentifiers.kt.after b/idea/testData/codeInsight/overrideImplement/escapeIdentifiers.kt.after index bb203955961..b276765f1db 100644 --- a/idea/testData/codeInsight/overrideImplement/escapeIdentifiers.kt.after +++ b/idea/testData/codeInsight/overrideImplement/escapeIdentifiers.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL open class A { open fun foo(`object` : Any): Int = 0 } diff --git a/idea/testData/codeInsight/overrideImplement/functionMethod.kt b/idea/testData/codeInsight/overrideImplement/functionMethod.kt index b2348d5e19d..bb482e94d78 100644 --- a/idea/testData/codeInsight/overrideImplement/functionMethod.kt +++ b/idea/testData/codeInsight/overrideImplement/functionMethod.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // From KT-1254 interface T { fun Foo() : (String) -> Unit diff --git a/idea/testData/codeInsight/overrideImplement/functionMethod.kt.after b/idea/testData/codeInsight/overrideImplement/functionMethod.kt.after index 51cae0f3b91..f75697a9f8e 100644 --- a/idea/testData/codeInsight/overrideImplement/functionMethod.kt.after +++ b/idea/testData/codeInsight/overrideImplement/functionMethod.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // From KT-1254 interface T { fun Foo() : (String) -> Unit diff --git a/idea/testData/codeInsight/overrideImplement/functionProperty.kt.fir.after b/idea/testData/codeInsight/overrideImplement/functionProperty.kt.fir.after new file mode 100644 index 00000000000..8aa978b1de8 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/functionProperty.kt.fir.after @@ -0,0 +1,13 @@ +// From KT-1648 +interface A { + val method:() -> Unit? +} + +fun some() : A { + return object : A { + override val method: () -> kotlin.Unit? + get() = TODO("Not yet implemented") + } +} + +// TODO: need better selection and caret \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/functionWithTypeParameters.kt b/idea/testData/codeInsight/overrideImplement/functionWithTypeParameters.kt index 8aeb07eeb64..9a74ed91490 100644 --- a/idea/testData/codeInsight/overrideImplement/functionWithTypeParameters.kt +++ b/idea/testData/codeInsight/overrideImplement/functionWithTypeParameters.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface Trait { fun > foo() where B : Cloneable, B : Comparable } diff --git a/idea/testData/codeInsight/overrideImplement/functionWithTypeParameters.kt.after b/idea/testData/codeInsight/overrideImplement/functionWithTypeParameters.kt.after index 94d5858e2de..d5f939c8e46 100644 --- a/idea/testData/codeInsight/overrideImplement/functionWithTypeParameters.kt.after +++ b/idea/testData/codeInsight/overrideImplement/functionWithTypeParameters.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface Trait { fun > foo() where B : Cloneable, B : Comparable } diff --git a/idea/testData/codeInsight/overrideImplement/generateMulti.kt b/idea/testData/codeInsight/overrideImplement/generateMulti.kt index e7604e1aa6f..baa9cdda765 100644 --- a/idea/testData/codeInsight/overrideImplement/generateMulti.kt +++ b/idea/testData/codeInsight/overrideImplement/generateMulti.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL package something interface Some { diff --git a/idea/testData/codeInsight/overrideImplement/generateMulti.kt.after b/idea/testData/codeInsight/overrideImplement/generateMulti.kt.after index 716c4864daa..2b89b521d98 100644 --- a/idea/testData/codeInsight/overrideImplement/generateMulti.kt.after +++ b/idea/testData/codeInsight/overrideImplement/generateMulti.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL package something interface Some { diff --git a/idea/testData/codeInsight/overrideImplement/genericMethod.kt b/idea/testData/codeInsight/overrideImplement/genericMethod.kt index ef2f8e80c5d..65483d526b7 100644 --- a/idea/testData/codeInsight/overrideImplement/genericMethod.kt +++ b/idea/testData/codeInsight/overrideImplement/genericMethod.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface G { fun foo(t : T) : T } diff --git a/idea/testData/codeInsight/overrideImplement/genericMethod.kt.after b/idea/testData/codeInsight/overrideImplement/genericMethod.kt.after index 4b3559b6026..ceff00b9c66 100644 --- a/idea/testData/codeInsight/overrideImplement/genericMethod.kt.after +++ b/idea/testData/codeInsight/overrideImplement/genericMethod.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface G { fun foo(t : T) : T } diff --git a/idea/testData/codeInsight/overrideImplement/genericSuperClass.kt.fir.after b/idea/testData/codeInsight/overrideImplement/genericSuperClass.kt.fir.after new file mode 100644 index 00000000000..6b72413829a --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/genericSuperClass.kt.fir.after @@ -0,0 +1,9 @@ + +import org.jetbrains.annotations.NotNull + +abstract class X : java.util.ArrayList(), Runnable { + @NotNull + override fun iterator(): MutableIterator { + return super.iterator() + } +} \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/genericTypesSeveralMethods.kt b/idea/testData/codeInsight/overrideImplement/genericTypesSeveralMethods.kt index 18b49be6d97..85741e7391b 100644 --- a/idea/testData/codeInsight/overrideImplement/genericTypesSeveralMethods.kt +++ b/idea/testData/codeInsight/overrideImplement/genericTypesSeveralMethods.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // from KT-488 class MyClass> : Iterable { diff --git a/idea/testData/codeInsight/overrideImplement/genericTypesSeveralMethods.kt.after b/idea/testData/codeInsight/overrideImplement/genericTypesSeveralMethods.kt.after index e3c8e063413..065f177d0f2 100644 --- a/idea/testData/codeInsight/overrideImplement/genericTypesSeveralMethods.kt.after +++ b/idea/testData/codeInsight/overrideImplement/genericTypesSeveralMethods.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // from KT-488 class MyClass> : Iterable { diff --git a/idea/testData/codeInsight/overrideImplement/implementFromClassName.kt b/idea/testData/codeInsight/overrideImplement/implementFromClassName.kt index d9055c5e702..1a3a1ad5046 100644 --- a/idea/testData/codeInsight/overrideImplement/implementFromClassName.kt +++ b/idea/testData/codeInsight/overrideImplement/implementFromClassName.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface Runnable { fun run() } diff --git a/idea/testData/codeInsight/overrideImplement/implementFromClassName.kt.after b/idea/testData/codeInsight/overrideImplement/implementFromClassName.kt.after index a01de8f7618..95c3398ffcb 100644 --- a/idea/testData/codeInsight/overrideImplement/implementFromClassName.kt.after +++ b/idea/testData/codeInsight/overrideImplement/implementFromClassName.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface Runnable { fun run() } diff --git a/idea/testData/codeInsight/overrideImplement/implementFromClassName2.kt b/idea/testData/codeInsight/overrideImplement/implementFromClassName2.kt index 77232b4cd0d..325cd7dcfd8 100644 --- a/idea/testData/codeInsight/overrideImplement/implementFromClassName2.kt +++ b/idea/testData/codeInsight/overrideImplement/implementFromClassName2.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface A { fun a1() fun a2() diff --git a/idea/testData/codeInsight/overrideImplement/implementFromClassName2.kt.after b/idea/testData/codeInsight/overrideImplement/implementFromClassName2.kt.after index 325eeb6827f..9df30060d37 100644 --- a/idea/testData/codeInsight/overrideImplement/implementFromClassName2.kt.after +++ b/idea/testData/codeInsight/overrideImplement/implementFromClassName2.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface A { fun a1() fun a2() diff --git a/idea/testData/codeInsight/overrideImplement/implementFromClassName3.kt.fir.after b/idea/testData/codeInsight/overrideImplement/implementFromClassName3.kt.fir.after new file mode 100644 index 00000000000..36f25a7a449 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/implementFromClassName3.kt.fir.after @@ -0,0 +1,42 @@ +interface A { + fun a1() + fun a2() + fun a3() + fun a4() + fun a5() + fun a6() + fun a7() + fun a8() +} + +class Test : A { + override fun a6() { + } + + override fun a7() { + TODO("Not yet implemented") + } + + override fun a8() { + TODO("Not yet implemented") + } + + override fun a1() { + TODO("Not yet implemented") + } + + override fun a2() { + TODO("Not yet implemented") + } + + override fun a3() { + } + + override fun a4() { + TODO("Not yet implemented") + } + + override fun a5() { + TODO("Not yet implemented") + } +} \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/implementFromClassName4.kt.fir.after b/idea/testData/codeInsight/overrideImplement/implementFromClassName4.kt.fir.after new file mode 100644 index 00000000000..87d54d1630e --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/implementFromClassName4.kt.fir.after @@ -0,0 +1,41 @@ +interface A { + fun a1() + fun a2() + fun a3() + fun a4() + fun a5() + fun a6() + fun a7() + fun a8() +} + +class Test : A { + override fun a4() { + } + + override fun a5() { + TODO("Not yet implemented") + } + + override fun a6() { + } + + override fun a7() { + TODO("Not yet implemented") + } + + override fun a8() { + TODO("Not yet implemented") + } + + override fun a1() { + TODO("Not yet implemented") + } + + override fun a2() { + } + + override fun a3() { + TODO("Not yet implemented") + } +} \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/implementFromClassName5.kt b/idea/testData/codeInsight/overrideImplement/implementFromClassName5.kt index 460a1b07790..8f570805a74 100644 --- a/idea/testData/codeInsight/overrideImplement/implementFromClassName5.kt +++ b/idea/testData/codeInsight/overrideImplement/implementFromClassName5.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface A { fun a1() fun a2() diff --git a/idea/testData/codeInsight/overrideImplement/implementFromClassName5.kt.after b/idea/testData/codeInsight/overrideImplement/implementFromClassName5.kt.after index 298174b6546..e7adc733fe1 100644 --- a/idea/testData/codeInsight/overrideImplement/implementFromClassName5.kt.after +++ b/idea/testData/codeInsight/overrideImplement/implementFromClassName5.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface A { fun a1() fun a2() diff --git a/idea/testData/codeInsight/overrideImplement/implementFromClassName6.kt b/idea/testData/codeInsight/overrideImplement/implementFromClassName6.kt index 1dd8e8bdaee..737fbe0dc43 100644 --- a/idea/testData/codeInsight/overrideImplement/implementFromClassName6.kt +++ b/idea/testData/codeInsight/overrideImplement/implementFromClassName6.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface A { fun a1() fun a2() diff --git a/idea/testData/codeInsight/overrideImplement/implementFromClassName6.kt.after b/idea/testData/codeInsight/overrideImplement/implementFromClassName6.kt.after index f1fee9c3429..afafb072036 100644 --- a/idea/testData/codeInsight/overrideImplement/implementFromClassName6.kt.after +++ b/idea/testData/codeInsight/overrideImplement/implementFromClassName6.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface A { fun a1() fun a2() diff --git a/idea/testData/codeInsight/overrideImplement/implementFunctionType.kt b/idea/testData/codeInsight/overrideImplement/implementFunctionType.kt index 0db3d0cfb59..b20f531a97e 100644 --- a/idea/testData/codeInsight/overrideImplement/implementFunctionType.kt +++ b/idea/testData/codeInsight/overrideImplement/implementFunctionType.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL class C : (String) -> Boolean { } \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/implementFunctionType.kt.after b/idea/testData/codeInsight/overrideImplement/implementFunctionType.kt.after index 9bde50067a6..ed76f7711fa 100644 --- a/idea/testData/codeInsight/overrideImplement/implementFunctionType.kt.after +++ b/idea/testData/codeInsight/overrideImplement/implementFunctionType.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL class C : (String) -> Boolean { override fun invoke(p1: String): Boolean { TODO("Not yet implemented") diff --git a/idea/testData/codeInsight/overrideImplement/implementJavaRawSubclass/foo/Impl.kt.fir.after b/idea/testData/codeInsight/overrideImplement/implementJavaRawSubclass/foo/Impl.kt.fir.after new file mode 100644 index 00000000000..61f75ce3dc1 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/implementJavaRawSubclass/foo/Impl.kt.fir.after @@ -0,0 +1,12 @@ +// ERROR: Unexpected tokens +// ERROR: Unexpected token +// ERROR: Unexpected token +// ERROR: Unexpected token +import foo.A +import foo.B + +class C : A() { + override fun foo(x: (Mutable)List!, y: String!): B? { + TODO("Not yet implemented") + } +} diff --git a/idea/testData/codeInsight/overrideImplement/implementSamAdapters/foo/Impl.kt.fir.after b/idea/testData/codeInsight/overrideImplement/implementSamAdapters/foo/Impl.kt.fir.after new file mode 100644 index 00000000000..f3bac54e840 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/implementSamAdapters/foo/Impl.kt.fir.after @@ -0,0 +1,8 @@ +// ERROR: Unexpected token +package foo + +class Impl: B { + override fun foo(r: Runnable!) { + TODO("Not yet implemented") + } +} diff --git a/idea/testData/codeInsight/overrideImplement/javaInterfaceMethod/foo/Impl.kt.fir.after b/idea/testData/codeInsight/overrideImplement/javaInterfaceMethod/foo/Impl.kt.fir.after new file mode 100644 index 00000000000..90a77cf1f56 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/javaInterfaceMethod/foo/Impl.kt.fir.after @@ -0,0 +1,7 @@ +import foo.Intf + +class Impl(): Intf { + override fun getFooBar(): String? { + TODO("Not yet implemented") + } +} diff --git a/idea/testData/codeInsight/overrideImplement/javaInterfaceMethodInCorrectOrder/foo/Impl.kt b/idea/testData/codeInsight/overrideImplement/javaInterfaceMethodInCorrectOrder/foo/Impl.kt index b567dd67924..0f3ff142b88 100644 --- a/idea/testData/codeInsight/overrideImplement/javaInterfaceMethodInCorrectOrder/foo/Impl.kt +++ b/idea/testData/codeInsight/overrideImplement/javaInterfaceMethodInCorrectOrder/foo/Impl.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL package foo class Impl : TestJavaInterface { diff --git a/idea/testData/codeInsight/overrideImplement/javaInterfaceMethodInCorrectOrder/foo/Impl.kt.after b/idea/testData/codeInsight/overrideImplement/javaInterfaceMethodInCorrectOrder/foo/Impl.kt.after index aa8c44c5a82..f017127b1f8 100644 --- a/idea/testData/codeInsight/overrideImplement/javaInterfaceMethodInCorrectOrder/foo/Impl.kt.after +++ b/idea/testData/codeInsight/overrideImplement/javaInterfaceMethodInCorrectOrder/foo/Impl.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL package foo class Impl : TestJavaInterface { diff --git a/idea/testData/codeInsight/overrideImplement/javaMethodWithPackageProtectedVisibility/foo/Impl.kt.fir.after b/idea/testData/codeInsight/overrideImplement/javaMethodWithPackageProtectedVisibility/foo/Impl.kt.fir.after new file mode 100644 index 00000000000..93d18984e63 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/javaMethodWithPackageProtectedVisibility/foo/Impl.kt.fir.after @@ -0,0 +1,9 @@ +package foo + +import foo.Intf + +class Impl(): Intf() { + override fun getFooBar(): String? { + return super.getFooBar() + } +} diff --git a/idea/testData/codeInsight/overrideImplement/javaMethodWithPackageVisibility/foo/Impl.kt.fir.after b/idea/testData/codeInsight/overrideImplement/javaMethodWithPackageVisibility/foo/Impl.kt.fir.after new file mode 100644 index 00000000000..93d18984e63 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/javaMethodWithPackageVisibility/foo/Impl.kt.fir.after @@ -0,0 +1,9 @@ +package foo + +import foo.Intf + +class Impl(): Intf() { + override fun getFooBar(): String? { + return super.getFooBar() + } +} diff --git a/idea/testData/codeInsight/overrideImplement/javaParameters/foo/Impl.kt.fir.after b/idea/testData/codeInsight/overrideImplement/javaParameters/foo/Impl.kt.fir.after new file mode 100644 index 00000000000..3e1a354b48c --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/javaParameters/foo/Impl.kt.fir.after @@ -0,0 +1,11 @@ +// ERROR: Unexpected tokens +// ERROR: Unexpected token +// ERROR: Unexpected token +// ERROR: Unexpected token +import foo.Intf + +class Impl(): Intf { + override fun fooBar(i: Int, s: Array<(out) String!>!, foo: Any!) { + TODO("Not yet implemented") + } +} diff --git a/idea/testData/codeInsight/overrideImplement/javaxNonnullJavaType/foo/Impl.kt.fir.after b/idea/testData/codeInsight/overrideImplement/javaxNonnullJavaType/foo/Impl.kt.fir.after new file mode 100644 index 00000000000..1013ae43a16 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/javaxNonnullJavaType/foo/Impl.kt.fir.after @@ -0,0 +1,9 @@ +import foo.A +import javax.annotation.Nonnull + +class B : A() { + @Nonnull + override fun foo(@Nonnull s: String): String { + return super.foo(s) + } +} diff --git a/idea/testData/codeInsight/overrideImplement/jdk8/overrideCollectionStream.kt.fir.after b/idea/testData/codeInsight/overrideImplement/jdk8/overrideCollectionStream.kt.fir.after new file mode 100644 index 00000000000..91f9cfb4ab4 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/jdk8/overrideCollectionStream.kt.fir.after @@ -0,0 +1,8 @@ + +import java.util.stream.Stream + +abstract class A : List { + override fun stream(): Stream { + return super.stream() + } +} \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/localClass.kt b/idea/testData/codeInsight/overrideImplement/localClass.kt index b258decd4e1..cda23cdde57 100644 --- a/idea/testData/codeInsight/overrideImplement/localClass.kt +++ b/idea/testData/codeInsight/overrideImplement/localClass.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL abstract class C { abstract fun f(a: A) } diff --git a/idea/testData/codeInsight/overrideImplement/localClass.kt.after b/idea/testData/codeInsight/overrideImplement/localClass.kt.after index a9f3d4bb7c3..d9a934deae9 100644 --- a/idea/testData/codeInsight/overrideImplement/localClass.kt.after +++ b/idea/testData/codeInsight/overrideImplement/localClass.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL abstract class C { abstract fun f(a: A) } diff --git a/idea/testData/codeInsight/overrideImplement/multiOverride.kt b/idea/testData/codeInsight/overrideImplement/multiOverride.kt index 7b36341464f..377e711f776 100644 --- a/idea/testData/codeInsight/overrideImplement/multiOverride.kt +++ b/idea/testData/codeInsight/overrideImplement/multiOverride.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface A { fun foo(value : String) : Int = 0 fun bar() : String = "hello" diff --git a/idea/testData/codeInsight/overrideImplement/multiOverride.kt.after b/idea/testData/codeInsight/overrideImplement/multiOverride.kt.after index e212affd00e..a8977ddb10f 100644 --- a/idea/testData/codeInsight/overrideImplement/multiOverride.kt.after +++ b/idea/testData/codeInsight/overrideImplement/multiOverride.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface A { fun foo(value : String) : Int = 0 fun bar() : String = "hello" diff --git a/idea/testData/codeInsight/overrideImplement/multipleSupers.kt b/idea/testData/codeInsight/overrideImplement/multipleSupers.kt index 998988e05db..7eb33e0deda 100644 --- a/idea/testData/codeInsight/overrideImplement/multipleSupers.kt +++ b/idea/testData/codeInsight/overrideImplement/multipleSupers.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL open class A { open fun foo() {} } diff --git a/idea/testData/codeInsight/overrideImplement/multipleSupers.kt.after b/idea/testData/codeInsight/overrideImplement/multipleSupers.kt.after index 278d290f548..f2bb396fba6 100644 --- a/idea/testData/codeInsight/overrideImplement/multipleSupers.kt.after +++ b/idea/testData/codeInsight/overrideImplement/multipleSupers.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL open class A { open fun foo() {} } diff --git a/idea/testData/codeInsight/overrideImplement/noAnyMembersInInterface.kt b/idea/testData/codeInsight/overrideImplement/noAnyMembersInInterface.kt index dc00de97d40..bae3c807a3d 100644 --- a/idea/testData/codeInsight/overrideImplement/noAnyMembersInInterface.kt +++ b/idea/testData/codeInsight/overrideImplement/noAnyMembersInInterface.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface I { } \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/noAnyMembersInInterface.kt.after b/idea/testData/codeInsight/overrideImplement/noAnyMembersInInterface.kt.after index dc00de97d40..bae3c807a3d 100644 --- a/idea/testData/codeInsight/overrideImplement/noAnyMembersInInterface.kt.after +++ b/idea/testData/codeInsight/overrideImplement/noAnyMembersInInterface.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface I { } \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/nullableJavaType/foo/Impl.kt.fir.after b/idea/testData/codeInsight/overrideImplement/nullableJavaType/foo/Impl.kt.fir.after new file mode 100644 index 00000000000..960a6b33444 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/nullableJavaType/foo/Impl.kt.fir.after @@ -0,0 +1,10 @@ +// ERROR: Unexpected token +import foo.A +import org.jetbrains.annotations.Nullable + +class B : A() { + @Nullable + override fun foo(s: String!): String? { + return super.foo(s) + } +} diff --git a/idea/testData/codeInsight/overrideImplement/nullableKotlinType/foo/Impl.kt b/idea/testData/codeInsight/overrideImplement/nullableKotlinType/foo/Impl.kt index f1a280bc979..2fc76135dff 100644 --- a/idea/testData/codeInsight/overrideImplement/nullableKotlinType/foo/Impl.kt +++ b/idea/testData/codeInsight/overrideImplement/nullableKotlinType/foo/Impl.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface IBase { fun foo(): Any? } diff --git a/idea/testData/codeInsight/overrideImplement/nullableKotlinType/foo/Impl.kt.after b/idea/testData/codeInsight/overrideImplement/nullableKotlinType/foo/Impl.kt.after index 6fe8ad642d1..d1cc1f31f17 100644 --- a/idea/testData/codeInsight/overrideImplement/nullableKotlinType/foo/Impl.kt.after +++ b/idea/testData/codeInsight/overrideImplement/nullableKotlinType/foo/Impl.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface IBase { fun foo(): Any? } diff --git a/idea/testData/codeInsight/overrideImplement/overrideExplicitFunction.kt b/idea/testData/codeInsight/overrideImplement/overrideExplicitFunction.kt index ffe0fc271e9..9a9b1f5a625 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideExplicitFunction.kt +++ b/idea/testData/codeInsight/overrideImplement/overrideExplicitFunction.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface A { fun String.foo() } diff --git a/idea/testData/codeInsight/overrideImplement/overrideExplicitFunction.kt.after b/idea/testData/codeInsight/overrideImplement/overrideExplicitFunction.kt.after index 95c68d41cca..6e5773efccd 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideExplicitFunction.kt.after +++ b/idea/testData/codeInsight/overrideImplement/overrideExplicitFunction.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface A { fun String.foo() } diff --git a/idea/testData/codeInsight/overrideImplement/overrideExtensionFunction.kt b/idea/testData/codeInsight/overrideImplement/overrideExtensionFunction.kt index c580a987244..2ec1d14621c 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideExtensionFunction.kt +++ b/idea/testData/codeInsight/overrideImplement/overrideExtensionFunction.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL open class A { open fun Int.foo(): Int { return 0 diff --git a/idea/testData/codeInsight/overrideImplement/overrideExtensionFunction.kt.after b/idea/testData/codeInsight/overrideImplement/overrideExtensionFunction.kt.after index 5626f1bc79e..ca555a25425 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideExtensionFunction.kt.after +++ b/idea/testData/codeInsight/overrideImplement/overrideExtensionFunction.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL open class A { open fun Int.foo(): Int { return 0 diff --git a/idea/testData/codeInsight/overrideImplement/overrideExtensionProperty.kt b/idea/testData/codeInsight/overrideImplement/overrideExtensionProperty.kt index 41ae4e987e2..93288e47b97 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideExtensionProperty.kt +++ b/idea/testData/codeInsight/overrideImplement/overrideExtensionProperty.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface A { val String.prop : Int } diff --git a/idea/testData/codeInsight/overrideImplement/overrideExtensionProperty.kt.after b/idea/testData/codeInsight/overrideImplement/overrideExtensionProperty.kt.after index cedcb6f7e5e..df16ac05f6b 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideExtensionProperty.kt.after +++ b/idea/testData/codeInsight/overrideImplement/overrideExtensionProperty.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface A { val String.prop : Int } diff --git a/idea/testData/codeInsight/overrideImplement/overrideExternalFunction.kt b/idea/testData/codeInsight/overrideImplement/overrideExternalFunction.kt index a1f2c6b4186..bbf2356fb07 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideExternalFunction.kt +++ b/idea/testData/codeInsight/overrideImplement/overrideExternalFunction.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL open class A { open external fun foo() } diff --git a/idea/testData/codeInsight/overrideImplement/overrideExternalFunction.kt.after b/idea/testData/codeInsight/overrideImplement/overrideExternalFunction.kt.after index f25de1b02d5..24701f8334a 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideExternalFunction.kt.after +++ b/idea/testData/codeInsight/overrideImplement/overrideExternalFunction.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL open class A { open external fun foo() } diff --git a/idea/testData/codeInsight/overrideImplement/overrideFromClassName.kt b/idea/testData/codeInsight/overrideImplement/overrideFromClassName.kt index ffd97d2104c..00aaa7e4519 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideFromClassName.kt +++ b/idea/testData/codeInsight/overrideImplement/overrideFromClassName.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface Some { fun foo() } diff --git a/idea/testData/codeInsight/overrideImplement/overrideFromClassName.kt.after b/idea/testData/codeInsight/overrideImplement/overrideFromClassName.kt.after index dd7cedd05f3..2f63949d29a 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideFromClassName.kt.after +++ b/idea/testData/codeInsight/overrideImplement/overrideFromClassName.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface Some { fun foo() } diff --git a/idea/testData/codeInsight/overrideImplement/overrideFromFunctionPosition.kt b/idea/testData/codeInsight/overrideImplement/overrideFromFunctionPosition.kt index 48c6f6d592e..0f4b2c1d1b7 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideFromFunctionPosition.kt +++ b/idea/testData/codeInsight/overrideImplement/overrideFromFunctionPosition.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface Some { fun foo() } diff --git a/idea/testData/codeInsight/overrideImplement/overrideFromFunctionPosition.kt.after b/idea/testData/codeInsight/overrideImplement/overrideFromFunctionPosition.kt.after index 2697e2751b7..9998317dc8f 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideFromFunctionPosition.kt.after +++ b/idea/testData/codeInsight/overrideImplement/overrideFromFunctionPosition.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface Some { fun foo() } diff --git a/idea/testData/codeInsight/overrideImplement/overrideFromLBrace.kt.fir.after b/idea/testData/codeInsight/overrideImplement/overrideFromLBrace.kt.fir.after new file mode 100644 index 00000000000..dd7cedd05f3 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/overrideFromLBrace.kt.fir.after @@ -0,0 +1,25 @@ +interface Some { + fun foo() +} + +class Other { + fun test() { + val a = 1 + } + fun otherTest() { + + } + + override fun equals(other: Any?): Boolean { + return super.equals(other) + } + + override fun hashCode(): Int { + return super.hashCode() + } + + override fun toString(): String { + return super.toString() + } +} + diff --git a/idea/testData/codeInsight/overrideImplement/overrideFunctionProperty.kt.fir.after b/idea/testData/codeInsight/overrideImplement/overrideFunctionProperty.kt.fir.after new file mode 100644 index 00000000000..ac0a98b5aaa --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/overrideFunctionProperty.kt.fir.after @@ -0,0 +1,12 @@ +open class A() { + open val method : () -> Unit? = {println("hello")} +} + +fun some() : A { + return object : A() { + override val method: () -> kotlin.Unit? + get() = super.method + } +} + +// TODO: need better selection and caret diff --git a/idea/testData/codeInsight/overrideImplement/overrideGenericFunction.kt b/idea/testData/codeInsight/overrideImplement/overrideGenericFunction.kt index bc9dc4eeda4..c6488782ac3 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideGenericFunction.kt +++ b/idea/testData/codeInsight/overrideImplement/overrideGenericFunction.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface A { fun foo(value : T) : Unit = println(value) } diff --git a/idea/testData/codeInsight/overrideImplement/overrideGenericFunction.kt.after b/idea/testData/codeInsight/overrideImplement/overrideGenericFunction.kt.after index faaaf25d70c..68c4bf6807c 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideGenericFunction.kt.after +++ b/idea/testData/codeInsight/overrideImplement/overrideGenericFunction.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface A { fun foo(value : T) : Unit = println(value) } diff --git a/idea/testData/codeInsight/overrideImplement/overrideJavaMethod/foo/Impl.kt.fir.after b/idea/testData/codeInsight/overrideImplement/overrideJavaMethod/foo/Impl.kt.fir.after new file mode 100644 index 00000000000..cfc5a63e6e7 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/overrideJavaMethod/foo/Impl.kt.fir.after @@ -0,0 +1,11 @@ +// ERROR: Unexpected tokens +// ERROR: Unexpected token +// ERROR: Unexpected token +// ERROR: Unexpected token +import foo.A + +class C : A() { + override fun getAnswer(array: Array<(out) String!>!, number: Int, value: Any!): Int { + return super.getAnswer(array, number, value) + } +} diff --git a/idea/testData/codeInsight/overrideImplement/overrideMutableExtensionProperty.kt b/idea/testData/codeInsight/overrideImplement/overrideMutableExtensionProperty.kt index b054c3e1ce7..345812d3613 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideMutableExtensionProperty.kt +++ b/idea/testData/codeInsight/overrideImplement/overrideMutableExtensionProperty.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface A { var Int.foo : Double } diff --git a/idea/testData/codeInsight/overrideImplement/overrideMutableExtensionProperty.kt.after b/idea/testData/codeInsight/overrideImplement/overrideMutableExtensionProperty.kt.after index fb96ecd22ce..496bb898cbb 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideMutableExtensionProperty.kt.after +++ b/idea/testData/codeInsight/overrideImplement/overrideMutableExtensionProperty.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface A { var Int.foo : Double } diff --git a/idea/testData/codeInsight/overrideImplement/overrideNonUnitFunction.kt b/idea/testData/codeInsight/overrideImplement/overrideNonUnitFunction.kt index 7f5269262b9..bf0b98e6a60 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideNonUnitFunction.kt +++ b/idea/testData/codeInsight/overrideImplement/overrideNonUnitFunction.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface A { fun foo(value : String) : Int = 0 } diff --git a/idea/testData/codeInsight/overrideImplement/overrideNonUnitFunction.kt.after b/idea/testData/codeInsight/overrideImplement/overrideNonUnitFunction.kt.after index 2d0f95fa907..3de99bd555b 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideNonUnitFunction.kt.after +++ b/idea/testData/codeInsight/overrideImplement/overrideNonUnitFunction.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface A { fun foo(value : String) : Int = 0 } diff --git a/idea/testData/codeInsight/overrideImplement/overridePrimitiveProperty.kt b/idea/testData/codeInsight/overrideImplement/overridePrimitiveProperty.kt index df5767bb358..708b8d9df5e 100644 --- a/idea/testData/codeInsight/overrideImplement/overridePrimitiveProperty.kt +++ b/idea/testData/codeInsight/overrideImplement/overridePrimitiveProperty.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface T { val a1: Byte val a2: Short diff --git a/idea/testData/codeInsight/overrideImplement/overridePrimitiveProperty.kt.after b/idea/testData/codeInsight/overrideImplement/overridePrimitiveProperty.kt.after index 0f8e42e44a6..c05ca8d6699 100644 --- a/idea/testData/codeInsight/overrideImplement/overridePrimitiveProperty.kt.after +++ b/idea/testData/codeInsight/overrideImplement/overridePrimitiveProperty.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface T { val a1: Byte val a2: Short diff --git a/idea/testData/codeInsight/overrideImplement/overrideRespectCaretPosition.kt.fir.after b/idea/testData/codeInsight/overrideImplement/overrideRespectCaretPosition.kt.fir.after new file mode 100644 index 00000000000..ae3c0d8e5a1 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/overrideRespectCaretPosition.kt.fir.after @@ -0,0 +1,34 @@ +open class A() { + open fun foo(value : Int) : Unit = println(value) + open val bar : Int = 0 +} + +class C : A() { + val constant = 42 + // Some comment + override val bar: Int + get() = bar + + override fun equals(other: Any?): Boolean { + return super.equals(other) + } + + override fun foo(value: Int) { + super.foo(value) + } + + override fun hashCode(): Int { + return super.hashCode() + } + + override fun toString(): String { + return super.toString() + } + + /* + Some another comment + */ + fun someAnotherFunction() { + + } +} diff --git a/idea/testData/codeInsight/overrideImplement/overrideSamAdapters/foo/Impl.kt.fir.after b/idea/testData/codeInsight/overrideImplement/overrideSamAdapters/foo/Impl.kt.fir.after new file mode 100644 index 00000000000..b6c15917527 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/overrideSamAdapters/foo/Impl.kt.fir.after @@ -0,0 +1,8 @@ +// ERROR: Unexpected token +package foo + +class Impl: B() { + override fun foo(r: Runnable!) { + super.foo(r) + } +} diff --git a/idea/testData/codeInsight/overrideImplement/overrideUnitFunction.kt b/idea/testData/codeInsight/overrideImplement/overrideUnitFunction.kt index 7375e815b2e..cc603088ebb 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideUnitFunction.kt +++ b/idea/testData/codeInsight/overrideImplement/overrideUnitFunction.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface A { fun foo(value : String) : Unit {} } diff --git a/idea/testData/codeInsight/overrideImplement/overrideUnitFunction.kt.after b/idea/testData/codeInsight/overrideImplement/overrideUnitFunction.kt.after index 3dd5ebc41f0..5ea6364a448 100644 --- a/idea/testData/codeInsight/overrideImplement/overrideUnitFunction.kt.after +++ b/idea/testData/codeInsight/overrideImplement/overrideUnitFunction.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface A { fun foo(value : String) : Unit {} } diff --git a/idea/testData/codeInsight/overrideImplement/platformCollectionTypes/foo/Impl.kt.fir.after b/idea/testData/codeInsight/overrideImplement/platformCollectionTypes/foo/Impl.kt.fir.after new file mode 100644 index 00000000000..ae92fca0947 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/platformCollectionTypes/foo/Impl.kt.fir.after @@ -0,0 +1,7 @@ +import foo.A + +class B : A { + override fun foo(): List? { + TODO("Not yet implemented") + } +} diff --git a/idea/testData/codeInsight/overrideImplement/platformTypes/foo/Impl.kt.fir.after b/idea/testData/codeInsight/overrideImplement/platformTypes/foo/Impl.kt.fir.after new file mode 100644 index 00000000000..8608e1e4000 --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/platformTypes/foo/Impl.kt.fir.after @@ -0,0 +1,8 @@ +// ERROR: Unexpected token +import foo.A + +class B : A() { + override fun foo(s: String!): String? { + return super.foo(s) + } +} diff --git a/idea/testData/codeInsight/overrideImplement/privateJavaMethod/foo/Impl.kt b/idea/testData/codeInsight/overrideImplement/privateJavaMethod/foo/Impl.kt index fccd2cefb27..1dfbed14720 100644 --- a/idea/testData/codeInsight/overrideImplement/privateJavaMethod/foo/Impl.kt +++ b/idea/testData/codeInsight/overrideImplement/privateJavaMethod/foo/Impl.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface I { fun z() } diff --git a/idea/testData/codeInsight/overrideImplement/privateJavaMethod/foo/Impl.kt.after b/idea/testData/codeInsight/overrideImplement/privateJavaMethod/foo/Impl.kt.after index 48aed779661..aa592687470 100644 --- a/idea/testData/codeInsight/overrideImplement/privateJavaMethod/foo/Impl.kt.after +++ b/idea/testData/codeInsight/overrideImplement/privateJavaMethod/foo/Impl.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface I { fun z() } diff --git a/idea/testData/codeInsight/overrideImplement/propagationKJK/foo/Impl.kt b/idea/testData/codeInsight/overrideImplement/propagationKJK/foo/Impl.kt index f76f9a68418..cf39a79ca46 100644 --- a/idea/testData/codeInsight/overrideImplement/propagationKJK/foo/Impl.kt +++ b/idea/testData/codeInsight/overrideImplement/propagationKJK/foo/Impl.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL package foo class Impl : Bar() { diff --git a/idea/testData/codeInsight/overrideImplement/propagationKJK/foo/Impl.kt.after b/idea/testData/codeInsight/overrideImplement/propagationKJK/foo/Impl.kt.after index 2171acf633c..2377353a10c 100644 --- a/idea/testData/codeInsight/overrideImplement/propagationKJK/foo/Impl.kt.after +++ b/idea/testData/codeInsight/overrideImplement/propagationKJK/foo/Impl.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL package foo class Impl : Bar() { diff --git a/idea/testData/codeInsight/overrideImplement/property.kt b/idea/testData/codeInsight/overrideImplement/property.kt index 9f6087fb3bb..76704d0669f 100644 --- a/idea/testData/codeInsight/overrideImplement/property.kt +++ b/idea/testData/codeInsight/overrideImplement/property.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface T { val v : Int } diff --git a/idea/testData/codeInsight/overrideImplement/property.kt.after b/idea/testData/codeInsight/overrideImplement/property.kt.after index 7eecf9a3bdd..85e6d576b36 100644 --- a/idea/testData/codeInsight/overrideImplement/property.kt.after +++ b/idea/testData/codeInsight/overrideImplement/property.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface T { val v : Int } diff --git a/idea/testData/codeInsight/overrideImplement/qualifySuperType.kt b/idea/testData/codeInsight/overrideImplement/qualifySuperType.kt index 5ebeee1878c..7cbbaf676cc 100644 --- a/idea/testData/codeInsight/overrideImplement/qualifySuperType.kt +++ b/idea/testData/codeInsight/overrideImplement/qualifySuperType.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL class Outer { interface Inner1 { fun f() { } diff --git a/idea/testData/codeInsight/overrideImplement/qualifySuperType.kt.after b/idea/testData/codeInsight/overrideImplement/qualifySuperType.kt.after index 69e22efeea3..a585f1c4236 100644 --- a/idea/testData/codeInsight/overrideImplement/qualifySuperType.kt.after +++ b/idea/testData/codeInsight/overrideImplement/qualifySuperType.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL class Outer { interface Inner1 { fun f() { } diff --git a/idea/testData/codeInsight/overrideImplement/respectCaretPosition.kt b/idea/testData/codeInsight/overrideImplement/respectCaretPosition.kt index 586e785b21c..5b4bd3f0db9 100644 --- a/idea/testData/codeInsight/overrideImplement/respectCaretPosition.kt +++ b/idea/testData/codeInsight/overrideImplement/respectCaretPosition.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface Test { public open fun test() public open val testProp : Int diff --git a/idea/testData/codeInsight/overrideImplement/respectCaretPosition.kt.after b/idea/testData/codeInsight/overrideImplement/respectCaretPosition.kt.after index 2f7030f63f7..0cfb371911f 100644 --- a/idea/testData/codeInsight/overrideImplement/respectCaretPosition.kt.after +++ b/idea/testData/codeInsight/overrideImplement/respectCaretPosition.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface Test { public open fun test() public open val testProp : Int diff --git a/idea/testData/codeInsight/overrideImplement/sameTypeName/foo/Impl.kt b/idea/testData/codeInsight/overrideImplement/sameTypeName/foo/Impl.kt index db3e72d17d2..bb734f3f933 100644 --- a/idea/testData/codeInsight/overrideImplement/sameTypeName/foo/Impl.kt +++ b/idea/testData/codeInsight/overrideImplement/sameTypeName/foo/Impl.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL //KT-1602 import lib.ArrayFactory diff --git a/idea/testData/codeInsight/overrideImplement/sameTypeName/foo/Impl.kt.after b/idea/testData/codeInsight/overrideImplement/sameTypeName/foo/Impl.kt.after index 1a66bc2dcbb..00a2f4289ea 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 @@ +// FIR_IDENTICAL //KT-1602 import lib.ArrayFactory diff --git a/idea/testData/codeInsight/overrideImplement/starProjections.kt b/idea/testData/codeInsight/overrideImplement/starProjections.kt index 04b997347dc..bb8928fbc93 100644 --- a/idea/testData/codeInsight/overrideImplement/starProjections.kt +++ b/idea/testData/codeInsight/overrideImplement/starProjections.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL class C> interface Base { diff --git a/idea/testData/codeInsight/overrideImplement/starProjections.kt.after b/idea/testData/codeInsight/overrideImplement/starProjections.kt.after index 140b9cbbc6f..7f50dffd7e8 100644 --- a/idea/testData/codeInsight/overrideImplement/starProjections.kt.after +++ b/idea/testData/codeInsight/overrideImplement/starProjections.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL class C> interface Base { diff --git a/idea/testData/codeInsight/overrideImplement/superPreference.kt b/idea/testData/codeInsight/overrideImplement/superPreference.kt index 0828885210b..b99187d8b6c 100644 --- a/idea/testData/codeInsight/overrideImplement/superPreference.kt +++ b/idea/testData/codeInsight/overrideImplement/superPreference.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL abstract class A : I1 { open fun a(){} } diff --git a/idea/testData/codeInsight/overrideImplement/superPreference.kt.after b/idea/testData/codeInsight/overrideImplement/superPreference.kt.after index 1c89f1c4a31..fead319093d 100644 --- a/idea/testData/codeInsight/overrideImplement/superPreference.kt.after +++ b/idea/testData/codeInsight/overrideImplement/superPreference.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL abstract class A : I1 { open fun a(){} } diff --git a/idea/testData/codeInsight/overrideImplement/suspendFun.kt b/idea/testData/codeInsight/overrideImplement/suspendFun.kt index 444d2dda60d..983c6ca3dea 100644 --- a/idea/testData/codeInsight/overrideImplement/suspendFun.kt +++ b/idea/testData/codeInsight/overrideImplement/suspendFun.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface I { suspend fun foo() } diff --git a/idea/testData/codeInsight/overrideImplement/suspendFun.kt.after b/idea/testData/codeInsight/overrideImplement/suspendFun.kt.after index e33017d5afa..76d718b8620 100644 --- a/idea/testData/codeInsight/overrideImplement/suspendFun.kt.after +++ b/idea/testData/codeInsight/overrideImplement/suspendFun.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface I { suspend fun foo() } diff --git a/idea/testData/codeInsight/overrideImplement/traitGenericImplement.kt b/idea/testData/codeInsight/overrideImplement/traitGenericImplement.kt index 781ea521f50..c6edcdd7bfe 100644 --- a/idea/testData/codeInsight/overrideImplement/traitGenericImplement.kt +++ b/idea/testData/codeInsight/overrideImplement/traitGenericImplement.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface G { fun foo(t : T) : T } diff --git a/idea/testData/codeInsight/overrideImplement/traitGenericImplement.kt.after b/idea/testData/codeInsight/overrideImplement/traitGenericImplement.kt.after index ebdcbb23dbe..cb235994512 100644 --- a/idea/testData/codeInsight/overrideImplement/traitGenericImplement.kt.after +++ b/idea/testData/codeInsight/overrideImplement/traitGenericImplement.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface G { fun foo(t : T) : T } diff --git a/idea/testData/codeInsight/overrideImplement/traitNullableFunction.kt b/idea/testData/codeInsight/overrideImplement/traitNullableFunction.kt index a71c940a94b..f64f752cc75 100644 --- a/idea/testData/codeInsight/overrideImplement/traitNullableFunction.kt +++ b/idea/testData/codeInsight/overrideImplement/traitNullableFunction.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface Some { fun foo(some : Int?) : Int } diff --git a/idea/testData/codeInsight/overrideImplement/traitNullableFunction.kt.after b/idea/testData/codeInsight/overrideImplement/traitNullableFunction.kt.after index e77c2ee7452..f3dafa0cf3e 100644 --- a/idea/testData/codeInsight/overrideImplement/traitNullableFunction.kt.after +++ b/idea/testData/codeInsight/overrideImplement/traitNullableFunction.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL interface Some { fun foo(some : Int?) : Int } diff --git a/idea/testData/codeInsight/overrideImplement/typeAliasNotExpanded.kt b/idea/testData/codeInsight/overrideImplement/typeAliasNotExpanded.kt index b2e4a426134..3556c7c5d64 100644 --- a/idea/testData/codeInsight/overrideImplement/typeAliasNotExpanded.kt +++ b/idea/testData/codeInsight/overrideImplement/typeAliasNotExpanded.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL typealias Foo = Int interface Bar { diff --git a/idea/testData/codeInsight/overrideImplement/typeAliasNotExpanded.kt.after b/idea/testData/codeInsight/overrideImplement/typeAliasNotExpanded.kt.after index 9400c907ed4..fd13d3da19d 100644 --- a/idea/testData/codeInsight/overrideImplement/typeAliasNotExpanded.kt.after +++ b/idea/testData/codeInsight/overrideImplement/typeAliasNotExpanded.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL typealias Foo = Int interface Bar { diff --git a/idea/testData/codeInsight/overrideImplement/unresolvedType.kt.fir.after b/idea/testData/codeInsight/overrideImplement/unresolvedType.kt.fir.after new file mode 100644 index 00000000000..c65cea44c8a --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/unresolvedType.kt.fir.after @@ -0,0 +1,10 @@ +// DISABLE-ERRORS +interface A { + fun install(pipeline: TPipeline, configure: TBuilder.() -> Unit): TFeature +} + +class X : A { + override fun install(pipeline: String, configure: ERROR_TYPE.() -> Unit) { + TODO("Not yet implemented") + } +} \ No newline at end of file diff --git a/idea/testData/codeInsight/overrideImplement/varArgs.kt.fir.after b/idea/testData/codeInsight/overrideImplement/varArgs.kt.fir.after new file mode 100644 index 00000000000..c3a3651f50f --- /dev/null +++ b/idea/testData/codeInsight/overrideImplement/varArgs.kt.fir.after @@ -0,0 +1,9 @@ +open class S { + open fun s(vararg v: Int) {} +} + +class D : S() { + override fun s(vararg v: Int) { + super.s(*v) + } +} diff --git a/idea/testData/codeInsight/overrideImplement/withLib/fakeOverride.kt b/idea/testData/codeInsight/overrideImplement/withLib/fakeOverride.kt index eac94bd74e7..5704155291f 100644 --- a/idea/testData/codeInsight/overrideImplement/withLib/fakeOverride.kt +++ b/idea/testData/codeInsight/overrideImplement/withLib/fakeOverride.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL package test import dependency.A diff --git a/idea/testData/codeInsight/overrideImplement/withLib/fakeOverride.kt.after b/idea/testData/codeInsight/overrideImplement/withLib/fakeOverride.kt.after index 005beac569d..b68e1b6159d 100644 --- a/idea/testData/codeInsight/overrideImplement/withLib/fakeOverride.kt.after +++ b/idea/testData/codeInsight/overrideImplement/withLib/fakeOverride.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL package test import dependency.A diff --git a/idea/testData/codeInsight/overrideImplement/withLib/genericSubstituted.kt b/idea/testData/codeInsight/overrideImplement/withLib/genericSubstituted.kt index 9411cddb938..dcfde32cb7a 100644 --- a/idea/testData/codeInsight/overrideImplement/withLib/genericSubstituted.kt +++ b/idea/testData/codeInsight/overrideImplement/withLib/genericSubstituted.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL package test import dependency.D diff --git a/idea/testData/codeInsight/overrideImplement/withLib/genericSubstituted.kt.after b/idea/testData/codeInsight/overrideImplement/withLib/genericSubstituted.kt.after index c02396fc5cc..733b976caee 100644 --- a/idea/testData/codeInsight/overrideImplement/withLib/genericSubstituted.kt.after +++ b/idea/testData/codeInsight/overrideImplement/withLib/genericSubstituted.kt.after @@ -1,3 +1,4 @@ +// FIR_IDENTICAL package test import dependency.D diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/AbstractOverrideImplementTest.kt b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/AbstractOverrideImplementTest.kt index 57c5c89cb05..39137defc69 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/AbstractOverrideImplementTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/AbstractOverrideImplementTest.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.idea.codeInsight +import com.intellij.codeInsight.generation.ClassMember import com.intellij.codeInsight.generation.OverrideImplementUtil import com.intellij.codeInsight.generation.PsiMethodMember import com.intellij.psi.JavaPsiFacade @@ -16,59 +17,57 @@ import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.util.PsiTreeUtil import com.intellij.testFramework.LightProjectDescriptor import com.intellij.util.SmartList -import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.idea.core.overrideImplement.ImplementMembersHandler -import org.jetbrains.kotlin.idea.core.overrideImplement.GenerateMembersHandler -import org.jetbrains.kotlin.idea.core.overrideImplement.OverrideMemberChooserObject -import org.jetbrains.kotlin.idea.core.overrideImplement.OverrideMembersHandler +import org.jetbrains.kotlin.idea.core.overrideImplement.AbstractGenerateMembersHandler import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor -import org.jetbrains.kotlin.idea.test.dumpTextWithErrors +import org.jetbrains.kotlin.idea.test.dumpErrorLines import org.jetbrains.kotlin.idea.util.application.executeWriteCommand import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.test.InTextDirectivesUtils import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.TagsTestDataUtil +import org.jetbrains.kotlin.test.uitls.IgnoreTests import org.jetbrains.kotlin.utils.rethrow import org.junit.Assert import java.io.File +import java.nio.charset.StandardCharsets import kotlin.test.assertEquals -abstract class AbstractOverrideImplementTest : KotlinLightCodeInsightFixtureTestCase() { +abstract class AbstractOverrideImplementTest : KotlinLightCodeInsightFixtureTestCase(), OverrideImplementTestMixIn { + override fun getProjectDescriptor(): LightProjectDescriptor = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE protected fun doImplementFileTest(memberToOverride: String? = null) { - doFileTest(ImplementMembersHandler(), memberToOverride) + doFileTest(createImplementMembersHandler(), memberToOverride) } protected fun doOverrideFileTest(memberToOverride: String? = null) { - doFileTest(OverrideMembersHandler(), memberToOverride) + doFileTest(createOverrideMembersHandler(), memberToOverride) } protected fun doMultiImplementFileTest() { - doMultiFileTest(ImplementMembersHandler()) + doMultiFileTest(createImplementMembersHandler()) } protected fun doMultiOverrideFileTest() { - doMultiFileTest(OverrideMembersHandler()) + doMultiFileTest(createOverrideMembersHandler()) } protected fun doImplementDirectoryTest(memberToOverride: String? = null) { - doDirectoryTest(ImplementMembersHandler(), memberToOverride) + doDirectoryTest(createImplementMembersHandler(), memberToOverride) } protected fun doOverrideDirectoryTest(memberToImplement: String? = null) { - doDirectoryTest(OverrideMembersHandler(), memberToImplement) + doDirectoryTest(createOverrideMembersHandler(), memberToImplement) } protected fun doMultiImplementDirectoryTest() { - doMultiDirectoryTest(ImplementMembersHandler()) + doMultiDirectoryTest(createImplementMembersHandler()) } protected fun doMultiOverrideDirectoryTest() { - doMultiDirectoryTest(OverrideMembersHandler()) + doMultiDirectoryTest(createOverrideMembersHandler()) } protected fun doImplementJavaDirectoryTest(className: String, methodName: String) { @@ -88,33 +87,33 @@ abstract class AbstractOverrideImplementTest : KotlinLightCodeInsightFixtureTest myFixture.checkResultByFile(getTestName(true) + "/foo/JavaClass.java.after") } - private fun doFileTest(handler: GenerateMembersHandler, memberToOverride: String? = null) { + private fun doFileTest(handler: AbstractGenerateMembersHandler, memberToOverride: String? = null) { myFixture.configureByFile(getTestName(true) + ".kt") doOverrideImplement(handler, memberToOverride) - checkResultByFile(getTestName(true) + ".kt.after") + checkResultByFile(getTestName(true)) } - private fun doMultiFileTest(handler: GenerateMembersHandler) { + private fun doMultiFileTest(handler: AbstractGenerateMembersHandler) { myFixture.configureByFile(getTestName(true) + ".kt") doMultiOverrideImplement(handler) - checkResultByFile(getTestName(true) + ".kt.after") + checkResultByFile(getTestName(true)) } - private fun doDirectoryTest(handler: GenerateMembersHandler, memberToOverride: String? = null) { + private fun doDirectoryTest(handler: AbstractGenerateMembersHandler, memberToOverride: String? = null) { myFixture.copyDirectoryToProject(getTestName(true), "") myFixture.configureFromTempProjectFile("foo/Impl.kt") doOverrideImplement(handler, memberToOverride) - checkResultByFile(getTestName(true) + "/foo/Impl.kt.after") + checkResultByFile(getTestName(true) + "/foo/Impl") } - private fun doMultiDirectoryTest(handler: GenerateMembersHandler) { + private fun doMultiDirectoryTest(handler: AbstractGenerateMembersHandler) { myFixture.copyDirectoryToProject(getTestName(true), "") myFixture.configureFromTempProjectFile("foo/Impl.kt") doMultiOverrideImplement(handler) - checkResultByFile(getTestName(true) + "/foo/Impl.kt.after") + checkResultByFile(getTestName(true) + "/foo/Impl") } - private fun doOverrideImplement(handler: GenerateMembersHandler, memberToOverride: String?) { + private fun doOverrideImplement(handler: AbstractGenerateMembersHandler, memberToOverride: String?) { val elementAtCaret = myFixture.file.findElementAt(myFixture.editor.caretModel.offset) val classOrObject = PsiTreeUtil.getParentOfType(elementAtCaret, KtClassOrObject::class.java) ?: error("Caret should be inside class or object") @@ -122,30 +121,26 @@ abstract class AbstractOverrideImplementTest : KotlinLightCodeInsightFixtureTest val chooserObjects = handler.collectMembersToGenerate(classOrObject) val singleToOverride = if (memberToOverride == null) { - val filtered = chooserObjects.filter { - (it.descriptor.containingDeclaration as? ClassDescriptor)?.let { - !KotlinBuiltIns.isAny(it) - } ?: true - } + val filtered = chooserObjects.filter { !isMemberOfAny(classOrObject, it) } assertEquals(1, filtered.size, "Invalid number of available chooserObjects for override") filtered.single() } else { chooserObjects.single { chooserObject -> - chooserObject.descriptor.name.asString() == memberToOverride + getMemberName(classOrObject, chooserObject) == memberToOverride } } - performGenerateCommand(classOrObject, listOf(singleToOverride)) + performGenerateCommand(handler, classOrObject, listOf(singleToOverride)) } - private fun doMultiOverrideImplement(handler: GenerateMembersHandler) { + private fun doMultiOverrideImplement(handler: AbstractGenerateMembersHandler) { val elementAtCaret = myFixture.file.findElementAt(myFixture.editor.caretModel.offset) val classOrObject = PsiTreeUtil.getParentOfType(elementAtCaret, KtClassOrObject::class.java) ?: error("Caret should be inside class or object") val chooserObjects = handler.collectMembersToGenerate(classOrObject) - .sortedBy { it.descriptor.name.asString() + " in " + it.immediateSuper.containingDeclaration.name.asString() } - performGenerateCommand(classOrObject, chooserObjects) + .sortedBy { getMemberName(classOrObject, it) + " in " + getContainingClassName(classOrObject, it) } + performGenerateCommand(handler, classOrObject, chooserObjects) } private fun generateImplementation(method: PsiMethod) { @@ -161,13 +156,14 @@ abstract class AbstractOverrideImplementTest : KotlinLightCodeInsightFixtureTest } private fun performGenerateCommand( + handler: AbstractGenerateMembersHandler, classOrObject: KtClassOrObject, - selectedElements: List + selectedElements: List ) { try { val copyDoc = InTextDirectivesUtils.isDirectiveDefined(classOrObject.containingFile.text, "// COPY_DOC") myFixture.project.executeWriteCommand("") { - GenerateMembersHandler.generateMembers(myFixture.editor, classOrObject, selectedElements, copyDoc) + handler.generateMembers(myFixture.editor, classOrObject, selectedElements, copyDoc) } } catch (throwable: Throwable) { throw rethrow(throwable) @@ -175,18 +171,60 @@ abstract class AbstractOverrideImplementTest : KotlinLightCodeInsightFixtureTest } - private fun checkResultByFile(fileName: String) { - val expectedFile = File(myFixture.testDataPath, fileName) - try { - Assert.assertTrue(expectedFile.exists()) - val file = myFixture.file as KtFile - val document = myFixture.getDocument(file) - myFixture.project.executeWriteCommand("") { - document.replaceString(0, document.textLength, file.dumpTextWithErrors()) + private fun checkResultByFile(fileNameWithoutExtension: String) { + val goldenResultFile = File(myFixture.testDataPath, "$fileNameWithoutExtension.kt.after") + val firIdenticalIsPresent = InTextDirectivesUtils.isDirectiveDefined( + goldenResultFile.readText(StandardCharsets.UTF_8), + IgnoreTests.DIRECTIVES.FIR_IDENTICAL + ) + + val resultFile = if (isFirPlugin) { + if (InTextDirectivesUtils.isDirectiveDefined( + goldenResultFile.readText(StandardCharsets.UTF_8), + IgnoreTests.DIRECTIVES.IGNORE_FIR + ) + ) { + return } - myFixture.checkResultByFile(fileName) + + if (firIdenticalIsPresent) { + goldenResultFile + } else { + val firResultFile = File(myFixture.testDataPath, "$fileNameWithoutExtension.kt.fir.after") + if (!firResultFile.exists()) { + goldenResultFile.copyTo(firResultFile) + } + firResultFile + } + } else { + goldenResultFile + } + try { + Assert.assertTrue(resultFile.exists()) + val errorLines = myFixture.dumpErrorLines() + val file = myFixture.file as KtFile + val fileLines = file.text.split(System.lineSeparator()) + val newTextContent = if (firIdenticalIsPresent) { + // Ensure the directive is the first line + val fileLinesWithoutFirIdentical = fileLines.filter { it != IgnoreTests.DIRECTIVES.FIR_IDENTICAL } + (listOf(IgnoreTests.DIRECTIVES.FIR_IDENTICAL) + errorLines + fileLinesWithoutFirIdentical).joinToString("\n") + } else { + (errorLines + fileLines).joinToString("\n") + } + myFixture.project.executeWriteCommand("") { + val document = myFixture.getDocument(file) + document.replaceString(0, document.textLength, newTextContent) + } + myFixture.checkResultByFile(resultFile.relativeTo(File(myFixture.testDataPath)).path) } catch (error: AssertionError) { - KotlinTestUtils.assertEqualsToFile(expectedFile, TagsTestDataUtil.generateTextWithCaretAndSelection(myFixture.editor)) + KotlinTestUtils.assertEqualsToFile(resultFile, TagsTestDataUtil.generateTextWithCaretAndSelection(myFixture.editor)) + } + if (resultFile != goldenResultFile) { + IgnoreTests.cleanUpIdenticalFirTestFile( + goldenResultFile, + resultFile, + File(myFixture.testDataPath, "$fileNameWithoutExtension.kt"), + ) } } } diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/Java8OverrideImplementTest.kt b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/Java8OverrideImplementTest.kt index 04d14ab89df..dfad95dc6db 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/Java8OverrideImplementTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/Java8OverrideImplementTest.kt @@ -5,13 +5,17 @@ package org.jetbrains.kotlin.idea.codeInsight +import com.intellij.codeInsight.generation.ClassMember +import org.jetbrains.kotlin.idea.core.overrideImplement.OverrideMemberChooserObject import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor import org.jetbrains.kotlin.idea.test.PluginTestCaseBase import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner import org.junit.runner.RunWith @RunWith(JUnit3WithIdeaConfigurationRunner::class) -class Java8OverrideImplementTest : AbstractOverrideImplementTest() { +class OldJava8OverrideImplementTest : Java8OverrideImplementTest(), OldOverrideImplementTestMixIn + +abstract class Java8OverrideImplementTest : AbstractOverrideImplementTest() { companion object { private val TEST_PATH = PluginTestCaseBase.getTestDataPathBase() + "/codeInsight/overrideImplement/jdk8" } diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.kt b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.kt index fdd0bf2a485..37c9afa993a 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTest.kt @@ -5,13 +5,17 @@ package org.jetbrains.kotlin.idea.codeInsight +import com.intellij.codeInsight.generation.ClassMember +import org.jetbrains.kotlin.idea.core.overrideImplement.OverrideMemberChooserObject import org.jetbrains.kotlin.idea.test.PluginTestCaseBase import org.jetbrains.kotlin.idea.test.withCustomLanguageAndApiVersion import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner import org.junit.runner.RunWith @RunWith(JUnit3WithIdeaConfigurationRunner::class) -class OverrideImplementTest : AbstractOverrideImplementTest() { +class OldOverrideImplementTest : OverrideImplementTest(), OldOverrideImplementTestMixIn + +abstract class OverrideImplementTest : AbstractOverrideImplementTest() { override fun setUp() { super.setUp() myFixture.testDataPath = PluginTestCaseBase.getTestDataPathBase() + "/codeInsight/overrideImplement" diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTestMixIn.kt b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTestMixIn.kt new file mode 100644 index 00000000000..81b3099baf1 --- /dev/null +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementTestMixIn.kt @@ -0,0 +1,41 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.codeInsight + +import com.intellij.codeInsight.generation.ClassMember +import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.idea.core.overrideImplement.AbstractGenerateMembersHandler +import org.jetbrains.kotlin.idea.core.overrideImplement.ImplementMembersHandler +import org.jetbrains.kotlin.idea.core.overrideImplement.OverrideMemberChooserObject +import org.jetbrains.kotlin.idea.core.overrideImplement.OverrideMembersHandler +import org.jetbrains.kotlin.psi.KtClassOrObject + +interface OverrideImplementTestMixIn { + fun createImplementMembersHandler(): AbstractGenerateMembersHandler + fun createOverrideMembersHandler(): AbstractGenerateMembersHandler + fun isMemberOfAny(parentClass: KtClassOrObject, chooserObject: T): Boolean + fun getMemberName(parentClass: KtClassOrObject, chooserObject: T): String + fun getContainingClassName(parentClass: KtClassOrObject, chooserObject: T): String +} + +interface OldOverrideImplementTestMixIn : OverrideImplementTestMixIn { + override fun createImplementMembersHandler(): AbstractGenerateMembersHandler = ImplementMembersHandler() + + override fun createOverrideMembersHandler(): AbstractGenerateMembersHandler = OverrideMembersHandler() + + override fun isMemberOfAny(parentClass: KtClassOrObject, chooserObject: OverrideMemberChooserObject): Boolean = + (chooserObject.descriptor.containingDeclaration as? ClassDescriptor)?.let { + KotlinBuiltIns.isAny(it) + } ?: true + + override fun getMemberName(parentClass: KtClassOrObject, chooserObject: OverrideMemberChooserObject): String = + chooserObject.descriptor.name.asString() + + override fun getContainingClassName(parentClass: KtClassOrObject, chooserObject: OverrideMemberChooserObject): String { + return chooserObject.immediateSuper.containingDeclaration.name.asString() + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementWithLibTest.kt b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementWithLibTest.kt index a97c7a87791..8a008a062ec 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementWithLibTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/OverrideImplementWithLibTest.kt @@ -5,13 +5,17 @@ package org.jetbrains.kotlin.idea.codeInsight +import com.intellij.codeInsight.generation.ClassMember +import org.jetbrains.kotlin.idea.core.overrideImplement.OverrideMemberChooserObject import org.jetbrains.kotlin.idea.test.PluginTestCaseBase import org.jetbrains.kotlin.idea.test.SdkAndMockLibraryProjectDescriptor import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner import org.junit.runner.RunWith @RunWith(JUnit3WithIdeaConfigurationRunner::class) -class OverrideImplementWithLibTest : AbstractOverrideImplementTest() { +class OldOverrideImplementWithLibTest : OverrideImplementWithLibTest(), OldOverrideImplementTestMixIn + +abstract class OverrideImplementWithLibTest : AbstractOverrideImplementTest() { private val TEST_PATH = PluginTestCaseBase.getTestDataPathBase() + "/codeInsight/overrideImplement/withLib" override fun setUp() {