KT-8868 "Implement members" generates unqualified reference for member class/interface

#KT-8868 Fixed
This commit is contained in:
Valentin Kipyatkov
2015-08-19 21:26:22 +03:00
parent 14763a7ffa
commit 9497856d8e
10 changed files with 321 additions and 286 deletions
@@ -237,7 +237,8 @@ public abstract class OverrideImplementMembersHandler : LanguageCodeInsightActio
val builder = StringBuilder()
builder.append("super")
if (classOrObject.getDelegationSpecifiers().size() > 1) {
builder.append("<").append(descriptor.containingDeclaration.escapedName()).append(">")
val superClassFqName = IdeDescriptorRenderers.SOURCE_CODE.renderClassifierName(descriptor.containingDeclaration as ClassifierDescriptor)
builder.append("<").append(superClassFqName).append(">")
}
builder.append(".").append(descriptor.escapedName())
@@ -0,0 +1,3 @@
class X : java.util.ArrayList<String>(), Runnable {
<caret>
}
@@ -0,0 +1,7 @@
import java.util.ArrayList
class X : java.util.ArrayList<String>(), Runnable {
override fun size(): Int {
<selection><caret>return super<ArrayList>.size()</selection>
}
}
@@ -0,0 +1,13 @@
class Outer {
interface Inner1 {
fun f() { }
}
interface Inner2 {
fun g() { }
}
}
class X : Outer.Inner1, Outer.Inner2 {
<caret>
}
@@ -0,0 +1,15 @@
class Outer {
interface Inner1 {
fun f() { }
}
interface Inner2 {
fun g() { }
}
}
class X : Outer.Inner1, Outer.Inner2 {
override fun f() {
<selection><caret>super<Outer.Inner1>.f()</selection>
}
}
@@ -46,12 +46,12 @@ import kotlin.test.assertEquals
public abstract class AbstractOverrideImplementTest : JetLightCodeInsightFixtureTestCase() {
override fun getProjectDescriptor(): LightProjectDescriptor = JetLightProjectDescriptor.INSTANCE
protected fun doImplementFileTest() {
doFileTest(ImplementMembersHandler())
protected fun doImplementFileTest(memberToOverride: String? = null) {
doFileTest(ImplementMembersHandler(), memberToOverride)
}
protected fun doOverrideFileTest() {
doFileTest(OverrideMembersHandler())
protected fun doOverrideFileTest(memberToOverride: String? = null) {
doFileTest(OverrideMembersHandler(), memberToOverride)
}
protected fun doMultiImplementFileTest() {
@@ -62,11 +62,11 @@ public abstract class AbstractOverrideImplementTest : JetLightCodeInsightFixture
doMultiFileTest(OverrideMembersHandler())
}
protected fun doImplementDirectoryTest() {
doDirectoryTest(ImplementMembersHandler())
protected fun doImplementDirectoryTest(memberToOverride: String? = null) {
doDirectoryTest(ImplementMembersHandler(), memberToOverride)
}
protected fun doOverrideDirectoryTest(memberToImplement: String?) {
protected fun doOverrideDirectoryTest(memberToImplement: String? = null) {
doDirectoryTest(OverrideMembersHandler(), memberToImplement)
}
@@ -91,9 +91,9 @@ public abstract class AbstractOverrideImplementTest : JetLightCodeInsightFixture
myFixture.checkResultByFile(getTestName(true) + "/foo/JavaClass.java.after")
}
private fun doFileTest(handler: OverrideImplementMembersHandler) {
private fun doFileTest(handler: OverrideImplementMembersHandler, memberToOverride: String? = null) {
myFixture.configureByFile(getTestName(true) + ".kt")
doOverrideImplement(handler, null)
doOverrideImplement(handler, memberToOverride)
checkResultByFile(getTestName(true) + ".kt.after")
}
@@ -103,11 +103,7 @@ public abstract class AbstractOverrideImplementTest : JetLightCodeInsightFixture
checkResultByFile(getTestName(true) + ".kt.after")
}
protected fun doDirectoryTest(handler: OverrideImplementMembersHandler) {
doDirectoryTest(handler, null)
}
private fun doDirectoryTest(handler: OverrideImplementMembersHandler, memberToOverride: String?) {
private fun doDirectoryTest(handler: OverrideImplementMembersHandler, memberToOverride: String? = null) {
myFixture.copyDirectoryToProject(getTestName(true), "")
myFixture.configureFromTempProjectFile("foo/Impl.kt")
doOverrideImplement(handler, memberToOverride)
@@ -1,225 +0,0 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.idea.codeInsight;
import org.jetbrains.kotlin.idea.core.overrideImplement.OverrideMembersHandler;
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase;
public final class OverrideImplementTest extends AbstractOverrideImplementTest {
@Override
public void setUp() {
super.setUp();
myFixture.setTestDataPath(PluginTestCaseBase.getTestDataPathBase() + "/codeInsight/overrideImplement");
}
public void testEmptyClassBodyFunctionMethod() {
doImplementFileTest();
}
public void testFunctionMethod() {
doImplementFileTest();
}
public void testFunctionProperty() {
doImplementFileTest();
}
public void testFunctionWithTypeParameters() {
doImplementFileTest();
}
public void testGenericTypesSeveralMethods() {
doImplementFileTest();
}
public void testJavaInterfaceMethod() {
doImplementDirectoryTest();
}
public void testJavaParameters() {
doImplementDirectoryTest();
}
public void testFunctionFromTraitInJava() {
doImplementJavaDirectoryTest("foo.KotlinTrait", "bar");
}
public void testGenericMethod() {
doImplementFileTest();
}
public void testImplementJavaRawSubclass() {
doImplementDirectoryTest();
}
public void testProperty() {
doImplementFileTest();
}
public void testTraitGenericImplement() {
doImplementFileTest();
}
public void testDefaultValues() {
doImplementFileTest();
}
public void testRespectCaretPosition() {
doMultiImplementFileTest();
}
public void testGenerateMulti() {
doMultiImplementFileTest();
}
public void testTraitNullableFunction() {
doImplementFileTest();
}
public void testOverrideUnitFunction() {
doOverrideFileTest();
}
public void testOverrideNonUnitFunction() {
doOverrideFileTest();
}
public void testOverrideFunctionProperty() {
doOverrideFileTest();
}
public void testOverridePrimitiveProperty() {
doMultiImplementFileTest();
}
public void testOverrideGenericFunction() {
doOverrideFileTest();
}
public void testMultiOverride() {
doMultiOverrideFileTest();
}
public void testDelegatedMembers() {
doMultiOverrideFileTest();
}
public void testOverrideExplicitFunction() {
doOverrideFileTest();
}
public void testOverrideExtensionProperty() {
doOverrideFileTest();
}
public void testOverrideMutableExtensionProperty() {
doOverrideFileTest();
}
public void testComplexMultiOverride() {
doMultiOverrideFileTest();
}
public void testOverrideRespectCaretPosition() {
doMultiOverrideFileTest();
}
public void testOverrideJavaMethod() {
doOverrideDirectoryTest("getAnswer");
}
public void testJavaMethodWithPackageVisibility() {
doOverrideDirectoryTest("getFooBar");
}
public void testJavaMethodWithPackageProtectedVisibility() {
doOverrideDirectoryTest("getFooBar");
}
public void testPrivateJavaMethod() {
doMultiOverrideDirectoryTest();
}
public void testInheritVisibilities() {
doMultiOverrideFileTest();
}
public void testImplementSamAdapters() {
doImplementDirectoryTest();
}
public void testOverrideFromFunctionPosition() {
doMultiOverrideFileTest();
}
public void testOverrideFromClassName() {
doMultiOverrideFileTest();
}
public void testOverrideFromLBrace() {
doMultiOverrideFileTest();
}
public void testOverrideSamAdapters() {
doOverrideDirectoryTest("foo");
}
public void testSameTypeName() {
doDirectoryTest(new OverrideMembersHandler());
}
public void testPropagationKJK() {
doDirectoryTest(new OverrideMembersHandler());
}
public void testMultipleSupers() {
doMultiOverrideFileTest();
}
public void testLocalClass() {
doImplementFileTest();
}
public void testStarProjections() {
doImplementFileTest();
}
public void testEscapeIdentifiers() {
doOverrideFileTest();
}
public void testVarArgs() {
doOverrideFileTest();
}
public void testDoNotOverrideFinal() {
doMultiOverrideFileTest();
}
public void testSuperPreference() {
doMultiOverrideFileTest();
}
public void testAmbiguousSuper() {
doMultiOverrideFileTest();
}
public void testImplementFunctionType() {
doMultiImplementFileTest();
}
}
@@ -0,0 +1,231 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.idea.codeInsight
import org.jetbrains.kotlin.idea.core.overrideImplement.OverrideMembersHandler
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
public class OverrideImplementTest : AbstractOverrideImplementTest() {
override fun setUp() {
super.setUp()
myFixture.testDataPath = PluginTestCaseBase.getTestDataPathBase() + "/codeInsight/overrideImplement"
}
public fun testEmptyClassBodyFunctionMethod() {
doImplementFileTest()
}
public fun testFunctionMethod() {
doImplementFileTest()
}
public fun testFunctionProperty() {
doImplementFileTest()
}
public fun testFunctionWithTypeParameters() {
doImplementFileTest()
}
public fun testGenericTypesSeveralMethods() {
doImplementFileTest()
}
public fun testJavaInterfaceMethod() {
doImplementDirectoryTest()
}
public fun testJavaParameters() {
doImplementDirectoryTest()
}
public fun testFunctionFromTraitInJava() {
doImplementJavaDirectoryTest("foo.KotlinTrait", "bar")
}
public fun testGenericMethod() {
doImplementFileTest()
}
public fun testImplementJavaRawSubclass() {
doImplementDirectoryTest()
}
public fun testProperty() {
doImplementFileTest()
}
public fun testTraitGenericImplement() {
doImplementFileTest()
}
public fun testDefaultValues() {
doImplementFileTest()
}
public fun testRespectCaretPosition() {
doMultiImplementFileTest()
}
public fun testGenerateMulti() {
doMultiImplementFileTest()
}
public fun testTraitNullableFunction() {
doImplementFileTest()
}
public fun testOverrideUnitFunction() {
doOverrideFileTest()
}
public fun testOverrideNonUnitFunction() {
doOverrideFileTest()
}
public fun testOverrideFunctionProperty() {
doOverrideFileTest()
}
public fun testOverridePrimitiveProperty() {
doMultiImplementFileTest()
}
public fun testOverrideGenericFunction() {
doOverrideFileTest()
}
public fun testMultiOverride() {
doMultiOverrideFileTest()
}
public fun testDelegatedMembers() {
doMultiOverrideFileTest()
}
public fun testOverrideExplicitFunction() {
doOverrideFileTest()
}
public fun testOverrideExtensionProperty() {
doOverrideFileTest()
}
public fun testOverrideMutableExtensionProperty() {
doOverrideFileTest()
}
public fun testComplexMultiOverride() {
doMultiOverrideFileTest()
}
public fun testOverrideRespectCaretPosition() {
doMultiOverrideFileTest()
}
public fun testOverrideJavaMethod() {
doOverrideDirectoryTest("getAnswer")
}
public fun testJavaMethodWithPackageVisibility() {
doOverrideDirectoryTest("getFooBar")
}
public fun testJavaMethodWithPackageProtectedVisibility() {
doOverrideDirectoryTest("getFooBar")
}
public fun testPrivateJavaMethod() {
doMultiOverrideDirectoryTest()
}
public fun testInheritVisibilities() {
doMultiOverrideFileTest()
}
public fun testImplementSamAdapters() {
doImplementDirectoryTest()
}
public fun testOverrideFromFunctionPosition() {
doMultiOverrideFileTest()
}
public fun testOverrideFromClassName() {
doMultiOverrideFileTest()
}
public fun testOverrideFromLBrace() {
doMultiOverrideFileTest()
}
public fun testOverrideSamAdapters() {
doOverrideDirectoryTest("foo")
}
public fun testSameTypeName() {
doOverrideDirectoryTest()
}
public fun testPropagationKJK() {
doOverrideDirectoryTest()
}
public fun testMultipleSupers() {
doMultiOverrideFileTest()
}
public fun testLocalClass() {
doImplementFileTest()
}
public fun testStarProjections() {
doImplementFileTest()
}
public fun testEscapeIdentifiers() {
doOverrideFileTest()
}
public fun testVarArgs() {
doOverrideFileTest()
}
public fun testDoNotOverrideFinal() {
doMultiOverrideFileTest()
}
public fun testSuperPreference() {
doMultiOverrideFileTest()
}
public fun testAmbiguousSuper() {
doMultiOverrideFileTest()
}
public fun testImplementFunctionType() {
doMultiImplementFileTest()
}
public fun testQualifySuperType() {
doOverrideFileTest("f")
}
public fun testGenericSuperClass() {
doOverrideFileTest("size")
}
}
@@ -1,46 +0,0 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.idea.codeInsight;
import com.intellij.testFramework.LightProjectDescriptor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.idea.test.JdkAndMockLibraryProjectDescriptor;
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase;
public final class OverrideImplementWithLibTest extends AbstractOverrideImplementTest {
private static final String TEST_PATH = PluginTestCaseBase.getTestDataPathBase() + "/codeInsight/overrideImplement/withLib";
@Override
public void setUp() {
super.setUp();
myFixture.setTestDataPath(TEST_PATH);
}
@NotNull
@Override
protected LightProjectDescriptor getProjectDescriptor() {
return new JdkAndMockLibraryProjectDescriptor(TEST_PATH + "/" + getTestName(true) + "Src", false);
}
public void testFakeOverride() {
doOverrideFileTest();
}
public void testGenericSubstituted() {
doOverrideFileTest();
}
}
@@ -0,0 +1,40 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.idea.codeInsight
import com.intellij.testFramework.LightProjectDescriptor
import org.jetbrains.kotlin.idea.test.JdkAndMockLibraryProjectDescriptor
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
public class OverrideImplementWithLibTest : AbstractOverrideImplementTest() {
private val TEST_PATH = PluginTestCaseBase.getTestDataPathBase() + "/codeInsight/overrideImplement/withLib"
override fun setUp() {
super.setUp()
myFixture.testDataPath = TEST_PATH
}
override fun getProjectDescriptor() = JdkAndMockLibraryProjectDescriptor(TEST_PATH + "/" + getTestName(true) + "Src", false)
public fun testFakeOverride() {
doOverrideFileTest()
}
public fun testGenericSubstituted() {
doOverrideFileTest()
}
}