diff --git a/ChangeLog.md b/ChangeLog.md index 067b5cd3e82..0661b640fea 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -215,6 +215,7 @@ Issues fixed: - [KT-11720](https://youtrack.jetbrains.com/issue/KT-11720) Fixed renaming of Kotlin beans through SpEL references - [KT-11719](https://youtrack.jetbrains.com/issue/KT-11719) Fixed renaming of Kotlin parameters references in XML files - [KT-11736](https://youtrack.jetbrains.com/issue/KT-11736) Fixed searching of Java usages for @JvmStatic properties and @JvmStatic @JvmOverloads functions +- [KT-11862](https://youtrack.jetbrains.com/issue/KT-11862) Fixed bogus warnings about unresolved types in the Change Signature dialog - Fix several issues leading to exceptions: [KT-11579](https://youtrack.jetbrains.com/issue/KT-11579), [KT-11580](https://youtrack.jetbrains.com/issue/KT-11580), [KT-11777](https://youtrack.jetbrains.com/issue/KT-11777), [KT-11868](https://youtrack.jetbrains.com/issue/KT-11868), [KT-11845](https://youtrack.jetbrains.com/issue/KT-11845) - Fixed NoSuchFieldException in Kotlin module settings on IDEA Ultimate diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/ui/KotlinCallableParameterTableModel.java b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/ui/KotlinCallableParameterTableModel.java index efe989889ea..1cb5e1c37e4 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/ui/KotlinCallableParameterTableModel.java +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/ui/KotlinCallableParameterTableModel.java @@ -32,10 +32,15 @@ public abstract class KotlinCallableParameterTableModel extends ParameterTableMo private final Project project; private final KotlinMethodDescriptor methodDescriptor; - protected KotlinCallableParameterTableModel(KotlinMethodDescriptor methodDescriptor, PsiElement context, ColumnInfo... columnInfos) { - super(context, context, columnInfos); + protected KotlinCallableParameterTableModel( + KotlinMethodDescriptor methodDescriptor, + PsiElement typeContext, + PsiElement defaultValueContext, + ColumnInfo... columnInfos + ) { + super(typeContext, defaultValueContext, columnInfos); this.methodDescriptor = methodDescriptor; - project = context.getProject(); + project = typeContext.getProject(); } @Nullable diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/ui/KotlinChangeSignatureDialog.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/ui/KotlinChangeSignatureDialog.kt index c350eaf5c40..9d39085554b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/ui/KotlinChangeSignatureDialog.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/ui/KotlinChangeSignatureDialog.kt @@ -52,9 +52,8 @@ import org.jetbrains.kotlin.idea.refactoring.KotlinRefactoringBundle import org.jetbrains.kotlin.idea.refactoring.changeSignature.* import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinMethodDescriptor.Kind import org.jetbrains.kotlin.idea.refactoring.validateElement -import org.jetbrains.kotlin.psi.KtExpressionCodeFragment -import org.jetbrains.kotlin.psi.KtPsiFactory -import org.jetbrains.kotlin.psi.KtTypeCodeFragment +import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.psiUtil.parents import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import java.awt.BorderLayout @@ -399,15 +398,29 @@ class KotlinChangeSignatureDialog( companion object { private fun createParametersInfoModel(descriptor: KotlinMethodDescriptor, defaultValueContext: PsiElement): KotlinCallableParameterTableModel { + val typeContext = getTypeCodeFragmentContext(defaultValueContext) return when (descriptor.kind) { - KotlinMethodDescriptor.Kind.FUNCTION -> KotlinFunctionParameterTableModel(descriptor, defaultValueContext) - KotlinMethodDescriptor.Kind.PRIMARY_CONSTRUCTOR -> KotlinPrimaryConstructorParameterTableModel(descriptor, defaultValueContext) - KotlinMethodDescriptor.Kind.SECONDARY_CONSTRUCTOR -> KotlinSecondaryConstructorParameterTableModel(descriptor, defaultValueContext) + KotlinMethodDescriptor.Kind.FUNCTION -> KotlinFunctionParameterTableModel(descriptor, typeContext, defaultValueContext) + KotlinMethodDescriptor.Kind.PRIMARY_CONSTRUCTOR -> KotlinPrimaryConstructorParameterTableModel(descriptor, typeContext, defaultValueContext) + KotlinMethodDescriptor.Kind.SECONDARY_CONSTRUCTOR -> KotlinSecondaryConstructorParameterTableModel(descriptor, typeContext, defaultValueContext) } } + private fun getTypeCodeFragmentContext(startFrom: PsiElement): KtElement { + return startFrom.parents.mapNotNull { + when (it) { + is KtNamedFunction -> it.bodyExpression + is KtPropertyAccessor -> it.bodyExpression + is KtConstructor<*> -> it + is KtClassOrObject -> it + is KtFile -> it + else -> null + } + }.first() + } + private fun createReturnTypeCodeFragment(project: Project, method: KotlinMethodDescriptor) = - KtPsiFactory(project).createTypeCodeFragment(method.returnTypeInfo.render(), method.baseDeclaration) + KtPsiFactory(project).createTypeCodeFragment(method.returnTypeInfo.render(), getTypeCodeFragmentContext(method.baseDeclaration)) fun createRefactoringProcessorForSilentChangeSignature(project: Project, commandName: String, diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/ui/KotlinFunctionParameterTableModel.java b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/ui/KotlinFunctionParameterTableModel.java index 58a8bfd7c6c..5b007f4e0ff 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/ui/KotlinFunctionParameterTableModel.java +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/ui/KotlinFunctionParameterTableModel.java @@ -31,14 +31,15 @@ import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; public class KotlinFunctionParameterTableModel extends KotlinCallableParameterTableModel { - public KotlinFunctionParameterTableModel(KotlinMethodDescriptor methodDescriptor, PsiElement context) { + public KotlinFunctionParameterTableModel(KotlinMethodDescriptor methodDescriptor, PsiElement typeContext, PsiElement defaultValueContext) { super(methodDescriptor, - context, - new NameColumn(context.getProject()), - new TypeColumn(context.getProject(), KotlinFileType.INSTANCE), - new DefaultValueColumn>(context.getProject(), + typeContext, + defaultValueContext, + new NameColumn(typeContext.getProject()), + new TypeColumn(typeContext.getProject(), KotlinFileType.INSTANCE), + new DefaultValueColumn>(typeContext.getProject(), KotlinFileType.INSTANCE), - new ReceiverColumn(context.getProject(), methodDescriptor)); + new ReceiverColumn(typeContext.getProject(), methodDescriptor)); } @Override diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/ui/KotlinPrimaryConstructorParameterTableModel.java b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/ui/KotlinPrimaryConstructorParameterTableModel.java index a2207849d3b..a6deb0610d9 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/ui/KotlinPrimaryConstructorParameterTableModel.java +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/ui/KotlinPrimaryConstructorParameterTableModel.java @@ -32,13 +32,14 @@ import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; public class KotlinPrimaryConstructorParameterTableModel extends KotlinCallableParameterTableModel { - public KotlinPrimaryConstructorParameterTableModel(KotlinMethodDescriptor methodDescriptor, PsiElement context) { + public KotlinPrimaryConstructorParameterTableModel(KotlinMethodDescriptor methodDescriptor, PsiElement typeContext, PsiElement defaultValueContext) { super(methodDescriptor, - context, + typeContext, + defaultValueContext, new ValVarColumn(), - new NameColumn(context.getProject()), - new TypeColumn(context.getProject(), KotlinFileType.INSTANCE), - new DefaultValueColumn>(context.getProject(), KotlinFileType.INSTANCE)); + new NameColumn(typeContext.getProject()), + new TypeColumn(typeContext.getProject(), KotlinFileType.INSTANCE), + new DefaultValueColumn>(typeContext.getProject(), KotlinFileType.INSTANCE)); } public static boolean isValVarColumn(ColumnInfo column) { diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/ui/KotlinSecondaryConstructorParameterTableModel.java b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/ui/KotlinSecondaryConstructorParameterTableModel.java index c8c48b07068..0eaaac67b38 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/ui/KotlinSecondaryConstructorParameterTableModel.java +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/ui/KotlinSecondaryConstructorParameterTableModel.java @@ -23,11 +23,12 @@ import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinMethodDescrip import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinParameterInfo; public class KotlinSecondaryConstructorParameterTableModel extends KotlinCallableParameterTableModel { - public KotlinSecondaryConstructorParameterTableModel(KotlinMethodDescriptor methodDescriptor, PsiElement context) { + public KotlinSecondaryConstructorParameterTableModel(KotlinMethodDescriptor methodDescriptor, PsiElement typeContext, PsiElement defaultValueContext) { super(methodDescriptor, - context, - new NameColumn(context.getProject()), - new TypeColumn(context.getProject(), KotlinFileType.INSTANCE), - new DefaultValueColumn>(context.getProject(), KotlinFileType.INSTANCE)); + typeContext, + defaultValueContext, + new NameColumn(typeContext.getProject()), + new TypeColumn(typeContext.getProject(), KotlinFileType.INSTANCE), + new DefaultValueColumn>(typeContext.getProject(), KotlinFileType.INSTANCE)); } }