From 82d94745a5f9066e6bb19cf6b3cb384bdc8c7339 Mon Sep 17 00:00:00 2001 From: Dmitry Gridin Date: Mon, 25 Jan 2021 13:35:03 +0700 Subject: [PATCH] [change signature] improve rendering of flexible parameters ^KTIJ-707 Fixed GitOrigin-RevId: 6a555b8842c9f5deff140a3fe16a41c91a94d6a9 --- .../changeSignature/KotlinParameterInfo.kt | 35 ++++++++++++++----- .../KotlinChangeSignatureTest.kt | 30 +++++++++++++++- .../ChangeJavaMethodAfter.1.kt | 3 ++ .../ChangeJavaMethodAfter.java | 3 ++ .../ChangeJavaMethodBefore.1.kt | 3 ++ .../ChangeJavaMethodBefore.java | 3 ++ .../ChangeJavaMethodWithBoxedTypeAfter.1.kt | 7 ++++ .../ChangeJavaMethodWithBoxedTypeAfter.java | 3 ++ .../ChangeJavaMethodWithBoxedTypeBefore.1.kt | 7 ++++ .../ChangeJavaMethodWithBoxedTypeBefore.java | 3 ++ ...vaMethodWithFlexibleMutableType1After.1.kt | 31 ++++++++++++++++ ...vaMethodWithFlexibleMutableType1After.java | 5 +++ ...aMethodWithFlexibleMutableType1Before.1.kt | 31 ++++++++++++++++ ...aMethodWithFlexibleMutableType1Before.java | 5 +++ ...avaMethodWithFlexibleMutableTypeAfter.1.kt | 31 ++++++++++++++++ ...avaMethodWithFlexibleMutableTypeAfter.java | 5 +++ ...vaMethodWithFlexibleMutableTypeBefore.1.kt | 31 ++++++++++++++++ ...vaMethodWithFlexibleMutableTypeBefore.java | 5 +++ ...JavaMethodWithNestedFlexibleTypeAfter.1.kt | 7 ++++ ...JavaMethodWithNestedFlexibleTypeAfter.java | 8 +++++ ...avaMethodWithNestedFlexibleTypeBefore.1.kt | 7 ++++ ...avaMethodWithNestedFlexibleTypeBefore.java | 8 +++++ ...hangeJavaMethodWithPrimitiveTypeAfter.1.kt | 3 ++ ...hangeJavaMethodWithPrimitiveTypeAfter.java | 3 ++ ...angeJavaMethodWithPrimitiveTypeBefore.1.kt | 3 ++ ...angeJavaMethodWithPrimitiveTypeBefore.java | 3 ++ .../ChangeJavaMethodWithRawTypeAfter.1.kt | 15 ++++++++ .../ChangeJavaMethodWithRawTypeAfter.java | 5 +++ .../ChangeJavaMethodWithRawTypeBefore.1.kt | 15 ++++++++ .../ChangeJavaMethodWithRawTypeBefore.java | 5 +++ 30 files changed, 313 insertions(+), 10 deletions(-) create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodAfter.1.kt create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodAfter.java create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodBefore.1.kt create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodBefore.java create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithBoxedTypeAfter.1.kt create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithBoxedTypeAfter.java create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithBoxedTypeBefore.1.kt create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithBoxedTypeBefore.java create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableType1After.1.kt create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableType1After.java create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableType1Before.1.kt create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableType1Before.java create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableTypeAfter.1.kt create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableTypeAfter.java create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableTypeBefore.1.kt create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableTypeBefore.java create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithNestedFlexibleTypeAfter.1.kt create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithNestedFlexibleTypeAfter.java create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithNestedFlexibleTypeBefore.1.kt create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithNestedFlexibleTypeBefore.java create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithPrimitiveTypeAfter.1.kt create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithPrimitiveTypeAfter.java create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithPrimitiveTypeBefore.1.kt create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithPrimitiveTypeBefore.java create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithRawTypeAfter.1.kt create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithRawTypeAfter.java create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithRawTypeBefore.1.kt create mode 100644 plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithRawTypeBefore.java diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinParameterInfo.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinParameterInfo.kt index 24f1d1e0dab0..994966cd9685 100644 --- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinParameterInfo.kt +++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinParameterInfo.kt @@ -28,10 +28,11 @@ import org.jetbrains.kotlin.resolve.calls.components.isVararg import org.jetbrains.kotlin.resolve.descriptorUtil.isAnnotationConstructor import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver -import org.jetbrains.kotlin.types.FlexibleType +import org.jetbrains.kotlin.types.AbstractTypeChecker +import org.jetbrains.kotlin.types.AbstractTypeCheckerContext +import org.jetbrains.kotlin.types.TypeConstructor +import org.jetbrains.kotlin.types.checker.ClassicTypeCheckerContext import org.jetbrains.kotlin.types.isError -import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf -import org.jetbrains.kotlin.utils.addToStdlib.safeAs class KotlinParameterInfo( val callableDescriptor: CallableDescriptor, @@ -86,12 +87,11 @@ class KotlinParameterInfo( if (parameter.isVararg) return defaultRendering val parameterType = parameter.type if (parameterType.isError) return defaultRendering - val typeToRender = parameterType.safeAs()?.let { flexibleType -> - val originalType = inheritedCallable.originalCallableDescriptor.valueParameters.getOrNull(originalIndex)?.type - if (originalType?.isSubtypeOf(flexibleType.upperBound) == true && flexibleType.lowerBound.isSubtypeOf(originalType)) - originalType - else - null + + val originalType = inheritedCallable.originalCallableDescriptor.valueParameters.getOrNull(originalIndex)?.type + val typeToRender = originalType?.takeIf { + val checker = OverridingTypeCheckerContext.createChecker(inheritedCallable.originalCallableDescriptor, currentBaseFunction) + AbstractTypeChecker.equalTypes(checker as AbstractTypeCheckerContext, originalType.unwrap(), parameterType.unwrap()) } ?: parameterType return typeToRender.renderTypeWithSubstitution(typeSubstitutor, defaultRendering, true) @@ -259,3 +259,20 @@ private fun defaultValOrVar(callableDescriptor: CallableDescriptor): KotlinValVa KotlinValVar.Val else KotlinValVar.None + +private class OverridingTypeCheckerContext(private val matchingTypeConstructors: Map) : + ClassicTypeCheckerContext(errorTypeEqualsToAnything = true) { + override fun areEqualTypeConstructors(a: TypeConstructor, b: TypeConstructor): Boolean = super.areEqualTypeConstructors(a, b) || run { + val img1 = matchingTypeConstructors[a] + val img2 = matchingTypeConstructors[b] + img1 != null && img1 == b || img2 != null && img2 == a + } + + companion object { + fun createChecker(superDescriptor: CallableDescriptor, subDescriptor: CallableDescriptor): OverridingTypeCheckerContext { + return OverridingTypeCheckerContext(subDescriptor.typeParameters.zip(superDescriptor.typeParameters).associate { + it.first.typeConstructor to it.second.typeConstructor + }) + } + } +} diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureTest.kt b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureTest.kt index 8d739faa9928..988d52713202 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureTest.kt +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * 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. */ @@ -591,6 +591,34 @@ class KotlinChangeSignatureTest : KotlinLightCodeInsightFixtureTestCase() { } } + fun testChangeJavaMethod() { + doJavaTest { newParameters.add(ParameterInfoImpl(-1, "i", PsiType.INT)) } + } + + fun testChangeJavaMethodWithPrimitiveType() { + doJavaTest { newParameters.add(ParameterInfoImpl(-1, "s", stringPsiType)) } + } + + fun testChangeJavaMethodWithBoxedType() { + doJavaTest { newParameters.add(ParameterInfoImpl(-1, "s", stringPsiType)) } + } + + fun testChangeJavaMethodWithFlexibleMutableType() { + doJavaTest { newParameters.add(ParameterInfoImpl(-1, "s", stringPsiType)) } + } + + fun testChangeJavaMethodWithNestedFlexibleType() { + doJavaTest { newParameters.add(ParameterInfoImpl(-1, "i", PsiType.INT)) } + } + + fun testChangeJavaMethodWithFlexibleMutableType1() { + doJavaTest { newParameters.add(ParameterInfoImpl(-1, "s", stringPsiType)) } + } + + fun testChangeJavaMethodWithRawType() { + doJavaTest { newParameters.add(ParameterInfoImpl(-1, "i", PsiType.INT)) } + } + fun testSimpleFlexibleType() { doJavaTest { newParameters.add(ParameterInfoImpl(-1, "integer", PsiType.INT)) } } diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodAfter.1.kt b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodAfter.1.kt new file mode 100644 index 000000000000..42142b5bb516 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodAfter.1.kt @@ -0,0 +1,3 @@ +class KOne : MyJavaClass() { + override fun meth(s: String, i: Int) = Unit +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodAfter.java b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodAfter.java new file mode 100644 index 000000000000..bb47234b5103 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodAfter.java @@ -0,0 +1,3 @@ +abstract public class MyJavaClass { + public abstract void meth(String s, int i); +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodBefore.1.kt b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodBefore.1.kt new file mode 100644 index 000000000000..2176ebb2135f --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodBefore.1.kt @@ -0,0 +1,3 @@ +class KOne : MyJavaClass() { + override fun meth(s: String) = Unit +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodBefore.java b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodBefore.java new file mode 100644 index 000000000000..50b5b306552c --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodBefore.java @@ -0,0 +1,3 @@ +abstract public class MyJavaClass { + public abstract void meth(String s); +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithBoxedTypeAfter.1.kt b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithBoxedTypeAfter.1.kt new file mode 100644 index 000000000000..fbc480f0bdde --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithBoxedTypeAfter.1.kt @@ -0,0 +1,7 @@ +class KOne : MyJavaClass() { + override fun meth(i: Int, s: String) = Unit +} + +class KTwo : MyJavaClass() { + override fun meth(i: Int?, s: String) = Unit +} diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithBoxedTypeAfter.java b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithBoxedTypeAfter.java new file mode 100644 index 000000000000..1ca8a4f58128 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithBoxedTypeAfter.java @@ -0,0 +1,3 @@ +abstract public class MyJavaClass { + public abstract void meth(Integer i, String s); +} diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithBoxedTypeBefore.1.kt b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithBoxedTypeBefore.1.kt new file mode 100644 index 000000000000..fa06f1174c6c --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithBoxedTypeBefore.1.kt @@ -0,0 +1,7 @@ +class KOne : MyJavaClass() { + override fun meth(i: Int) = Unit +} + +class KTwo : MyJavaClass() { + override fun meth(i: Int?) = Unit +} diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithBoxedTypeBefore.java b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithBoxedTypeBefore.java new file mode 100644 index 000000000000..fcbf9be9243a --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithBoxedTypeBefore.java @@ -0,0 +1,3 @@ +abstract public class MyJavaClass { + public abstract void meth(Integer i); +} diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableType1After.1.kt b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableType1After.1.kt new file mode 100644 index 000000000000..aa6023fe7cbe --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableType1After.1.kt @@ -0,0 +1,31 @@ +class K1 : MyJavaClass() { + override fun meth(c: Collection?, s: String) = Unit +} + +class K2 : MyJavaClass() { + override fun meth(c: Collection, s: String) = Unit +} + +class K3 : MyJavaClass() { + override fun meth(c: MutableCollection?, s: String) = Unit +} + +class K4 : MyJavaClass() { + override fun meth(c: MutableCollection, s: String) = Unit +} + +class K5 : MyJavaClass() { + override fun meth(c: Collection?, s: String) = Unit +} + +class K6 : MyJavaClass() { + override fun meth(c: Collection, s: String) = Unit +} + +class K7 : MyJavaClass() { + override fun meth(c: MutableCollection?, s: String) = Unit +} + +class K8 : MyJavaClass() { + override fun meth(c: MutableCollection, s: String) = Unit +} diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableType1After.java b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableType1After.java new file mode 100644 index 000000000000..8a86253bd84b --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableType1After.java @@ -0,0 +1,5 @@ +import java.util.Collection; + +abstract public class MyJavaClass { + public abstract void meth(Collection c, String s); +} diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableType1Before.1.kt b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableType1Before.1.kt new file mode 100644 index 000000000000..b4a2f282784b --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableType1Before.1.kt @@ -0,0 +1,31 @@ +class K1 : MyJavaClass() { + override fun meth(c: Collection?) = Unit +} + +class K2 : MyJavaClass() { + override fun meth(c: Collection) = Unit +} + +class K3 : MyJavaClass() { + override fun meth(c: MutableCollection?) = Unit +} + +class K4 : MyJavaClass() { + override fun meth(c: MutableCollection) = Unit +} + +class K5 : MyJavaClass() { + override fun meth(c: Collection?) = Unit +} + +class K6 : MyJavaClass() { + override fun meth(c: Collection) = Unit +} + +class K7 : MyJavaClass() { + override fun meth(c: MutableCollection?) = Unit +} + +class K8 : MyJavaClass() { + override fun meth(c: MutableCollection) = Unit +} diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableType1Before.java b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableType1Before.java new file mode 100644 index 000000000000..4a153ddcc5ca --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableType1Before.java @@ -0,0 +1,5 @@ +import java.util.Collection; + +abstract public class MyJavaClass { + public abstract void meth(Collection c); +} diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableTypeAfter.1.kt b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableTypeAfter.1.kt new file mode 100644 index 000000000000..9f9b91b0c90d --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableTypeAfter.1.kt @@ -0,0 +1,31 @@ +class K1 : MyJavaClass() { + override fun meth(c: Collection?, s: String) = Unit +} + +class K2 : MyJavaClass() { + override fun meth(c: Collection, s: String) = Unit +} + +class K3 : MyJavaClass() { + override fun meth(c: MutableCollection?, s: String) = Unit +} + +class K4 : MyJavaClass() { + override fun meth(c: MutableCollection, s: String) = Unit +} + +class K5 : MyJavaClass() { + override fun meth(c: Collection?, s: String) = Unit +} + +class K6 : MyJavaClass() { + override fun meth(c: Collection, s: String) = Unit +} + +class K7 : MyJavaClass() { + override fun meth(c: MutableCollection?, s: String) = Unit +} + +class K8 : MyJavaClass() { + override fun meth(c: MutableCollection, s: String) = Unit +} diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableTypeAfter.java b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableTypeAfter.java new file mode 100644 index 000000000000..8bf9eb9d5407 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableTypeAfter.java @@ -0,0 +1,5 @@ +import java.util.Collection; + +abstract public class MyJavaClass { + public abstract void meth(Collection c, String s); +} diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableTypeBefore.1.kt b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableTypeBefore.1.kt new file mode 100644 index 000000000000..441f79a26201 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableTypeBefore.1.kt @@ -0,0 +1,31 @@ +class K1 : MyJavaClass() { + override fun meth(c: Collection?) = Unit +} + +class K2 : MyJavaClass() { + override fun meth(c: Collection) = Unit +} + +class K3 : MyJavaClass() { + override fun meth(c: MutableCollection?) = Unit +} + +class K4 : MyJavaClass() { + override fun meth(c: MutableCollection) = Unit +} + +class K5 : MyJavaClass() { + override fun meth(c: Collection?) = Unit +} + +class K6 : MyJavaClass() { + override fun meth(c: Collection) = Unit +} + +class K7 : MyJavaClass() { + override fun meth(c: MutableCollection?) = Unit +} + +class K8 : MyJavaClass() { + override fun meth(c: MutableCollection) = Unit +} diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableTypeBefore.java b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableTypeBefore.java new file mode 100644 index 000000000000..413181e903f3 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithFlexibleMutableTypeBefore.java @@ -0,0 +1,5 @@ +import java.util.Collection; + +abstract public class MyJavaClass { + public abstract void meth(Collection c); +} diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithNestedFlexibleTypeAfter.1.kt b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithNestedFlexibleTypeAfter.1.kt new file mode 100644 index 000000000000..b57d8cd235e8 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithNestedFlexibleTypeAfter.1.kt @@ -0,0 +1,7 @@ +class K1 : MyJavaCLass() { + override fun coll(c: Collection, i: Int) = Unit +} + +class K2 : MyJavaCLass() { + override fun coll(c: Collection, i: Int) = Unit +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithNestedFlexibleTypeAfter.java b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithNestedFlexibleTypeAfter.java new file mode 100644 index 000000000000..513627e0a437 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithNestedFlexibleTypeAfter.java @@ -0,0 +1,8 @@ +import kotlin.annotations.jvm.ReadOnly; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; + +abstract public class MyJavaCLass { + public abstract void coll(@ReadOnly @NotNull Collection c, int i); +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithNestedFlexibleTypeBefore.1.kt b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithNestedFlexibleTypeBefore.1.kt new file mode 100644 index 000000000000..dcfe9e32bd60 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithNestedFlexibleTypeBefore.1.kt @@ -0,0 +1,7 @@ +class K1 : MyJavaCLass() { + override fun coll(c: Collection) = Unit +} + +class K2 : MyJavaCLass() { + override fun coll(c: Collection) = Unit +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithNestedFlexibleTypeBefore.java b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithNestedFlexibleTypeBefore.java new file mode 100644 index 000000000000..d336cd160638 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithNestedFlexibleTypeBefore.java @@ -0,0 +1,8 @@ +import kotlin.annotations.jvm.ReadOnly; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; + +abstract public class MyJavaCLass { + public abstract void coll(@ReadOnly @NotNull Collection c); +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithPrimitiveTypeAfter.1.kt b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithPrimitiveTypeAfter.1.kt new file mode 100644 index 000000000000..618f04d46f47 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithPrimitiveTypeAfter.1.kt @@ -0,0 +1,3 @@ +class KOne : MyJavaClass() { + override fun meth(i: Int, s: String) = Unit +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithPrimitiveTypeAfter.java b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithPrimitiveTypeAfter.java new file mode 100644 index 000000000000..b2e3296b71c0 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithPrimitiveTypeAfter.java @@ -0,0 +1,3 @@ +abstract public class MyJavaClass { + public abstract void meth(int i, String s); +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithPrimitiveTypeBefore.1.kt b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithPrimitiveTypeBefore.1.kt new file mode 100644 index 000000000000..308c6c07bbd3 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithPrimitiveTypeBefore.1.kt @@ -0,0 +1,3 @@ +class KOne : MyJavaClass() { + override fun meth(i: Int) = Unit +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithPrimitiveTypeBefore.java b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithPrimitiveTypeBefore.java new file mode 100644 index 000000000000..6ecb8b7bacd5 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithPrimitiveTypeBefore.java @@ -0,0 +1,3 @@ +abstract public class MyJavaClass { + public abstract void meth(int i); +} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithRawTypeAfter.1.kt b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithRawTypeAfter.1.kt new file mode 100644 index 000000000000..68e4c4e58288 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithRawTypeAfter.1.kt @@ -0,0 +1,15 @@ +class K1 : MyJavaClass() { + override fun coll(c: Collection?, i: Int) = Unit +} + +class K2 : MyJavaClass() { + override fun coll(c: Collection, i: Int) = Unit +} + +class K3 : MyJavaClass() { + override fun coll(c: MutableCollection, i: Int) = Unit +} + +class K4 : MyJavaClass() { + override fun coll(c: MutableCollection?, i: Int) = Unit +} diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithRawTypeAfter.java b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithRawTypeAfter.java new file mode 100644 index 000000000000..fd3c390c5257 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithRawTypeAfter.java @@ -0,0 +1,5 @@ +import java.util.Collection; + +abstract public class MyJavaClass { + public abstract void coll(Collection c, int i); +} diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithRawTypeBefore.1.kt b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithRawTypeBefore.1.kt new file mode 100644 index 000000000000..7c074508750c --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithRawTypeBefore.1.kt @@ -0,0 +1,15 @@ +class K1 : MyJavaClass() { + override fun coll(c: Collection?) = Unit +} + +class K2 : MyJavaClass() { + override fun coll(c: Collection) = Unit +} + +class K3 : MyJavaClass() { + override fun coll(c: MutableCollection) = Unit +} + +class K4 : MyJavaClass() { + override fun coll(c: MutableCollection?) = Unit +} diff --git a/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithRawTypeBefore.java b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithRawTypeBefore.java new file mode 100644 index 000000000000..b31f1c19fe4e --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/refactoring/changeSignature/ChangeJavaMethodWithRawTypeBefore.java @@ -0,0 +1,5 @@ +import java.util.Collection; + +abstract public class MyJavaClass { + public abstract void coll(Collection c); +}