Rename: Substitute synthetic expression parent before analysis
This fixes rename conflicts test
This commit is contained in:
@@ -19,14 +19,12 @@ package org.jetbrains.kotlin.psi;
|
||||
import com.intellij.extapi.psi.ASTWrapperPsiElement;
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.lang.Language;
|
||||
import com.intellij.psi.PsiElementVisitor;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiReference;
|
||||
import com.intellij.psi.PsiReferenceService;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistry;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.kotlin.idea.KotlinLanguage;
|
||||
import org.jetbrains.kotlin.psi.psiUtil.KtPsiUtilKt;
|
||||
|
||||
public class KtElementImpl extends ASTWrapperPsiElement implements KtElement {
|
||||
public KtElementImpl(@NotNull ASTNode node) {
|
||||
@@ -96,4 +94,10 @@ public class KtElementImpl extends ASTWrapperPsiElement implements KtElement {
|
||||
public KtElement getPsiOrParent() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PsiElement getParent() {
|
||||
PsiElement substitute = KtPsiUtilKt.getParentSubstitute(this);
|
||||
return substitute != null ? substitute : super.getParent();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@ import com.intellij.psi.stubs.StubElement;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.kotlin.idea.KotlinLanguage;
|
||||
import org.jetbrains.kotlin.psi.psiUtil.KtPsiUtilKt;
|
||||
import org.jetbrains.kotlin.psi.stubs.elements.KtStubElementType;
|
||||
|
||||
import java.util.Arrays;
|
||||
@@ -117,4 +118,10 @@ public class KtElementImplStub<T extends StubElement<?>> extends StubBasedPsiEle
|
||||
public KtElement getPsiOrParent() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PsiElement getParent() {
|
||||
PsiElement substitute = KtPsiUtilKt.getParentSubstitute(this);
|
||||
return substitute != null ? substitute : super.getParent();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package org.jetbrains.kotlin.psi.psiUtil
|
||||
|
||||
import com.intellij.extapi.psi.StubBasedPsiElementBase
|
||||
import com.intellij.openapi.util.Key
|
||||
import com.intellij.openapi.util.TextRange
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiParameter
|
||||
@@ -570,4 +571,6 @@ fun KtExpression.getLabeledParent(labelName: String): KtLabeledExpression? {
|
||||
return null
|
||||
}
|
||||
|
||||
fun PsiElement.astReplace(newElement: PsiElement) = parent.node.replaceChild(node, newElement.node)
|
||||
fun PsiElement.astReplace(newElement: PsiElement) = parent.node.replaceChild(node, newElement.node)
|
||||
|
||||
var KtElement.parentSubstitute: PsiElement? by UserDataProperty(Key.create<PsiElement>("PARENT_SUBSTITUTE"))
|
||||
@@ -44,6 +44,7 @@ import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.*
|
||||
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.DelegatingBindingTrace
|
||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
||||
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
||||
import org.jetbrains.kotlin.resolve.calls.resolvedCallUtil.getExplicitReceiverValue
|
||||
@@ -288,7 +289,8 @@ private fun checkUsagesRetargeting(
|
||||
newCallee.getReferencedNameElement().replace(psiFactory.createNameIdentifier(name))
|
||||
}
|
||||
|
||||
val newContext = qualifiedExpression.analyzeInContext(scope, refElement)
|
||||
qualifiedExpression.parentSubstitute = fullCallExpression.parent
|
||||
val newContext = qualifiedExpression.analyzeInContext(scope, refElement, DelegatingBindingTrace(context, ""))
|
||||
|
||||
val newResolvedCall = newCallee.getResolvedCall(newContext)
|
||||
val candidateText = newResolvedCall?.candidateDescriptor?.getImportableDescriptor()?.canonicalRender()
|
||||
|
||||
Reference in New Issue
Block a user