diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/shortenRefs/FirShortenRefsTestGenerated.java b/idea/idea-fir/tests/org/jetbrains/kotlin/shortenRefs/FirShortenRefsTestGenerated.java index 26e6b191d34..bc2474535e7 100644 --- a/idea/idea-fir/tests/org/jetbrains/kotlin/shortenRefs/FirShortenRefsTestGenerated.java +++ b/idea/idea-fir/tests/org/jetbrains/kotlin/shortenRefs/FirShortenRefsTestGenerated.java @@ -85,6 +85,11 @@ public class FirShortenRefsTestGenerated extends AbstractFirShortenRefsTest { public void testSelfReferencingFunction() throws Exception { runTest("idea/testData/shortenRefsFir/calls/selfReferencingFunction.kt"); } + + @TestMetadata("variableNotShortened.kt") + public void testVariableNotShortened() throws Exception { + runTest("idea/testData/shortenRefsFir/calls/variableNotShortened.kt"); + } } @TestMetadata("idea/testData/shortenRefsFir/quailfiers") diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirReferenceShortener.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirReferenceShortener.kt index b5a691afe5f..b67d28a0224 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirReferenceShortener.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirReferenceShortener.kt @@ -9,7 +9,9 @@ import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.project.Project import com.intellij.psi.SmartPsiElementPointer import com.intellij.util.containers.addIfNotNull +import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.declarations.FirClass import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.declarations.FirResolvedImport import org.jetbrains.kotlin.fir.expressions.FirFunctionCall @@ -230,7 +232,7 @@ internal class KtFirReferenceShortener( super.visitResolvedNamedReference(resolvedNamedReference) val referenceExpression = resolvedNamedReference.psi as? KtNameReferenceExpression - val qualifiedProperty = referenceExpression?.parent as? KtDotQualifiedExpression ?: return + val qualifiedProperty = referenceExpression?.getDotQualifiedExpressionForSelector() ?: return val propertyId = (resolvedNamedReference.resolvedSymbol as? FirCallableSymbol<*>)?.callableId ?: return @@ -246,7 +248,7 @@ internal class KtFirReferenceShortener( super.visitFunctionCall(functionCall) val callExpression = functionCall.psi as? KtCallExpression ?: return - val qualifiedCallExpression = callExpression.parent as? KtDotQualifiedExpression ?: return + val qualifiedCallExpression = callExpression.getDotQualifiedExpressionForSelector() ?: return val resolvedNamedReference = functionCall.calleeReference as? FirResolvedNamedReference ?: return val callableId = (resolvedNamedReference.resolvedSymbol as? FirCallableSymbol<*>)?.callableId ?: return @@ -266,7 +268,7 @@ internal class KtFirReferenceShortener( val wholeClassQualifier = resolvedQualifier.classId ?: return val wholeQualifierElement = when (val qualifierPsi = resolvedQualifier.psi) { is KtDotQualifiedExpression -> qualifierPsi - is KtNameReferenceExpression -> qualifierPsi.parent as? KtDotQualifiedExpression ?: return + is KtNameReferenceExpression -> qualifierPsi.getDotQualifiedExpressionForSelector() ?: return else -> return } @@ -344,6 +346,9 @@ private class ShortenCommandImpl( } } +private fun KtElement.getDotQualifiedExpressionForSelector(): KtDotQualifiedExpression? = + getQualifiedExpressionForSelector() as? KtDotQualifiedExpression + private tailrec fun KtTypeElement?.unwrapNullable(): KtTypeElement? = if (this is KtNullableType) this.innerType.unwrapNullable() else this diff --git a/idea/testData/shortenRefsFir/calls/variableNotShortened.kt b/idea/testData/shortenRefsFir/calls/variableNotShortened.kt new file mode 100644 index 00000000000..7b79ff6dbbe --- /dev/null +++ b/idea/testData/shortenRefsFir/calls/variableNotShortened.kt @@ -0,0 +1,4 @@ +// FIR_COMPARISON +fun usage(c: Any) { + c.toString() +} \ No newline at end of file diff --git a/idea/testData/shortenRefsFir/calls/variableNotShortened.kt.after b/idea/testData/shortenRefsFir/calls/variableNotShortened.kt.after new file mode 100644 index 00000000000..55993cd16ac --- /dev/null +++ b/idea/testData/shortenRefsFir/calls/variableNotShortened.kt.after @@ -0,0 +1,4 @@ +// FIR_COMPARISON +fun usage(c: Any) { + c.toString() +} \ No newline at end of file