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 da48a834753..6664124e186 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
@@ -844,12 +844,36 @@ public class FirIdeNormalAnalysisSourceModuleReferenceShortenerTestGenerated ext
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructorArgument_nested.kt");
}
+ @Test
+ @TestMetadata("superTypeConstructorArgument_nested_objectLiteral.kt")
+ public void testSuperTypeConstructorArgument_nested_objectLiteral() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructorArgument_nested_objectLiteral.kt");
+ }
+
+ @Test
+ @TestMetadata("superTypeConstructorArgument_objectLiteral.kt")
+ public void testSuperTypeConstructorArgument_objectLiteral() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructorArgument_objectLiteral.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("superTypeConstructor_nested_objectLiteral.kt")
+ public void testSuperTypeConstructor_nested_objectLiteral() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructor_nested_objectLiteral.kt");
+ }
+
+ @Test
+ @TestMetadata("superTypeConstructor_objectLiteral.kt")
+ public void testSuperTypeConstructor_objectLiteral() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructor_objectLiteral.kt");
+ }
+
@Test
@TestMetadata("superTypeDelegation.kt")
public void testSuperTypeDelegation() 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 cf52bb1bb92..799415cfd27 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
@@ -844,12 +844,36 @@ public class FirStandaloneNormalAnalysisSourceModuleReferenceShortenerTestGenera
runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructorArgument_nested.kt");
}
+ @Test
+ @TestMetadata("superTypeConstructorArgument_nested_objectLiteral.kt")
+ public void testSuperTypeConstructorArgument_nested_objectLiteral() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructorArgument_nested_objectLiteral.kt");
+ }
+
+ @Test
+ @TestMetadata("superTypeConstructorArgument_objectLiteral.kt")
+ public void testSuperTypeConstructorArgument_objectLiteral() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructorArgument_objectLiteral.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("superTypeConstructor_nested_objectLiteral.kt")
+ public void testSuperTypeConstructor_nested_objectLiteral() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructor_nested_objectLiteral.kt");
+ }
+
+ @Test
+ @TestMetadata("superTypeConstructor_objectLiteral.kt")
+ public void testSuperTypeConstructor_objectLiteral() throws Exception {
+ runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructor_objectLiteral.kt");
+ }
+
@Test
@TestMetadata("superTypeDelegation.kt")
public void testSuperTypeDelegation() throws Exception {
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructorArgument_nested_objectLiteral.kt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructorArgument_nested_objectLiteral.kt
new file mode 100644
index 00000000000..7fc16767757
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructorArgument_nested_objectLiteral.kt
@@ -0,0 +1,10 @@
+// FILE: main.kt
+
+abstract class Outer {
+ abstract class Nested(a: Any) : Outer()
+
+ class OtherNested
+
+ val foo = object : Outer.Nested(Outer.OtherNested()) {}
+}
+
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructorArgument_nested_objectLiteral.txt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructorArgument_nested_objectLiteral.txt
new file mode 100644
index 00000000000..ff0aa61cffa
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructorArgument_nested_objectLiteral.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/superTypeConstructorArgument_objectLiteral.kt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructorArgument_objectLiteral.kt
new file mode 100644
index 00000000000..4cedb272dc8
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructorArgument_objectLiteral.kt
@@ -0,0 +1,9 @@
+// FILE: main.kt
+
+abstract class Outer {
+ abstract class Nested(a: Any) : Outer()
+
+ class OtherNested
+}
+
+val foo = object : Outer.Nested(Outer.OtherNested()) {}
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructorArgument_objectLiteral.txt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructorArgument_objectLiteral.txt
new file mode 100644
index 00000000000..ff0aa61cffa
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructorArgument_objectLiteral.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_objectLiteral.kt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructor_nested_objectLiteral.kt
new file mode 100644
index 00000000000..efda8fd3f53
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructor_nested_objectLiteral.kt
@@ -0,0 +1,8 @@
+// FILE: main.kt
+
+abstract class Outer {
+ abstract class Nested : Outer()
+
+ val foo = object : Outer.Nested() {}
+}
+
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructor_nested_objectLiteral.txt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructor_nested_objectLiteral.txt
new file mode 100644
index 00000000000..ae53c44619e
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructor_nested_objectLiteral.txt
@@ -0,0 +1,8 @@
+Before shortening: val foo = object : 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/superTypeConstructor_objectLiteral.kt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructor_objectLiteral.kt
new file mode 100644
index 00000000000..5658ba03410
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructor_objectLiteral.kt
@@ -0,0 +1,7 @@
+// FILE: main.kt
+
+abstract class Outer {
+ abstract class Nested : Outer()
+}
+
+val foo = object : Outer.Nested() {}
\ No newline at end of file
diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructor_objectLiteral.txt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructor_objectLiteral.txt
new file mode 100644
index 00000000000..096729905da
--- /dev/null
+++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/superTypeConstructor_objectLiteral.txt
@@ -0,0 +1,7 @@
+Before shortening: val foo = object : Outer.Nested() {}
+with DO_NOT_SHORTEN:
+with SHORTEN_IF_ALREADY_IMPORTED:
+with SHORTEN_AND_IMPORT:
+[type] Outer.Nested
+with SHORTEN_AND_STAR_IMPORT:
+[type] Outer.Nested
diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/ContextCollector.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/ContextCollector.kt
index dfef5358dc4..d958b0e8eab 100644
--- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/ContextCollector.kt
+++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/ContextCollector.kt
@@ -398,6 +398,15 @@ private class ContextCollectorVisitor(
}
}
+ /**
+ * Same as [processClassHeader], but for anonymous objects.
+ *
+ * N.B. Anonymous classes cannot have its own explicit type parameters, so we do not process them.
+ */
+ private fun Processor.processAnonymousObjectHeader(anonymousObject: FirAnonymousObject) {
+ processList(anonymousObject.superTypeRefs)
+ }
+
override fun visitConstructor(constructor: FirConstructor) = withProcessor(constructor) {
dumpContext(constructor, ContextKind.SELF)
@@ -624,6 +633,8 @@ private class ContextCollectorVisitor(
processSignatureAnnotations(anonymousObject)
onActiveBody {
+ processAnonymousObjectHeader(anonymousObject)
+
context.withAnonymousObject(anonymousObject, holder) {
dumpContext(anonymousObject, ContextKind.BODY)
@@ -632,7 +643,6 @@ private class ContextCollectorVisitor(
}
}
}
-
}
override fun visitBlock(block: FirBlock) = withProcessor(block) {
diff --git a/analysis/low-level-api-fir/testData/contextCollector/classHeaderPositions/superTypeCallArgumentsExpression_objectLiteral.kt b/analysis/low-level-api-fir/testData/contextCollector/classHeaderPositions/superTypeCallArgumentsExpression_objectLiteral.kt
new file mode 100644
index 00000000000..518239e1b17
--- /dev/null
+++ b/analysis/low-level-api-fir/testData/contextCollector/classHeaderPositions/superTypeCallArgumentsExpression_objectLiteral.kt
@@ -0,0 +1,9 @@
+package test
+
+open class Base(param: Nested) {
+ class Nested
+}
+
+val property: Base.Nested = Base.Nested()
+
+val child = object : Base(property) {}
\ No newline at end of file
diff --git a/analysis/low-level-api-fir/testData/contextCollector/classHeaderPositions/superTypeCallArgumentsExpression_objectLiteral.txt b/analysis/low-level-api-fir/testData/contextCollector/classHeaderPositions/superTypeCallArgumentsExpression_objectLiteral.txt
new file mode 100644
index 00000000000..df4827ba345
--- /dev/null
+++ b/analysis/low-level-api-fir/testData/contextCollector/classHeaderPositions/superTypeCallArgumentsExpression_objectLiteral.txt
@@ -0,0 +1,43 @@
+Tower Data Context:
+ Element 0
+ Scope: FirDefaultStarImportingScope
+ Element 1
+ Scope: FirExplicitStarImportingScope
+ Element 2
+ Scope: FirDefaultSimpleImportingScope
+ Element 3
+ Scope: FirDefaultSimpleImportingScope
+ Element 4
+ Scope: FirPackageMemberScope
+ Element 5
+ Scope: FirExplicitSimpleImportingScope
+ Element 6
+ Scope: FirNestedClassifierScopeWithSubstitution
+ Classifiers:
+ FirRegularClassSymbol public final class Nested : R|kotlin/Any|
+ Static scope owner symbol: FirRegularClassSymbol public open class Base : R|kotlin/Any|
+
+FILE: [ResolvedTo(IMPORTS)] superTypeCallArgumentsExpression_objectLiteral.kt
+ public open [ResolvedTo(STATUS)] class Base : R|kotlin/Any| {
+ public [ResolvedTo(STATUS)] constructor([ResolvedTo(STATUS)] param: R|test/Base.Nested|): R|test/Base| {
+ LAZY_super
+ }
+
+ public final [ResolvedTo(STATUS)] class Nested : R|kotlin/Any| {
+ public? [ResolvedTo(RAW_FIR)] constructor(): R|test/Base.Nested| {
+ LAZY_super
+ }
+
+ }
+
+ }
+ public final [ResolvedTo(CONTRACTS)] val property: R|test/Base.Nested| = Base#.Nested#()
+ public [ResolvedTo(CONTRACTS)] get(): R|test/Base.Nested|
+ public final [ResolvedTo(BODY_RESOLVE)] val child: R|test/Base| = object : R|test/Base| {
+ private [ResolvedTo(BODY_RESOLVE)] constructor(): R|test/| {
+ super(R|test/property|)
+ }
+
+ }
+
+ public [ResolvedTo(BODY_RESOLVE)] get(): R|test/Base|
diff --git a/analysis/low-level-api-fir/testData/contextCollector/classHeaderPositions/superTypeCallee_objectLiteral.kt b/analysis/low-level-api-fir/testData/contextCollector/classHeaderPositions/superTypeCallee_objectLiteral.kt
new file mode 100644
index 00000000000..12bc68749fe
--- /dev/null
+++ b/analysis/low-level-api-fir/testData/contextCollector/classHeaderPositions/superTypeCallee_objectLiteral.kt
@@ -0,0 +1,7 @@
+package test
+
+open class Base {
+ class Nested
+}
+
+val child = object : Base() {}
diff --git a/analysis/low-level-api-fir/testData/contextCollector/classHeaderPositions/superTypeCallee_objectLiteral.txt b/analysis/low-level-api-fir/testData/contextCollector/classHeaderPositions/superTypeCallee_objectLiteral.txt
new file mode 100644
index 00000000000..bdfd805b5c9
--- /dev/null
+++ b/analysis/low-level-api-fir/testData/contextCollector/classHeaderPositions/superTypeCallee_objectLiteral.txt
@@ -0,0 +1,36 @@
+Tower Data Context:
+ Element 0
+ Scope: FirDefaultStarImportingScope
+ Element 1
+ Scope: FirExplicitStarImportingScope
+ Element 2
+ Scope: FirDefaultSimpleImportingScope
+ Element 3
+ Scope: FirDefaultSimpleImportingScope
+ Element 4
+ Scope: FirPackageMemberScope
+ Element 5
+ Scope: FirExplicitSimpleImportingScope
+
+FILE: [ResolvedTo(IMPORTS)] superTypeCallee_objectLiteral.kt
+ public open [ResolvedTo(STATUS)] class Base : R|kotlin/Any| {
+ public [ResolvedTo(STATUS)] constructor(): R|test/Base| {
+ LAZY_super
+ }
+
+ public? final? [ResolvedTo(RAW_FIR)] class Nested : R|kotlin/Any| {
+ public? [ResolvedTo(RAW_FIR)] constructor(): R|test/Base.Nested| {
+ LAZY_super
+ }
+
+ }
+
+ }
+ public final [ResolvedTo(BODY_RESOLVE)] val child: R|test/Base| = object : R|test/Base| {
+ private [ResolvedTo(BODY_RESOLVE)] constructor(): R|test/| {
+ super()
+ }
+
+ }
+
+ public [ResolvedTo(BODY_RESOLVE)] get(): R|test/Base|
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/ContextCollectorSourceTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/ContextCollectorSourceTestGenerated.java
index d221b85be83..c8c88cf7172 100644
--- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/ContextCollectorSourceTestGenerated.java
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/ContextCollectorSourceTestGenerated.java
@@ -159,6 +159,12 @@ public class ContextCollectorSourceTestGenerated extends AbstractContextCollecto
runTest("analysis/low-level-api-fir/testData/contextCollector/classHeaderPositions/superTypeCallArgumentsExpression.kt");
}
+ @Test
+ @TestMetadata("superTypeCallArgumentsExpression_objectLiteral.kt")
+ public void testSuperTypeCallArgumentsExpression_objectLiteral() throws Exception {
+ runTest("analysis/low-level-api-fir/testData/contextCollector/classHeaderPositions/superTypeCallArgumentsExpression_objectLiteral.kt");
+ }
+
@Test
@TestMetadata("superTypeCallArgumentsTypeRef.kt")
public void testSuperTypeCallArgumentsTypeRef() throws Exception {
@@ -177,6 +183,12 @@ public class ContextCollectorSourceTestGenerated extends AbstractContextCollecto
runTest("analysis/low-level-api-fir/testData/contextCollector/classHeaderPositions/superTypeCalleeGenerics.kt");
}
+ @Test
+ @TestMetadata("superTypeCallee_objectLiteral.kt")
+ public void testSuperTypeCallee_objectLiteral() throws Exception {
+ runTest("analysis/low-level-api-fir/testData/contextCollector/classHeaderPositions/superTypeCallee_objectLiteral.kt");
+ }
+
@Test
@TestMetadata("superTypeDelegatedExpression.kt")
public void testSuperTypeDelegatedExpression() throws Exception {