Change Signature: Fix context element for type code fragments to avoid bogus "Type can not be resolved" warnings
#KT-11862 Fixed
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
+8
-3
@@ -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
|
||||
|
||||
+20
-7
@@ -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,
|
||||
|
||||
+7
-6
@@ -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<KotlinParameterInfo, ParameterTableModelItemBase<KotlinParameterInfo>>(context.getProject(),
|
||||
typeContext,
|
||||
defaultValueContext,
|
||||
new NameColumn(typeContext.getProject()),
|
||||
new TypeColumn(typeContext.getProject(), KotlinFileType.INSTANCE),
|
||||
new DefaultValueColumn<KotlinParameterInfo, ParameterTableModelItemBase<KotlinParameterInfo>>(typeContext.getProject(),
|
||||
KotlinFileType.INSTANCE),
|
||||
new ReceiverColumn(context.getProject(), methodDescriptor));
|
||||
new ReceiverColumn(typeContext.getProject(), methodDescriptor));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+6
-5
@@ -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<KotlinParameterInfo, ParameterTableModelItemBase<KotlinParameterInfo>>(context.getProject(), KotlinFileType.INSTANCE));
|
||||
new NameColumn(typeContext.getProject()),
|
||||
new TypeColumn(typeContext.getProject(), KotlinFileType.INSTANCE),
|
||||
new DefaultValueColumn<KotlinParameterInfo, ParameterTableModelItemBase<KotlinParameterInfo>>(typeContext.getProject(), KotlinFileType.INSTANCE));
|
||||
}
|
||||
|
||||
public static boolean isValVarColumn(ColumnInfo column) {
|
||||
|
||||
+6
-5
@@ -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<KotlinParameterInfo, ParameterTableModelItemBase<KotlinParameterInfo>>(context.getProject(), KotlinFileType.INSTANCE));
|
||||
typeContext,
|
||||
defaultValueContext,
|
||||
new NameColumn(typeContext.getProject()),
|
||||
new TypeColumn(typeContext.getProject(), KotlinFileType.INSTANCE),
|
||||
new DefaultValueColumn<KotlinParameterInfo, ParameterTableModelItemBase<KotlinParameterInfo>>(typeContext.getProject(), KotlinFileType.INSTANCE));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user