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-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-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-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)
|
- 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
|
- 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 Project project;
|
||||||
private final KotlinMethodDescriptor methodDescriptor;
|
private final KotlinMethodDescriptor methodDescriptor;
|
||||||
|
|
||||||
protected KotlinCallableParameterTableModel(KotlinMethodDescriptor methodDescriptor, PsiElement context, ColumnInfo... columnInfos) {
|
protected KotlinCallableParameterTableModel(
|
||||||
super(context, context, columnInfos);
|
KotlinMethodDescriptor methodDescriptor,
|
||||||
|
PsiElement typeContext,
|
||||||
|
PsiElement defaultValueContext,
|
||||||
|
ColumnInfo... columnInfos
|
||||||
|
) {
|
||||||
|
super(typeContext, defaultValueContext, columnInfos);
|
||||||
this.methodDescriptor = methodDescriptor;
|
this.methodDescriptor = methodDescriptor;
|
||||||
project = context.getProject();
|
project = typeContext.getProject();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@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.*
|
||||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinMethodDescriptor.Kind
|
import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinMethodDescriptor.Kind
|
||||||
import org.jetbrains.kotlin.idea.refactoring.validateElement
|
import org.jetbrains.kotlin.idea.refactoring.validateElement
|
||||||
import org.jetbrains.kotlin.psi.KtExpressionCodeFragment
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.KtPsiFactory
|
import org.jetbrains.kotlin.psi.psiUtil.parents
|
||||||
import org.jetbrains.kotlin.psi.KtTypeCodeFragment
|
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||||
import java.awt.BorderLayout
|
import java.awt.BorderLayout
|
||||||
@@ -399,15 +398,29 @@ class KotlinChangeSignatureDialog(
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private fun createParametersInfoModel(descriptor: KotlinMethodDescriptor, defaultValueContext: PsiElement): KotlinCallableParameterTableModel {
|
private fun createParametersInfoModel(descriptor: KotlinMethodDescriptor, defaultValueContext: PsiElement): KotlinCallableParameterTableModel {
|
||||||
|
val typeContext = getTypeCodeFragmentContext(defaultValueContext)
|
||||||
return when (descriptor.kind) {
|
return when (descriptor.kind) {
|
||||||
KotlinMethodDescriptor.Kind.FUNCTION -> KotlinFunctionParameterTableModel(descriptor, defaultValueContext)
|
KotlinMethodDescriptor.Kind.FUNCTION -> KotlinFunctionParameterTableModel(descriptor, typeContext, defaultValueContext)
|
||||||
KotlinMethodDescriptor.Kind.PRIMARY_CONSTRUCTOR -> KotlinPrimaryConstructorParameterTableModel(descriptor, defaultValueContext)
|
KotlinMethodDescriptor.Kind.PRIMARY_CONSTRUCTOR -> KotlinPrimaryConstructorParameterTableModel(descriptor, typeContext, defaultValueContext)
|
||||||
KotlinMethodDescriptor.Kind.SECONDARY_CONSTRUCTOR -> KotlinSecondaryConstructorParameterTableModel(descriptor, 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) =
|
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,
|
fun createRefactoringProcessorForSilentChangeSignature(project: Project,
|
||||||
commandName: String,
|
commandName: String,
|
||||||
|
|||||||
+7
-6
@@ -31,14 +31,15 @@ import javax.swing.table.TableCellEditor;
|
|||||||
import javax.swing.table.TableCellRenderer;
|
import javax.swing.table.TableCellRenderer;
|
||||||
|
|
||||||
public class KotlinFunctionParameterTableModel extends KotlinCallableParameterTableModel {
|
public class KotlinFunctionParameterTableModel extends KotlinCallableParameterTableModel {
|
||||||
public KotlinFunctionParameterTableModel(KotlinMethodDescriptor methodDescriptor, PsiElement context) {
|
public KotlinFunctionParameterTableModel(KotlinMethodDescriptor methodDescriptor, PsiElement typeContext, PsiElement defaultValueContext) {
|
||||||
super(methodDescriptor,
|
super(methodDescriptor,
|
||||||
context,
|
typeContext,
|
||||||
new NameColumn(context.getProject()),
|
defaultValueContext,
|
||||||
new TypeColumn(context.getProject(), KotlinFileType.INSTANCE),
|
new NameColumn(typeContext.getProject()),
|
||||||
new DefaultValueColumn<KotlinParameterInfo, ParameterTableModelItemBase<KotlinParameterInfo>>(context.getProject(),
|
new TypeColumn(typeContext.getProject(), KotlinFileType.INSTANCE),
|
||||||
|
new DefaultValueColumn<KotlinParameterInfo, ParameterTableModelItemBase<KotlinParameterInfo>>(typeContext.getProject(),
|
||||||
KotlinFileType.INSTANCE),
|
KotlinFileType.INSTANCE),
|
||||||
new ReceiverColumn(context.getProject(), methodDescriptor));
|
new ReceiverColumn(typeContext.getProject(), methodDescriptor));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+6
-5
@@ -32,13 +32,14 @@ import javax.swing.table.TableCellEditor;
|
|||||||
import javax.swing.table.TableCellRenderer;
|
import javax.swing.table.TableCellRenderer;
|
||||||
|
|
||||||
public class KotlinPrimaryConstructorParameterTableModel extends KotlinCallableParameterTableModel {
|
public class KotlinPrimaryConstructorParameterTableModel extends KotlinCallableParameterTableModel {
|
||||||
public KotlinPrimaryConstructorParameterTableModel(KotlinMethodDescriptor methodDescriptor, PsiElement context) {
|
public KotlinPrimaryConstructorParameterTableModel(KotlinMethodDescriptor methodDescriptor, PsiElement typeContext, PsiElement defaultValueContext) {
|
||||||
super(methodDescriptor,
|
super(methodDescriptor,
|
||||||
context,
|
typeContext,
|
||||||
|
defaultValueContext,
|
||||||
new ValVarColumn(),
|
new ValVarColumn(),
|
||||||
new NameColumn(context.getProject()),
|
new NameColumn(typeContext.getProject()),
|
||||||
new TypeColumn(context.getProject(), KotlinFileType.INSTANCE),
|
new TypeColumn(typeContext.getProject(), KotlinFileType.INSTANCE),
|
||||||
new DefaultValueColumn<KotlinParameterInfo, ParameterTableModelItemBase<KotlinParameterInfo>>(context.getProject(), KotlinFileType.INSTANCE));
|
new DefaultValueColumn<KotlinParameterInfo, ParameterTableModelItemBase<KotlinParameterInfo>>(typeContext.getProject(), KotlinFileType.INSTANCE));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isValVarColumn(ColumnInfo column) {
|
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;
|
import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinParameterInfo;
|
||||||
|
|
||||||
public class KotlinSecondaryConstructorParameterTableModel extends KotlinCallableParameterTableModel {
|
public class KotlinSecondaryConstructorParameterTableModel extends KotlinCallableParameterTableModel {
|
||||||
public KotlinSecondaryConstructorParameterTableModel(KotlinMethodDescriptor methodDescriptor, PsiElement context) {
|
public KotlinSecondaryConstructorParameterTableModel(KotlinMethodDescriptor methodDescriptor, PsiElement typeContext, PsiElement defaultValueContext) {
|
||||||
super(methodDescriptor,
|
super(methodDescriptor,
|
||||||
context,
|
typeContext,
|
||||||
new NameColumn(context.getProject()),
|
defaultValueContext,
|
||||||
new TypeColumn(context.getProject(), KotlinFileType.INSTANCE),
|
new NameColumn(typeContext.getProject()),
|
||||||
new DefaultValueColumn<KotlinParameterInfo, ParameterTableModelItemBase<KotlinParameterInfo>>(context.getProject(), KotlinFileType.INSTANCE));
|
new TypeColumn(typeContext.getProject(), KotlinFileType.INSTANCE),
|
||||||
|
new DefaultValueColumn<KotlinParameterInfo, ParameterTableModelItemBase<KotlinParameterInfo>>(typeContext.getProject(), KotlinFileType.INSTANCE));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user