From 5e223927ea3cd3e12b94b6cc8a176998c1ccb137 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Tue, 27 Oct 2015 21:25:09 +0300 Subject: [PATCH] Change Signature: Match calls of different overloads generated due to @JvmOverloads annotation #KT-9020 Fixed --- .../org/jetbrains/kotlin/utils/collections.kt | 5 + .../changeSignature/JetChangeInfo.kt | 125 +++++++++++++++--- .../JetChangeSignatureUsageProcessor.kt | 12 +- .../changeSignature/JetParameterInfo.kt | 2 +- .../JvmOverloadedAddDefault1After.1.java | 17 +++ .../JvmOverloadedAddDefault1After.kt | 6 + .../JvmOverloadedAddDefault1Before.1.java | 17 +++ .../JvmOverloadedAddDefault1Before.kt | 6 + .../JvmOverloadedAddDefault2After.1.java | 17 +++ .../JvmOverloadedAddDefault2After.kt | 6 + .../JvmOverloadedAddDefault2Before.1.java | 17 +++ .../JvmOverloadedAddDefault2Before.kt | 6 + .../JvmOverloadedAddDefault3After.1.java | 17 +++ .../JvmOverloadedAddDefault3After.kt | 6 + .../JvmOverloadedAddDefault3Before.1.java | 17 +++ .../JvmOverloadedAddDefault3Before.kt | 6 + .../JvmOverloadedAddNonDefault1After.1.java | 17 +++ .../JvmOverloadedAddNonDefault1After.kt | 6 + .../JvmOverloadedAddNonDefault1Before.1.java | 17 +++ .../JvmOverloadedAddNonDefault1Before.kt | 6 + .../JvmOverloadedAddNonDefault2After.1.java | 17 +++ .../JvmOverloadedAddNonDefault2After.kt | 6 + .../JvmOverloadedAddNonDefault2Before.1.java | 17 +++ .../JvmOverloadedAddNonDefault2Before.kt | 6 + .../JvmOverloadedAddNonDefault3After.1.java | 17 +++ .../JvmOverloadedAddNonDefault3After.kt | 6 + .../JvmOverloadedAddNonDefault3Before.1.java | 17 +++ .../JvmOverloadedAddNonDefault3Before.kt | 6 + ...verloadedConstructorSwapParamsAfter.1.java | 17 +++ ...JvmOverloadedConstructorSwapParamsAfter.kt | 5 + ...erloadedConstructorSwapParamsBefore.1.java | 17 +++ ...vmOverloadedConstructorSwapParamsBefore.kt | 5 + .../JvmOverloadedRemoveDefault1After.1.java | 17 +++ .../JvmOverloadedRemoveDefault1After.kt | 6 + .../JvmOverloadedRemoveDefault1Before.1.java | 17 +++ .../JvmOverloadedRemoveDefault1Before.kt | 6 + .../JvmOverloadedRemoveDefault2After.1.java | 17 +++ .../JvmOverloadedRemoveDefault2After.kt | 6 + .../JvmOverloadedRemoveDefault2Before.1.java | 17 +++ .../JvmOverloadedRemoveDefault2Before.kt | 6 + .../JvmOverloadedRemoveDefault3After.1.java | 17 +++ .../JvmOverloadedRemoveDefault3After.kt | 6 + .../JvmOverloadedRemoveDefault3Before.1.java | 17 +++ .../JvmOverloadedRemoveDefault3Before.kt | 6 + ...JvmOverloadedRemoveNonDefault1After.1.java | 13 ++ .../JvmOverloadedRemoveNonDefault1After.kt | 6 + ...vmOverloadedRemoveNonDefault1Before.1.java | 13 ++ .../JvmOverloadedRemoveNonDefault1Before.kt | 6 + ...JvmOverloadedRemoveNonDefault2After.1.java | 13 ++ .../JvmOverloadedRemoveNonDefault2After.kt | 6 + ...vmOverloadedRemoveNonDefault2Before.1.java | 13 ++ .../JvmOverloadedRemoveNonDefault2Before.kt | 6 + ...JvmOverloadedRemoveNonDefault3After.1.java | 13 ++ .../JvmOverloadedRemoveNonDefault3After.kt | 6 + ...vmOverloadedRemoveNonDefault3Before.1.java | 13 ++ .../JvmOverloadedRemoveNonDefault3Before.kt | 6 + .../JvmOverloadedSwapParams1After.1.java | 17 +++ .../JvmOverloadedSwapParams1After.kt | 10 ++ .../JvmOverloadedSwapParams1Before.1.java | 17 +++ .../JvmOverloadedSwapParams1Before.kt | 10 ++ .../JvmOverloadedSwapParams2After.1.java | 13 ++ .../JvmOverloadedSwapParams2After.kt | 10 ++ .../JvmOverloadedSwapParams2Before.1.java | 13 ++ .../JvmOverloadedSwapParams2Before.kt | 10 ++ .../JetChangeSignatureTest.java | 90 +++++++++++++ 65 files changed, 880 insertions(+), 26 deletions(-) create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault1After.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault1After.kt create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault1Before.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault1Before.kt create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault2After.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault2After.kt create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault2Before.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault2Before.kt create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault3After.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault3After.kt create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault3Before.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault3Before.kt create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault1After.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault1After.kt create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault1Before.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault1Before.kt create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault2After.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault2After.kt create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault2Before.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault2Before.kt create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault3After.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault3After.kt create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault3Before.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault3Before.kt create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedConstructorSwapParamsAfter.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedConstructorSwapParamsAfter.kt create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedConstructorSwapParamsBefore.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedConstructorSwapParamsBefore.kt create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault1After.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault1After.kt create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault1Before.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault1Before.kt create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault2After.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault2After.kt create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault2Before.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault2Before.kt create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault3After.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault3After.kt create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault3Before.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault3Before.kt create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault1After.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault1After.kt create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault1Before.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault1Before.kt create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault2After.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault2After.kt create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault2Before.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault2Before.kt create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault3After.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault3After.kt create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault3Before.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault3Before.kt create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams1After.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams1After.kt create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams1Before.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams1Before.kt create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams2After.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams2After.kt create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams2Before.1.java create mode 100644 idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams2Before.kt diff --git a/core/util.runtime/src/org/jetbrains/kotlin/utils/collections.kt b/core/util.runtime/src/org/jetbrains/kotlin/utils/collections.kt index e8623750942..b0c6668c87f 100644 --- a/core/util.runtime/src/org/jetbrains/kotlin/utils/collections.kt +++ b/core/util.runtime/src/org/jetbrains/kotlin/utils/collections.kt @@ -108,3 +108,8 @@ public fun Collection.toReadOnlyList(): List = public fun T?.singletonOrEmptyList(): List = if (this != null) listOf(this) else emptyList() + +public fun MutableList.removeLast(condition: (T) -> Boolean): T? { + val index = indexOfLast(condition) + return if (index >= 0) removeAt(index) else null +} diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeInfo.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeInfo.kt index ba96b7d724f..11220ca682a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeInfo.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeInfo.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.asJava.toLightMethods import org.jetbrains.kotlin.asJava.unwrapped import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.CallableDescriptor +import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.idea.KotlinLanguage @@ -44,11 +45,12 @@ import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils import org.jetbrains.kotlin.resolve.DescriptorUtils +import org.jetbrains.kotlin.resolve.jvm.annotations.hasJvmOverloadsAnnotation import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.utils.addToStdlib.singletonOrEmptyList -import java.util.ArrayList -import java.util.HashMap -import java.util.LinkedHashSet +import org.jetbrains.kotlin.utils.keysToMap +import org.jetbrains.kotlin.utils.removeLast +import java.util.* public open class JetChangeInfo( val methodDescriptor: JetMethodDescriptor, @@ -60,7 +62,17 @@ public open class JetChangeInfo( receiver: JetParameterInfo? = methodDescriptor.receiver, val context: PsiElement, primaryPropagationTargets: Collection = emptyList() -): ChangeInfo { +) : ChangeInfo { + private class JvmOverloadSignature( + val method: PsiMethod, + val mandatoryParams: Set, + val defaultValues: Set + ) { + fun constrainBy(other: JvmOverloadSignature): JvmOverloadSignature { + return JvmOverloadSignature(method, mandatoryParams.intersect(other.mandatoryParams), defaultValues.intersect(other.defaultValues)) + } + } + var receiverParameterInfo: JetParameterInfo? = receiver set(value: JetParameterInfo?) { if (value != null && value !in newParameters) { @@ -70,7 +82,10 @@ public open class JetChangeInfo( } private val newParameters = parameterInfos.toArrayList() - private val originalPsiMethods: List = getMethod().toLightMethods() + + private val originalPsiMethods = method.toLightMethods() + private val originalParameters = (method as? KtFunction)?.valueParameters ?: emptyList() + private val originalSignatures = makeSignatures(originalParameters, originalPsiMethods, { it }, { it.defaultValue }) private val oldNameToParameterIndex: Map by lazy { val map = HashMap() @@ -90,6 +105,8 @@ public open class JetChangeInfo( private var isPrimaryMethodUpdated: Boolean = false private var javaChangeInfos: List? = null + var originalToCurrentMethods: Map = emptyMap() + private set public fun getOldParameterIndex(oldParameterName: String): Int? = oldNameToParameterIndex[oldParameterName] @@ -114,8 +131,14 @@ public open class JetChangeInfo( newParameters.set(index, parameterInfo) } - public fun addParameter(parameterInfo: JetParameterInfo) { - newParameters.add(parameterInfo) + @JvmOverloads + public fun addParameter(parameterInfo: JetParameterInfo, atIndex: Int = -1) { + if (atIndex >= 0) { + newParameters.add(atIndex, parameterInfo) + } + else { + newParameters.add(parameterInfo) + } } public fun removeParameter(index: Int) { @@ -264,7 +287,56 @@ public open class JetChangeInfo( javaChangeInfos = null } + private fun makeSignatures( + parameters: List, + psiMethods: List, + getPsi: (Parameter) -> KtParameter, + getDefaultValue: (Parameter) -> KtExpression? + ): List { + val defaultValueCount = parameters.count { getDefaultValue(it) != null } + if (psiMethods.size != defaultValueCount + 1) return emptyList() + + val mandatoryParams = parameters.toArrayList() + val defaultValues = ArrayList() + return psiMethods.map { + JvmOverloadSignature(it, mandatoryParams.map(getPsi).toSet(), defaultValues.toSet()).apply { + val param = mandatoryParams.removeLast { getDefaultValue(it) != null } ?: return@apply + defaultValues.add(getDefaultValue(param)!!) + } + } + } + public fun getOrCreateJavaChangeInfos(): List? { + fun initCurrentSignatures(currentPsiMethods: List): List { + val parameterInfoToPsi = methodDescriptor.original.parameters.zip(originalParameters).toMap() + val dummyParameter = KtPsiFactory(method).createParameter("dummy") + return makeSignatures(newParameters, + currentPsiMethods, + { parameterInfoToPsi[it] ?: dummyParameter }, + { it.defaultValueForParameter }) + } + + fun matchOriginalAndCurrentMethods(currentPsiMethods: List): Map { + if (!(isPrimaryMethodUpdated + && originalBaseFunctionDescriptor is FunctionDescriptor + && originalBaseFunctionDescriptor.hasJvmOverloadsAnnotation())) { + return (originalPsiMethods zip currentPsiMethods).toMap() + } + + if (originalPsiMethods.isEmpty() || currentPsiMethods.isEmpty()) return emptyMap() + + currentPsiMethods.singleOrNull()?.let { method -> return originalPsiMethods.keysToMap { method } } + + val currentSignatures = initCurrentSignatures(currentPsiMethods) + return originalSignatures.toMap({ it.method }) { originalSignature -> + var constrainedCurrentSignatures = currentSignatures.map { it.constrainBy(originalSignature) } + val maxMandatoryCount = constrainedCurrentSignatures.maxBy { it.mandatoryParams.size }!!.mandatoryParams.size + constrainedCurrentSignatures = constrainedCurrentSignatures.filter { it.mandatoryParams.size == maxMandatoryCount } + val maxDefaultCount = constrainedCurrentSignatures.maxBy { it.defaultValues.size }!!.defaultValues.size + constrainedCurrentSignatures.last { it.defaultValues.size == maxDefaultCount }.method + } + } + /* * When primaryMethodUpdated is false, changes to the primary Kotlin declaration are already confirmed, but not yet applied. * It means that originalPsiMethod has already expired, but new one can't be created until Kotlin declaration is updated @@ -309,12 +381,27 @@ public open class JetChangeInfo( currentPsiMethod: PsiMethod, newParameterList: List ): MutableList { + val defaultValuesToSkip = newParameterList.size - currentPsiMethod.parameterList.parametersCount + val defaultValuesToRetain = newParameterList.count { it.defaultValueForParameter != null } - defaultValuesToSkip + val oldIndices = newParameterList.map { it.oldIndex }.toIntArray() + + // TODO: Ugly code, need to refactor Change Signature data model + var defaultValuesRemained = defaultValuesToRetain + for (param in newParameterList) { + if (param.isNewParameter || param.defaultValueForParameter == null || defaultValuesRemained-- > 0) continue + newParameterList.withIndex().filter { it.value.oldIndex >= param.oldIndex }.forEach { oldIndices[it.index]-- } + } + + defaultValuesRemained = defaultValuesToRetain val oldParameterCount = originalPsiMethod.parameterList.parametersCount + var indexInCurrentPsiMethod = 0 return newParameterList.withIndex() .map { pair -> val (i, info) = pair - val oldIndex = info.oldIndex + if (info.defaultValueForParameter != null && defaultValuesRemained-- <= 0) return@map null + + val oldIndex = oldIndices[i] val javaOldIndex = when { methodDescriptor.receiver == null -> oldIndex info == methodDescriptor.receiver -> 0 @@ -324,11 +411,12 @@ public open class JetChangeInfo( if (javaOldIndex >= oldParameterCount) return@map null val type = if (isPrimaryMethodUpdated) - currentPsiMethod.getParameterList().getParameters()[i].getType() + currentPsiMethod.getParameterList().getParameters()[indexInCurrentPsiMethod++].getType() else PsiType.VOID - ParameterInfoImpl(javaOldIndex, info.getName(), type, info.defaultValueForCall?.getText() ?: "") + val defaultValue = info.defaultValueForCall ?: info.defaultValueForParameter + ParameterInfoImpl(javaOldIndex, info.getName(), type, defaultValue?.getText() ?: "") } .filterNotNullTo(ArrayList()) } @@ -364,7 +452,8 @@ public open class JetChangeInfo( if (javaChangeInfos == null) { val method = getMethod() - javaChangeInfos = (originalPsiMethods zip method.toLightMethods()).map { + originalToCurrentMethods = matchOriginalAndCurrentMethods(method.toLightMethods()) + javaChangeInfos = originalToCurrentMethods.entries.map { val (originalPsiMethod, currentPsiMethod) = it when (method) { @@ -439,11 +528,11 @@ public fun ChangeInfo.toJetChangeInfo(originalChangeSignatureDescriptor: JetMeth val returnTypeText = if (returnType != null) IdeDescriptorRenderers.SOURCE_CODE.renderType(returnType) else "" return JetChangeInfo(originalChangeSignatureDescriptor, - getNewName(), - returnType, - returnTypeText, - functionDescriptor.getVisibility(), - newParameters, - null, - method) + getNewName(), + returnType, + returnTypeText, + functionDescriptor.getVisibility(), + newParameters, + null, + method) } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureUsageProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureUsageProcessor.kt index 3d4deba1a3f..dcdde15bbd8 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureUsageProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureUsageProcessor.kt @@ -800,14 +800,12 @@ class JetChangeSignatureUsageProcessor : ChangeSignatureUsageProcessor { val javaChangeInfos = (changeInfo as JetChangeInfo).getOrCreateJavaChangeInfos() assert(javaChangeInfos != null) { "JavaChangeInfo not found: " + method.text } - val javaUsageInfos = usageInfo.javaUsageInfos - val processors = ChangeSignatureUsageProcessor.EP_NAME.extensions - - for (javaChangeInfo in javaChangeInfos!!) { - // Match names so that getter/setter usages are not confused with each other - if (javaChangeInfo.oldName != usageInfo.javaChangeInfo.oldName) continue - + javaChangeInfos!!.firstOrNull { + changeInfo.originalToCurrentMethods[usageInfo.javaChangeInfo.method] == it.method + }?.let { javaChangeInfo -> val nullabilityPropagator = NullabilityPropagator(javaChangeInfo.method) + val javaUsageInfos = usageInfo.javaUsageInfos + val processors = ChangeSignatureUsageProcessor.EP_NAME.extensions for (usage in javaUsageInfos) { if (isOverriderOrCaller(usage) && beforeMethodChange) continue diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetParameterInfo.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetParameterInfo.kt index a9ed1407e43..44b85417256 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetParameterInfo.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetParameterInfo.kt @@ -37,7 +37,7 @@ import org.jetbrains.kotlin.resolve.scopes.receivers.ThisReceiver import org.jetbrains.kotlin.types.KotlinType import java.util.* -public class JetParameterInfo( +public class JetParameterInfo @JvmOverloads constructor ( val callableDescriptor: CallableDescriptor, val originalIndex: Int = -1, private var name: String, diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault1After.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault1After.1.java new file mode 100644 index 00000000000..c17ebae92f9 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault1After.1.java @@ -0,0 +1,17 @@ +class Usages { + void foo() { + Foo.foo(); + } + + void fooX() { + Foo.foo(2, 1); + } + + void fooXY() { + Foo.foo(2, 1, 1.0); + } + + void fooXYZ() { + Foo.foo(2, 1, 1.0, "1"); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault1After.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault1After.kt new file mode 100644 index 00000000000..5e93ad1b03e --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault1After.kt @@ -0,0 +1,6 @@ +@file:JvmName("Foo") + +@JvmOverloads +fun foo(n: Int = 2, x: Int = 0, y: Double = 0.0, z: String = "0") { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault1Before.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault1Before.1.java new file mode 100644 index 00000000000..44646bf2426 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault1Before.1.java @@ -0,0 +1,17 @@ +class Usages { + void foo() { + Foo.foo(); + } + + void fooX() { + Foo.foo(1); + } + + void fooXY() { + Foo.foo(1, 1.0); + } + + void fooXYZ() { + Foo.foo(1, 1.0, "1"); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault1Before.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault1Before.kt new file mode 100644 index 00000000000..cf49bd4c8b9 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault1Before.kt @@ -0,0 +1,6 @@ +@file:JvmName("Foo") + +@JvmOverloads +fun foo(x: Int = 0, y: Double = 0.0, z: String = "0") { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault2After.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault2After.1.java new file mode 100644 index 00000000000..3689872d046 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault2After.1.java @@ -0,0 +1,17 @@ +class Usages { + void foo() { + Foo.foo(); + } + + void fooX() { + Foo.foo(1); + } + + void fooXY() { + Foo.foo(1, 2, 1.0); + } + + void fooXYZ() { + Foo.foo(1, 2, 1.0, "1"); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault2After.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault2After.kt new file mode 100644 index 00000000000..ef419ec6bbd --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault2After.kt @@ -0,0 +1,6 @@ +@file:JvmName("Foo") + +@JvmOverloads +fun foo(x: Int = 0, n: Int = 2, y: Double = 0.0, z: String = "0") { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault2Before.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault2Before.1.java new file mode 100644 index 00000000000..44646bf2426 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault2Before.1.java @@ -0,0 +1,17 @@ +class Usages { + void foo() { + Foo.foo(); + } + + void fooX() { + Foo.foo(1); + } + + void fooXY() { + Foo.foo(1, 1.0); + } + + void fooXYZ() { + Foo.foo(1, 1.0, "1"); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault2Before.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault2Before.kt new file mode 100644 index 00000000000..cf49bd4c8b9 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault2Before.kt @@ -0,0 +1,6 @@ +@file:JvmName("Foo") + +@JvmOverloads +fun foo(x: Int = 0, y: Double = 0.0, z: String = "0") { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault3After.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault3After.1.java new file mode 100644 index 00000000000..44646bf2426 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault3After.1.java @@ -0,0 +1,17 @@ +class Usages { + void foo() { + Foo.foo(); + } + + void fooX() { + Foo.foo(1); + } + + void fooXY() { + Foo.foo(1, 1.0); + } + + void fooXYZ() { + Foo.foo(1, 1.0, "1"); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault3After.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault3After.kt new file mode 100644 index 00000000000..80b7d8d3081 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault3After.kt @@ -0,0 +1,6 @@ +@file:JvmName("Foo") + +@JvmOverloads +fun foo(x: Int = 0, y: Double = 0.0, z: String = "0", n: Int = 2) { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault3Before.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault3Before.1.java new file mode 100644 index 00000000000..44646bf2426 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault3Before.1.java @@ -0,0 +1,17 @@ +class Usages { + void foo() { + Foo.foo(); + } + + void fooX() { + Foo.foo(1); + } + + void fooXY() { + Foo.foo(1, 1.0); + } + + void fooXYZ() { + Foo.foo(1, 1.0, "1"); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault3Before.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault3Before.kt new file mode 100644 index 00000000000..cf49bd4c8b9 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedAddDefault3Before.kt @@ -0,0 +1,6 @@ +@file:JvmName("Foo") + +@JvmOverloads +fun foo(x: Int = 0, y: Double = 0.0, z: String = "0") { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault1After.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault1After.1.java new file mode 100644 index 00000000000..e6e09538ee1 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault1After.1.java @@ -0,0 +1,17 @@ +class Usages { + void foo() { + Foo.foo(2); + } + + void fooX() { + Foo.foo(2, 1); + } + + void fooXY() { + Foo.foo(2, 1, 1.0); + } + + void fooXYZ() { + Foo.foo(2, 1, 1.0, "1"); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault1After.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault1After.kt new file mode 100644 index 00000000000..c6a26c0827a --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault1After.kt @@ -0,0 +1,6 @@ +@file:JvmName("Foo") + +@JvmOverloads +fun foo(n: Int, x: Int = 0, y: Double = 0.0, z: String = "0") { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault1Before.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault1Before.1.java new file mode 100644 index 00000000000..44646bf2426 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault1Before.1.java @@ -0,0 +1,17 @@ +class Usages { + void foo() { + Foo.foo(); + } + + void fooX() { + Foo.foo(1); + } + + void fooXY() { + Foo.foo(1, 1.0); + } + + void fooXYZ() { + Foo.foo(1, 1.0, "1"); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault1Before.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault1Before.kt new file mode 100644 index 00000000000..cf49bd4c8b9 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault1Before.kt @@ -0,0 +1,6 @@ +@file:JvmName("Foo") + +@JvmOverloads +fun foo(x: Int = 0, y: Double = 0.0, z: String = "0") { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault2After.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault2After.1.java new file mode 100644 index 00000000000..f274fd7616f --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault2After.1.java @@ -0,0 +1,17 @@ +class Usages { + void foo() { + Foo.foo(2); + } + + void fooX() { + Foo.foo(1, 2); + } + + void fooXY() { + Foo.foo(1, 2, 1.0); + } + + void fooXYZ() { + Foo.foo(1, 2, 1.0, "1"); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault2After.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault2After.kt new file mode 100644 index 00000000000..37c97c37236 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault2After.kt @@ -0,0 +1,6 @@ +@file:JvmName("Foo") + +@JvmOverloads +fun foo(x: Int = 0, n: Int, y: Double = 0.0, z: String = "0") { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault2Before.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault2Before.1.java new file mode 100644 index 00000000000..44646bf2426 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault2Before.1.java @@ -0,0 +1,17 @@ +class Usages { + void foo() { + Foo.foo(); + } + + void fooX() { + Foo.foo(1); + } + + void fooXY() { + Foo.foo(1, 1.0); + } + + void fooXYZ() { + Foo.foo(1, 1.0, "1"); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault2Before.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault2Before.kt new file mode 100644 index 00000000000..cf49bd4c8b9 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault2Before.kt @@ -0,0 +1,6 @@ +@file:JvmName("Foo") + +@JvmOverloads +fun foo(x: Int = 0, y: Double = 0.0, z: String = "0") { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault3After.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault3After.1.java new file mode 100644 index 00000000000..58b5ebb52dd --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault3After.1.java @@ -0,0 +1,17 @@ +class Usages { + void foo() { + Foo.foo(2); + } + + void fooX() { + Foo.foo(1, 2); + } + + void fooXY() { + Foo.foo(1, 1.0, 2); + } + + void fooXYZ() { + Foo.foo(1, 1.0, "1", 2); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault3After.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault3After.kt new file mode 100644 index 00000000000..0abb78dce08 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault3After.kt @@ -0,0 +1,6 @@ +@file:JvmName("Foo") + +@JvmOverloads +fun foo(x: Int = 0, y: Double = 0.0, z: String = "0", n: Int) { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault3Before.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault3Before.1.java new file mode 100644 index 00000000000..44646bf2426 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault3Before.1.java @@ -0,0 +1,17 @@ +class Usages { + void foo() { + Foo.foo(); + } + + void fooX() { + Foo.foo(1); + } + + void fooXY() { + Foo.foo(1, 1.0); + } + + void fooXYZ() { + Foo.foo(1, 1.0, "1"); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault3Before.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault3Before.kt new file mode 100644 index 00000000000..cf49bd4c8b9 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedAddNonDefault3Before.kt @@ -0,0 +1,6 @@ +@file:JvmName("Foo") + +@JvmOverloads +fun foo(x: Int = 0, y: Double = 0.0, z: String = "0") { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedConstructorSwapParamsAfter.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedConstructorSwapParamsAfter.1.java new file mode 100644 index 00000000000..e65215cb419 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedConstructorSwapParamsAfter.1.java @@ -0,0 +1,17 @@ +class Usages { + void foo() { + new A(); + } + + void fooX() { + new A(1); + } + + void fooXY() { + new A(1, "0", 1.0); + } + + void fooXYZ() { + new A(1, "1", 1.0); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedConstructorSwapParamsAfter.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedConstructorSwapParamsAfter.kt new file mode 100644 index 00000000000..8e30d2b71ca --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedConstructorSwapParamsAfter.kt @@ -0,0 +1,5 @@ +public class A @JvmOverloads constructor( + public val x: Int = 0, + public val z: String = "0", + public val y: Double = 0.0 +) \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedConstructorSwapParamsBefore.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedConstructorSwapParamsBefore.1.java new file mode 100644 index 00000000000..02472daaaca --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedConstructorSwapParamsBefore.1.java @@ -0,0 +1,17 @@ +class Usages { + void foo() { + new A(); + } + + void fooX() { + new A(1); + } + + void fooXY() { + new A(1, 1.0); + } + + void fooXYZ() { + new A(1, 1.0, "1"); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedConstructorSwapParamsBefore.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedConstructorSwapParamsBefore.kt new file mode 100644 index 00000000000..d51dcc945b9 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedConstructorSwapParamsBefore.kt @@ -0,0 +1,5 @@ +public class A @JvmOverloads constructor( + public val x: Int = 0, + public val y: Double = 0.0, + public val z: String = "0" +) \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault1After.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault1After.1.java new file mode 100644 index 00000000000..47d8af998ba --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault1After.1.java @@ -0,0 +1,17 @@ +class Usages { + void foo() { + Foo.foo(); + } + + void fooX() { + Foo.foo(); + } + + void fooXY() { + Foo.foo(1.0); + } + + void fooXYZ() { + Foo.foo(1.0, "1"); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault1After.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault1After.kt new file mode 100644 index 00000000000..da2574c5595 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault1After.kt @@ -0,0 +1,6 @@ +@file:JvmName("Foo") + +@JvmOverloads +fun foo(y: Double = 0.0, z: String = "0") { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault1Before.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault1Before.1.java new file mode 100644 index 00000000000..44646bf2426 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault1Before.1.java @@ -0,0 +1,17 @@ +class Usages { + void foo() { + Foo.foo(); + } + + void fooX() { + Foo.foo(1); + } + + void fooXY() { + Foo.foo(1, 1.0); + } + + void fooXYZ() { + Foo.foo(1, 1.0, "1"); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault1Before.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault1Before.kt new file mode 100644 index 00000000000..cf49bd4c8b9 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault1Before.kt @@ -0,0 +1,6 @@ +@file:JvmName("Foo") + +@JvmOverloads +fun foo(x: Int = 0, y: Double = 0.0, z: String = "0") { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault2After.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault2After.1.java new file mode 100644 index 00000000000..bb1dc98a57d --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault2After.1.java @@ -0,0 +1,17 @@ +class Usages { + void foo() { + Foo.foo(); + } + + void fooX() { + Foo.foo(1); + } + + void fooXY() { + Foo.foo(1); + } + + void fooXYZ() { + Foo.foo(1, "1"); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault2After.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault2After.kt new file mode 100644 index 00000000000..22975dff638 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault2After.kt @@ -0,0 +1,6 @@ +@file:JvmName("Foo") + +@JvmOverloads +fun foo(x: Int = 0, z: String = "0") { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault2Before.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault2Before.1.java new file mode 100644 index 00000000000..44646bf2426 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault2Before.1.java @@ -0,0 +1,17 @@ +class Usages { + void foo() { + Foo.foo(); + } + + void fooX() { + Foo.foo(1); + } + + void fooXY() { + Foo.foo(1, 1.0); + } + + void fooXYZ() { + Foo.foo(1, 1.0, "1"); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault2Before.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault2Before.kt new file mode 100644 index 00000000000..cf49bd4c8b9 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault2Before.kt @@ -0,0 +1,6 @@ +@file:JvmName("Foo") + +@JvmOverloads +fun foo(x: Int = 0, y: Double = 0.0, z: String = "0") { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault3After.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault3After.1.java new file mode 100644 index 00000000000..69fe36e3df9 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault3After.1.java @@ -0,0 +1,17 @@ +class Usages { + void foo() { + Foo.foo(); + } + + void fooX() { + Foo.foo(1); + } + + void fooXY() { + Foo.foo(1, 1.0); + } + + void fooXYZ() { + Foo.foo(1, 1.0); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault3After.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault3After.kt new file mode 100644 index 00000000000..f4891c1cd99 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault3After.kt @@ -0,0 +1,6 @@ +@file:JvmName("Foo") + +@JvmOverloads +fun foo(x: Int = 0, y: Double = 0.0) { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault3Before.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault3Before.1.java new file mode 100644 index 00000000000..44646bf2426 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault3Before.1.java @@ -0,0 +1,17 @@ +class Usages { + void foo() { + Foo.foo(); + } + + void fooX() { + Foo.foo(1); + } + + void fooXY() { + Foo.foo(1, 1.0); + } + + void fooXYZ() { + Foo.foo(1, 1.0, "1"); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault3Before.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault3Before.kt new file mode 100644 index 00000000000..cf49bd4c8b9 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveDefault3Before.kt @@ -0,0 +1,6 @@ +@file:JvmName("Foo") + +@JvmOverloads +fun foo(x: Int = 0, y: Double = 0.0, z: String = "0") { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault1After.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault1After.1.java new file mode 100644 index 00000000000..193244799f2 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault1After.1.java @@ -0,0 +1,13 @@ +class Usages { + void foo() { + Foo.foo(); + } + + void fooY() { + Foo.foo(1.0); + } + + void fooYZ() { + Foo.foo(1.0, "1"); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault1After.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault1After.kt new file mode 100644 index 00000000000..da2574c5595 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault1After.kt @@ -0,0 +1,6 @@ +@file:JvmName("Foo") + +@JvmOverloads +fun foo(y: Double = 0.0, z: String = "0") { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault1Before.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault1Before.1.java new file mode 100644 index 00000000000..59c19a88da9 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault1Before.1.java @@ -0,0 +1,13 @@ +class Usages { + void foo() { + Foo.foo(1); + } + + void fooY() { + Foo.foo(1, 1.0); + } + + void fooYZ() { + Foo.foo(1, 1.0, "1"); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault1Before.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault1Before.kt new file mode 100644 index 00000000000..83718f00580 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault1Before.kt @@ -0,0 +1,6 @@ +@file:JvmName("Foo") + +@JvmOverloads +fun foo(x: Int, y: Double = 0.0, z: String = "0") { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault2After.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault2After.1.java new file mode 100644 index 00000000000..00e0838f37b --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault2After.1.java @@ -0,0 +1,13 @@ +class Usages { + void foo() { + Foo.foo(); + } + + void fooX() { + Foo.foo(1); + } + + void fooXZ() { + Foo.foo(1, "1"); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault2After.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault2After.kt new file mode 100644 index 00000000000..22975dff638 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault2After.kt @@ -0,0 +1,6 @@ +@file:JvmName("Foo") + +@JvmOverloads +fun foo(x: Int = 0, z: String = "0") { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault2Before.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault2Before.1.java new file mode 100644 index 00000000000..82513a6bbfb --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault2Before.1.java @@ -0,0 +1,13 @@ +class Usages { + void foo() { + Foo.foo(1.0); + } + + void fooX() { + Foo.foo(1, 1.0); + } + + void fooXZ() { + Foo.foo(1, 1.0, "1"); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault2Before.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault2Before.kt new file mode 100644 index 00000000000..b3313dc482f --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault2Before.kt @@ -0,0 +1,6 @@ +@file:JvmName("Foo") + +@JvmOverloads +fun foo(x: Int = 0, y: Double, z: String = "0") { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault3After.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault3After.1.java new file mode 100644 index 00000000000..15586480a71 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault3After.1.java @@ -0,0 +1,13 @@ +class Usages { + void foo() { + Foo.foo(); + } + + void fooX() { + Foo.foo(1); + } + + void fooXY() { + Foo.foo(1, 1.0); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault3After.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault3After.kt new file mode 100644 index 00000000000..f4891c1cd99 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault3After.kt @@ -0,0 +1,6 @@ +@file:JvmName("Foo") + +@JvmOverloads +fun foo(x: Int = 0, y: Double = 0.0) { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault3Before.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault3Before.1.java new file mode 100644 index 00000000000..92c0cfb9b4c --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault3Before.1.java @@ -0,0 +1,13 @@ +class Usages { + void foo() { + Foo.foo("1"); + } + + void fooX() { + Foo.foo(1, "1"); + } + + void fooXY() { + Foo.foo(1, 1.0, "1"); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault3Before.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault3Before.kt new file mode 100644 index 00000000000..675c1ad19c7 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedRemoveNonDefault3Before.kt @@ -0,0 +1,6 @@ +@file:JvmName("Foo") + +@JvmOverloads +fun foo(x: Int = 0, y: Double = 0.0, z: String) { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams1After.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams1After.1.java new file mode 100644 index 00000000000..cb204a0a8f2 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams1After.1.java @@ -0,0 +1,17 @@ +class Usages { + void foo() { + Foo.foo(); + } + + void fooX() { + Foo.foo(1); + } + + void fooXY() { + Foo.foo(1, "0", 1.0); + } + + void fooXYZ() { + Foo.foo(1, "1", 1.0); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams1After.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams1After.kt new file mode 100644 index 00000000000..4ff55c4ddfe --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams1After.kt @@ -0,0 +1,10 @@ +@file:JvmName("Foo") + +@JvmOverloads +fun foo( + x: Int = 0, + z: String = "0", + y: Double = 0.0 +) { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams1Before.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams1Before.1.java new file mode 100644 index 00000000000..44646bf2426 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams1Before.1.java @@ -0,0 +1,17 @@ +class Usages { + void foo() { + Foo.foo(); + } + + void fooX() { + Foo.foo(1); + } + + void fooXY() { + Foo.foo(1, 1.0); + } + + void fooXYZ() { + Foo.foo(1, 1.0, "1"); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams1Before.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams1Before.kt new file mode 100644 index 00000000000..83f4a986063 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams1Before.kt @@ -0,0 +1,10 @@ +@file:JvmName("Foo") + +@JvmOverloads +fun foo( + x: Int = 0, + y: Double = 0.0, + z: String = "0" +) { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams2After.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams2After.1.java new file mode 100644 index 00000000000..522f5ac893c --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams2After.1.java @@ -0,0 +1,13 @@ +class Usages { + void foo() { + Foo.foo(1); + } + + void fooY() { + Foo.foo("0", 1.0, 1); + } + + void fooYZ() { + Foo.foo("1", 1.0, 1); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams2After.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams2After.kt new file mode 100644 index 00000000000..f7715b56685 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams2After.kt @@ -0,0 +1,10 @@ +@file:JvmName("Foo") + +@JvmOverloads +fun foo( + z: String = "0", + y: Double = 0.0, + x: Int +) { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams2Before.1.java b/idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams2Before.1.java new file mode 100644 index 00000000000..59c19a88da9 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams2Before.1.java @@ -0,0 +1,13 @@ +class Usages { + void foo() { + Foo.foo(1); + } + + void fooY() { + Foo.foo(1, 1.0); + } + + void fooYZ() { + Foo.foo(1, 1.0, "1"); + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams2Before.kt b/idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams2Before.kt new file mode 100644 index 00000000000..9a386800dc3 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/JvmOverloadedSwapParams2Before.kt @@ -0,0 +1,10 @@ +@file:JvmName("Foo") + +@JvmOverloads +fun foo( + x: Int, + y: Double = 0.0, + z: String = "0" +) { + +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureTest.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureTest.java index b37115f09de..5955c3f3369 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignatureTest.java @@ -1347,6 +1347,96 @@ public class JetChangeSignatureTest extends KotlinCodeInsightTestCase { doTest(changeInfo); } + public void testJvmOverloadedSwapParams1() throws Exception { + JetChangeInfo changeInfo = getChangeInfo(); + JetParameterInfo param = changeInfo.getNewParameters()[1]; + changeInfo.setNewParameter(1, changeInfo.getNewParameters()[2]); + changeInfo.setNewParameter(2, param); + doTest(changeInfo); + } + + public void testJvmOverloadedSwapParams2() throws Exception { + JetChangeInfo changeInfo = getChangeInfo(); + JetParameterInfo param = changeInfo.getNewParameters()[0]; + changeInfo.setNewParameter(0, changeInfo.getNewParameters()[2]); + changeInfo.setNewParameter(2, param); + doTest(changeInfo); + } + + private void doTestJvmOverloadedAddDefault(int index) throws Exception { + JetChangeInfo changeInfo = getChangeInfo(); + KtExpression defaultValue = new KtPsiFactory(getProject()).createExpression("2"); + CallableDescriptor descriptor = changeInfo.getMethodDescriptor().getBaseDescriptor(); + changeInfo.addParameter(new JetParameterInfo(descriptor, -1, "n", BUILT_INS.getIntType(), defaultValue, defaultValue), index); + doTest(changeInfo); + } + + private void doTestJvmOverloadedAddNonDefault(int index) throws Exception { + JetChangeInfo changeInfo = getChangeInfo(); + KtExpression defaultValue = new KtPsiFactory(getProject()).createExpression("2"); + CallableDescriptor descriptor = changeInfo.getMethodDescriptor().getBaseDescriptor(); + changeInfo.addParameter(new JetParameterInfo(descriptor, -1, "n", BUILT_INS.getIntType(), null, defaultValue), index); + doTest(changeInfo); + } + + private void doTestRemoveAt(int index) throws Exception { + JetChangeInfo changeInfo = getChangeInfo(); + changeInfo.removeParameter(index >= 0 ? index : changeInfo.getNewParametersCount() - 1); + doTest(changeInfo); + } + + public void testJvmOverloadedAddDefault1() throws Exception { + doTestJvmOverloadedAddDefault(0); + } + + public void testJvmOverloadedAddDefault2() throws Exception { + doTestJvmOverloadedAddDefault(1); + } + + public void testJvmOverloadedAddDefault3() throws Exception { + doTestJvmOverloadedAddDefault(-1); + } + + public void testJvmOverloadedAddNonDefault1() throws Exception { + doTestJvmOverloadedAddNonDefault(0); + } + + public void testJvmOverloadedAddNonDefault2() throws Exception { + doTestJvmOverloadedAddNonDefault(1); + } + + public void testJvmOverloadedAddNonDefault3() throws Exception { + doTestJvmOverloadedAddNonDefault(-1); + } + + public void testJvmOverloadedRemoveDefault1() throws Exception { + doTestRemoveAt(0); + } + + public void testJvmOverloadedRemoveDefault2() throws Exception { + doTestRemoveAt(1); + } + + public void testJvmOverloadedRemoveDefault3() throws Exception { + doTestRemoveAt(-1); + } + + public void testJvmOverloadedRemoveNonDefault1() throws Exception { + doTestRemoveAt(0); + } + + public void testJvmOverloadedRemoveNonDefault2() throws Exception { + doTestRemoveAt(1); + } + + public void testJvmOverloadedRemoveNonDefault3() throws Exception { + doTestRemoveAt(-1); + } + + public void testJvmOverloadedConstructorSwapParams() throws Exception { + testJvmOverloadedSwapParams1(); + } + private List editors = null; private static final String[] EXTENSIONS = {".kt", ".java"};