From 90102ad8b77a393a1367d747bf97b895b18d78f0 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Tue, 10 Oct 2023 16:02:04 +0200 Subject: [PATCH] [LL FIR] avoid body resolve during getOrBuildFir for super types This also covers a case with annotations on a super type entry ^KT-61789 Fixed --- .../fir/element/builder/FirElementBuilder.kt | 17 ++++++++++- .../annotations/superCallAnnotation.txt | 12 ++++---- .../annotations/superCallAnnotation2.txt | 10 +++---- .../annotations/superCallAnnotationScript.txt | 12 ++++---- .../getOrBuildFir/calls/superType.txt | 10 +++---- .../getOrBuildFir/calls/superTypeScript.txt | 10 +++---- .../getOrBuildFir/types/superType.txt | 10 +++---- .../getOrBuildFir/types/superType2.txt | 10 +++---- .../getOrBuildFir/types/superType3.txt | 12 ++++---- .../types/superTypeAndGeneratedProperty.txt | 18 ++++++------ .../getOrBuildFir/types/superTypeInObject.txt | 12 ++++---- .../types/superTypeInObject2.txt | 10 +++---- .../types/superTypeInObject3.txt | 12 ++++---- .../types/superTypeOnEnumClass.txt | 28 +++++++++---------- 14 files changed, 97 insertions(+), 86 deletions(-) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/element/builder/FirElementBuilder.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/element/builder/FirElementBuilder.kt index 48f19710856..e3718983eb3 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/element/builder/FirElementBuilder.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/element/builder/FirElementBuilder.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.fir.FirAnnotationContainer import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.correspondingProperty import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration +import org.jetbrains.kotlin.fir.declarations.FirClass import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.declarations.FirProperty @@ -160,7 +161,13 @@ internal class FirElementBuilder( element = element, firResolveSession = firResolveSession, anchorElementProvider = { it.parentsOfType(withSelf = true).lastOrNull() }, - declarationProvider = { it.parent as? KtDeclaration }, + declarationProvider = { + when (val parent = it.parent) { + is KtDeclaration -> parent + is KtSuperTypeListEntry, is KtConstructorCalleeExpression -> parent.parentOfType() + else -> null + } + }, resolveAndFindFirForAnchor = { declaration, anchor -> declaration.resolveAndFindTypeRefAnchor(anchor) }, )?.let { firElement -> if (firElement is FirReceiverParameter) { @@ -202,6 +209,14 @@ internal class FirElementBuilder( } } + if (this is FirClass) { + for (typeRef in superTypeRefs) { + if (typeRef.psi == typeReference) { + return typeRef + } + } + } + return null } diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/annotations/superCallAnnotation.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/annotations/superCallAnnotation.txt index c1ec58c23f3..e78ac5ddd8a 100644 --- a/analysis/low-level-api-fir/testData/getOrBuildFir/annotations/superCallAnnotation.txt +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/annotations/superCallAnnotation.txt @@ -13,15 +13,15 @@ FILE: [ResolvedTo(IMPORTS)] superCallAnnotation.kt } } - public open [ResolvedTo(STATUS)] class A : R|kotlin/Any| { - public [ResolvedTo(STATUS)] [ContainingClassKey=A] constructor(): R|A| { + public? open [ResolvedTo(SUPER_TYPES)] class A : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor(): R|A| { LAZY_super } } - public final [ResolvedTo(BODY_RESOLVE)] class B : R|@R|Anno|() A| { - public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=B] constructor(): R|B| { - super() + public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] class B : R|@R|Anno|() A| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=B] constructor(): R|B| { + LAZY_super<@R|Anno|[Types]() A> } - } + } \ No newline at end of file diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/annotations/superCallAnnotation2.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/annotations/superCallAnnotation2.txt index 220eafa20d6..ce7e73b6195 100644 --- a/analysis/low-level-api-fir/testData/getOrBuildFir/annotations/superCallAnnotation2.txt +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/annotations/superCallAnnotation2.txt @@ -13,11 +13,11 @@ FILE: [ResolvedTo(IMPORTS)] superCallAnnotation2.kt } } - public abstract [ResolvedTo(STATUS)] interface A : R|kotlin/Any| { + public? final? [ResolvedTo(SUPER_TYPES)] interface A : R|kotlin/Any| { } - public final [ResolvedTo(BODY_RESOLVE)] class B : R|@R|Anno|() A| { - public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=B] constructor(): R|B| { - super() + public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] class B : R|@R|Anno|() A| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=B] constructor(): R|B| { + LAZY_super<> } - } + } \ No newline at end of file diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/annotations/superCallAnnotationScript.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/annotations/superCallAnnotationScript.txt index aa1abb1e38e..adfa21dfa0a 100644 --- a/analysis/low-level-api-fir/testData/getOrBuildFir/annotations/superCallAnnotationScript.txt +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/annotations/superCallAnnotationScript.txt @@ -18,16 +18,16 @@ FILE: [ResolvedTo(IMPORTS)] superCallAnnotationScript.kts } - public open [ResolvedTo(STATUS)] class A : R|kotlin/Any| { - public [ResolvedTo(STATUS)] [ContainingClassKey=A] constructor(): R|A| { + public? open [ResolvedTo(SUPER_TYPES)] class A : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor(): R|A| { LAZY_super } } - public final [ResolvedTo(BODY_RESOLVE)] class B : R|@R|Anno|() A| { - public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=B] constructor(): R|B| { - super() + public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] class B : R|@R|Anno|() A| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=B] constructor(): R|B| { + LAZY_super<@R|Anno|[Types]() A> } - } + } \ No newline at end of file diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/calls/superType.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/calls/superType.txt index 5d9047f5cec..d720d4e7583 100644 --- a/analysis/low-level-api-fir/testData/getOrBuildFir/calls/superType.txt +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/calls/superType.txt @@ -7,11 +7,11 @@ R|A| FIR FILE: FILE: [ResolvedTo(IMPORTS)] superType.kt - public abstract [ResolvedTo(STATUS)] interface A : R|kotlin/Any| { + public? final? [ResolvedTo(SUPER_TYPES)] interface A : R|kotlin/Any| { } - public final [ResolvedTo(BODY_RESOLVE)] class C : R|A| { - public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=C] constructor(): R|C| { - super() + public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] class C : R|A| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=C] constructor(): R|C| { + LAZY_super<> } - } + } \ No newline at end of file diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/calls/superTypeScript.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/calls/superTypeScript.txt index 73bb9db3d51..52bab2765c4 100644 --- a/analysis/low-level-api-fir/testData/getOrBuildFir/calls/superTypeScript.txt +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/calls/superTypeScript.txt @@ -11,12 +11,12 @@ FILE: [ResolvedTo(IMPORTS)] superTypeScript.kts SCRIPT: [ResolvedTo(TYPES)] [ResolvedTo(RAW_FIR)] lval args: R|kotlin/Array| - public abstract [ResolvedTo(STATUS)] interface A : R|kotlin/Any| { + public? final? [ResolvedTo(SUPER_TYPES)] interface A : R|kotlin/Any| { } - public final [ResolvedTo(BODY_RESOLVE)] class C : R|A| { - public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=C] constructor(): R|C| { - super() + public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] class C : R|A| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=C] constructor(): R|C| { + LAZY_super<> } - } + } \ No newline at end of file diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/types/superType.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/types/superType.txt index c732eec1f16..abae9ddfd4a 100644 --- a/analysis/low-level-api-fir/testData/getOrBuildFir/types/superType.txt +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/types/superType.txt @@ -7,15 +7,15 @@ R|A| FIR FILE: FILE: [ResolvedTo(IMPORTS)] superType.kt - public open [ResolvedTo(STATUS)] class A : R|kotlin/Any| { - public [ResolvedTo(STATUS)] [ContainingClassKey=A] constructor(): R|A| { + public? open [ResolvedTo(SUPER_TYPES)] class A : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor(): R|A| { LAZY_super } } - public final [ResolvedTo(BODY_RESOLVE)] class B : R|A| { - public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=B] constructor(): R|B| { - super() + public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] class B : R|A| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=B] constructor(): R|B| { + LAZY_super } } \ No newline at end of file diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/types/superType2.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/types/superType2.txt index 0a02cbc4ea6..ddbfd676016 100644 --- a/analysis/low-level-api-fir/testData/getOrBuildFir/types/superType2.txt +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/types/superType2.txt @@ -7,11 +7,11 @@ R|A| FIR FILE: FILE: [ResolvedTo(IMPORTS)] superType2.kt - public abstract [ResolvedTo(STATUS)] interface A : R|kotlin/Any| { + public? final? [ResolvedTo(SUPER_TYPES)] interface A : R|kotlin/Any| { } - public final [ResolvedTo(BODY_RESOLVE)] class B : R|A| { - public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=B] constructor(): R|B| { - super() + public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] class B : R|A| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=B] constructor(): R|B| { + LAZY_super<> } - } + } \ No newline at end of file diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/types/superType3.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/types/superType3.txt index 9a0422f5343..7d170467d71 100644 --- a/analysis/low-level-api-fir/testData/getOrBuildFir/types/superType3.txt +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/types/superType3.txt @@ -7,13 +7,13 @@ R|A| FIR FILE: FILE: [ResolvedTo(IMPORTS)] superType3.kt - public abstract [ResolvedTo(STATUS)] interface A : R|kotlin/Any| { + public? final? [ResolvedTo(SUPER_TYPES)] interface A : R|kotlin/Any| { } - public final [ResolvedTo(BODY_RESOLVE)] [DelegateFieldsMapKey={0=FirFieldSymbol /B.$$delegate_0}] class B : R|A| { - public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=B] constructor(): R|B| { - super() + public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] [DelegateFieldsMapKey={0=FirFieldSymbol /B.$$delegate_0}] class B : R|A| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=B] constructor(): R|B| { + LAZY_super<> } - private final [ResolvedTo(BODY_RESOLVE)] field $$delegate_0: R|A| = # + private final [ResolvedTo(RAW_FIR)] field $$delegate_0: A = LAZY_EXPRESSION - } + } \ No newline at end of file diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/types/superTypeAndGeneratedProperty.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/types/superTypeAndGeneratedProperty.txt index fbe0a61f832..396abe28a80 100644 --- a/analysis/low-level-api-fir/testData/getOrBuildFir/types/superTypeAndGeneratedProperty.txt +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/types/superTypeAndGeneratedProperty.txt @@ -7,21 +7,19 @@ R|A| FIR FILE: FILE: [ResolvedTo(IMPORTS)] superTypeAndGeneratedProperty.kt - public open [ResolvedTo(STATUS)] class A : R|kotlin/Any| { - public [ResolvedTo(STATUS)] [ContainingClassKey=A] constructor(): R|A| { + public? open [ResolvedTo(SUPER_TYPES)] class A : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor(): R|A| { LAZY_super } } - public final [ResolvedTo(BODY_RESOLVE)] class B : R|A| { - public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=B] constructor([ResolvedTo(BODY_RESOLVE)] [CorrespondingProperty=/B.prop] prop: R|kotlin/String| = (R|/foo|())): R|B| { - super() + public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] class B : R|A| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=B] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=/B.prop] prop: String = LAZY_EXPRESSION): R|B| { + LAZY_super } - public final [ResolvedTo(BODY_RESOLVE)] [IsFromPrimaryConstructor=true] val prop: R|kotlin/String| = R|/prop| - public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=B] get(): R|kotlin/String| + public? final? [ResolvedTo(RAW_FIR)] [IsFromPrimaryConstructor=true] val prop: String = R|/prop| + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=B] get(): String } - public final [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] fun foo(): R|kotlin/Int| { - ^foo Int(42) - } + public? final? [ResolvedTo(RAW_FIR)] fun foo(): { LAZY_BLOCK } \ No newline at end of file diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/types/superTypeInObject.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/types/superTypeInObject.txt index 61c1857e51c..58b2fd7fc78 100644 --- a/analysis/low-level-api-fir/testData/getOrBuildFir/types/superTypeInObject.txt +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/types/superTypeInObject.txt @@ -7,15 +7,15 @@ R|A| FIR FILE: FILE: [ResolvedTo(IMPORTS)] superTypeInObject.kt - public open [ResolvedTo(STATUS)] class A : R|kotlin/Any| { - public [ResolvedTo(STATUS)] [ContainingClassKey=A] constructor(): R|A| { + public? open [ResolvedTo(SUPER_TYPES)] class A : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor(): R|A| { LAZY_super } } - public final [ResolvedTo(BODY_RESOLVE)] object B : R|A| { - private [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=B] constructor(): R|B| { - super() + public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] object B : R|A| { + private [ResolvedTo(RAW_FIR)] [ContainingClassKey=B] constructor(): R|B| { + LAZY_super } - } + } \ No newline at end of file diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/types/superTypeInObject2.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/types/superTypeInObject2.txt index 02e9a15a6c8..0d879c7f9b9 100644 --- a/analysis/low-level-api-fir/testData/getOrBuildFir/types/superTypeInObject2.txt +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/types/superTypeInObject2.txt @@ -7,11 +7,11 @@ R|A| FIR FILE: FILE: [ResolvedTo(IMPORTS)] superTypeInObject2.kt - public abstract [ResolvedTo(STATUS)] interface A : R|kotlin/Any| { + public? final? [ResolvedTo(SUPER_TYPES)] interface A : R|kotlin/Any| { } - public final [ResolvedTo(BODY_RESOLVE)] object B : R|A| { - private [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=B] constructor(): R|B| { - super() + public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] object B : R|A| { + private [ResolvedTo(RAW_FIR)] [ContainingClassKey=B] constructor(): R|B| { + LAZY_super<> } - } + } \ No newline at end of file diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/types/superTypeInObject3.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/types/superTypeInObject3.txt index f2c9fca8e61..988a949d1ed 100644 --- a/analysis/low-level-api-fir/testData/getOrBuildFir/types/superTypeInObject3.txt +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/types/superTypeInObject3.txt @@ -7,13 +7,13 @@ R|A| FIR FILE: FILE: [ResolvedTo(IMPORTS)] superTypeInObject3.kt - public abstract [ResolvedTo(STATUS)] interface A : R|kotlin/Any| { + public? final? [ResolvedTo(SUPER_TYPES)] interface A : R|kotlin/Any| { } - public final [ResolvedTo(BODY_RESOLVE)] [DelegateFieldsMapKey={0=FirFieldSymbol /B.$$delegate_0}] object B : R|A| { - private [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=B] constructor(): R|B| { - super() + public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] [DelegateFieldsMapKey={0=FirFieldSymbol /B.$$delegate_0}] object B : R|A| { + private [ResolvedTo(RAW_FIR)] [ContainingClassKey=B] constructor(): R|B| { + LAZY_super<> } - private final [ResolvedTo(BODY_RESOLVE)] field $$delegate_0: R|A| = # + private final [ResolvedTo(RAW_FIR)] field $$delegate_0: A = LAZY_EXPRESSION - } + } \ No newline at end of file diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/types/superTypeOnEnumClass.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/types/superTypeOnEnumClass.txt index 21504ed02e9..233fc137d4d 100644 --- a/analysis/low-level-api-fir/testData/getOrBuildFir/types/superTypeOnEnumClass.txt +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/types/superTypeOnEnumClass.txt @@ -7,28 +7,26 @@ FIR element rendered: FIR FILE: FILE: [ResolvedTo(IMPORTS)] superTypeOnEnumClass.kt - public final [ResolvedTo(BODY_RESOLVE)] enum class MyClass : , R|kotlin/Enum| { - private [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=MyClass] constructor([ResolvedTo(BODY_RESOLVE)] [CorrespondingProperty=/MyClass.i] i: R|kotlin/Int| = R|/foo|()): R|MyClass| { - super|>() + public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] enum class MyClass : , R|kotlin/Enum| { + private [ResolvedTo(RAW_FIR)] [ContainingClassKey=MyClass] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=/MyClass.i] i: Int = LAZY_EXPRESSION): R|MyClass| { + LAZY_super|> } - public final [ResolvedTo(BODY_RESOLVE)] [IsFromPrimaryConstructor=true] val i: R|kotlin/Int| = R|/i| - public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=MyClass] get(): R|kotlin/Int| + public? final? [ResolvedTo(RAW_FIR)] [IsFromPrimaryConstructor=true] val i: Int = R|/i| + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=MyClass] get(): Int - public final static [ResolvedTo(STATUS)] [ContainingClassKey=MyClass] enum entry ENTRY1: R|MyClass| = LAZY_EXPRESSION - public final static [ResolvedTo(STATUS)] [ContainingClassKey=MyClass] enum entry ENTRY2: R|MyClass| = LAZY_EXPRESSION - public final [ResolvedTo(STATUS)] fun boo([ResolvedTo(STATUS)] a: R|kotlin/String|): R|kotlin/Unit| { LAZY_BLOCK } + public final static [ResolvedTo(RAW_FIR)] [ContainingClassKey=MyClass] enum entry ENTRY1: R|MyClass| = LAZY_EXPRESSION + public final static [ResolvedTo(RAW_FIR)] [ContainingClassKey=MyClass] enum entry ENTRY2: R|MyClass| = LAZY_EXPRESSION + public? final? [ResolvedTo(RAW_FIR)] fun boo([ResolvedTo(RAW_FIR)] a: String): R|kotlin/Unit| { LAZY_BLOCK } - public final static [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=MyClass] fun values(): R|kotlin/Array| { + public final static [ResolvedTo(RAW_FIR)] [ContainingClassKey=MyClass] fun values(): R|kotlin/Array| { } - public final static [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=MyClass] fun valueOf([ResolvedTo(BODY_RESOLVE)] value: R|kotlin/String|): R|MyClass| { + public final static [ResolvedTo(RAW_FIR)] [ContainingClassKey=MyClass] fun valueOf([ResolvedTo(RAW_FIR)] value: R|kotlin/String|): R|MyClass| { } - public final static [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=MyClass] val entries: R|kotlin/enums/EnumEntries| - public [ResolvedTo(BODY_RESOLVE)] get(): R|kotlin/enums/EnumEntries| + public final static [ResolvedTo(RAW_FIR)] [ContainingClassKey=MyClass] val entries: R|kotlin/enums/EnumEntries| + public [ResolvedTo(RAW_FIR)] get(): R|kotlin/enums/EnumEntries| } - public final [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] fun foo(): R|kotlin/Int| { - ^foo Int(42) - } \ No newline at end of file + public? final? [ResolvedTo(RAW_FIR)] fun foo(): { LAZY_BLOCK } \ No newline at end of file