Change function signature should change type parameters
#KT-22896 Fixed
This commit is contained in:
@@ -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) {}
|
||||
}
|
||||
+8
@@ -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) {}
|
||||
}
|
||||
+8
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user