From bcf1389ae58185338019496050e180e28d324960 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Sat, 3 Dec 2022 02:56:51 +0900 Subject: [PATCH] [LL API] Fix enum value lazy analysis (KTIJ-23833) ^KTIJ-23833 Fixed --- ...edAnnotationArgumentsResolveTransformer.kt | 4 +- .../lazyResolve/annotationParameters.txt | 12 +- .../testdata/lazyResolve/classMembers.txt | 24 +- .../classes/functionInValueClass.txt | 16 +- .../testdata/lazyResolve/enumEntry.kt | 6 + .../testdata/lazyResolve/enumEntry.txt | 385 ++++++++++++++++++ .../lazyResolve/parameterOfNonLocalSetter.txt | 8 +- .../typeParameterOfNonLocalFunction.txt | 8 +- ...irLazyDeclarationResolveTestGenerated.java | 6 + 9 files changed, 434 insertions(+), 35 deletions(-) create mode 100644 analysis/low-level-api-fir/testdata/lazyResolve/enumEntry.kt create mode 100644 analysis/low-level-api-fir/testdata/lazyResolve/enumEntry.txt diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirDesignatedAnnotationArgumentsResolveTransformer.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirDesignatedAnnotationArgumentsResolveTransformer.kt index 868518b257c..77fd5b08774 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirDesignatedAnnotationArgumentsResolveTransformer.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirDesignatedAnnotationArgumentsResolveTransformer.kt @@ -35,7 +35,9 @@ internal class LLFirDesignatedAnnotationArgumentsResolveTransformer( } } is FirRegularClass -> { - moveNextDeclaration(designationIterator) + context.withRegularClass(nextElement, components) { + moveNextDeclaration(designationIterator) + } } is FirEnumEntry -> { context.forEnumEntry { diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/annotationParameters.txt b/analysis/low-level-api-fir/testdata/lazyResolve/annotationParameters.txt index 08d092b7f8d..525f030a9f8 100644 --- a/analysis/low-level-api-fir/testdata/lazyResolve/annotationParameters.txt +++ b/analysis/low-level-api-fir/testdata/lazyResolve/annotationParameters.txt @@ -292,14 +292,14 @@ FILE: annotationParameters.kt public? [COMPILER_REQUIRED_ANNOTATIONS] [ContainingClassKey=Anno] get(): A.X } - public final [SUPER_TYPES] class B : R|kotlin/Any| { - public? [SUPER_TYPES] [ContainingClassKey=B] constructor(): R|B| { + public final [STATUS] class B : R|kotlin/Any| { + public [STATUS] [ContainingClassKey=B] constructor(): R|B| { super() } @R|Anno|(Q|X|.R|/X.A|) public final [ARGUMENTS_OF_ANNOTATIONS] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } - @Anno(X#.A#) public? final? [SUPER_TYPES] fun foo(): R|kotlin/Unit| { LAZY_BLOCK } + @R|Anno|(X#.A#) public final [STATUS] fun foo(): R|kotlin/Unit| { LAZY_BLOCK } } @@ -330,15 +330,15 @@ FILE: annotationParameters.kt public? [COMPILER_REQUIRED_ANNOTATIONS] [ContainingClassKey=Anno] get(): A.X } - public final [SUPER_TYPES] class B : R|kotlin/Any| { - public? [SUPER_TYPES] [ContainingClassKey=B] constructor(): R|B| { + public final [STATUS] class B : R|kotlin/Any| { + public [STATUS] [ContainingClassKey=B] constructor(): R|B| { super() } @R|Anno|(Q|X|.R|/X.A|) public final [CONTRACTS] fun resolveMe(): R|kotlin/Unit| { } - @Anno(X#.A#) public? final? [SUPER_TYPES] fun foo(): R|kotlin/Unit| { LAZY_BLOCK } + @R|Anno|(X#.A#) public final [STATUS] fun foo(): R|kotlin/Unit| { LAZY_BLOCK } } diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/classMembers.txt b/analysis/low-level-api-fir/testdata/lazyResolve/classMembers.txt index b9d7b6d90da..481849874f6 100644 --- a/analysis/low-level-api-fir/testdata/lazyResolve/classMembers.txt +++ b/analysis/low-level-api-fir/testdata/lazyResolve/classMembers.txt @@ -127,26 +127,26 @@ FILE: classMembers.kt ARGUMENTS_OF_ANNOTATIONS: FILE: classMembers.kt - public final [SUPER_TYPES] class A : R|kotlin/Any| { - public? [SUPER_TYPES] [ContainingClassKey=A] constructor(): R|A| { + public final [STATUS] class A : R|kotlin/Any| { + public [STATUS] [ContainingClassKey=A] constructor(): R|A| { super() } public final [ARGUMENTS_OF_ANNOTATIONS] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } - public? final? [SUPER_TYPES] val x: Int = LAZY_EXPRESSION - public? [SUPER_TYPES] [ContainingClassKey=A] get(): Int { LAZY_BLOCK } + public final [STATUS] val x: R|kotlin/Int| = LAZY_EXPRESSION + public [STATUS] [ContainingClassKey=A] get(): R|kotlin/Int| { LAZY_BLOCK } - public? final? [SUPER_TYPES] fun receive([SUPER_TYPES] value: String): R|kotlin/Unit| { LAZY_BLOCK } + public final [STATUS] fun receive([STATUS] value: R|kotlin/String|): R|kotlin/Unit| { LAZY_BLOCK } - public? final? [SUPER_TYPES] fun functionWithLazyBody(): String { LAZY_BLOCK } + public final [STATUS] fun functionWithLazyBody(): R|kotlin/String| { LAZY_BLOCK } } CONTRACTS: FILE: classMembers.kt - public final [SUPER_TYPES] class A : R|kotlin/Any| { - public? [SUPER_TYPES] [ContainingClassKey=A] constructor(): R|A| { + public final [STATUS] class A : R|kotlin/Any| { + public [STATUS] [ContainingClassKey=A] constructor(): R|A| { super() } @@ -154,12 +154,12 @@ FILE: classMembers.kt receive#(functionWithLazyBody#()) } - public? final? [SUPER_TYPES] val x: Int = LAZY_EXPRESSION - public? [SUPER_TYPES] [ContainingClassKey=A] get(): Int { LAZY_BLOCK } + public final [STATUS] val x: R|kotlin/Int| = LAZY_EXPRESSION + public [STATUS] [ContainingClassKey=A] get(): R|kotlin/Int| { LAZY_BLOCK } - public? final? [SUPER_TYPES] fun receive([SUPER_TYPES] value: String): R|kotlin/Unit| { LAZY_BLOCK } + public final [STATUS] fun receive([STATUS] value: R|kotlin/String|): R|kotlin/Unit| { LAZY_BLOCK } - public? final? [SUPER_TYPES] fun functionWithLazyBody(): String { LAZY_BLOCK } + public final [STATUS] fun functionWithLazyBody(): R|kotlin/String| { LAZY_BLOCK } } diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/classes/functionInValueClass.txt b/analysis/low-level-api-fir/testdata/lazyResolve/classes/functionInValueClass.txt index 2c9477c20e4..cfccccccd11 100644 --- a/analysis/low-level-api-fir/testdata/lazyResolve/classes/functionInValueClass.txt +++ b/analysis/low-level-api-fir/testdata/lazyResolve/classes/functionInValueClass.txt @@ -99,13 +99,13 @@ FILE: functionInValueClass.kt ARGUMENTS_OF_ANNOTATIONS: FILE: functionInValueClass.kt - @R|kotlin/jvm/JvmInline|() public final inline [SUPER_TYPES] [FirValueClassRepresentationKey=InlineClassRepresentation(underlyingPropertyName=value, underlyingType=kotlin/Int)] class Value : R|kotlin/Any| { - public? [TYPES] [ContainingClassKey=Value] constructor([TYPES] [CorrespondingProperty=/Value.value] value: R|kotlin/Int|): R|Value| { + @R|kotlin/jvm/JvmInline|() public final inline [STATUS] [FirValueClassRepresentationKey=InlineClassRepresentation(underlyingPropertyName=value, underlyingType=kotlin/Int)] class Value : R|kotlin/Any| { + public [STATUS] [ContainingClassKey=Value] constructor([STATUS] [CorrespondingProperty=/Value.value] value: R|kotlin/Int|): R|Value| { LAZY_super } - public? final? [SUPER_TYPES] [IsFromPrimaryConstructor=true] val value: Int = R|/value| - public? [SUPER_TYPES] [ContainingClassKey=Value] get(): Int + public final [STATUS] [IsFromPrimaryConstructor=true] val value: R|kotlin/Int| = R|/value| + public [STATUS] [ContainingClassKey=Value] get(): R|kotlin/Int| public final [ARGUMENTS_OF_ANNOTATIONS] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } @@ -113,13 +113,13 @@ FILE: functionInValueClass.kt CONTRACTS: FILE: functionInValueClass.kt - @R|kotlin/jvm/JvmInline|() public final inline [SUPER_TYPES] [FirValueClassRepresentationKey=InlineClassRepresentation(underlyingPropertyName=value, underlyingType=kotlin/Int)] class Value : R|kotlin/Any| { - public? [TYPES] [ContainingClassKey=Value] constructor([TYPES] [CorrespondingProperty=/Value.value] value: R|kotlin/Int|): R|Value| { + @R|kotlin/jvm/JvmInline|() public final inline [STATUS] [FirValueClassRepresentationKey=InlineClassRepresentation(underlyingPropertyName=value, underlyingType=kotlin/Int)] class Value : R|kotlin/Any| { + public [STATUS] [ContainingClassKey=Value] constructor([STATUS] [CorrespondingProperty=/Value.value] value: R|kotlin/Int|): R|Value| { LAZY_super } - public? final? [SUPER_TYPES] [IsFromPrimaryConstructor=true] val value: Int = R|/value| - public? [SUPER_TYPES] [ContainingClassKey=Value] get(): Int + public final [STATUS] [IsFromPrimaryConstructor=true] val value: R|kotlin/Int| = R|/value| + public [STATUS] [ContainingClassKey=Value] get(): R|kotlin/Int| public final [CONTRACTS] fun resolveMe(): R|kotlin/Unit| { } diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/enumEntry.kt b/analysis/low-level-api-fir/testdata/lazyResolve/enumEntry.kt new file mode 100644 index 00000000000..06c20212651 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/lazyResolve/enumEntry.kt @@ -0,0 +1,6 @@ +annotation class Anno + +enum class Foo { + @Anno + ResolveMe +} \ No newline at end of file diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/enumEntry.txt b/analysis/low-level-api-fir/testdata/lazyResolve/enumEntry.txt new file mode 100644 index 00000000000..c7667afb873 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/lazyResolve/enumEntry.txt @@ -0,0 +1,385 @@ +RAW_FIR: +FILE: enumEntry.kt + public? final? [RAW_FIR] annotation class Anno : R|kotlin/Annotation| { + public? [RAW_FIR] [ContainingClassKey=Anno] constructor(): R|Anno| { + super() + } + + } + public? final? [RAW_FIR] enum class Foo : R|kotlin/Enum| { + private [RAW_FIR] [ContainingClassKey=Foo] constructor(): R|Foo| { + super|>() + } + + @Anno() public final static [RAW_FIR] [ContainingClassKey=Foo] enum entry ResolveMe: R|Foo| = LAZY_EXPRESSION + public final static [RAW_FIR] [ContainingClassKey=Foo] fun values(): R|kotlin/Array| { + } + + public final static [RAW_FIR] [ContainingClassKey=Foo] fun valueOf([RAW_FIR] value: R|kotlin/String|): R|Foo| { + } + + public final static [RAW_FIR] [ContainingClassKey=Foo] val entries: R|kotlin/enums/EnumEntries| + public [RAW_FIR] get(): R|kotlin/enums/EnumEntries| + + } + +IMPORTS: +FILE: enumEntry.kt + public? final? [RAW_FIR] annotation class Anno : R|kotlin/Annotation| { + public? [RAW_FIR] [ContainingClassKey=Anno] constructor(): R|Anno| { + super() + } + + } + public? final? [RAW_FIR] enum class Foo : R|kotlin/Enum| { + private [RAW_FIR] [ContainingClassKey=Foo] constructor(): R|Foo| { + super|>() + } + + @Anno() public final static [RAW_FIR] [ContainingClassKey=Foo] enum entry ResolveMe: R|Foo| = LAZY_EXPRESSION + public final static [RAW_FIR] [ContainingClassKey=Foo] fun values(): R|kotlin/Array| { + } + + public final static [RAW_FIR] [ContainingClassKey=Foo] fun valueOf([RAW_FIR] value: R|kotlin/String|): R|Foo| { + } + + public final static [RAW_FIR] [ContainingClassKey=Foo] val entries: R|kotlin/enums/EnumEntries| + public [RAW_FIR] get(): R|kotlin/enums/EnumEntries| + + } + +COMPILER_REQUIRED_ANNOTATIONS: +FILE: enumEntry.kt + public? final? [RAW_FIR] annotation class Anno : R|kotlin/Annotation| { + public? [RAW_FIR] [ContainingClassKey=Anno] constructor(): R|Anno| { + super() + } + + } + public? final? [RAW_FIR] enum class Foo : R|kotlin/Enum| { + private [RAW_FIR] [ContainingClassKey=Foo] constructor(): R|Foo| { + super|>() + } + + @Anno() public final static [COMPILER_REQUIRED_ANNOTATIONS] [ContainingClassKey=Foo] enum entry ResolveMe: R|Foo| = LAZY_EXPRESSION + public final static [RAW_FIR] [ContainingClassKey=Foo] fun values(): R|kotlin/Array| { + } + + public final static [RAW_FIR] [ContainingClassKey=Foo] fun valueOf([RAW_FIR] value: R|kotlin/String|): R|Foo| { + } + + public final static [RAW_FIR] [ContainingClassKey=Foo] val entries: R|kotlin/enums/EnumEntries| + public [RAW_FIR] get(): R|kotlin/enums/EnumEntries| + + } + +COMPANION_GENERATION: +FILE: enumEntry.kt + public? final? [RAW_FIR] annotation class Anno : R|kotlin/Annotation| { + public? [RAW_FIR] [ContainingClassKey=Anno] constructor(): R|Anno| { + super() + } + + } + public? final? [RAW_FIR] enum class Foo : R|kotlin/Enum| { + private [RAW_FIR] [ContainingClassKey=Foo] constructor(): R|Foo| { + super|>() + } + + @Anno() public final static [COMPANION_GENERATION] [ContainingClassKey=Foo] enum entry ResolveMe: R|Foo| = LAZY_EXPRESSION + public final static [RAW_FIR] [ContainingClassKey=Foo] fun values(): R|kotlin/Array| { + } + + public final static [RAW_FIR] [ContainingClassKey=Foo] fun valueOf([RAW_FIR] value: R|kotlin/String|): R|Foo| { + } + + public final static [RAW_FIR] [ContainingClassKey=Foo] val entries: R|kotlin/enums/EnumEntries| + public [RAW_FIR] get(): R|kotlin/enums/EnumEntries| + + } + +SUPER_TYPES: +FILE: enumEntry.kt + public? final? [RAW_FIR] annotation class Anno : R|kotlin/Annotation| { + public? [RAW_FIR] [ContainingClassKey=Anno] constructor(): R|Anno| { + super() + } + + } + public? final? [RAW_FIR] enum class Foo : R|kotlin/Enum| { + private [RAW_FIR] [ContainingClassKey=Foo] constructor(): R|Foo| { + super|>() + } + + @Anno() public final static [SUPER_TYPES] [ContainingClassKey=Foo] enum entry ResolveMe: R|Foo| = LAZY_EXPRESSION + public final static [RAW_FIR] [ContainingClassKey=Foo] fun values(): R|kotlin/Array| { + } + + public final static [RAW_FIR] [ContainingClassKey=Foo] fun valueOf([RAW_FIR] value: R|kotlin/String|): R|Foo| { + } + + public final static [RAW_FIR] [ContainingClassKey=Foo] val entries: R|kotlin/enums/EnumEntries| + public [RAW_FIR] get(): R|kotlin/enums/EnumEntries| + + } + +TYPES: +FILE: enumEntry.kt + public? final? [COMPILER_REQUIRED_ANNOTATIONS] annotation class Anno : R|kotlin/Annotation| { + public? [COMPILER_REQUIRED_ANNOTATIONS] [ContainingClassKey=Anno] constructor(): R|Anno| { + super() + } + + } + public? final? [SUPER_TYPES] enum class Foo : R|kotlin/Enum| { + private [SUPER_TYPES] [ContainingClassKey=Foo] constructor(): R|Foo| { + super|>() + } + + @R|Anno|() public final static [TYPES] [ContainingClassKey=Foo] enum entry ResolveMe: R|Foo| = LAZY_EXPRESSION + public final static [SUPER_TYPES] [ContainingClassKey=Foo] fun values(): R|kotlin/Array| { + } + + public final static [SUPER_TYPES] [ContainingClassKey=Foo] fun valueOf([SUPER_TYPES] value: R|kotlin/String|): R|Foo| { + } + + public final static [SUPER_TYPES] [ContainingClassKey=Foo] val entries: R|kotlin/enums/EnumEntries| + public [SUPER_TYPES] get(): R|kotlin/enums/EnumEntries| + + } + +STATUS: +FILE: enumEntry.kt + public? final? [COMPILER_REQUIRED_ANNOTATIONS] annotation class Anno : R|kotlin/Annotation| { + public? [COMPILER_REQUIRED_ANNOTATIONS] [ContainingClassKey=Anno] constructor(): R|Anno| { + super() + } + + } + public final [SUPER_TYPES] enum class Foo : R|kotlin/Enum| { + private [SUPER_TYPES] [ContainingClassKey=Foo] constructor(): R|Foo| { + super|>() + } + + @R|Anno|() public final static [STATUS] [ContainingClassKey=Foo] enum entry ResolveMe: R|Foo| = LAZY_EXPRESSION + public final static [SUPER_TYPES] [ContainingClassKey=Foo] fun values(): R|kotlin/Array| { + } + + public final static [SUPER_TYPES] [ContainingClassKey=Foo] fun valueOf([SUPER_TYPES] value: R|kotlin/String|): R|Foo| { + } + + public final static [SUPER_TYPES] [ContainingClassKey=Foo] val entries: R|kotlin/enums/EnumEntries| + public [SUPER_TYPES] get(): R|kotlin/enums/EnumEntries| + + } + +ARGUMENTS_OF_ANNOTATIONS: +FILE: enumEntry.kt + public? final? [COMPILER_REQUIRED_ANNOTATIONS] annotation class Anno : R|kotlin/Annotation| { + public? [COMPILER_REQUIRED_ANNOTATIONS] [ContainingClassKey=Anno] constructor(): R|Anno| { + super() + } + + } + public final [STATUS] enum class Foo : R|kotlin/Enum| { + private [STATUS] [ContainingClassKey=Foo] constructor(): R|Foo| { + super|>() + } + + @R|Anno|() public final static [ARGUMENTS_OF_ANNOTATIONS] [ContainingClassKey=Foo] enum entry ResolveMe: R|Foo| = LAZY_EXPRESSION + public final static [STATUS] [ContainingClassKey=Foo] fun values(): R|kotlin/Array| { + } + + public final static [STATUS] [ContainingClassKey=Foo] fun valueOf([STATUS] value: R|kotlin/String|): R|Foo| { + } + + public final static [STATUS] [ContainingClassKey=Foo] val entries: R|kotlin/enums/EnumEntries| + public [STATUS] get(): R|kotlin/enums/EnumEntries| + + } + +CONTRACTS: +FILE: enumEntry.kt + public? final? [COMPILER_REQUIRED_ANNOTATIONS] annotation class Anno : R|kotlin/Annotation| { + public? [COMPILER_REQUIRED_ANNOTATIONS] [ContainingClassKey=Anno] constructor(): R|Anno| { + super() + } + + } + public final [STATUS] enum class Foo : R|kotlin/Enum| { + private [STATUS] [ContainingClassKey=Foo] constructor(): R|Foo| { + super|>() + } + + @R|Anno|() public final static [CONTRACTS] [ContainingClassKey=Foo] enum entry ResolveMe: R|Foo| = object : R|Foo| { + private [RAW_FIR] [ContainingClassKey=] constructor(): R|| { + super() + } + + } + + public final static [STATUS] [ContainingClassKey=Foo] fun values(): R|kotlin/Array| { + } + + public final static [STATUS] [ContainingClassKey=Foo] fun valueOf([STATUS] value: R|kotlin/String|): R|Foo| { + } + + public final static [STATUS] [ContainingClassKey=Foo] val entries: R|kotlin/enums/EnumEntries| + public [STATUS] get(): R|kotlin/enums/EnumEntries| + + } + +IMPLICIT_TYPES_BODY_RESOLVE: +FILE: enumEntry.kt + public? final? [COMPILER_REQUIRED_ANNOTATIONS] annotation class Anno : R|kotlin/Annotation| { + public? [COMPILER_REQUIRED_ANNOTATIONS] [ContainingClassKey=Anno] constructor(): R|Anno| { + super() + } + + } + public final [STATUS] enum class Foo : R|kotlin/Enum| { + private [STATUS] [ContainingClassKey=Foo] constructor(): R|Foo| { + super|>() + } + + @R|Anno|() public final static [IMPLICIT_TYPES_BODY_RESOLVE] [ContainingClassKey=Foo] enum entry ResolveMe: R|Foo| = object : R|Foo| { + private [RAW_FIR] [ContainingClassKey=] constructor(): R|| { + super() + } + + } + + public final static [STATUS] [ContainingClassKey=Foo] fun values(): R|kotlin/Array| { + } + + public final static [STATUS] [ContainingClassKey=Foo] fun valueOf([STATUS] value: R|kotlin/String|): R|Foo| { + } + + public final static [STATUS] [ContainingClassKey=Foo] val entries: R|kotlin/enums/EnumEntries| + public [STATUS] get(): R|kotlin/enums/EnumEntries| + + } + +ANNOTATIONS_ARGUMENTS_MAPPING: +FILE: enumEntry.kt + public final [SUPER_TYPES] annotation class Anno : R|kotlin/Annotation| { + public [STATUS] [ContainingClassKey=Anno] constructor(): R|Anno| { + super() + } + + } + public final [STATUS] enum class Foo : R|kotlin/Enum| { + private [STATUS] [ContainingClassKey=Foo] constructor(): R|Foo| { + super|>() + } + + @R|Anno|() public final static [ANNOTATIONS_ARGUMENTS_MAPPING] [ContainingClassKey=Foo] enum entry ResolveMe: R|Foo| = object : R|Foo| { + private [RAW_FIR] [ContainingClassKey=] constructor(): R|| { + super() + } + + } + + public final static [STATUS] [ContainingClassKey=Foo] fun values(): R|kotlin/Array| { + } + + public final static [STATUS] [ContainingClassKey=Foo] fun valueOf([STATUS] value: R|kotlin/String|): R|Foo| { + } + + public final static [STATUS] [ContainingClassKey=Foo] val entries: R|kotlin/enums/EnumEntries| + public [STATUS] get(): R|kotlin/enums/EnumEntries| + + } + +EXPECT_ACTUAL_MATCHING: +FILE: enumEntry.kt + public final [SUPER_TYPES] annotation class Anno : R|kotlin/Annotation| { + public [STATUS] [ContainingClassKey=Anno] constructor(): R|Anno| { + super() + } + + } + public final [STATUS] enum class Foo : R|kotlin/Enum| { + private [STATUS] [ContainingClassKey=Foo] constructor(): R|Foo| { + super|>() + } + + @R|Anno|() public final static [EXPECT_ACTUAL_MATCHING] [ContainingClassKey=Foo] enum entry ResolveMe: R|Foo| = object : R|Foo| { + private [RAW_FIR] [ContainingClassKey=] constructor(): R|| { + super() + } + + } + + public final static [STATUS] [ContainingClassKey=Foo] fun values(): R|kotlin/Array| { + } + + public final static [STATUS] [ContainingClassKey=Foo] fun valueOf([STATUS] value: R|kotlin/String|): R|Foo| { + } + + public final static [STATUS] [ContainingClassKey=Foo] val entries: R|kotlin/enums/EnumEntries| + public [STATUS] get(): R|kotlin/enums/EnumEntries| + + } + +BODY_RESOLVE: +FILE: enumEntry.kt + public final [SUPER_TYPES] annotation class Anno : R|kotlin/Annotation| { + public [STATUS] [ContainingClassKey=Anno] constructor(): R|Anno| { + super() + } + + } + public final [STATUS] enum class Foo : R|kotlin/Enum| { + private [STATUS] [ContainingClassKey=Foo] constructor(): R|Foo| { + super|>() + } + + @R|Anno|() public final static [BODY_RESOLVE] [ContainingClassKey=Foo] enum entry ResolveMe: R|Foo| = object : R|Foo| { + private [BODY_RESOLVE] [ContainingClassKey=] constructor(): R|| { + super() + } + + } + + public final static [STATUS] [ContainingClassKey=Foo] fun values(): R|kotlin/Array| { + } + + public final static [STATUS] [ContainingClassKey=Foo] fun valueOf([STATUS] value: R|kotlin/String|): R|Foo| { + } + + public final static [STATUS] [ContainingClassKey=Foo] val entries: R|kotlin/enums/EnumEntries| + public [STATUS] get(): R|kotlin/enums/EnumEntries| + + } + +FILE RAW TO BODY: +FILE: enumEntry.kt + public final [BODY_RESOLVE] annotation class Anno : R|kotlin/Annotation| { + public [BODY_RESOLVE] [ContainingClassKey=Anno] constructor(): R|Anno| { + super() + } + + } + public final [BODY_RESOLVE] enum class Foo : R|kotlin/Enum| { + private [BODY_RESOLVE] [ContainingClassKey=Foo] constructor(): R|Foo| { + super|>() + } + + @R|Anno|() public final static [BODY_RESOLVE] [ContainingClassKey=Foo] enum entry ResolveMe: R|Foo| = object : R|Foo| { + private [BODY_RESOLVE] [ContainingClassKey=] constructor(): R|| { + super() + } + + } + + public final static [BODY_RESOLVE] [ContainingClassKey=Foo] fun values(): R|kotlin/Array| { + } + + public final static [BODY_RESOLVE] [ContainingClassKey=Foo] fun valueOf([BODY_RESOLVE] value: R|kotlin/String|): R|Foo| { + } + + public final static [BODY_RESOLVE] [ContainingClassKey=Foo] val entries: R|kotlin/enums/EnumEntries| + public [BODY_RESOLVE] get(): R|kotlin/enums/EnumEntries| + + } diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/parameterOfNonLocalSetter.txt b/analysis/low-level-api-fir/testdata/lazyResolve/parameterOfNonLocalSetter.txt index 90c60d77a99..70c3e2d5360 100644 --- a/analysis/low-level-api-fir/testdata/lazyResolve/parameterOfNonLocalSetter.txt +++ b/analysis/low-level-api-fir/testdata/lazyResolve/parameterOfNonLocalSetter.txt @@ -92,8 +92,8 @@ FILE: parameterOfNonLocalSetter.kt ARGUMENTS_OF_ANNOTATIONS: FILE: parameterOfNonLocalSetter.kt - public final [SUPER_TYPES] class X : R|kotlin/Any| { - public? [SUPER_TYPES] [ContainingClassKey=X] constructor(): R|X| { + public final [STATUS] class X : R|kotlin/Any| { + public [STATUS] [ContainingClassKey=X] constructor(): R|X| { super() } @@ -105,8 +105,8 @@ FILE: parameterOfNonLocalSetter.kt CONTRACTS: FILE: parameterOfNonLocalSetter.kt - public final [SUPER_TYPES] class X : R|kotlin/Any| { - public? [SUPER_TYPES] [ContainingClassKey=X] constructor(): R|X| { + public final [STATUS] class X : R|kotlin/Any| { + public [STATUS] [ContainingClassKey=X] constructor(): R|X| { super() } diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/typeParameterOfNonLocalFunction.txt b/analysis/low-level-api-fir/testdata/lazyResolve/typeParameterOfNonLocalFunction.txt index fcd93908f31..6873b70dcb8 100644 --- a/analysis/low-level-api-fir/testdata/lazyResolve/typeParameterOfNonLocalFunction.txt +++ b/analysis/low-level-api-fir/testdata/lazyResolve/typeParameterOfNonLocalFunction.txt @@ -78,8 +78,8 @@ FILE: typeParameterOfNonLocalFunction.kt ARGUMENTS_OF_ANNOTATIONS: FILE: typeParameterOfNonLocalFunction.kt - public final [SUPER_TYPES] class X : R|kotlin/Any| { - public? [SUPER_TYPES] [ContainingClassKey=X] constructor(): R|X| { + public final [STATUS] class X : R|kotlin/Any| { + public [STATUS] [ContainingClassKey=X] constructor(): R|X| { super() } @@ -89,8 +89,8 @@ FILE: typeParameterOfNonLocalFunction.kt CONTRACTS: FILE: typeParameterOfNonLocalFunction.kt - public final [SUPER_TYPES] class X : R|kotlin/Any| { - public? [SUPER_TYPES] [ContainingClassKey=X] constructor(): R|X| { + public final [STATUS] class X : R|kotlin/Any| { + public [STATUS] [ContainingClassKey=X] constructor(): R|X| { super() } diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirLazyDeclarationResolveTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirLazyDeclarationResolveTestGenerated.java index eb0100c544c..c0dfb1ba00b 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirLazyDeclarationResolveTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirLazyDeclarationResolveTestGenerated.java @@ -48,6 +48,12 @@ public class FirLazyDeclarationResolveTestGenerated extends AbstractFirLazyDecla runTest("analysis/low-level-api-fir/testdata/lazyResolve/delegates.kt"); } + @Test + @TestMetadata("enumEntry.kt") + public void testEnumEntry() throws Exception { + runTest("analysis/low-level-api-fir/testdata/lazyResolve/enumEntry.kt"); + } + @Test @TestMetadata("functionWithParameter.kt") public void testFunctionWithParameter() throws Exception {