diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt index 04f166e251f..12a197aef4d 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt @@ -427,11 +427,14 @@ class DeclarationsConverter( } modifiers.isAnnotation() && (classKind == ClassKind.ANNOTATION_CLASS) -> { superTypeRefs += implicitAnnotationType + delegatedSuperTypeRef = implicitAnyType } } - val defaultDelegatedSuperTypeRef = implicitAnyType - superTypeRefs.ifEmpty { superTypeRefs += defaultDelegatedSuperTypeRef } + superTypeRefs.ifEmpty { + superTypeRefs += implicitAnyType + delegatedSuperTypeRef = implicitAnyType + } this.superTypeRefs += superTypeRefs @@ -443,7 +446,7 @@ class DeclarationsConverter( hasDefaultConstructor = if (primaryConstructor != null) !primaryConstructor!!.hasValueParameters() else secondaryConstructors.isEmpty() || secondaryConstructors.any { !it.hasValueParameters() }, delegatedSelfTypeRef = selfType, - delegatedSuperTypeRef = delegatedSuperTypeRef ?: defaultDelegatedSuperTypeRef, + delegatedSuperTypeRef = delegatedSuperTypeRef ?: buildImplicitTypeRef(), superTypeCallEntry = superTypeCallEntry ) //parse primary constructor @@ -514,8 +517,11 @@ class DeclarationsConverter( } } - superTypeRefs.ifEmpty { superTypeRefs += implicitAnyType } - val delegatedSuperType = delegatedSuperTypeRef ?: implicitAnyType + superTypeRefs.ifEmpty { + superTypeRefs += implicitAnyType + delegatedSuperTypeRef = implicitAnyType + } + val delegatedSuperType = delegatedSuperTypeRef ?: buildImplicitTypeRef() return withChildClassName(ANONYMOUS_OBJECT_NAME) { buildAnonymousObject { diff --git a/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/LightTree2FirConverterTestCaseGenerated.java b/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/LightTree2FirConverterTestCaseGenerated.java index ac3575eb102..4afd936ab50 100644 --- a/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/LightTree2FirConverterTestCaseGenerated.java +++ b/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/LightTree2FirConverterTestCaseGenerated.java @@ -55,6 +55,11 @@ public class LightTree2FirConverterTestCaseGenerated extends AbstractLightTree2F runTest("compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/constructorInObject.kt"); } + @TestMetadata("constructorOfAnonymousObject.kt") + public void testConstructorOfAnonymousObject() throws Exception { + runTest("compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/constructorOfAnonymousObject.kt"); + } + @TestMetadata("contractDescription.kt") public void testContractDescription() throws Exception { runTest("compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/contractDescription.kt"); @@ -65,6 +70,11 @@ public class LightTree2FirConverterTestCaseGenerated extends AbstractLightTree2F runTest("compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/derivedClass.kt"); } + @TestMetadata("emptyAnonymousObject.kt") + public void testEmptyAnonymousObject() throws Exception { + runTest("compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/emptyAnonymousObject.kt"); + } + @TestMetadata("enums.kt") public void testEnums() throws Exception { runTest("compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/enums.kt"); diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index 8e7ac95eee3..28906d75d1b 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -479,18 +479,21 @@ class RawFirBuilder( } this is KtClass && classKind == ClassKind.ANNOTATION_CLASS -> { container.superTypeRefs += implicitAnnotationType + delegatedSuperTypeRef = implicitAnyType } } val defaultDelegatedSuperTypeRef = when { classKind == ClassKind.ENUM_ENTRY && this is KtClass -> delegatedEnumSuperTypeRef ?: implicitAnyType - else -> implicitAnyType + container.superTypeRefs.isEmpty() -> implicitAnyType + else -> buildImplicitTypeRef() } if (container.superTypeRefs.isEmpty()) { - container.superTypeRefs += defaultDelegatedSuperTypeRef + container.superTypeRefs += implicitAnyType + delegatedSuperTypeRef = implicitAnyType } if (this is KtClass && this.isInterface()) return delegatedSuperTypeRef ?: implicitAnyType diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/F.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/F.txt index a6073165cec..c6b3ab5716e 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/F.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/F.txt @@ -7,7 +7,7 @@ FILE: F.kt } public? final? class B : A { public? constructor(): R|B| { - super() + super<>() } } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/constructorOfAnonymousObject.kt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/constructorOfAnonymousObject.kt new file mode 100644 index 00000000000..10fa01ede56 --- /dev/null +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/constructorOfAnonymousObject.kt @@ -0,0 +1,11 @@ +private fun resolveAccessorCall( + suspendPropertyDescriptor: PropertyDescriptor, + context: TranslationContext +): ResolvedCall { + return object : ResolvedCall { + override fun getStatus() = ResolutionStatus.SUCCESS + + override fun getCandidateDescriptor() = suspendPropertyDescriptor + override fun getResultingDescriptor() = suspendPropertyDescriptor + } +} \ No newline at end of file diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/constructorOfAnonymousObject.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/constructorOfAnonymousObject.txt new file mode 100644 index 00000000000..2e4bb2b9902 --- /dev/null +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/constructorOfAnonymousObject.txt @@ -0,0 +1,22 @@ +FILE: constructorOfAnonymousObject.kt + private final? fun resolveAccessorCall(suspendPropertyDescriptor: PropertyDescriptor, context: TranslationContext): ResolvedCall { + ^resolveAccessorCall object : ResolvedCall { + private constructor(): R|anonymous| { + super<>() + } + + public? open? override fun getStatus(): { + ^getStatus ResolutionStatus#.SUCCESS# + } + + public? open? override fun getCandidateDescriptor(): { + ^getCandidateDescriptor suspendPropertyDescriptor# + } + + public? open? override fun getResultingDescriptor(): { + ^getResultingDescriptor suspendPropertyDescriptor# + } + + } + + } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/emptyAnonymousObject.kt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/emptyAnonymousObject.kt new file mode 100644 index 00000000000..ea846bc72fa --- /dev/null +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/emptyAnonymousObject.kt @@ -0,0 +1,4 @@ + +fun test() { + val x = object {} +} \ No newline at end of file diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/emptyAnonymousObject.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/emptyAnonymousObject.txt new file mode 100644 index 00000000000..84a0f198a2a --- /dev/null +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/emptyAnonymousObject.txt @@ -0,0 +1,10 @@ +FILE: emptyAnonymousObject.kt + public? final? fun test(): R|kotlin/Unit| { + lval x: = object : R|kotlin/Any| { + private constructor(): R|anonymous| { + super() + } + + } + + } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/enums2.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/enums2.txt index 551f18ea322..e8d6796c916 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/enums2.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/enums2.txt @@ -3,13 +3,13 @@ FILE: enums2.kt } public? final? object O1 : Some { private constructor(): R|O1| { - super() + super<>() } } public? final? object O2 : Some { private constructor(): R|O2| { - super() + super<>() } } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/simpleClass.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/simpleClass.txt index 9626811746e..632683ce5d5 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/simpleClass.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/simpleClass.txt @@ -8,7 +8,7 @@ FILE: simpleClass.kt } public? final? class SomeClass : SomeInterface { public? constructor(): R|SomeClass| { - super() + super<>() } private final? val baz: = IntegerLiteral(42) diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/simpleTypeAlias.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/simpleTypeAlias.txt index ab1e1c8ec85..70eb461eaa2 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/simpleTypeAlias.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/simpleTypeAlias.txt @@ -4,7 +4,7 @@ FILE: simpleTypeAlias.kt public? final typealias C = B public? final? class D : C { public? constructor(): R|D| { - super() + super<>() } } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/typeAliasWithGeneric.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/typeAliasWithGeneric.txt index 023a934a6c7..b6be39cce45 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/typeAliasWithGeneric.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/typeAliasWithGeneric.txt @@ -10,7 +10,7 @@ FILE: typeAliasWithGeneric.kt public? final typealias C = B public? final? class D : C { public? constructor(): R|D| { - super() + super<>() } } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/typeParameters.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/typeParameters.txt index 65c35350953..0bf63625a89 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/typeParameters.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/typeParameters.txt @@ -9,7 +9,7 @@ FILE: typeParameters.kt public? final typealias AnyList = List<*> public? abstract class AbstractList : List { public? constructor(): R|AbstractList| { - super() + super<>() } } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/super.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/super.txt index 9ccc1157d44..ca4f4a48838 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/super.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/super.txt @@ -14,7 +14,7 @@ FILE: super.kt } public? final? class C : A, B { public? constructor(): R|C| { - super() + super<>() } public? open? override fun bar(): R|kotlin/Unit| { diff --git a/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/RawFirBuilderTestCaseGenerated.java b/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/RawFirBuilderTestCaseGenerated.java index 00ceb1dc6ee..8a7238052ac 100644 --- a/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/RawFirBuilderTestCaseGenerated.java +++ b/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/RawFirBuilderTestCaseGenerated.java @@ -55,6 +55,11 @@ public class RawFirBuilderTestCaseGenerated extends AbstractRawFirBuilderTestCas runTest("compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/constructorInObject.kt"); } + @TestMetadata("constructorOfAnonymousObject.kt") + public void testConstructorOfAnonymousObject() throws Exception { + runTest("compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/constructorOfAnonymousObject.kt"); + } + @TestMetadata("contractDescription.kt") public void testContractDescription() throws Exception { runTest("compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/contractDescription.kt"); @@ -65,6 +70,11 @@ public class RawFirBuilderTestCaseGenerated extends AbstractRawFirBuilderTestCas runTest("compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/derivedClass.kt"); } + @TestMetadata("emptyAnonymousObject.kt") + public void testEmptyAnonymousObject() throws Exception { + runTest("compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/emptyAnonymousObject.kt"); + } + @TestMetadata("enums.kt") public void testEnums() throws Exception { runTest("compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/enums.kt"); diff --git a/compiler/visualizer/tests/org/jetbrains/kotlin/visualizer/fir/FirVisualizerForRawFirDataGenerated.java b/compiler/visualizer/tests/org/jetbrains/kotlin/visualizer/fir/FirVisualizerForRawFirDataGenerated.java index c75404782da..a992fdce975 100644 --- a/compiler/visualizer/tests/org/jetbrains/kotlin/visualizer/fir/FirVisualizerForRawFirDataGenerated.java +++ b/compiler/visualizer/tests/org/jetbrains/kotlin/visualizer/fir/FirVisualizerForRawFirDataGenerated.java @@ -55,6 +55,11 @@ public class FirVisualizerForRawFirDataGenerated extends AbstractFirVisualizer { runTest("compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/constructorInObject.kt"); } + @TestMetadata("constructorOfAnonymousObject.kt") + public void testConstructorOfAnonymousObject() throws Exception { + runTest("compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/constructorOfAnonymousObject.kt"); + } + @TestMetadata("contractDescription.kt") public void testContractDescription() throws Exception { runTest("compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/contractDescription.kt"); @@ -65,6 +70,11 @@ public class FirVisualizerForRawFirDataGenerated extends AbstractFirVisualizer { runTest("compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/derivedClass.kt"); } + @TestMetadata("emptyAnonymousObject.kt") + public void testEmptyAnonymousObject() throws Exception { + runTest("compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/emptyAnonymousObject.kt"); + } + @TestMetadata("enums.kt") public void testEnums() throws Exception { runTest("compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/enums.kt"); diff --git a/compiler/visualizer/tests/org/jetbrains/kotlin/visualizer/psi/PsiVisualizerForRawFirDataGenerated.java b/compiler/visualizer/tests/org/jetbrains/kotlin/visualizer/psi/PsiVisualizerForRawFirDataGenerated.java index c22cba166ce..191001114f5 100644 --- a/compiler/visualizer/tests/org/jetbrains/kotlin/visualizer/psi/PsiVisualizerForRawFirDataGenerated.java +++ b/compiler/visualizer/tests/org/jetbrains/kotlin/visualizer/psi/PsiVisualizerForRawFirDataGenerated.java @@ -55,6 +55,11 @@ public class PsiVisualizerForRawFirDataGenerated extends AbstractPsiVisualizer { runTest("compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/constructorInObject.kt"); } + @TestMetadata("constructorOfAnonymousObject.kt") + public void testConstructorOfAnonymousObject() throws Exception { + runTest("compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/constructorOfAnonymousObject.kt"); + } + @TestMetadata("contractDescription.kt") public void testContractDescription() throws Exception { runTest("compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/contractDescription.kt"); @@ -65,6 +70,11 @@ public class PsiVisualizerForRawFirDataGenerated extends AbstractPsiVisualizer { runTest("compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/derivedClass.kt"); } + @TestMetadata("emptyAnonymousObject.kt") + public void testEmptyAnonymousObject() throws Exception { + runTest("compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/emptyAnonymousObject.kt"); + } + @TestMetadata("enums.kt") public void testEnums() throws Exception { runTest("compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/enums.kt");