Change Signature: Constraint indices of parameters generated for overloaded versions of function with @JvmOverloads annotation
#KT-9762 Fixed
This commit is contained in:
@@ -308,25 +308,33 @@ public open class JetChangeInfo(
|
|||||||
return javaChangeInfo
|
return javaChangeInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getJavaParameterInfos(currentPsiMethod: PsiMethod, newParameterList: List<JetParameterInfo>): MutableList<ParameterInfoImpl> {
|
fun getJavaParameterInfos(
|
||||||
return newParameterList.withIndex().mapTo(ArrayList()) { pair ->
|
originalPsiMethod: PsiMethod,
|
||||||
val (i, info) = pair
|
currentPsiMethod: PsiMethod,
|
||||||
|
newParameterList: List<JetParameterInfo>
|
||||||
|
): MutableList<ParameterInfoImpl> {
|
||||||
|
val oldParameterCount = originalPsiMethod.parameterList.parametersCount
|
||||||
|
return newParameterList.withIndex()
|
||||||
|
.map { pair ->
|
||||||
|
val (i, info) = pair
|
||||||
|
|
||||||
val type = if (isPrimaryMethodUpdated)
|
val oldIndex = info.oldIndex
|
||||||
currentPsiMethod.getParameterList().getParameters()[i].getType()
|
val javaOldIndex = when {
|
||||||
else
|
methodDescriptor.receiver == null -> oldIndex
|
||||||
PsiType.VOID
|
info == methodDescriptor.receiver -> 0
|
||||||
|
oldIndex >= 0 -> oldIndex + 1
|
||||||
|
else -> -1
|
||||||
|
}
|
||||||
|
if (javaOldIndex >= oldParameterCount) return@map null
|
||||||
|
|
||||||
val oldIndex = info.getOldIndex()
|
val type = if (isPrimaryMethodUpdated)
|
||||||
val javaOldIndex = when {
|
currentPsiMethod.getParameterList().getParameters()[i].getType()
|
||||||
methodDescriptor.receiver == null -> oldIndex
|
else
|
||||||
info == methodDescriptor.receiver -> 0
|
PsiType.VOID
|
||||||
oldIndex >= 0 -> oldIndex + 1
|
|
||||||
else -> -1
|
|
||||||
}
|
|
||||||
|
|
||||||
ParameterInfoImpl(javaOldIndex, info.getName(), type, info.defaultValueForCall?.getText() ?: "")
|
ParameterInfoImpl(javaOldIndex, info.getName(), type, info.defaultValueForCall?.getText() ?: "")
|
||||||
}
|
}
|
||||||
|
.filterNotNullTo(ArrayList())
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createJavaChangeInfoForFunctionOrGetter(
|
fun createJavaChangeInfoForFunctionOrGetter(
|
||||||
@@ -335,13 +343,13 @@ public open class JetChangeInfo(
|
|||||||
isGetter: Boolean
|
isGetter: Boolean
|
||||||
): JavaChangeInfo? {
|
): JavaChangeInfo? {
|
||||||
val newParameterList = receiverParameterInfo.singletonOrEmptyList() + getNonReceiverParameters()
|
val newParameterList = receiverParameterInfo.singletonOrEmptyList() + getNonReceiverParameters()
|
||||||
val newJavaParameters = getJavaParameterInfos(currentPsiMethod, newParameterList).toTypedArray()
|
val newJavaParameters = getJavaParameterInfos(originalPsiMethod, currentPsiMethod, newParameterList).toTypedArray()
|
||||||
val newName = if (isGetter) JvmAbi.getterName(getNewName()) else getNewName()
|
val newName = if (isGetter) JvmAbi.getterName(getNewName()) else getNewName()
|
||||||
return createJavaChangeInfo(originalPsiMethod, currentPsiMethod, newName, currentPsiMethod.getReturnType(), newJavaParameters)
|
return createJavaChangeInfo(originalPsiMethod, currentPsiMethod, newName, currentPsiMethod.getReturnType(), newJavaParameters)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createJavaChangeInfoForSetter(originalPsiMethod: PsiMethod, currentPsiMethod: PsiMethod): JavaChangeInfo? {
|
fun createJavaChangeInfoForSetter(originalPsiMethod: PsiMethod, currentPsiMethod: PsiMethod): JavaChangeInfo? {
|
||||||
val newJavaParameters = getJavaParameterInfos(currentPsiMethod, receiverParameterInfo.singletonOrEmptyList())
|
val newJavaParameters = getJavaParameterInfos(originalPsiMethod, currentPsiMethod, receiverParameterInfo.singletonOrEmptyList())
|
||||||
val oldIndex = if (methodDescriptor.receiver != null) 1 else 0
|
val oldIndex = if (methodDescriptor.receiver != null) 1 else 0
|
||||||
if (isPrimaryMethodUpdated) {
|
if (isPrimaryMethodUpdated) {
|
||||||
val newIndex = if (receiverParameterInfo != null) 1 else 0
|
val newIndex = if (receiverParameterInfo != null) 1 else 0
|
||||||
|
|||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
@JvmOverloads fun <caret>foo(aa: Int, b: Int, c: Int = 1, d: Int = 2) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
foo(aa = 1, b = 2, c = 3, d = 4)
|
||||||
|
foo(aa = 1, b = 2, c = 3)
|
||||||
|
foo(b = 1, c = 2, aa = 3)
|
||||||
|
foo(aa = 1, b = 2)
|
||||||
|
foo(b = 1, aa = 2)
|
||||||
|
}
|
||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
@JvmOverloads fun <caret>foo(a: Int, b: Int, c: Int = 1, d: Int = 2) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
foo(a = 1, b = 2, c = 3, d = 4)
|
||||||
|
foo(a = 1, b = 2, c = 3)
|
||||||
|
foo(b = 1, c = 2, a = 3)
|
||||||
|
foo(a = 1, b = 2)
|
||||||
|
foo(b = 1, a = 2)
|
||||||
|
}
|
||||||
+6
@@ -1341,6 +1341,12 @@ public class JetChangeSignatureTest extends KotlinCodeInsightTestCase {
|
|||||||
doTest(changeInfo);
|
doTest(changeInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testJvmOverloadedRenameParameter() throws Exception {
|
||||||
|
JetChangeInfo changeInfo = getChangeInfo();
|
||||||
|
changeInfo.getNewParameters()[0].setName("aa");
|
||||||
|
doTest(changeInfo);
|
||||||
|
}
|
||||||
|
|
||||||
private List<Editor> editors = null;
|
private List<Editor> editors = null;
|
||||||
|
|
||||||
private static final String[] EXTENSIONS = {".kt", ".java"};
|
private static final String[] EXTENSIONS = {".kt", ".java"};
|
||||||
|
|||||||
Reference in New Issue
Block a user