diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/wholeDeclaration/lambdaAsSAMInterfaceWithAnnotation.kt b/analysis/low-level-api-fir/testData/getOrBuildFir/wholeDeclaration/lambdaAsSAMInterfaceWithAnnotation.kt new file mode 100644 index 00000000000..7f695fbf96b --- /dev/null +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/wholeDeclaration/lambdaAsSAMInterfaceWithAnnotation.kt @@ -0,0 +1,19 @@ +package foo + +class Arg + +@Target(AnnotationTarget.TYPE) +annotation class Anno(val position: String) +const val constant = 0 + +fun interface Foo { + fun foo(a: @Anno("foo param type $constant") Arg): @Anno("foo return type $constant") Arg +} + +fun testMe(f: @Anno("testMe param type $constant") Foo) {} + + +fun resolveMe() { + testMe { b -> b } +} + \ No newline at end of file diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/wholeDeclaration/lambdaAsSAMInterfaceWithAnnotation.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/wholeDeclaration/lambdaAsSAMInterfaceWithAnnotation.txt new file mode 100644 index 00000000000..e87ca0b90fc --- /dev/null +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/wholeDeclaration/lambdaAsSAMInterfaceWithAnnotation.txt @@ -0,0 +1,45 @@ +KT element: KtNamedFunction +FIR element: FirSimpleFunctionImpl +FIR source kind: KtRealSourceElementKind + +FIR element rendered: +public final [ResolvedTo(BODY_RESOLVE)] fun resolveMe(): R|kotlin/Unit| { + R|foo/testMe|( = [ResolvedTo(BODY_RESOLVE)] [MatchingParameterFunctionTypeKey=@R|foo/Anno|((String(testMe param type ), constant#)) foo/Foo] testMe@fun ([ResolvedTo(BODY_RESOLVE)] b: R|@R|foo/Anno|(position = (String(foo param type ), R|foo/constant|)) foo/Arg|): R|@R|foo/Anno|(position = (String(foo return type ), R|foo/constant|)) foo/Arg| { + ^ R|/b| + } + ) +} + +FIR FILE: +FILE: [ResolvedTo(IMPORTS)] lambdaAsSAMInterfaceWithAnnotation.kt + package foo + + public? final? [ResolvedTo(RAW_FIR)] class Arg : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Arg] constructor(): R|foo/Arg| { + LAZY_super + } + + } + @R|kotlin/annotation/Target|[Types](Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.TYPE|) public final [ResolvedTo(STATUS)] annotation class Anno : R|kotlin/Annotation| { + public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] constructor([ResolvedTo(STATUS)] [CorrespondingProperty=foo/Anno.position] position: R|kotlin/String|): R|foo/Anno| { + LAZY_super + } + + public final [ResolvedTo(STATUS)] [IsFromPrimaryConstructor=true] val position: R|kotlin/String| = R|/position| + public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] get(): R|kotlin/String| + + } + public final const [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] val constant: R|kotlin/Int| = Int(0) + public [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] get(): R|kotlin/Int| + public abstract fun [ResolvedTo(STATUS)] interface Foo : R|kotlin/Any| { + public abstract [ResolvedTo(STATUS)] fun foo([ResolvedTo(STATUS)] a: R|@R|foo/Anno|((String(foo param type ), R|foo/constant|)) foo/Arg|): R|@R|foo/Anno|((String(foo return type ), R|foo/constant|)) foo/Arg| + + } + public final [ResolvedTo(CONTRACTS)] fun testMe([ResolvedTo(CONTRACTS)] f: R|@R|foo/Anno|((String(testMe param type ), constant#)) foo/Foo|): R|kotlin/Unit| { + } + public final [ResolvedTo(BODY_RESOLVE)] fun resolveMe(): R|kotlin/Unit| { + R|foo/testMe|( = [ResolvedTo(BODY_RESOLVE)] [MatchingParameterFunctionTypeKey=@R|foo/Anno|((String(testMe param type ), constant#)) foo/Foo] testMe@fun ([ResolvedTo(BODY_RESOLVE)] b: R|@R|foo/Anno|(position = (String(foo param type ), R|foo/constant|)) foo/Arg|): R|@R|foo/Anno|(position = (String(foo return type ), R|foo/constant|)) foo/Arg| { + ^ R|/b| + } + ) + } diff --git a/analysis/low-level-api-fir/testData/lazyResolveTypeAnnotations/class/delegateFieldWithAnnotationClash.after.txt b/analysis/low-level-api-fir/testData/lazyResolveTypeAnnotations/class/delegateFieldWithAnnotationClash.after.txt new file mode 100644 index 00000000000..064ebfea2f2 --- /dev/null +++ b/analysis/low-level-api-fir/testData/lazyResolveTypeAnnotations/class/delegateFieldWithAnnotationClash.after.txt @@ -0,0 +1,37 @@ +@R|second/Anno|(int = R|second/constant|) second/Base + context -> FirRegularClassSymbol second/MyClass + anchor -> [FirRegularClassSymbol second/MyClass] + +FILE: [ResolvedTo(IMPORTS)] delegateFieldWithAnnotationClash.kt + @R|kotlin/annotation/Target|[Types](Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.TYPE|) public final [ResolvedTo(STATUS)] annotation class Anno : R|kotlin/Annotation| { + public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] constructor([ResolvedTo(STATUS)] [CorrespondingProperty=second/Anno.int] int: R|kotlin/Int|): R|second/Anno| { + LAZY_super + } + + public final [ResolvedTo(STATUS)] [IsFromPrimaryConstructor=true] val int: R|kotlin/Int| = R|/int| + public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] get(): R|kotlin/Int| + + } + public? final? [ResolvedTo(SUPER_TYPES)] interface Base : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] fun bar(): Base { LAZY_BLOCK } + public final const [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] val constant: R|kotlin/Int| = Int(0) + public [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] get(): R|kotlin/Int| + public final [ResolvedTo(ANNOTATION_ARGUMENTS)] [DelegateFieldsMapKey={0=FirFieldSymbol second/MyClass.$$delegate_0}] class MyClass : R|@R|second/Anno|(int = R|second/constant|) second/Base| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=MyClass] constructor(): R|second/MyClass| { + LAZY_super<> + } + + private final [ResolvedTo(RAW_FIR)] field $$delegate_0: @R|second/Anno|[Types](int = R|second/constant|) Base = LAZY_EXPRESSION + + @Target[Unresolved](LAZY_EXPRESSION) public? final? [ResolvedTo(RAW_FIR)] annotation class Anno : R|kotlin/Annotation| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Anno] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=second/MyClass.Anno.string] string: String): R|second/MyClass.Anno| { + LAZY_super + } + + public? final? [ResolvedTo(RAW_FIR)] [IsFromPrimaryConstructor=true] val string: String = R|/string| + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Anno] get(): String + + } + + } diff --git a/analysis/low-level-api-fir/testData/lazyResolveTypeAnnotations/class/delegateFieldWithAnnotationClash.before.txt b/analysis/low-level-api-fir/testData/lazyResolveTypeAnnotations/class/delegateFieldWithAnnotationClash.before.txt new file mode 100644 index 00000000000..74d96674f23 --- /dev/null +++ b/analysis/low-level-api-fir/testData/lazyResolveTypeAnnotations/class/delegateFieldWithAnnotationClash.before.txt @@ -0,0 +1,37 @@ +@R|second/Anno|(LAZY_EXPRESSION) second/Base + context -> FirRegularClassSymbol second/MyClass + anchor -> [FirRegularClassSymbol second/MyClass] + +FILE: [ResolvedTo(IMPORTS)] delegateFieldWithAnnotationClash.kt + @R|kotlin/annotation/Target|[CompilerRequiredAnnotations](Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.TYPE|) public? final? [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] annotation class Anno : R|kotlin/Annotation| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Anno] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=second/Anno.int] int: Int): R|second/Anno| { + LAZY_super + } + + public? final? [ResolvedTo(RAW_FIR)] [IsFromPrimaryConstructor=true] val int: Int = R|/int| + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Anno] get(): Int + + } + public? final? [ResolvedTo(SUPER_TYPES)] interface Base : R|kotlin/Any| { + } + public? final? [ResolvedTo(RAW_FIR)] fun bar(): Base { LAZY_BLOCK } + public? final? const [ResolvedTo(RAW_FIR)] val constant: = LAZY_EXPRESSION + public? [ResolvedTo(RAW_FIR)] get(): + public? final? [ResolvedTo(TYPES)] [DelegateFieldsMapKey={0=FirFieldSymbol second/MyClass.$$delegate_0}] class MyClass : R|@R|second/Anno|(LAZY_EXPRESSION) second/Base| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=MyClass] constructor(): R|second/MyClass| { + LAZY_super<> + } + + private final [ResolvedTo(RAW_FIR)] field $$delegate_0: @R|second/Anno|[Unresolved](LAZY_EXPRESSION) Base = LAZY_EXPRESSION + + @Target[Unresolved](LAZY_EXPRESSION) public? final? [ResolvedTo(RAW_FIR)] annotation class Anno : R|kotlin/Annotation| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Anno] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=second/MyClass.Anno.string] string: String): R|second/MyClass.Anno| { + LAZY_super + } + + public? final? [ResolvedTo(RAW_FIR)] [IsFromPrimaryConstructor=true] val string: String = R|/string| + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Anno] get(): String + + } + + } diff --git a/analysis/low-level-api-fir/testData/lazyResolve/classes/delegateFieldWithAnnotationClash.kt b/analysis/low-level-api-fir/testData/lazyResolveTypeAnnotations/class/delegateFieldWithAnnotationClash.kt similarity index 100% rename from analysis/low-level-api-fir/testData/lazyResolve/classes/delegateFieldWithAnnotationClash.kt rename to analysis/low-level-api-fir/testData/lazyResolveTypeAnnotations/class/delegateFieldWithAnnotationClash.kt diff --git a/analysis/low-level-api-fir/testData/lazyResolve/classes/delegateFieldWithAnnotationClash.txt b/analysis/low-level-api-fir/testData/lazyResolveTypeAnnotations/class/delegateFieldWithAnnotationClash.lazyResolve.txt similarity index 100% rename from analysis/low-level-api-fir/testData/lazyResolve/classes/delegateFieldWithAnnotationClash.txt rename to analysis/low-level-api-fir/testData/lazyResolveTypeAnnotations/class/delegateFieldWithAnnotationClash.lazyResolve.txt diff --git a/analysis/low-level-api-fir/testData/lazyResolveTypeAnnotations/class/delegateFieldWithAnnotationClashScript.after.txt b/analysis/low-level-api-fir/testData/lazyResolveTypeAnnotations/class/delegateFieldWithAnnotationClashScript.after.txt new file mode 100644 index 00000000000..0c747dfaa61 --- /dev/null +++ b/analysis/low-level-api-fir/testData/lazyResolveTypeAnnotations/class/delegateFieldWithAnnotationClashScript.after.txt @@ -0,0 +1,45 @@ +@R|second/Anno|(int = R|second/constant|) second/Base + context -> FirRegularClassSymbol second/MyClass + anchor -> [FirRegularClassSymbol second/MyClass] + +FILE: [ResolvedTo(IMPORTS)] delegateFieldWithAnnotationClashScript.kts + context(