91c86f7f56
This commit fixes the exception attached to the bottom of the message The problem is that when creating ChangeSignatureProcessor for old PsiMethod that points to the parameter that is already removed from PSI, some pieces of platform code run resolution on the light PSI that eventually checks if the source element is valid. For KtUltraLightParameter, it inherits "isValid" from LightElement and the latter is defined as getNavigationElement().isValid(), while here navigationElement points to already removed parameter, and marked as invalid. The simplest solution was to define KtUltraLightParameter::isValid as it was before ultra-light classes, i.e. checking if parent is valid (see KtLightElementBase::isValid) com.intellij.psi.PsiInvalidElementAccessException: Element: class com.intellij.psi.impl.compiled.ClsJavaCodeReferenceElementImpl #JAVA because: File language:Language: JAVA != Provider base language:Language: kotlin invalidated at: no info at com.intellij.psi.util.PsiUtilCore.ensureValid(PsiUtilCore.java:482) at com.intellij.psi.impl.source.PsiClassReferenceType.resolveGenerics(PsiClassReferenceType.java:190) at com.intellij.psi.impl.source.PsiClassReferenceType.resolve(PsiClassReferenceType.java:138) at com.intellij.psi.util.PsiUtil.resolveClassInType(PsiUtil.java:445) at com.intellij.psi.util.PsiUtil.convertAnonymousToBaseType(PsiUtil.java:484) at com.intellij.psi.impl.light.LightTypeElement.<init>(LightTypeElement.java:33) at com.intellij.psi.impl.PsiElementFactoryImpl.createTypeElement(PsiElementFactoryImpl.java:142) at com.intellij.refactoring.changeSignature.JavaChangeInfoImpl.fillOldParams(JavaChangeInfoImpl.java:218) at com.intellij.refactoring.changeSignature.JavaChangeInfoImpl.<init>(JavaChangeInfoImpl.java:127) at com.intellij.refactoring.changeSignature.JavaChangeInfoImpl.<init>(JavaChangeInfoImpl.java:86) at com.intellij.refactoring.changeSignature.ChangeSignatureProcessor.generateChangeInfo(ChangeSignatureProcessor.java:121) at com.intellij.refactoring.changeSignature.ChangeSignatureProcessor.<init>(ChangeSignatureProcessor.java:88) at org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinChangeInfo$getOrCreateJavaChangeInfos$3.invoke(KotlinChangeInfo.kt:400) at org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinChangeInfo$getOrCreateJavaChangeInfos$5.invoke(KotlinChangeInfo.kt:469) at org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinChangeInfo.getOrCreateJavaChangeInfos(KotlinChangeInfo.kt:498) at org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinChangeSignatureUsageProcessor.processUsage(KotlinChangeSignatureUsageProcessor.kt:847) at com.intellij.refactoring.changeSignature.ChangeSignatureProcessorBase.doChangeSignature(ChangeSignatureProcessorBase.java:218)
17 lines
269 B
Kotlin
Vendored
17 lines
269 B
Kotlin
Vendored
class A(val k: Int) {
|
|
fun <caret>foo(x: X, s: String, k: Int): Boolean {
|
|
return x.k + s.length - k + this.k/2 > 0
|
|
}
|
|
|
|
fun test() {
|
|
foo(X(0), "1", 2)
|
|
}
|
|
}
|
|
|
|
class X(val k: Int)
|
|
|
|
fun test() {
|
|
with(A(3)) {
|
|
foo(X(0), "1", 2)
|
|
}
|
|
} |