Change function signature should change type parameters

#KT-22896 Fixed
This commit is contained in:
Dmitry Gridin
2019-04-02 16:30:26 +07:00
parent 5e613554ee
commit c8ea62a0d9
10 changed files with 95 additions and 4 deletions
@@ -38,10 +38,7 @@ import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.load.java.NOT_NULL_ANNOTATIONS
import org.jetbrains.kotlin.load.java.NULLABLE_ANNOTATIONS
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtNamedFunction
import org.jetbrains.kotlin.psi.KtParameterList
import org.jetbrains.kotlin.psi.KtPsiFactory
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.typeRefHelpers.setReceiverTypeReference
import org.jetbrains.kotlin.renderer.ClassifierNamePolicy
import org.jetbrains.kotlin.renderer.DescriptorRenderer
@@ -338,6 +335,14 @@ class ChangeMemberFunctionSignatureFix private constructor(
if (patternFunction.receiverTypeReference == null && function.receiverTypeReference != null) {
function.setReceiverTypeReference(null)
}
val patternTypeParameterList = patternFunction.typeParameterList
if (patternTypeParameterList != null) {
ShortenReferences.DEFAULT.process(
(if (function.typeParameterList != null) function.typeParameterList?.replace(patternTypeParameterList)
else function.addAfter(patternTypeParameterList, function.funKeyword)) as KtTypeParameterList
)
} else function.typeParameterList?.delete()
}
}
@@ -0,0 +1,8 @@
// "Change function signature to 'fun <T : Number> f(a: T)'" "true"
open class A {
open fun <T : Number> f(a: T) {}
}
class B : A() {
<caret>override fun f(a: Int) {}
}
@@ -0,0 +1,8 @@
// "Change function signature to 'fun <T : Number> f(a: T)'" "true"
open class A {
open fun <T : Number> f(a: T) {}
}
class B : A() {
<caret>override fun <T : Number> f(a: T) {}
}
@@ -0,0 +1,9 @@
// "Change function signature to 'fun <T : Number> f(a: T)'" "true"
open class A {
open fun <T : Number> f(a: T) {}
}
class B : A() {
class Number
<caret>override fun f(a: Int) {}
}
@@ -0,0 +1,9 @@
// "Change function signature to 'fun <T : Number> f(a: T)'" "true"
open class A {
open fun <T : Number> f(a: T) {}
}
class B : A() {
class Number
<caret>override fun <T : kotlin.Number> f(a: T) {}
}
@@ -0,0 +1,8 @@
// "Change function signature to 'fun <T : Number> f(a: T)'" "true"
open class A {
open fun <T : Number> f(a: T) {}
}
class B : A() {
<caret>override fun <E : Enum<E>> f(a: E) {}
}
@@ -0,0 +1,8 @@
// "Change function signature to 'fun <T : Number> f(a: T)'" "true"
open class A {
open fun <T : Number> f(a: T) {}
}
class B : A() {
<caret>override fun <T : Number> f(a: T) {}
}
@@ -0,0 +1,8 @@
// "Change function signature to 'fun f(a: Int)'" "true"
open class A {
open fun f(a: Int) {}
}
class B : A() {
<caret>override fun <T : Number> f(a: T) {}
}
@@ -0,0 +1,8 @@
// "Change function signature to 'fun f(a: Int)'" "true"
open class A {
open fun f(a: Int) {}
}
class B : A() {
<caret>override fun f(a: Int) {}
}
@@ -9288,6 +9288,16 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
runTest("idea/testData/quickfix/override/nothingToOverride/addParameterTwoSupertypes.kt");
}
@TestMetadata("addTypeParameter.kt")
public void testAddTypeParameter() throws Exception {
runTest("idea/testData/quickfix/override/nothingToOverride/addTypeParameter.kt");
}
@TestMetadata("addTypeParameter2.kt")
public void testAddTypeParameter2() throws Exception {
runTest("idea/testData/quickfix/override/nothingToOverride/addTypeParameter2.kt");
}
public void testAllFilesPresentInNothingToOverride() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/override/nothingToOverride"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), TargetBackend.ANY, true);
}
@@ -9337,6 +9347,11 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
runTest("idea/testData/quickfix/override/nothingToOverride/changeReturnType.kt");
}
@TestMetadata("changeTypeParameter.kt")
public void testChangeTypeParameter() throws Exception {
runTest("idea/testData/quickfix/override/nothingToOverride/changeTypeParameter.kt");
}
@TestMetadata("doNotLooseAnnotations.kt")
public void testDoNotLooseAnnotations() throws Exception {
runTest("idea/testData/quickfix/override/nothingToOverride/doNotLooseAnnotations.kt");
@@ -9377,6 +9392,11 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
runTest("idea/testData/quickfix/override/nothingToOverride/removeParameterTwoTraits.kt");
}
@TestMetadata("removeTypeParameter.kt")
public void testRemoveTypeParameter() throws Exception {
runTest("idea/testData/quickfix/override/nothingToOverride/removeTypeParameter.kt");
}
@TestMetadata("swapParametersGenericClass.kt")
public void testSwapParametersGenericClass() throws Exception {
runTest("idea/testData/quickfix/override/nothingToOverride/swapParametersGenericClass.kt");