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