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 8600c2bba00..56be6e1e2c4 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
@@ -470,13 +470,19 @@ private class ElementsToShortenCollector(
private fun FirScope.correspondingClassIdIfExists(): ClassId = when (this) {
is FirNestedClassifierScope -> klass.classId
+ is FirNestedClassifierScopeWithSubstitution -> originalScope.correspondingClassIdIfExists()
is FirClassUseSiteMemberScope -> classId
else -> error("FirScope `$this` is expected to be one of FirNestedClassifierScope and FirClassUseSiteMemberScope to get ClassId")
}
private fun ClassId.idWithoutCompanion() = if (shortClassName == SpecialNames.DEFAULT_NAME_FOR_COMPANION_OBJECT) outerClassId else this
- private fun FirScope.isScopeForClass() = this is FirNestedClassifierScope || this is FirClassUseSiteMemberScope
+ private fun FirScope.isScopeForClass(): Boolean = when {
+ this is FirNestedClassifierScope -> true
+ this is FirNestedClassifierScopeWithSubstitution -> originalScope.isScopeForClass()
+ this is FirClassUseSiteMemberScope -> true
+ else -> false
+ }
/**
* Assuming that both this [FirScope] and [another] are [FirNestedClassifierScope] or [FirClassUseSiteMemberScope] and both of them
@@ -569,6 +575,7 @@ private class ElementsToShortenCollector(
is FirLocalScope -> Local
is FirClassUseSiteMemberScope -> ClassUseSite
is FirNestedClassifierScope -> NestedClassifier
+ is FirNestedClassifierScopeWithSubstitution -> originalScope.toPartialOrder()
is FirExplicitSimpleImportingScope -> ExplicitSimpleImporting
is FirPackageMemberScope -> PackageMember
else -> Unclassified
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 d3e1b3394c1..053b21f1262 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
@@ -466,30 +466,60 @@ public class FirIdeNormalAnalysisSourceModuleReferenceShortenerTestGenerated ext
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnClass.kt");
}
+ @Test
+ @TestMetadata("annotationOnClass_nested.kt")
+ public void testAnnotationOnClass_nested() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnClass_nested.kt");
+ }
+
@Test
@TestMetadata("annotationOnConstructor.kt")
public void testAnnotationOnConstructor() throws Exception {
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnConstructor.kt");
}
+ @Test
+ @TestMetadata("annotationOnConstructor_nested.kt")
+ public void testAnnotationOnConstructor_nested() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnConstructor_nested.kt");
+ }
+
@Test
@TestMetadata("annotationOnParameter.kt")
public void testAnnotationOnParameter() throws Exception {
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnParameter.kt");
}
+ @Test
+ @TestMetadata("annotationOnParameter_nested.kt")
+ public void testAnnotationOnParameter_nested() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnParameter_nested.kt");
+ }
+
@Test
@TestMetadata("contextReceiver.kt")
public void testContextReceiver() throws Exception {
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/contextReceiver.kt");
}
+ @Test
+ @TestMetadata("contextReceiver_nested.kt")
+ public void testContextReceiver_nested() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/contextReceiver_nested.kt");
+ }
+
@Test
@TestMetadata("primaryConstructorParameter.kt")
public void testPrimaryConstructorParameter() throws Exception {
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/primaryConstructorParameter.kt");
}
+ @Test
+ @TestMetadata("primaryConstructorParameter_nested.kt")
+ public void testPrimaryConstructorParameter_nested() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/primaryConstructorParameter_nested.kt");
+ }
+
@Test
@TestMetadata("superType.kt")
public void testSuperType() throws Exception {
@@ -508,23 +538,59 @@ public class FirIdeNormalAnalysisSourceModuleReferenceShortenerTestGenerated ext
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructorArgument.kt");
}
+ @Test
+ @TestMetadata("superTypeConstructorArgument_nested.kt")
+ public void testSuperTypeConstructorArgument_nested() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructorArgument_nested.kt");
+ }
+
+ @Test
+ @TestMetadata("superTypeConstructor_nested.kt")
+ public void testSuperTypeConstructor_nested() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructor_nested.kt");
+ }
+
@Test
@TestMetadata("superTypeDelegation.kt")
public void testSuperTypeDelegation() throws Exception {
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeDelegation.kt");
}
+ @Test
+ @TestMetadata("superTypeDelegation_nested.kt")
+ public void testSuperTypeDelegation_nested() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeDelegation_nested.kt");
+ }
+
@Test
@TestMetadata("superTypeTypeArguments.kt")
public void testSuperTypeTypeArguments() throws Exception {
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeTypeArguments.kt");
}
+ @Test
+ @TestMetadata("superTypeTypeArguments_nested.kt")
+ public void testSuperTypeTypeArguments_nested() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeTypeArguments_nested.kt");
+ }
+
+ @Test
+ @TestMetadata("superType_nested.kt")
+ public void testSuperType_nested() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superType_nested.kt");
+ }
+
@Test
@TestMetadata("typeBound.kt")
public void testTypeBound() throws Exception {
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/typeBound.kt");
}
+
+ @Test
+ @TestMetadata("typeBound_nested.kt")
+ public void testTypeBound_nested() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/typeBound_nested.kt");
+ }
}
}
}
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 d68f6164f61..2b280e28590 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
@@ -466,30 +466,60 @@ public class FirStandaloneNormalAnalysisSourceModuleReferenceShortenerTestGenera
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnClass.kt");
}
+ @Test
+ @TestMetadata("annotationOnClass_nested.kt")
+ public void testAnnotationOnClass_nested() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnClass_nested.kt");
+ }
+
@Test
@TestMetadata("annotationOnConstructor.kt")
public void testAnnotationOnConstructor() throws Exception {
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnConstructor.kt");
}
+ @Test
+ @TestMetadata("annotationOnConstructor_nested.kt")
+ public void testAnnotationOnConstructor_nested() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnConstructor_nested.kt");
+ }
+
@Test
@TestMetadata("annotationOnParameter.kt")
public void testAnnotationOnParameter() throws Exception {
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnParameter.kt");
}
+ @Test
+ @TestMetadata("annotationOnParameter_nested.kt")
+ public void testAnnotationOnParameter_nested() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnParameter_nested.kt");
+ }
+
@Test
@TestMetadata("contextReceiver.kt")
public void testContextReceiver() throws Exception {
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/contextReceiver.kt");
}
+ @Test
+ @TestMetadata("contextReceiver_nested.kt")
+ public void testContextReceiver_nested() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/contextReceiver_nested.kt");
+ }
+
@Test
@TestMetadata("primaryConstructorParameter.kt")
public void testPrimaryConstructorParameter() throws Exception {
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/primaryConstructorParameter.kt");
}
+ @Test
+ @TestMetadata("primaryConstructorParameter_nested.kt")
+ public void testPrimaryConstructorParameter_nested() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/primaryConstructorParameter_nested.kt");
+ }
+
@Test
@TestMetadata("superType.kt")
public void testSuperType() throws Exception {
@@ -508,23 +538,59 @@ public class FirStandaloneNormalAnalysisSourceModuleReferenceShortenerTestGenera
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructorArgument.kt");
}
+ @Test
+ @TestMetadata("superTypeConstructorArgument_nested.kt")
+ public void testSuperTypeConstructorArgument_nested() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructorArgument_nested.kt");
+ }
+
+ @Test
+ @TestMetadata("superTypeConstructor_nested.kt")
+ public void testSuperTypeConstructor_nested() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructor_nested.kt");
+ }
+
@Test
@TestMetadata("superTypeDelegation.kt")
public void testSuperTypeDelegation() throws Exception {
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeDelegation.kt");
}
+ @Test
+ @TestMetadata("superTypeDelegation_nested.kt")
+ public void testSuperTypeDelegation_nested() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeDelegation_nested.kt");
+ }
+
@Test
@TestMetadata("superTypeTypeArguments.kt")
public void testSuperTypeTypeArguments() throws Exception {
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeTypeArguments.kt");
}
+ @Test
+ @TestMetadata("superTypeTypeArguments_nested.kt")
+ public void testSuperTypeTypeArguments_nested() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeTypeArguments_nested.kt");
+ }
+
+ @Test
+ @TestMetadata("superType_nested.kt")
+ public void testSuperType_nested() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superType_nested.kt");
+ }
+
@Test
@TestMetadata("typeBound.kt")
public void testTypeBound() throws Exception {
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/typeBound.kt");
}
+
+ @Test
+ @TestMetadata("typeBound_nested.kt")
+ public void testTypeBound_nested() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/typeBound_nested.kt");
+ }
}
}
}
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnClass_nested.kt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnClass_nested.kt
new file mode 100644
index 00000000000..45615d4f634
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnClass_nested.kt
@@ -0,0 +1,11 @@
+// FILE: main.kt
+
+abstract class Outer {
+ abstract class Nested : Outer()
+
+ annotation class Ann
+
+ @Outer.Ann
+ class Foo : Outer()
+}
+
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnClass_nested.txt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnClass_nested.txt
new file mode 100644
index 00000000000..8309708d818
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnClass_nested.txt
@@ -0,0 +1,8 @@
+Before shortening: @Outer.Ann
+with DO_NOT_SHORTEN:
+with SHORTEN_IF_ALREADY_IMPORTED:
+[type] Outer.Ann
+with SHORTEN_AND_IMPORT:
+[type] Outer.Ann
+with SHORTEN_AND_STAR_IMPORT:
+[type] Outer.Ann
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnConstructor_nested.kt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnConstructor_nested.kt
new file mode 100644
index 00000000000..d129e9ab749
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnConstructor_nested.kt
@@ -0,0 +1,7 @@
+// FILE: main.kt
+
+abstract class Outer {
+ annotation class Ann
+
+ class Foo @Outer.Ann constructor() : Outer()
+}
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnConstructor_nested.txt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnConstructor_nested.txt
new file mode 100644
index 00000000000..8309708d818
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnConstructor_nested.txt
@@ -0,0 +1,8 @@
+Before shortening: @Outer.Ann
+with DO_NOT_SHORTEN:
+with SHORTEN_IF_ALREADY_IMPORTED:
+[type] Outer.Ann
+with SHORTEN_AND_IMPORT:
+[type] Outer.Ann
+with SHORTEN_AND_STAR_IMPORT:
+[type] Outer.Ann
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnParameter_nested.kt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnParameter_nested.kt
new file mode 100644
index 00000000000..6a0dee735bf
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnParameter_nested.kt
@@ -0,0 +1,8 @@
+// FILE: main.kt
+
+abstract class Outer {
+ annotation class Ann
+
+ class Foo(@Outer.Ann val p: Any) : Outer()
+}
+
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnParameter_nested.txt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnParameter_nested.txt
new file mode 100644
index 00000000000..8309708d818
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/annotationOnParameter_nested.txt
@@ -0,0 +1,8 @@
+Before shortening: @Outer.Ann
+with DO_NOT_SHORTEN:
+with SHORTEN_IF_ALREADY_IMPORTED:
+[type] Outer.Ann
+with SHORTEN_AND_IMPORT:
+[type] Outer.Ann
+with SHORTEN_AND_STAR_IMPORT:
+[type] Outer.Ann
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/contextReceiver_nested.kt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/contextReceiver_nested.kt
new file mode 100644
index 00000000000..c443c55ee8c
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/contextReceiver_nested.kt
@@ -0,0 +1,9 @@
+// FILE: main.kt
+
+abstract class Outer {
+ abstract class Nested : Outer()
+
+ context(Outer.Nested)
+ class Foo : Outer.Nested()
+}
+
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/contextReceiver_nested.txt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/contextReceiver_nested.txt
new file mode 100644
index 00000000000..2e417ba1a81
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/contextReceiver_nested.txt
@@ -0,0 +1,8 @@
+Before shortening: Outer.Nested
+with DO_NOT_SHORTEN:
+with SHORTEN_IF_ALREADY_IMPORTED:
+[type] Outer.Nested
+with SHORTEN_AND_IMPORT:
+[type] Outer.Nested
+with SHORTEN_AND_STAR_IMPORT:
+[type] Outer.Nested
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/primaryConstructorParameter_nested.kt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/primaryConstructorParameter_nested.kt
new file mode 100644
index 00000000000..fc658875a26
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/primaryConstructorParameter_nested.kt
@@ -0,0 +1,7 @@
+// FILE: main.kt
+
+abstract class Outer {
+ abstract class Nested : Outer()
+
+ class Foo(val param: Outer.Nested = Outer.Nested()) : Outer.Nested()
+}
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/primaryConstructorParameter_nested.txt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/primaryConstructorParameter_nested.txt
new file mode 100644
index 00000000000..37a1ca8b41a
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/primaryConstructorParameter_nested.txt
@@ -0,0 +1,11 @@
+Before shortening: val param: Outer.Nested = Outer.Nested()
+with DO_NOT_SHORTEN:
+with SHORTEN_IF_ALREADY_IMPORTED:
+[type] Outer.Nested
+[qualifier] Outer.Nested()
+with SHORTEN_AND_IMPORT:
+[type] Outer.Nested
+[qualifier] Outer.Nested()
+with SHORTEN_AND_STAR_IMPORT:
+[type] Outer.Nested
+[qualifier] Outer.Nested()
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructorArgument_nested.kt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructorArgument_nested.kt
new file mode 100644
index 00000000000..d31cd8fdc9c
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructorArgument_nested.kt
@@ -0,0 +1,10 @@
+// FILE: main.kt
+
+abstract class Outer {
+ abstract class Nested(a: Any) : Outer()
+
+ class OtherNested
+
+ class Foo : Outer.Nested(Outer.OtherNested())
+}
+
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructorArgument_nested.txt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructorArgument_nested.txt
new file mode 100644
index 00000000000..ff0aa61cffa
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructorArgument_nested.txt
@@ -0,0 +1,8 @@
+Before shortening: Outer.OtherNested()
+with DO_NOT_SHORTEN:
+with SHORTEN_IF_ALREADY_IMPORTED:
+[qualifier] Outer.OtherNested()
+with SHORTEN_AND_IMPORT:
+[qualifier] Outer.OtherNested()
+with SHORTEN_AND_STAR_IMPORT:
+[qualifier] Outer.OtherNested()
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructor_nested.kt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructor_nested.kt
new file mode 100644
index 00000000000..07f0e8b8448
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructor_nested.kt
@@ -0,0 +1,7 @@
+// FILE: main.kt
+
+abstract class Outer {
+ abstract class Nested : Outer()
+
+ class Foo : Outer.Nested()
+}
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructor_nested.txt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructor_nested.txt
new file mode 100644
index 00000000000..b623ea2e9d6
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructor_nested.txt
@@ -0,0 +1,8 @@
+Before shortening: class Foo : Outer.Nested()
+with DO_NOT_SHORTEN:
+with SHORTEN_IF_ALREADY_IMPORTED:
+[type] Outer.Nested
+with SHORTEN_AND_IMPORT:
+[type] Outer.Nested
+with SHORTEN_AND_STAR_IMPORT:
+[type] Outer.Nested
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeDelegation_nested.kt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeDelegation_nested.kt
new file mode 100644
index 00000000000..e96fa141c5a
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeDelegation_nested.kt
@@ -0,0 +1,11 @@
+// FILE: main.kt
+
+abstract class Outer {
+ abstract class Nested : Outer(), Marker
+
+ interface class Marker
+
+ class MarkerImpl() : Marker
+
+ class Foo : Outer.Nested(), Outer.Marker by Outer.MarkerImpl()
+}
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeDelegation_nested.txt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeDelegation_nested.txt
new file mode 100644
index 00000000000..01584ef6e15
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeDelegation_nested.txt
@@ -0,0 +1,11 @@
+Before shortening: Outer.Marker by Outer.MarkerImpl()
+with DO_NOT_SHORTEN:
+with SHORTEN_IF_ALREADY_IMPORTED:
+[type] Outer.Marker
+[qualifier] Outer.MarkerImpl()
+with SHORTEN_AND_IMPORT:
+[type] Outer.Marker
+[qualifier] Outer.MarkerImpl()
+with SHORTEN_AND_STAR_IMPORT:
+[type] Outer.Marker
+[qualifier] Outer.MarkerImpl()
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeTypeArguments_nested.kt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeTypeArguments_nested.kt
new file mode 100644
index 00000000000..30cdc979c62
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeTypeArguments_nested.kt
@@ -0,0 +1,9 @@
+// FILE: main.kt
+
+abstract class Outer {
+ abstract class Nested : Outer()
+
+ class OtherNested
+
+ class Foo : Outer.Nested { constructor(): super() }
+}
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeTypeArguments_nested.txt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeTypeArguments_nested.txt
new file mode 100644
index 00000000000..2aa2e0c9805
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeTypeArguments_nested.txt
@@ -0,0 +1,11 @@
+Before shortening: Outer.Nested
+with DO_NOT_SHORTEN:
+with SHORTEN_IF_ALREADY_IMPORTED:
+[type] Outer.Nested
+[type] Outer.OtherNested
+with SHORTEN_AND_IMPORT:
+[type] Outer.Nested
+[type] Outer.OtherNested
+with SHORTEN_AND_STAR_IMPORT:
+[type] Outer.Nested
+[type] Outer.OtherNested
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superType_nested.kt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superType_nested.kt
new file mode 100644
index 00000000000..3834a328833
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superType_nested.kt
@@ -0,0 +1,7 @@
+// FILE: main.kt
+
+abstract class Outer {
+ abstract class Nested : Outer()
+
+ class Foo : Outer.Nested { constructor(): super() }
+}
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superType_nested.txt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superType_nested.txt
new file mode 100644
index 00000000000..8d0aa0583ee
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superType_nested.txt
@@ -0,0 +1,8 @@
+Before shortening: class Foo : Outer.Nested { constructor(): super() }
+with DO_NOT_SHORTEN:
+with SHORTEN_IF_ALREADY_IMPORTED:
+[type] Outer.Nested
+with SHORTEN_AND_IMPORT:
+[type] Outer.Nested
+with SHORTEN_AND_STAR_IMPORT:
+[type] Outer.Nested
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/typeBound_nested.kt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/typeBound_nested.kt
new file mode 100644
index 00000000000..cb981de9c52
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/typeBound_nested.kt
@@ -0,0 +1,7 @@
+// FILE: main.kt
+
+abstract class Outer {
+ abstract class Nested : Outer()
+
+ class FooOuter.Nested> : Outer.Nested()
+}
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/typeBound_nested.txt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/typeBound_nested.txt
new file mode 100644
index 00000000000..2e417ba1a81
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/typeBound_nested.txt
@@ -0,0 +1,8 @@
+Before shortening: Outer.Nested
+with DO_NOT_SHORTEN:
+with SHORTEN_IF_ALREADY_IMPORTED:
+[type] Outer.Nested
+with SHORTEN_AND_IMPORT:
+[type] Outer.Nested
+with SHORTEN_AND_STAR_IMPORT:
+[type] Outer.Nested