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 {