From f69a807ae6d328e18ec1660eafe5b208726c15aa Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Mon, 16 Apr 2018 17:50:07 +0300 Subject: [PATCH] Change Signature: Fix original method info for Java method used in Kotlin #KT-23714 Fixed --- .../changeSignature/KotlinChangeSignature.kt | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignature.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignature.kt index 8af7267394b..508e58d5162 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignature.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignature.kt @@ -21,10 +21,7 @@ import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.project.Project import com.intellij.openapi.ui.Messages -import com.intellij.psi.PsiElement -import com.intellij.psi.PsiElementFactory -import com.intellij.psi.PsiMethod -import com.intellij.psi.PsiType +import com.intellij.psi.* import com.intellij.refactoring.BaseRefactoringProcessor import com.intellij.refactoring.changeSignature.* import com.intellij.refactoring.util.CanonicalTypes @@ -118,11 +115,28 @@ class KotlinChangeSignature( } val (preview, javaChangeInfo) = getPreviewInfoForJavaMethod(descriptor) - object: JavaChangeSignatureDialog(project, JavaMethodDescriptor(preview), false, null) { + val javaDescriptor = object : JavaMethodDescriptor(preview) { + @Suppress("UNCHECKED_CAST") + override fun getParameters() = javaChangeInfo.newParameters.toMutableList() as MutableList + } + object: JavaChangeSignatureDialog(project, javaDescriptor, false, null) { override fun createRefactoringProcessor(): BaseRefactoringProcessor? { - val processor = super.createRefactoringProcessor() - (processor as? ChangeSignatureProcessor)?.changeInfo?.updateMethod(javaChangeInfo.method) - return processor + val parameters = parameters + LOG.assertTrue(myMethod.method.isValid) + val newJavaChangeInfo = JavaChangeInfoImpl( + visibility ?: VisibilityUtil.getVisibilityModifier(myMethod.method.modifierList), + javaChangeInfo.method, + methodName, + returnType ?: CanonicalTypes.createTypeWrapper(PsiType.VOID), + parameters.toTypedArray(), + exceptions, + isGenerateDelegate, + myMethodsToPropagateParameters ?: HashSet(), + myMethodsToPropagateExceptions ?: HashSet() + ).also { + it.setCheckUnusedParameter() + } + return ChangeSignatureProcessor(myProject, newJavaChangeInfo) } } }