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 cb63830eae0..e461d6ab0ee 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
@@ -375,7 +375,7 @@ private class ElementsToShortenCollector(
else -> null
}?.unwrapNullability() as? KtUserType ?: return
- if (!typeElement.textRange.intersects(selection)) return
+ if (typeElement.referenceExpression?.textRange?.intersects(selection) != true) return
if (typeElement.qualifier == null) return
val classifierId = nonErrorResolvedTypeRef.type.lowerBoundIfFlexible().candidateClassId ?: return
@@ -896,9 +896,12 @@ private class ElementsToShortenCollector(
if (!canBePossibleToDropReceiver(functionCall)) return
val qualifiedCallExpression = functionCall.psi as? KtDotQualifiedExpression ?: return
- if (!qualifiedCallExpression.textRange.intersects(selection)) return
val callExpression = qualifiedCallExpression.selectorExpression as? KtCallExpression ?: return
+ val calleeTextRange = callExpression.calleeExpression?.textRange
+ val qualifierTextRange = qualifiedCallExpression.receiverExpression.textRange
+ if (calleeTextRange?.intersects(selection) != true && !qualifierTextRange.intersects(selection)) return
+
val calleeReference = functionCall.calleeReference
val calledSymbol = findUnambiguousReferencedCallableId(calleeReference) ?: 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 15d2b7119d3..6533580fbe4 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
@@ -172,6 +172,12 @@ public class FirIdeNormalAnalysisSourceModuleReferenceShortenerTestGenerated ext
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/companionUsedOutOfClass.kt");
}
+ @Test
+ @TestMetadata("constructorParameter.kt")
+ public void testConstructorParameter() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/constructorParameter.kt");
+ }
+
@Test
@TestMetadata("contextReceiver.kt")
public void testContextReceiver() throws Exception {
@@ -376,6 +382,12 @@ public class FirIdeNormalAnalysisSourceModuleReferenceShortenerTestGenerated ext
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/superEntry.kt");
}
+ @Test
+ @TestMetadata("typeArgument.kt")
+ public void testTypeArgument() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/typeArgument.kt");
+ }
+
@Test
@TestMetadata("typeParams.kt")
public void testTypeParams() 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 ab00d0d2528..eb2c9c47ffa 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
@@ -172,6 +172,12 @@ public class FirStandaloneNormalAnalysisSourceModuleReferenceShortenerTestGenera
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/companionUsedOutOfClass.kt");
}
+ @Test
+ @TestMetadata("constructorParameter.kt")
+ public void testConstructorParameter() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/constructorParameter.kt");
+ }
+
@Test
@TestMetadata("contextReceiver.kt")
public void testContextReceiver() throws Exception {
@@ -376,6 +382,12 @@ public class FirStandaloneNormalAnalysisSourceModuleReferenceShortenerTestGenera
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/superEntry.kt");
}
+ @Test
+ @TestMetadata("typeArgument.kt")
+ public void testTypeArgument() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/typeArgument.kt");
+ }
+
@Test
@TestMetadata("typeParams.kt")
public void testTypeParams() throws Exception {
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/constructorParameter.kt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/constructorParameter.kt
new file mode 100644
index 00000000000..aa94403058d
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/constructorParameter.kt
@@ -0,0 +1,14 @@
+// FILE: main.kt
+import dependency.A
+
+fun test() {
+ val b = A.B(dependency.Foo())
+}
+// FILE: dependency.kt
+package dependency
+
+class Foo
+
+sealed class A {
+ class B(foo: Foo): A()
+}
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/constructorParameter.txt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/constructorParameter.txt
new file mode 100644
index 00000000000..4a5ea8ba21d
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/constructorParameter.txt
@@ -0,0 +1,7 @@
+Before shortening: dependency.Foo()
+with DO_NOT_SHORTEN:
+with SHORTEN_IF_ALREADY_IMPORTED:
+with SHORTEN_AND_IMPORT:
+[qualifier] dependency.Foo()
+with SHORTEN_AND_STAR_IMPORT:
+[qualifier] dependency.Foo()
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/typeArgument.kt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/typeArgument.kt
new file mode 100644
index 00000000000..ca96d9c02c6
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/typeArgument.kt
@@ -0,0 +1,14 @@
+// FILE: main.kt
+import dependency.A
+
+fun test() {
+ val b: A.B<dependency.Foo>
+}
+// FILE: dependency.kt
+package dependency
+
+class Foo
+
+sealed class A {
+ class B: A()
+}
\ No newline at end of file
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/typeArgument.txt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/typeArgument.txt
new file mode 100644
index 00000000000..737efb6d0e0
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/typeArgument.txt
@@ -0,0 +1,7 @@
+Before shortening: dependency.Foo
+with DO_NOT_SHORTEN:
+with SHORTEN_IF_ALREADY_IMPORTED:
+with SHORTEN_AND_IMPORT:
+[type] dependency.Foo
+with SHORTEN_AND_STAR_IMPORT:
+[type] dependency.Foo