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.NOT_NULL_ANNOTATIONS
|
||||||
import org.jetbrains.kotlin.load.java.NULLABLE_ANNOTATIONS
|
import org.jetbrains.kotlin.load.java.NULLABLE_ANNOTATIONS
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.KtNamedFunction
|
|
||||||
import org.jetbrains.kotlin.psi.KtParameterList
|
|
||||||
import org.jetbrains.kotlin.psi.KtPsiFactory
|
|
||||||
import org.jetbrains.kotlin.psi.typeRefHelpers.setReceiverTypeReference
|
import org.jetbrains.kotlin.psi.typeRefHelpers.setReceiverTypeReference
|
||||||
import org.jetbrains.kotlin.renderer.ClassifierNamePolicy
|
import org.jetbrains.kotlin.renderer.ClassifierNamePolicy
|
||||||
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
||||||
@@ -338,6 +335,14 @@ class ChangeMemberFunctionSignatureFix private constructor(
|
|||||||
if (patternFunction.receiverTypeReference == null && function.receiverTypeReference != null) {
|
if (patternFunction.receiverTypeReference == null && function.receiverTypeReference != null) {
|
||||||
function.setReceiverTypeReference(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");
|
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 {
|
public void testAllFilesPresentInNothingToOverride() throws Exception {
|
||||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/override/nothingToOverride"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), TargetBackend.ANY, true);
|
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");
|
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")
|
@TestMetadata("doNotLooseAnnotations.kt")
|
||||||
public void testDoNotLooseAnnotations() throws Exception {
|
public void testDoNotLooseAnnotations() throws Exception {
|
||||||
runTest("idea/testData/quickfix/override/nothingToOverride/doNotLooseAnnotations.kt");
|
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");
|
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")
|
@TestMetadata("swapParametersGenericClass.kt")
|
||||||
public void testSwapParametersGenericClass() throws Exception {
|
public void testSwapParametersGenericClass() throws Exception {
|
||||||
runTest("idea/testData/quickfix/override/nothingToOverride/swapParametersGenericClass.kt");
|
runTest("idea/testData/quickfix/override/nothingToOverride/swapParametersGenericClass.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user