From 2cac7319feea7ffc9d186dbaa5887840ce03bbf5 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Wed, 26 Apr 2023 20:07:22 +0200 Subject: [PATCH] [LL FIR] add test on lazy resolve for local declarations ^KT-56550 --- .../lazyResolve/annotationOnLocalClass.kt | 9 + .../lazyResolve/annotationOnLocalClass.txt | 319 +++++++++++++++++ .../compilerRequiredAnnotationOnLocalClass.kt | 9 + ...compilerRequiredAnnotationOnLocalClass.txt | 144 ++++++++ .../lazyResolve/complexLocalHierarchy.kt | 12 + .../lazyResolve/complexLocalHierarchy.txt | 207 +++++++++++ .../resolveSuperTypeFromLocalClass.kt | 9 + .../resolveSuperTypeFromLocalClass.txt | 249 ++++++++++++++ .../resolveTypeFromLocalClassConstructor.kt | 9 + .../resolveTypeFromLocalClassConstructor.txt | 320 ++++++++++++++++++ .../resolveTypeFromLocalFunction.kt | 12 + .../resolveTypeFromLocalFunction.txt | 320 ++++++++++++++++++ ...otLazyDeclarationResolveTestGenerated.java | 36 ++ ...ceLazyDeclarationResolveTestGenerated.java | 36 ++ 14 files changed, 1691 insertions(+) create mode 100644 analysis/low-level-api-fir/testdata/lazyResolve/annotationOnLocalClass.kt create mode 100644 analysis/low-level-api-fir/testdata/lazyResolve/annotationOnLocalClass.txt create mode 100644 analysis/low-level-api-fir/testdata/lazyResolve/compilerRequiredAnnotationOnLocalClass.kt create mode 100644 analysis/low-level-api-fir/testdata/lazyResolve/compilerRequiredAnnotationOnLocalClass.txt create mode 100644 analysis/low-level-api-fir/testdata/lazyResolve/complexLocalHierarchy.kt create mode 100644 analysis/low-level-api-fir/testdata/lazyResolve/complexLocalHierarchy.txt create mode 100644 analysis/low-level-api-fir/testdata/lazyResolve/resolveSuperTypeFromLocalClass.kt create mode 100644 analysis/low-level-api-fir/testdata/lazyResolve/resolveSuperTypeFromLocalClass.txt create mode 100644 analysis/low-level-api-fir/testdata/lazyResolve/resolveTypeFromLocalClassConstructor.kt create mode 100644 analysis/low-level-api-fir/testdata/lazyResolve/resolveTypeFromLocalClassConstructor.txt create mode 100644 analysis/low-level-api-fir/testdata/lazyResolve/resolveTypeFromLocalFunction.kt create mode 100644 analysis/low-level-api-fir/testdata/lazyResolve/resolveTypeFromLocalFunction.txt diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/annotationOnLocalClass.kt b/analysis/low-level-api-fir/testdata/lazyResolve/annotationOnLocalClass.kt new file mode 100644 index 00000000000..df2eecf993b --- /dev/null +++ b/analysis/low-level-api-fir/testdata/lazyResolve/annotationOnLocalClass.kt @@ -0,0 +1,9 @@ +package one.two + +annotation class AnotherAnnotation +annotation class KotlinAnnotation(val s: AnotherAnnotation) + +fun resolveMe() { + @KotlinAnnotation(AnotherAnnotation()) + class LocalClass +} \ No newline at end of file diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/annotationOnLocalClass.txt b/analysis/low-level-api-fir/testdata/lazyResolve/annotationOnLocalClass.txt new file mode 100644 index 00000000000..fc45d27dbd1 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/lazyResolve/annotationOnLocalClass.txt @@ -0,0 +1,319 @@ +RAW_FIR: +FILE: [ResolvedTo(RAW_FIR)] annotationOnLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] annotation class AnotherAnnotation : R|kotlin/Annotation| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherAnnotation] constructor(): R|one/two/AnotherAnnotation| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] annotation class KotlinAnnotation : R|kotlin/Annotation| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=KotlinAnnotation] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=one/two/KotlinAnnotation.s] s: AnotherAnnotation): R|one/two/KotlinAnnotation| { + LAZY_super + } + + public? final? [ResolvedTo(RAW_FIR)] [IsFromPrimaryConstructor=true] val s: AnotherAnnotation = R|/s| + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=KotlinAnnotation] get(): AnotherAnnotation + + } + public? final? [ResolvedTo(RAW_FIR)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +IMPORTS: +FILE: [ResolvedTo(IMPORTS)] annotationOnLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] annotation class AnotherAnnotation : R|kotlin/Annotation| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherAnnotation] constructor(): R|one/two/AnotherAnnotation| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] annotation class KotlinAnnotation : R|kotlin/Annotation| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=KotlinAnnotation] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=one/two/KotlinAnnotation.s] s: AnotherAnnotation): R|one/two/KotlinAnnotation| { + LAZY_super + } + + public? final? [ResolvedTo(RAW_FIR)] [IsFromPrimaryConstructor=true] val s: AnotherAnnotation = R|/s| + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=KotlinAnnotation] get(): AnotherAnnotation + + } + public? final? [ResolvedTo(RAW_FIR)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +COMPILER_REQUIRED_ANNOTATIONS: +FILE: [ResolvedTo(IMPORTS)] annotationOnLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] annotation class AnotherAnnotation : R|kotlin/Annotation| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherAnnotation] constructor(): R|one/two/AnotherAnnotation| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] annotation class KotlinAnnotation : R|kotlin/Annotation| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=KotlinAnnotation] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=one/two/KotlinAnnotation.s] s: AnotherAnnotation): R|one/two/KotlinAnnotation| { + LAZY_super + } + + public? final? [ResolvedTo(RAW_FIR)] [IsFromPrimaryConstructor=true] val s: AnotherAnnotation = R|/s| + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=KotlinAnnotation] get(): AnotherAnnotation + + } + public? final? [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +COMPANION_GENERATION: +FILE: [ResolvedTo(IMPORTS)] annotationOnLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] annotation class AnotherAnnotation : R|kotlin/Annotation| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherAnnotation] constructor(): R|one/two/AnotherAnnotation| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] annotation class KotlinAnnotation : R|kotlin/Annotation| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=KotlinAnnotation] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=one/two/KotlinAnnotation.s] s: AnotherAnnotation): R|one/two/KotlinAnnotation| { + LAZY_super + } + + public? final? [ResolvedTo(RAW_FIR)] [IsFromPrimaryConstructor=true] val s: AnotherAnnotation = R|/s| + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=KotlinAnnotation] get(): AnotherAnnotation + + } + public? final? [ResolvedTo(COMPANION_GENERATION)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +SUPER_TYPES: +FILE: [ResolvedTo(IMPORTS)] annotationOnLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] annotation class AnotherAnnotation : R|kotlin/Annotation| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherAnnotation] constructor(): R|one/two/AnotherAnnotation| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] annotation class KotlinAnnotation : R|kotlin/Annotation| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=KotlinAnnotation] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=one/two/KotlinAnnotation.s] s: AnotherAnnotation): R|one/two/KotlinAnnotation| { + LAZY_super + } + + public? final? [ResolvedTo(RAW_FIR)] [IsFromPrimaryConstructor=true] val s: AnotherAnnotation = R|/s| + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=KotlinAnnotation] get(): AnotherAnnotation + + } + public? final? [ResolvedTo(SUPER_TYPES)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +TYPES: +FILE: [ResolvedTo(IMPORTS)] annotationOnLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] annotation class AnotherAnnotation : R|kotlin/Annotation| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherAnnotation] constructor(): R|one/two/AnotherAnnotation| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] annotation class KotlinAnnotation : R|kotlin/Annotation| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=KotlinAnnotation] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=one/two/KotlinAnnotation.s] s: AnotherAnnotation): R|one/two/KotlinAnnotation| { + LAZY_super + } + + public? final? [ResolvedTo(RAW_FIR)] [IsFromPrimaryConstructor=true] val s: AnotherAnnotation = R|/s| + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=KotlinAnnotation] get(): AnotherAnnotation + + } + public? final? [ResolvedTo(TYPES)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +STATUS: +FILE: [ResolvedTo(IMPORTS)] annotationOnLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] annotation class AnotherAnnotation : R|kotlin/Annotation| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherAnnotation] constructor(): R|one/two/AnotherAnnotation| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] annotation class KotlinAnnotation : R|kotlin/Annotation| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=KotlinAnnotation] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=one/two/KotlinAnnotation.s] s: AnotherAnnotation): R|one/two/KotlinAnnotation| { + LAZY_super + } + + public? final? [ResolvedTo(RAW_FIR)] [IsFromPrimaryConstructor=true] val s: AnotherAnnotation = R|/s| + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=KotlinAnnotation] get(): AnotherAnnotation + + } + public final [ResolvedTo(STATUS)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +EXPECT_ACTUAL_MATCHING: +FILE: [ResolvedTo(IMPORTS)] annotationOnLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] annotation class AnotherAnnotation : R|kotlin/Annotation| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherAnnotation] constructor(): R|one/two/AnotherAnnotation| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] annotation class KotlinAnnotation : R|kotlin/Annotation| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=KotlinAnnotation] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=one/two/KotlinAnnotation.s] s: AnotherAnnotation): R|one/two/KotlinAnnotation| { + LAZY_super + } + + public? final? [ResolvedTo(RAW_FIR)] [IsFromPrimaryConstructor=true] val s: AnotherAnnotation = R|/s| + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=KotlinAnnotation] get(): AnotherAnnotation + + } + public final [ResolvedTo(EXPECT_ACTUAL_MATCHING)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +ARGUMENTS_OF_ANNOTATIONS: +FILE: [ResolvedTo(IMPORTS)] annotationOnLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] annotation class AnotherAnnotation : R|kotlin/Annotation| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherAnnotation] constructor(): R|one/two/AnotherAnnotation| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] annotation class KotlinAnnotation : R|kotlin/Annotation| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=KotlinAnnotation] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=one/two/KotlinAnnotation.s] s: AnotherAnnotation): R|one/two/KotlinAnnotation| { + LAZY_super + } + + public? final? [ResolvedTo(RAW_FIR)] [IsFromPrimaryConstructor=true] val s: AnotherAnnotation = R|/s| + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=KotlinAnnotation] get(): AnotherAnnotation + + } + public final [ResolvedTo(ARGUMENTS_OF_ANNOTATIONS)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +CONTRACTS: +FILE: [ResolvedTo(IMPORTS)] annotationOnLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] annotation class AnotherAnnotation : R|kotlin/Annotation| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherAnnotation] constructor(): R|one/two/AnotherAnnotation| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] annotation class KotlinAnnotation : R|kotlin/Annotation| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=KotlinAnnotation] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=one/two/KotlinAnnotation.s] s: AnotherAnnotation): R|one/two/KotlinAnnotation| { + LAZY_super + } + + public? final? [ResolvedTo(RAW_FIR)] [IsFromPrimaryConstructor=true] val s: AnotherAnnotation = R|/s| + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=KotlinAnnotation] get(): AnotherAnnotation + + } + public final [ResolvedTo(CONTRACTS)] fun resolveMe(): R|kotlin/Unit| { + @KotlinAnnotation[Unresolved](AnotherAnnotation#()) local final? [ResolvedTo(RAW_FIR)] class LocalClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=LocalClass] constructor(): R|one/two/LocalClass| { + super() + } + + } + + } + +IMPLICIT_TYPES_BODY_RESOLVE: +FILE: [ResolvedTo(IMPORTS)] annotationOnLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] annotation class AnotherAnnotation : R|kotlin/Annotation| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherAnnotation] constructor(): R|one/two/AnotherAnnotation| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] annotation class KotlinAnnotation : R|kotlin/Annotation| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=KotlinAnnotation] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=one/two/KotlinAnnotation.s] s: AnotherAnnotation): R|one/two/KotlinAnnotation| { + LAZY_super + } + + public? final? [ResolvedTo(RAW_FIR)] [IsFromPrimaryConstructor=true] val s: AnotherAnnotation = R|/s| + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=KotlinAnnotation] get(): AnotherAnnotation + + } + public final [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] fun resolveMe(): R|kotlin/Unit| { + @KotlinAnnotation[Unresolved](AnotherAnnotation#()) local final? [ResolvedTo(RAW_FIR)] class LocalClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=LocalClass] constructor(): R|one/two/LocalClass| { + super() + } + + } + + } + +ANNOTATIONS_ARGUMENTS_MAPPING: +FILE: [ResolvedTo(IMPORTS)] annotationOnLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] annotation class AnotherAnnotation : R|kotlin/Annotation| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=AnotherAnnotation] constructor(): R|one/two/AnotherAnnotation| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] annotation class KotlinAnnotation : R|kotlin/Annotation| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=KotlinAnnotation] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=one/two/KotlinAnnotation.s] s: AnotherAnnotation): R|one/two/KotlinAnnotation| { + LAZY_super + } + + public? final? [ResolvedTo(RAW_FIR)] [IsFromPrimaryConstructor=true] val s: AnotherAnnotation = R|/s| + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=KotlinAnnotation] get(): AnotherAnnotation + + } + public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] fun resolveMe(): R|kotlin/Unit| { + @KotlinAnnotation[Unresolved](AnotherAnnotation#()) local final? [ResolvedTo(RAW_FIR)] class LocalClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=LocalClass] constructor(): R|one/two/LocalClass| { + super() + } + + } + + } + +BODY_RESOLVE: +FILE: [ResolvedTo(IMPORTS)] annotationOnLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public final [ResolvedTo(STATUS)] annotation class AnotherAnnotation : R|kotlin/Annotation| { + public [ResolvedTo(STATUS)] [ContainingClassKey=AnotherAnnotation] constructor(): R|one/two/AnotherAnnotation| { + LAZY_super + } + + } + public final [ResolvedTo(STATUS)] annotation class KotlinAnnotation : R|kotlin/Annotation| { + public [ResolvedTo(STATUS)] [ContainingClassKey=KotlinAnnotation] constructor([ResolvedTo(STATUS)] [CorrespondingProperty=one/two/KotlinAnnotation.s] s: R|one/two/AnotherAnnotation|): R|one/two/KotlinAnnotation| { + LAZY_super + } + + public final [ResolvedTo(STATUS)] [IsFromPrimaryConstructor=true] val s: R|one/two/AnotherAnnotation| = R|/s| + public [ResolvedTo(STATUS)] [ContainingClassKey=KotlinAnnotation] get(): R|one/two/AnotherAnnotation| + + } + public final [ResolvedTo(BODY_RESOLVE)] fun resolveMe(): R|kotlin/Unit| { + @R|one/two/KotlinAnnotation|[Types](s = R|one/two/AnotherAnnotation.AnotherAnnotation|()) local final [ResolvedTo(BODY_RESOLVE)] class LocalClass : R|kotlin/Any| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=LocalClass] constructor(): R|one/two/LocalClass| { + super() + } + + } + + } + +FILE RAW TO BODY: +FILE: [ResolvedTo(IMPORTS)] annotationOnLocalClass.kt + [ResolvedTo(BODY_RESOLVE)] annotations container + public final [ResolvedTo(BODY_RESOLVE)] annotation class AnotherAnnotation : R|kotlin/Annotation| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=AnotherAnnotation] constructor(): R|one/two/AnotherAnnotation| { + super() + } + + } + public final [ResolvedTo(BODY_RESOLVE)] annotation class KotlinAnnotation : R|kotlin/Annotation| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=KotlinAnnotation] constructor([ResolvedTo(BODY_RESOLVE)] [CorrespondingProperty=one/two/KotlinAnnotation.s] s: R|one/two/AnotherAnnotation|): R|one/two/KotlinAnnotation| { + super() + } + + public final [ResolvedTo(BODY_RESOLVE)] [IsFromPrimaryConstructor=true] val s: R|one/two/AnotherAnnotation| = R|/s| + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=KotlinAnnotation] get(): R|one/two/AnotherAnnotation| + + } + public final [ResolvedTo(BODY_RESOLVE)] fun resolveMe(): R|kotlin/Unit| { + @R|one/two/KotlinAnnotation|[Types](s = R|one/two/AnotherAnnotation.AnotherAnnotation|()) local final [ResolvedTo(BODY_RESOLVE)] class LocalClass : R|kotlin/Any| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=LocalClass] constructor(): R|one/two/LocalClass| { + super() + } + + } + + } diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/compilerRequiredAnnotationOnLocalClass.kt b/analysis/low-level-api-fir/testdata/lazyResolve/compilerRequiredAnnotationOnLocalClass.kt new file mode 100644 index 00000000000..a0ac7da75e3 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/lazyResolve/compilerRequiredAnnotationOnLocalClass.kt @@ -0,0 +1,9 @@ +package one.two + +fun resolveMe() { + @Deprecated(message = "", replaceWith = ReplaceWith(expression = "abc"), level = DeprecationLevel.ERROR) + class LocalClass + + @Target(AnnotationTarget.TYPE) + class B +} \ No newline at end of file diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/compilerRequiredAnnotationOnLocalClass.txt b/analysis/low-level-api-fir/testdata/lazyResolve/compilerRequiredAnnotationOnLocalClass.txt new file mode 100644 index 00000000000..06d7273f630 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/lazyResolve/compilerRequiredAnnotationOnLocalClass.txt @@ -0,0 +1,144 @@ +RAW_FIR: +FILE: [ResolvedTo(RAW_FIR)] compilerRequiredAnnotationOnLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +IMPORTS: +FILE: [ResolvedTo(IMPORTS)] compilerRequiredAnnotationOnLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +COMPILER_REQUIRED_ANNOTATIONS: +FILE: [ResolvedTo(IMPORTS)] compilerRequiredAnnotationOnLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +COMPANION_GENERATION: +FILE: [ResolvedTo(IMPORTS)] compilerRequiredAnnotationOnLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(COMPANION_GENERATION)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +SUPER_TYPES: +FILE: [ResolvedTo(IMPORTS)] compilerRequiredAnnotationOnLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(SUPER_TYPES)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +TYPES: +FILE: [ResolvedTo(IMPORTS)] compilerRequiredAnnotationOnLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(TYPES)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +STATUS: +FILE: [ResolvedTo(IMPORTS)] compilerRequiredAnnotationOnLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public final [ResolvedTo(STATUS)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +EXPECT_ACTUAL_MATCHING: +FILE: [ResolvedTo(IMPORTS)] compilerRequiredAnnotationOnLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public final [ResolvedTo(EXPECT_ACTUAL_MATCHING)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +ARGUMENTS_OF_ANNOTATIONS: +FILE: [ResolvedTo(IMPORTS)] compilerRequiredAnnotationOnLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public final [ResolvedTo(ARGUMENTS_OF_ANNOTATIONS)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +CONTRACTS: +FILE: [ResolvedTo(IMPORTS)] compilerRequiredAnnotationOnLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public final [ResolvedTo(CONTRACTS)] fun resolveMe(): R|kotlin/Unit| { + @Deprecated[Unresolved](message = String(), replaceWith = ReplaceWith#(expression = String(abc)), level = DeprecationLevel#.ERROR#) local final? [ResolvedTo(RAW_FIR)] class LocalClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=LocalClass] constructor(): R|one/two/LocalClass| { + super() + } + + } + + @Target[Unresolved](AnnotationTarget#.TYPE#) local final? [ResolvedTo(RAW_FIR)] class B : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=B] constructor(): R|one/two/B| { + super() + } + + } + + } + +IMPLICIT_TYPES_BODY_RESOLVE: +FILE: [ResolvedTo(IMPORTS)] compilerRequiredAnnotationOnLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public final [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] fun resolveMe(): R|kotlin/Unit| { + @Deprecated[Unresolved](message = String(), replaceWith = ReplaceWith#(expression = String(abc)), level = DeprecationLevel#.ERROR#) local final? [ResolvedTo(RAW_FIR)] class LocalClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=LocalClass] constructor(): R|one/two/LocalClass| { + super() + } + + } + + @Target[Unresolved](AnnotationTarget#.TYPE#) local final? [ResolvedTo(RAW_FIR)] class B : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=B] constructor(): R|one/two/B| { + super() + } + + } + + } + +ANNOTATIONS_ARGUMENTS_MAPPING: +FILE: [ResolvedTo(IMPORTS)] compilerRequiredAnnotationOnLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] fun resolveMe(): R|kotlin/Unit| { + @Deprecated[Unresolved](message = String(), replaceWith = ReplaceWith#(expression = String(abc)), level = DeprecationLevel#.ERROR#) local final? [ResolvedTo(RAW_FIR)] class LocalClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=LocalClass] constructor(): R|one/two/LocalClass| { + super() + } + + } + + @Target[Unresolved](AnnotationTarget#.TYPE#) local final? [ResolvedTo(RAW_FIR)] class B : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=B] constructor(): R|one/two/B| { + super() + } + + } + + } + +BODY_RESOLVE: +FILE: [ResolvedTo(IMPORTS)] compilerRequiredAnnotationOnLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public final [ResolvedTo(BODY_RESOLVE)] fun resolveMe(): R|kotlin/Unit| { + @R|kotlin/Deprecated|[Types](message = String(), replaceWith = R|kotlin/ReplaceWith.ReplaceWith|(expression = String(abc)), level = Q|kotlin/DeprecationLevel|.R|kotlin/DeprecationLevel.ERROR|) local final [ResolvedTo(BODY_RESOLVE)] class LocalClass : R|kotlin/Any| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=LocalClass] constructor(): R|one/two/LocalClass| { + super() + } + + } + + @R|kotlin/annotation/Target|[Types](allowedTargets = vararg(Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.TYPE|)) local final [ResolvedTo(BODY_RESOLVE)] class B : R|kotlin/Any| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=B] constructor(): R|one/two/B| { + super() + } + + } + + } + +FILE RAW TO BODY: +FILE: [ResolvedTo(IMPORTS)] compilerRequiredAnnotationOnLocalClass.kt + [ResolvedTo(BODY_RESOLVE)] annotations container + public final [ResolvedTo(BODY_RESOLVE)] fun resolveMe(): R|kotlin/Unit| { + @R|kotlin/Deprecated|[Types](message = String(), replaceWith = R|kotlin/ReplaceWith.ReplaceWith|(expression = String(abc)), level = Q|kotlin/DeprecationLevel|.R|kotlin/DeprecationLevel.ERROR|) local final [ResolvedTo(BODY_RESOLVE)] class LocalClass : R|kotlin/Any| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=LocalClass] constructor(): R|one/two/LocalClass| { + super() + } + + } + + @R|kotlin/annotation/Target|[Types](allowedTargets = vararg(Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.TYPE|)) local final [ResolvedTo(BODY_RESOLVE)] class B : R|kotlin/Any| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=B] constructor(): R|one/two/B| { + super() + } + + } + + } diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/complexLocalHierarchy.kt b/analysis/low-level-api-fir/testdata/lazyResolve/complexLocalHierarchy.kt new file mode 100644 index 00000000000..8ece7b5ea8a --- /dev/null +++ b/analysis/low-level-api-fir/testdata/lazyResolve/complexLocalHierarchy.kt @@ -0,0 +1,12 @@ +package one + +interface NonLocalInterface + +fun resolveMe() { + open class A : B() + class B : NonLocalInterface { + inner class C : A() { + + } + } +} \ No newline at end of file diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/complexLocalHierarchy.txt b/analysis/low-level-api-fir/testdata/lazyResolve/complexLocalHierarchy.txt new file mode 100644 index 00000000000..14dc2c97b18 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/lazyResolve/complexLocalHierarchy.txt @@ -0,0 +1,207 @@ +RAW_FIR: +FILE: [ResolvedTo(RAW_FIR)] complexLocalHierarchy.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] interface NonLocalInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +IMPORTS: +FILE: [ResolvedTo(IMPORTS)] complexLocalHierarchy.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] interface NonLocalInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +COMPILER_REQUIRED_ANNOTATIONS: +FILE: [ResolvedTo(IMPORTS)] complexLocalHierarchy.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] interface NonLocalInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +COMPANION_GENERATION: +FILE: [ResolvedTo(IMPORTS)] complexLocalHierarchy.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] interface NonLocalInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(COMPANION_GENERATION)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +SUPER_TYPES: +FILE: [ResolvedTo(IMPORTS)] complexLocalHierarchy.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] interface NonLocalInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(SUPER_TYPES)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +TYPES: +FILE: [ResolvedTo(IMPORTS)] complexLocalHierarchy.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] interface NonLocalInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(TYPES)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +STATUS: +FILE: [ResolvedTo(IMPORTS)] complexLocalHierarchy.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] interface NonLocalInterface : R|kotlin/Any| { + } + public final [ResolvedTo(STATUS)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +EXPECT_ACTUAL_MATCHING: +FILE: [ResolvedTo(IMPORTS)] complexLocalHierarchy.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] interface NonLocalInterface : R|kotlin/Any| { + } + public final [ResolvedTo(EXPECT_ACTUAL_MATCHING)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +ARGUMENTS_OF_ANNOTATIONS: +FILE: [ResolvedTo(IMPORTS)] complexLocalHierarchy.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] interface NonLocalInterface : R|kotlin/Any| { + } + public final [ResolvedTo(ARGUMENTS_OF_ANNOTATIONS)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +CONTRACTS: +FILE: [ResolvedTo(IMPORTS)] complexLocalHierarchy.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] interface NonLocalInterface : R|kotlin/Any| { + } + public final [ResolvedTo(CONTRACTS)] fun resolveMe(): R|kotlin/Unit| { + local open [ResolvedTo(RAW_FIR)] class A : B { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor(): R|one/A| { + super() + } + + } + + local final? [ResolvedTo(RAW_FIR)] class B : NonLocalInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=B] constructor(): R|one/B| { + super<>() + } + + local final? inner [ResolvedTo(RAW_FIR)] [ContainingClassKey=B] class C : A { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=C] one/B.constructor(): R|one/B.C| { + super() + } + + } + + } + + } + +IMPLICIT_TYPES_BODY_RESOLVE: +FILE: [ResolvedTo(IMPORTS)] complexLocalHierarchy.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] interface NonLocalInterface : R|kotlin/Any| { + } + public final [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] fun resolveMe(): R|kotlin/Unit| { + local open [ResolvedTo(RAW_FIR)] class A : B { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor(): R|one/A| { + super() + } + + } + + local final? [ResolvedTo(RAW_FIR)] class B : NonLocalInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=B] constructor(): R|one/B| { + super<>() + } + + local final? inner [ResolvedTo(RAW_FIR)] [ContainingClassKey=B] class C : A { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=C] one/B.constructor(): R|one/B.C| { + super() + } + + } + + } + + } + +ANNOTATIONS_ARGUMENTS_MAPPING: +FILE: [ResolvedTo(IMPORTS)] complexLocalHierarchy.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] interface NonLocalInterface : R|kotlin/Any| { + } + public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] fun resolveMe(): R|kotlin/Unit| { + local open [ResolvedTo(RAW_FIR)] class A : B { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor(): R|one/A| { + super() + } + + } + + local final? [ResolvedTo(RAW_FIR)] class B : NonLocalInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=B] constructor(): R|one/B| { + super<>() + } + + local final? inner [ResolvedTo(RAW_FIR)] [ContainingClassKey=B] class C : A { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=C] one/B.constructor(): R|one/B.C| { + super() + } + + } + + } + + } + +BODY_RESOLVE: +FILE: [ResolvedTo(IMPORTS)] complexLocalHierarchy.kt + [ResolvedTo(RAW_FIR)] annotations container + public abstract [ResolvedTo(STATUS)] interface NonLocalInterface : R|kotlin/Any| { + } + public final [ResolvedTo(BODY_RESOLVE)] fun resolveMe(): R|kotlin/Unit| { + local open [ResolvedTo(BODY_RESOLVE)] class A : { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=A] constructor(): R|one/A| { + super<>() + } + + } + + local final [ResolvedTo(BODY_RESOLVE)] class B : R|one/NonLocalInterface| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=B] constructor(): R|one/B| { + super() + } + + local final inner [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=B] class C : R|one/A| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=C] one/B.constructor(): R|one/B.C| { + super() + } + + } + + } + + } + +FILE RAW TO BODY: +FILE: [ResolvedTo(IMPORTS)] complexLocalHierarchy.kt + [ResolvedTo(BODY_RESOLVE)] annotations container + public abstract [ResolvedTo(BODY_RESOLVE)] interface NonLocalInterface : R|kotlin/Any| { + } + public final [ResolvedTo(BODY_RESOLVE)] fun resolveMe(): R|kotlin/Unit| { + local open [ResolvedTo(BODY_RESOLVE)] class A : { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=A] constructor(): R|one/A| { + super<>() + } + + } + + local final [ResolvedTo(BODY_RESOLVE)] class B : R|one/NonLocalInterface| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=B] constructor(): R|one/B| { + super() + } + + local final inner [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=B] class C : R|one/A| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=C] one/B.constructor(): R|one/B.C| { + super() + } + + } + + } + + } diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/resolveSuperTypeFromLocalClass.kt b/analysis/low-level-api-fir/testdata/lazyResolve/resolveSuperTypeFromLocalClass.kt new file mode 100644 index 00000000000..e0df689b55c --- /dev/null +++ b/analysis/low-level-api-fir/testdata/lazyResolve/resolveSuperTypeFromLocalClass.kt @@ -0,0 +1,9 @@ +package one.two + +class UnusedClass +interface UsedInterface2 +interface UsedInterface : UsedInterface2 + +fun resolveMe() { + class Local : UsedInterface +} diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/resolveSuperTypeFromLocalClass.txt b/analysis/low-level-api-fir/testdata/lazyResolve/resolveSuperTypeFromLocalClass.txt new file mode 100644 index 00000000000..f4e400ffaf0 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/lazyResolve/resolveSuperTypeFromLocalClass.txt @@ -0,0 +1,249 @@ +RAW_FIR: +FILE: [ResolvedTo(RAW_FIR)] resolveSuperTypeFromLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface2 : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : UsedInterface2 { + } + public? final? [ResolvedTo(RAW_FIR)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +IMPORTS: +FILE: [ResolvedTo(IMPORTS)] resolveSuperTypeFromLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface2 : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : UsedInterface2 { + } + public? final? [ResolvedTo(RAW_FIR)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +COMPILER_REQUIRED_ANNOTATIONS: +FILE: [ResolvedTo(IMPORTS)] resolveSuperTypeFromLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface2 : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : UsedInterface2 { + } + public? final? [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +COMPANION_GENERATION: +FILE: [ResolvedTo(IMPORTS)] resolveSuperTypeFromLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface2 : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : UsedInterface2 { + } + public? final? [ResolvedTo(COMPANION_GENERATION)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +SUPER_TYPES: +FILE: [ResolvedTo(IMPORTS)] resolveSuperTypeFromLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface2 : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : UsedInterface2 { + } + public? final? [ResolvedTo(SUPER_TYPES)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +TYPES: +FILE: [ResolvedTo(IMPORTS)] resolveSuperTypeFromLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface2 : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : UsedInterface2 { + } + public? final? [ResolvedTo(TYPES)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +STATUS: +FILE: [ResolvedTo(IMPORTS)] resolveSuperTypeFromLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface2 : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : UsedInterface2 { + } + public final [ResolvedTo(STATUS)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +EXPECT_ACTUAL_MATCHING: +FILE: [ResolvedTo(IMPORTS)] resolveSuperTypeFromLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface2 : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : UsedInterface2 { + } + public final [ResolvedTo(EXPECT_ACTUAL_MATCHING)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +ARGUMENTS_OF_ANNOTATIONS: +FILE: [ResolvedTo(IMPORTS)] resolveSuperTypeFromLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface2 : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : UsedInterface2 { + } + public final [ResolvedTo(ARGUMENTS_OF_ANNOTATIONS)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +CONTRACTS: +FILE: [ResolvedTo(IMPORTS)] resolveSuperTypeFromLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface2 : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : UsedInterface2 { + } + public final [ResolvedTo(CONTRACTS)] fun resolveMe(): R|kotlin/Unit| { + local final? [ResolvedTo(RAW_FIR)] class Local : UsedInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Local] constructor(): R|one/two/Local| { + super<>() + } + + } + + } + +IMPLICIT_TYPES_BODY_RESOLVE: +FILE: [ResolvedTo(IMPORTS)] resolveSuperTypeFromLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface2 : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : UsedInterface2 { + } + public final [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] fun resolveMe(): R|kotlin/Unit| { + local final? [ResolvedTo(RAW_FIR)] class Local : UsedInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Local] constructor(): R|one/two/Local| { + super<>() + } + + } + + } + +ANNOTATIONS_ARGUMENTS_MAPPING: +FILE: [ResolvedTo(IMPORTS)] resolveSuperTypeFromLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface2 : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : UsedInterface2 { + } + public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] fun resolveMe(): R|kotlin/Unit| { + local final? [ResolvedTo(RAW_FIR)] class Local : UsedInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Local] constructor(): R|one/two/Local| { + super<>() + } + + } + + } + +BODY_RESOLVE: +FILE: [ResolvedTo(IMPORTS)] resolveSuperTypeFromLocalClass.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public abstract [ResolvedTo(STATUS)] interface UsedInterface2 : R|kotlin/Any| { + } + public abstract [ResolvedTo(STATUS)] interface UsedInterface : R|one/two/UsedInterface2| { + } + public final [ResolvedTo(BODY_RESOLVE)] fun resolveMe(): R|kotlin/Unit| { + local final [ResolvedTo(BODY_RESOLVE)] class Local : R|one/two/UsedInterface| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=Local] constructor(): R|one/two/Local| { + super() + } + + } + + } + +FILE RAW TO BODY: +FILE: [ResolvedTo(IMPORTS)] resolveSuperTypeFromLocalClass.kt + [ResolvedTo(BODY_RESOLVE)] annotations container + public final [ResolvedTo(BODY_RESOLVE)] class UnusedClass : R|kotlin/Any| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + super() + } + + } + public abstract [ResolvedTo(BODY_RESOLVE)] interface UsedInterface2 : R|kotlin/Any| { + } + public abstract [ResolvedTo(BODY_RESOLVE)] interface UsedInterface : R|one/two/UsedInterface2| { + } + public final [ResolvedTo(BODY_RESOLVE)] fun resolveMe(): R|kotlin/Unit| { + local final [ResolvedTo(BODY_RESOLVE)] class Local : R|one/two/UsedInterface| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=Local] constructor(): R|one/two/Local| { + super() + } + + } + + } diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/resolveTypeFromLocalClassConstructor.kt b/analysis/low-level-api-fir/testdata/lazyResolve/resolveTypeFromLocalClassConstructor.kt new file mode 100644 index 00000000000..e805f2a03e5 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/lazyResolve/resolveTypeFromLocalClassConstructor.kt @@ -0,0 +1,9 @@ +package one.two + +class UnusedClass +interface UsedInterface +class UsedClass : UsedInterface + +fun resolveMe() { + class Local(val u: UsedClass) +} diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/resolveTypeFromLocalClassConstructor.txt b/analysis/low-level-api-fir/testdata/lazyResolve/resolveTypeFromLocalClassConstructor.txt new file mode 100644 index 00000000000..36ba997d0b5 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/lazyResolve/resolveTypeFromLocalClassConstructor.txt @@ -0,0 +1,320 @@ +RAW_FIR: +FILE: [ResolvedTo(RAW_FIR)] resolveTypeFromLocalClassConstructor.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] class UsedClass : UsedInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UsedClass] constructor(): R|one/two/UsedClass| { + LAZY_super<> + } + + } + public? final? [ResolvedTo(RAW_FIR)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +IMPORTS: +FILE: [ResolvedTo(IMPORTS)] resolveTypeFromLocalClassConstructor.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] class UsedClass : UsedInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UsedClass] constructor(): R|one/two/UsedClass| { + LAZY_super<> + } + + } + public? final? [ResolvedTo(RAW_FIR)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +COMPILER_REQUIRED_ANNOTATIONS: +FILE: [ResolvedTo(IMPORTS)] resolveTypeFromLocalClassConstructor.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] class UsedClass : UsedInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UsedClass] constructor(): R|one/two/UsedClass| { + LAZY_super<> + } + + } + public? final? [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +COMPANION_GENERATION: +FILE: [ResolvedTo(IMPORTS)] resolveTypeFromLocalClassConstructor.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] class UsedClass : UsedInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UsedClass] constructor(): R|one/two/UsedClass| { + LAZY_super<> + } + + } + public? final? [ResolvedTo(COMPANION_GENERATION)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +SUPER_TYPES: +FILE: [ResolvedTo(IMPORTS)] resolveTypeFromLocalClassConstructor.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] class UsedClass : UsedInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UsedClass] constructor(): R|one/two/UsedClass| { + LAZY_super<> + } + + } + public? final? [ResolvedTo(SUPER_TYPES)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +TYPES: +FILE: [ResolvedTo(IMPORTS)] resolveTypeFromLocalClassConstructor.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] class UsedClass : UsedInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UsedClass] constructor(): R|one/two/UsedClass| { + LAZY_super<> + } + + } + public? final? [ResolvedTo(TYPES)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +STATUS: +FILE: [ResolvedTo(IMPORTS)] resolveTypeFromLocalClassConstructor.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] class UsedClass : UsedInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UsedClass] constructor(): R|one/two/UsedClass| { + LAZY_super<> + } + + } + public final [ResolvedTo(STATUS)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +EXPECT_ACTUAL_MATCHING: +FILE: [ResolvedTo(IMPORTS)] resolveTypeFromLocalClassConstructor.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] class UsedClass : UsedInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UsedClass] constructor(): R|one/two/UsedClass| { + LAZY_super<> + } + + } + public final [ResolvedTo(EXPECT_ACTUAL_MATCHING)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +ARGUMENTS_OF_ANNOTATIONS: +FILE: [ResolvedTo(IMPORTS)] resolveTypeFromLocalClassConstructor.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] class UsedClass : UsedInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UsedClass] constructor(): R|one/two/UsedClass| { + LAZY_super<> + } + + } + public final [ResolvedTo(ARGUMENTS_OF_ANNOTATIONS)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +CONTRACTS: +FILE: [ResolvedTo(IMPORTS)] resolveTypeFromLocalClassConstructor.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] class UsedClass : UsedInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UsedClass] constructor(): R|one/two/UsedClass| { + LAZY_super<> + } + + } + public final [ResolvedTo(CONTRACTS)] fun resolveMe(): R|kotlin/Unit| { + local final? [ResolvedTo(RAW_FIR)] class Local : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Local] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=/u] u: UsedClass): R|one/two/Local| { + super() + } + + public? final? [ResolvedTo(RAW_FIR)] [IsFromPrimaryConstructor=true] val u: UsedClass = R|/u| + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Local] get(): UsedClass + + } + + } + +IMPLICIT_TYPES_BODY_RESOLVE: +FILE: [ResolvedTo(IMPORTS)] resolveTypeFromLocalClassConstructor.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] class UsedClass : UsedInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UsedClass] constructor(): R|one/two/UsedClass| { + LAZY_super<> + } + + } + public final [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] fun resolveMe(): R|kotlin/Unit| { + local final? [ResolvedTo(RAW_FIR)] class Local : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Local] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=/u] u: UsedClass): R|one/two/Local| { + super() + } + + public? final? [ResolvedTo(RAW_FIR)] [IsFromPrimaryConstructor=true] val u: UsedClass = R|/u| + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Local] get(): UsedClass + + } + + } + +ANNOTATIONS_ARGUMENTS_MAPPING: +FILE: [ResolvedTo(IMPORTS)] resolveTypeFromLocalClassConstructor.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] class UsedClass : UsedInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UsedClass] constructor(): R|one/two/UsedClass| { + LAZY_super<> + } + + } + public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] fun resolveMe(): R|kotlin/Unit| { + local final? [ResolvedTo(RAW_FIR)] class Local : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Local] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=/u] u: UsedClass): R|one/two/Local| { + super() + } + + public? final? [ResolvedTo(RAW_FIR)] [IsFromPrimaryConstructor=true] val u: UsedClass = R|/u| + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Local] get(): UsedClass + + } + + } + +BODY_RESOLVE: +FILE: [ResolvedTo(IMPORTS)] resolveTypeFromLocalClassConstructor.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] class UsedClass : UsedInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UsedClass] constructor(): R|one/two/UsedClass| { + LAZY_super<> + } + + } + public final [ResolvedTo(BODY_RESOLVE)] fun resolveMe(): R|kotlin/Unit| { + local final [ResolvedTo(BODY_RESOLVE)] class Local : R|kotlin/Any| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=Local] constructor([ResolvedTo(BODY_RESOLVE)] [CorrespondingProperty=/u] u: R|one/two/UsedClass|): R|one/two/Local| { + super() + } + + public final [ResolvedTo(BODY_RESOLVE)] [IsFromPrimaryConstructor=true] val u: R|one/two/UsedClass| = R|/u| + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=Local] get(): R|one/two/UsedClass| + + } + + } + +FILE RAW TO BODY: +FILE: [ResolvedTo(IMPORTS)] resolveTypeFromLocalClassConstructor.kt + [ResolvedTo(BODY_RESOLVE)] annotations container + public final [ResolvedTo(BODY_RESOLVE)] class UnusedClass : R|kotlin/Any| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + super() + } + + } + public abstract [ResolvedTo(BODY_RESOLVE)] interface UsedInterface : R|kotlin/Any| { + } + public final [ResolvedTo(BODY_RESOLVE)] class UsedClass : R|one/two/UsedInterface| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=UsedClass] constructor(): R|one/two/UsedClass| { + super() + } + + } + public final [ResolvedTo(BODY_RESOLVE)] fun resolveMe(): R|kotlin/Unit| { + local final [ResolvedTo(BODY_RESOLVE)] class Local : R|kotlin/Any| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=Local] constructor([ResolvedTo(BODY_RESOLVE)] [CorrespondingProperty=/u] u: R|one/two/UsedClass|): R|one/two/Local| { + super() + } + + public final [ResolvedTo(BODY_RESOLVE)] [IsFromPrimaryConstructor=true] val u: R|one/two/UsedClass| = R|/u| + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=Local] get(): R|one/two/UsedClass| + + } + + } diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/resolveTypeFromLocalFunction.kt b/analysis/low-level-api-fir/testdata/lazyResolve/resolveTypeFromLocalFunction.kt new file mode 100644 index 00000000000..8d785c2f402 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/lazyResolve/resolveTypeFromLocalFunction.kt @@ -0,0 +1,12 @@ +package one.two + +class UnusedClass +interface UsedInterface +class UsedClass : UsedInterface + +fun resolveMe() { + class Local + fun localFunction(usedClass: UsedClass, local: Local) { + + } +} diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/resolveTypeFromLocalFunction.txt b/analysis/low-level-api-fir/testdata/lazyResolve/resolveTypeFromLocalFunction.txt new file mode 100644 index 00000000000..960aeaadeb7 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/lazyResolve/resolveTypeFromLocalFunction.txt @@ -0,0 +1,320 @@ +RAW_FIR: +FILE: [ResolvedTo(RAW_FIR)] resolveTypeFromLocalFunction.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] class UsedClass : UsedInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UsedClass] constructor(): R|one/two/UsedClass| { + LAZY_super<> + } + + } + public? final? [ResolvedTo(RAW_FIR)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +IMPORTS: +FILE: [ResolvedTo(IMPORTS)] resolveTypeFromLocalFunction.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] class UsedClass : UsedInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UsedClass] constructor(): R|one/two/UsedClass| { + LAZY_super<> + } + + } + public? final? [ResolvedTo(RAW_FIR)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +COMPILER_REQUIRED_ANNOTATIONS: +FILE: [ResolvedTo(IMPORTS)] resolveTypeFromLocalFunction.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] class UsedClass : UsedInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UsedClass] constructor(): R|one/two/UsedClass| { + LAZY_super<> + } + + } + public? final? [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +COMPANION_GENERATION: +FILE: [ResolvedTo(IMPORTS)] resolveTypeFromLocalFunction.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] class UsedClass : UsedInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UsedClass] constructor(): R|one/two/UsedClass| { + LAZY_super<> + } + + } + public? final? [ResolvedTo(COMPANION_GENERATION)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +SUPER_TYPES: +FILE: [ResolvedTo(IMPORTS)] resolveTypeFromLocalFunction.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] class UsedClass : UsedInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UsedClass] constructor(): R|one/two/UsedClass| { + LAZY_super<> + } + + } + public? final? [ResolvedTo(SUPER_TYPES)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +TYPES: +FILE: [ResolvedTo(IMPORTS)] resolveTypeFromLocalFunction.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] class UsedClass : UsedInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UsedClass] constructor(): R|one/two/UsedClass| { + LAZY_super<> + } + + } + public? final? [ResolvedTo(TYPES)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +STATUS: +FILE: [ResolvedTo(IMPORTS)] resolveTypeFromLocalFunction.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] class UsedClass : UsedInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UsedClass] constructor(): R|one/two/UsedClass| { + LAZY_super<> + } + + } + public final [ResolvedTo(STATUS)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +EXPECT_ACTUAL_MATCHING: +FILE: [ResolvedTo(IMPORTS)] resolveTypeFromLocalFunction.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] class UsedClass : UsedInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UsedClass] constructor(): R|one/two/UsedClass| { + LAZY_super<> + } + + } + public final [ResolvedTo(EXPECT_ACTUAL_MATCHING)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +ARGUMENTS_OF_ANNOTATIONS: +FILE: [ResolvedTo(IMPORTS)] resolveTypeFromLocalFunction.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] class UsedClass : UsedInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UsedClass] constructor(): R|one/two/UsedClass| { + LAZY_super<> + } + + } + public final [ResolvedTo(ARGUMENTS_OF_ANNOTATIONS)] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK } + +CONTRACTS: +FILE: [ResolvedTo(IMPORTS)] resolveTypeFromLocalFunction.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] class UsedClass : UsedInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UsedClass] constructor(): R|one/two/UsedClass| { + LAZY_super<> + } + + } + public final [ResolvedTo(CONTRACTS)] fun resolveMe(): R|kotlin/Unit| { + local final? [ResolvedTo(RAW_FIR)] class Local : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Local] constructor(): R|one/two/Local| { + super() + } + + } + + local final? [ResolvedTo(RAW_FIR)] fun localFunction([ResolvedTo(RAW_FIR)] usedClass: UsedClass, [ResolvedTo(RAW_FIR)] local: Local): R|kotlin/Unit| { + } + + } + +IMPLICIT_TYPES_BODY_RESOLVE: +FILE: [ResolvedTo(IMPORTS)] resolveTypeFromLocalFunction.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] class UsedClass : UsedInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UsedClass] constructor(): R|one/two/UsedClass| { + LAZY_super<> + } + + } + public final [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] fun resolveMe(): R|kotlin/Unit| { + local final? [ResolvedTo(RAW_FIR)] class Local : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Local] constructor(): R|one/two/Local| { + super() + } + + } + + local final? [ResolvedTo(RAW_FIR)] fun localFunction([ResolvedTo(RAW_FIR)] usedClass: UsedClass, [ResolvedTo(RAW_FIR)] local: Local): R|kotlin/Unit| { + } + + } + +ANNOTATIONS_ARGUMENTS_MAPPING: +FILE: [ResolvedTo(IMPORTS)] resolveTypeFromLocalFunction.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] class UsedClass : UsedInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UsedClass] constructor(): R|one/two/UsedClass| { + LAZY_super<> + } + + } + public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] fun resolveMe(): R|kotlin/Unit| { + local final? [ResolvedTo(RAW_FIR)] class Local : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Local] constructor(): R|one/two/Local| { + super() + } + + } + + local final? [ResolvedTo(RAW_FIR)] fun localFunction([ResolvedTo(RAW_FIR)] usedClass: UsedClass, [ResolvedTo(RAW_FIR)] local: Local): R|kotlin/Unit| { + } + + } + +BODY_RESOLVE: +FILE: [ResolvedTo(IMPORTS)] resolveTypeFromLocalFunction.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class UnusedClass : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] interface UsedInterface : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] class UsedClass : UsedInterface { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=UsedClass] constructor(): R|one/two/UsedClass| { + LAZY_super<> + } + + } + public final [ResolvedTo(BODY_RESOLVE)] fun resolveMe(): R|kotlin/Unit| { + local final [ResolvedTo(BODY_RESOLVE)] class Local : R|kotlin/Any| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=Local] constructor(): R|one/two/Local| { + super() + } + + } + + local final [ResolvedTo(BODY_RESOLVE)] fun localFunction([ResolvedTo(BODY_RESOLVE)] usedClass: R|one/two/UsedClass|, [ResolvedTo(BODY_RESOLVE)] local: R|one/two/Local|): R|kotlin/Unit| { + } + + } + +FILE RAW TO BODY: +FILE: [ResolvedTo(IMPORTS)] resolveTypeFromLocalFunction.kt + [ResolvedTo(BODY_RESOLVE)] annotations container + public final [ResolvedTo(BODY_RESOLVE)] class UnusedClass : R|kotlin/Any| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=UnusedClass] constructor(): R|one/two/UnusedClass| { + super() + } + + } + public abstract [ResolvedTo(BODY_RESOLVE)] interface UsedInterface : R|kotlin/Any| { + } + public final [ResolvedTo(BODY_RESOLVE)] class UsedClass : R|one/two/UsedInterface| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=UsedClass] constructor(): R|one/two/UsedClass| { + super() + } + + } + public final [ResolvedTo(BODY_RESOLVE)] fun resolveMe(): R|kotlin/Unit| { + local final [ResolvedTo(BODY_RESOLVE)] class Local : R|kotlin/Any| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=Local] constructor(): R|one/two/Local| { + super() + } + + } + + local final [ResolvedTo(BODY_RESOLVE)] fun localFunction([ResolvedTo(BODY_RESOLVE)] usedClass: R|one/two/UsedClass|, [ResolvedTo(BODY_RESOLVE)] local: R|one/two/Local|): R|kotlin/Unit| { + } + + } diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirOutOfContentRootLazyDeclarationResolveTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirOutOfContentRootLazyDeclarationResolveTestGenerated.java index 5568973fa14..33edf696faa 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirOutOfContentRootLazyDeclarationResolveTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirOutOfContentRootLazyDeclarationResolveTestGenerated.java @@ -42,6 +42,12 @@ public class FirOutOfContentRootLazyDeclarationResolveTestGenerated extends Abst runTest("analysis/low-level-api-fir/testdata/lazyResolve/annotationFromImplicitJavaTypeWithJavaAnnotation.kt"); } + @Test + @TestMetadata("annotationOnLocalClass.kt") + public void testAnnotationOnLocalClass() throws Exception { + runTest("analysis/low-level-api-fir/testdata/lazyResolve/annotationOnLocalClass.kt"); + } + @Test @TestMetadata("annotationParameters.kt") public void testAnnotationParameters() throws Exception { @@ -66,6 +72,18 @@ public class FirOutOfContentRootLazyDeclarationResolveTestGenerated extends Abst runTest("analysis/low-level-api-fir/testdata/lazyResolve/classMembers.kt"); } + @Test + @TestMetadata("compilerRequiredAnnotationOnLocalClass.kt") + public void testCompilerRequiredAnnotationOnLocalClass() throws Exception { + runTest("analysis/low-level-api-fir/testdata/lazyResolve/compilerRequiredAnnotationOnLocalClass.kt"); + } + + @Test + @TestMetadata("complexLocalHierarchy.kt") + public void testComplexLocalHierarchy() throws Exception { + runTest("analysis/low-level-api-fir/testdata/lazyResolve/complexLocalHierarchy.kt"); + } + @Test @TestMetadata("delegates.kt") public void testDelegates() throws Exception { @@ -138,6 +156,24 @@ public class FirOutOfContentRootLazyDeclarationResolveTestGenerated extends Abst runTest("analysis/low-level-api-fir/testdata/lazyResolve/propertyWithInitializer.kt"); } + @Test + @TestMetadata("resolveSuperTypeFromLocalClass.kt") + public void testResolveSuperTypeFromLocalClass() throws Exception { + runTest("analysis/low-level-api-fir/testdata/lazyResolve/resolveSuperTypeFromLocalClass.kt"); + } + + @Test + @TestMetadata("resolveTypeFromLocalClassConstructor.kt") + public void testResolveTypeFromLocalClassConstructor() throws Exception { + runTest("analysis/low-level-api-fir/testdata/lazyResolve/resolveTypeFromLocalClassConstructor.kt"); + } + + @Test + @TestMetadata("resolveTypeFromLocalFunction.kt") + public void testResolveTypeFromLocalFunction() throws Exception { + runTest("analysis/low-level-api-fir/testdata/lazyResolve/resolveTypeFromLocalFunction.kt"); + } + @Test @TestMetadata("secondaryConstructor.kt") public void testSecondaryConstructor() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirSourceLazyDeclarationResolveTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirSourceLazyDeclarationResolveTestGenerated.java index 4b2b0af2b11..4542744551b 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirSourceLazyDeclarationResolveTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirSourceLazyDeclarationResolveTestGenerated.java @@ -42,6 +42,12 @@ public class FirSourceLazyDeclarationResolveTestGenerated extends AbstractFirSou runTest("analysis/low-level-api-fir/testdata/lazyResolve/annotationFromImplicitJavaTypeWithJavaAnnotation.kt"); } + @Test + @TestMetadata("annotationOnLocalClass.kt") + public void testAnnotationOnLocalClass() throws Exception { + runTest("analysis/low-level-api-fir/testdata/lazyResolve/annotationOnLocalClass.kt"); + } + @Test @TestMetadata("annotationParameters.kt") public void testAnnotationParameters() throws Exception { @@ -66,6 +72,18 @@ public class FirSourceLazyDeclarationResolveTestGenerated extends AbstractFirSou runTest("analysis/low-level-api-fir/testdata/lazyResolve/classMembers.kt"); } + @Test + @TestMetadata("compilerRequiredAnnotationOnLocalClass.kt") + public void testCompilerRequiredAnnotationOnLocalClass() throws Exception { + runTest("analysis/low-level-api-fir/testdata/lazyResolve/compilerRequiredAnnotationOnLocalClass.kt"); + } + + @Test + @TestMetadata("complexLocalHierarchy.kt") + public void testComplexLocalHierarchy() throws Exception { + runTest("analysis/low-level-api-fir/testdata/lazyResolve/complexLocalHierarchy.kt"); + } + @Test @TestMetadata("delegates.kt") public void testDelegates() throws Exception { @@ -138,6 +156,24 @@ public class FirSourceLazyDeclarationResolveTestGenerated extends AbstractFirSou runTest("analysis/low-level-api-fir/testdata/lazyResolve/propertyWithInitializer.kt"); } + @Test + @TestMetadata("resolveSuperTypeFromLocalClass.kt") + public void testResolveSuperTypeFromLocalClass() throws Exception { + runTest("analysis/low-level-api-fir/testdata/lazyResolve/resolveSuperTypeFromLocalClass.kt"); + } + + @Test + @TestMetadata("resolveTypeFromLocalClassConstructor.kt") + public void testResolveTypeFromLocalClassConstructor() throws Exception { + runTest("analysis/low-level-api-fir/testdata/lazyResolve/resolveTypeFromLocalClassConstructor.kt"); + } + + @Test + @TestMetadata("resolveTypeFromLocalFunction.kt") + public void testResolveTypeFromLocalFunction() throws Exception { + runTest("analysis/low-level-api-fir/testdata/lazyResolve/resolveTypeFromLocalFunction.kt"); + } + @Test @TestMetadata("secondaryConstructor.kt") public void testSecondaryConstructor() throws Exception {