diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirReferenceShortener.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirReferenceShortener.kt
index a65ee884f5a..51f5811c474 100644
--- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirReferenceShortener.kt
+++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirReferenceShortener.kt
@@ -874,6 +874,10 @@ private class ElementsToShortenCollector(
val availableCallables = shorteningContext.findPropertiesInScopes(scopes, callableSymbol.name)
val firPropertyAccess = qualifiedProperty.getOrBuildFir(firResolveSession) as? FirQualifiedAccessExpression ?: return
+
+ // if explicit receiver is a property access or a function call, we cannot shorten it
+ if (firPropertyAccess.explicitReceiver !is FirResolvedQualifier) return
+
if (availableCallables.isNotEmpty() && shortenIfAlreadyImported(firPropertyAccess, callableSymbol, referenceExpression)) {
addElementToShorten(ShortenQualifier(qualifiedProperty))
return
diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleReferenceShortenerTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleReferenceShortenerTestGenerated.java
index 80c1a6562f1..0e8f01d5dbd 100644
--- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleReferenceShortenerTestGenerated.java
+++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleReferenceShortenerTestGenerated.java
@@ -298,6 +298,18 @@ public class FirIdeNormalAnalysisSourceModuleReferenceShortenerTestGenerated ext
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/sameTypeNamesWithinSameScopes.kt");
}
+ @Test
+ @TestMetadata("selfPropertyChain.kt")
+ public void testSelfPropertyChain() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/selfPropertyChain.kt");
+ }
+
+ @Test
+ @TestMetadata("selfPropertyChain1.kt")
+ public void testSelfPropertyChain1() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/selfPropertyChain1.kt");
+ }
+
@Test
@TestMetadata("shortenAlreadyImportedClass.kt")
public void testShortenAlreadyImportedClass() throws Exception {
diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleReferenceShortenerTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleReferenceShortenerTestGenerated.java
index de2f13a3ce4..35644ea3e2a 100644
--- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleReferenceShortenerTestGenerated.java
+++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleReferenceShortenerTestGenerated.java
@@ -298,6 +298,18 @@ public class FirStandaloneNormalAnalysisSourceModuleReferenceShortenerTestGenera
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/sameTypeNamesWithinSameScopes.kt");
}
+ @Test
+ @TestMetadata("selfPropertyChain.kt")
+ public void testSelfPropertyChain() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/selfPropertyChain.kt");
+ }
+
+ @Test
+ @TestMetadata("selfPropertyChain1.kt")
+ public void testSelfPropertyChain1() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/selfPropertyChain1.kt");
+ }
+
@Test
@TestMetadata("shortenAlreadyImportedClass.kt")
public void testShortenAlreadyImportedClass() throws Exception {
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/selfPropertyChain.kt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/selfPropertyChain.kt
new file mode 100644
index 00000000000..e92d43b8d59
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/selfPropertyChain.kt
@@ -0,0 +1,15 @@
+// FILE: main.kt
+package foo
+
+class Foo {
+ val self = this
+
+ fun selfFun(): Foo = this
+
+
+ fun check() {
+ self.self
+ selfFun().self
+ }
+
+}
\ No newline at end of file
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/selfPropertyChain.txt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/selfPropertyChain.txt
new file mode 100644
index 00000000000..d46b1545802
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/selfPropertyChain.txt
@@ -0,0 +1,8 @@
+Before shortening: fun check() {
+ self.self
+ selfFun().self
+ }
+with DO_NOT_SHORTEN:
+with SHORTEN_IF_ALREADY_IMPORTED:
+with SHORTEN_AND_IMPORT:
+with SHORTEN_AND_STAR_IMPORT:
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/selfPropertyChain1.kt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/selfPropertyChain1.kt
new file mode 100644
index 00000000000..1fac88e0815
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/selfPropertyChain1.kt
@@ -0,0 +1,15 @@
+// FILE: main.kt
+package foo
+
+object Foo {
+ val self = this
+
+ fun selfFun(): Foo = this
+
+
+ fun check() {
+ self.self
+ selfFun().self
+ }
+
+}
\ No newline at end of file
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/selfPropertyChain1.txt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/selfPropertyChain1.txt
new file mode 100644
index 00000000000..d46b1545802
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/selfPropertyChain1.txt
@@ -0,0 +1,8 @@
+Before shortening: fun check() {
+ self.self
+ selfFun().self
+ }
+with DO_NOT_SHORTEN:
+with SHORTEN_IF_ALREADY_IMPORTED:
+with SHORTEN_AND_IMPORT:
+with SHORTEN_AND_STAR_IMPORT: