diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/wholeDeclaration/localDelegatedPropertyWithPropagatedType.kt b/analysis/low-level-api-fir/testData/getOrBuildFir/wholeDeclaration/localDelegatedPropertyWithPropagatedType.kt new file mode 100644 index 00000000000..53e228328a8 --- /dev/null +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/wholeDeclaration/localDelegatedPropertyWithPropagatedType.kt @@ -0,0 +1,18 @@ +// WITH_STDLIB + +package foo + +@Target(AnnotationTarget.TYPE, AnnotationTarget.LOCAL_VARIABLE) +annotation class Anno(val position: String) +const val constant = 0 + +fun explicitType(): @Anno("return type: $constant") List<@Anno("nested return type: $constant") Collection<@Anno("nested nested return type: $constant") String>> = 0 + +fun resolveMe() { + + @Anno("property $secondConstant") + val localProperty by lazy { explicitType() } + +} + +const val secondConstant = "str" \ No newline at end of file diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/wholeDeclaration/localDelegatedPropertyWithPropagatedType.out_of_src_roots.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/wholeDeclaration/localDelegatedPropertyWithPropagatedType.out_of_src_roots.txt new file mode 100644 index 00000000000..5b48162f26a --- /dev/null +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/wholeDeclaration/localDelegatedPropertyWithPropagatedType.out_of_src_roots.txt @@ -0,0 +1,36 @@ +KT element: KtProperty +FIR element: FirPropertyImpl +FIR source kind: KtRealSourceElementKind + +FIR element rendered: +@R|foo/Anno|[Types](position = (String(property ), R|foo/secondConstant|)) [ResolvedTo(BODY_RESOLVE)] lval localProperty: by #( = [ResolvedTo(BODY_RESOLVE)] lazy@fun (): R|@R|foo/Anno|((String(return type: ), constant#)) kotlin/collections/List<@R|foo/Anno|((String(nested return type: ), constant#)) kotlin/collections/Collection<@R|foo/Anno|((String(nested nested return type: ), constant#)) kotlin/String>>| { + ^ R|foo/explicitType|() +} +) + +FIR FILE: +FILE: [ResolvedTo(IMPORTS)] localDelegatedPropertyWithPropagatedType.kt + package foo + + @R|kotlin/annotation/Target|[Types](Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.TYPE|, Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.LOCAL_VARIABLE|) 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(RAW_FIR)] val constant: = LAZY_EXPRESSION + public? [ResolvedTo(RAW_FIR)] get(): + public final [ResolvedTo(CONTRACTS)] fun explicitType(): R|@R|foo/Anno|((String(return type: ), constant#)) kotlin/collections/List<@R|foo/Anno|((String(nested return type: ), constant#)) kotlin/collections/Collection<@R|foo/Anno|((String(nested nested return type: ), constant#)) kotlin/String>>| { + ^explicitType IntegerLiteral(0) + } + public final [ResolvedTo(BODY_RESOLVE)] fun resolveMe(): R|kotlin/Unit| { + @R|foo/Anno|[Types](position = (String(property ), R|foo/secondConstant|)) [ResolvedTo(BODY_RESOLVE)] lval localProperty: by #( = [ResolvedTo(BODY_RESOLVE)] lazy@fun (): R|@R|foo/Anno|((String(return type: ), constant#)) kotlin/collections/List<@R|foo/Anno|((String(nested return type: ), constant#)) kotlin/collections/Collection<@R|foo/Anno|((String(nested nested return type: ), constant#)) kotlin/String>>| { + ^ R|foo/explicitType|() + } + ) + } + public final const [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] val secondConstant: R|kotlin/String| = String(str) + public [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] get(): R|kotlin/String| \ No newline at end of file diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/wholeDeclaration/localDelegatedPropertyWithPropagatedType.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/wholeDeclaration/localDelegatedPropertyWithPropagatedType.txt new file mode 100644 index 00000000000..bbf151de023 --- /dev/null +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/wholeDeclaration/localDelegatedPropertyWithPropagatedType.txt @@ -0,0 +1,36 @@ +KT element: KtProperty +FIR element: FirPropertyImpl +FIR source kind: KtRealSourceElementKind + +FIR element rendered: +@R|foo/Anno|[Types](position = (String(property ), R|foo/secondConstant|)) [ResolvedTo(BODY_RESOLVE)] lval localProperty: R|@R|foo/Anno|((String(return type: ), constant#)) kotlin/collections/List<@R|foo/Anno|((String(nested return type: ), constant#)) kotlin/collections/Collection<@R|foo/Anno|((String(nested nested return type: ), constant#)) kotlin/String>>|by R|kotlin/lazy|(String(return type: ), constant#)) kotlin/collections/List<@R|foo/Anno|((String(nested return type: ), constant#)) kotlin/collections/Collection<@R|foo/Anno|((String(nested nested return type: ), constant#)) kotlin/String>>|>( = [ResolvedTo(BODY_RESOLVE)] [MatchingParameterFunctionTypeKey=kotlin/Function0] lazy@fun (): R|@R|foo/Anno|((String(return type: ), constant#)) kotlin/collections/List<@R|foo/Anno|((String(nested return type: ), constant#)) kotlin/collections/Collection<@R|foo/Anno|((String(nested nested return type: ), constant#)) kotlin/String>>| { + ^ R|foo/explicitType|() +} +) + +FIR FILE: +FILE: [ResolvedTo(IMPORTS)] localDelegatedPropertyWithPropagatedType.kt + package foo + + @R|kotlin/annotation/Target|[Types](Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.TYPE|, Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.LOCAL_VARIABLE|) 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(RAW_FIR)] val constant: = LAZY_EXPRESSION + public? [ResolvedTo(RAW_FIR)] get(): + public final [ResolvedTo(CONTRACTS)] fun explicitType(): R|@R|foo/Anno|((String(return type: ), constant#)) kotlin/collections/List<@R|foo/Anno|((String(nested return type: ), constant#)) kotlin/collections/Collection<@R|foo/Anno|((String(nested nested return type: ), constant#)) kotlin/String>>| { + ^explicitType IntegerLiteral(0) + } + public final [ResolvedTo(BODY_RESOLVE)] fun resolveMe(): R|kotlin/Unit| { + @R|foo/Anno|[Types](position = (String(property ), R|foo/secondConstant|)) [ResolvedTo(BODY_RESOLVE)] lval localProperty: R|@R|foo/Anno|((String(return type: ), constant#)) kotlin/collections/List<@R|foo/Anno|((String(nested return type: ), constant#)) kotlin/collections/Collection<@R|foo/Anno|((String(nested nested return type: ), constant#)) kotlin/String>>|by R|kotlin/lazy|(String(return type: ), constant#)) kotlin/collections/List<@R|foo/Anno|((String(nested return type: ), constant#)) kotlin/collections/Collection<@R|foo/Anno|((String(nested nested return type: ), constant#)) kotlin/String>>|>( = [ResolvedTo(BODY_RESOLVE)] [MatchingParameterFunctionTypeKey=kotlin/Function0] lazy@fun (): R|@R|foo/Anno|((String(return type: ), constant#)) kotlin/collections/List<@R|foo/Anno|((String(nested return type: ), constant#)) kotlin/collections/Collection<@R|foo/Anno|((String(nested nested return type: ), constant#)) kotlin/String>>| { + ^ R|foo/explicitType|() + } + ) + } + public final const [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] val secondConstant: R|kotlin/String| = String(str) + public [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] get(): R|kotlin/String| \ No newline at end of file diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/wholeDeclaration/localPropertyWithPropagatedType.kt b/analysis/low-level-api-fir/testData/getOrBuildFir/wholeDeclaration/localPropertyWithPropagatedType.kt new file mode 100644 index 00000000000..8680def84fd --- /dev/null +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/wholeDeclaration/localPropertyWithPropagatedType.kt @@ -0,0 +1,16 @@ +package foo + +@Target(AnnotationTarget.TYPE, AnnotationTarget.LOCAL_VARIABLE) +annotation class Anno(val position: String) +const val constant = 0 + +fun explicitType(): @Anno("return type: $constant") List<@Anno("nested return type: $constant") Collection<@Anno("nested nested return type: $constant") String>> = 0 + +fun resolveMe() { + + @Anno("property $secondConstant") + val localProperty = explicitType() + +} + +const val secondConstant = "str" diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/wholeDeclaration/localPropertyWithPropagatedType.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/wholeDeclaration/localPropertyWithPropagatedType.txt new file mode 100644 index 00000000000..1456d953ad6 --- /dev/null +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/wholeDeclaration/localPropertyWithPropagatedType.txt @@ -0,0 +1,30 @@ +KT element: KtProperty +FIR element: FirPropertyImpl +FIR source kind: KtRealSourceElementKind + +FIR element rendered: +@R|foo/Anno|[Types](position = (String(property ), R|foo/secondConstant|)) [ResolvedTo(BODY_RESOLVE)] lval localProperty: R|@R|foo/Anno|((String(return type: ), constant#)) kotlin/collections/List<@R|foo/Anno|((String(nested return type: ), constant#)) kotlin/collections/Collection<@R|foo/Anno|((String(nested nested return type: ), constant#)) kotlin/String>>| = R|foo/explicitType|() + +FIR FILE: +FILE: [ResolvedTo(IMPORTS)] localPropertyWithPropagatedType.kt + package foo + + @R|kotlin/annotation/Target|[Types](Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.TYPE|, Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.LOCAL_VARIABLE|) 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(RAW_FIR)] val constant: = LAZY_EXPRESSION + public? [ResolvedTo(RAW_FIR)] get(): + public final [ResolvedTo(CONTRACTS)] fun explicitType(): R|@R|foo/Anno|((String(return type: ), constant#)) kotlin/collections/List<@R|foo/Anno|((String(nested return type: ), constant#)) kotlin/collections/Collection<@R|foo/Anno|((String(nested nested return type: ), constant#)) kotlin/String>>| { + ^explicitType IntegerLiteral(0) + } + public final [ResolvedTo(BODY_RESOLVE)] fun resolveMe(): R|kotlin/Unit| { + @R|foo/Anno|[Types](position = (String(property ), R|foo/secondConstant|)) [ResolvedTo(BODY_RESOLVE)] lval localProperty: R|@R|foo/Anno|((String(return type: ), constant#)) kotlin/collections/List<@R|foo/Anno|((String(nested return type: ), constant#)) kotlin/collections/Collection<@R|foo/Anno|((String(nested nested return type: ), constant#)) kotlin/String>>| = R|foo/explicitType|() + } + public final const [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] val secondConstant: R|kotlin/String| = String(str) + public [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] get(): R|kotlin/String| \ No newline at end of file diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/OutOfContentRootGetOrBuildFirTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/OutOfContentRootGetOrBuildFirTestGenerated.java index 7e8cd5a429e..23666b5e1fd 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/OutOfContentRootGetOrBuildFirTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/OutOfContentRootGetOrBuildFirTestGenerated.java @@ -1277,6 +1277,12 @@ public class OutOfContentRootGetOrBuildFirTestGenerated extends AbstractOutOfCon runTest("analysis/low-level-api-fir/testData/getOrBuildFir/wholeDeclaration/localClass.kt"); } + @Test + @TestMetadata("localDelegatedPropertyWithPropagatedType.kt") + public void testLocalDelegatedPropertyWithPropagatedType() throws Exception { + runTest("analysis/low-level-api-fir/testData/getOrBuildFir/wholeDeclaration/localDelegatedPropertyWithPropagatedType.kt"); + } + @Test @TestMetadata("localFunction.kt") public void testLocalFunction() throws Exception { @@ -1289,6 +1295,12 @@ public class OutOfContentRootGetOrBuildFirTestGenerated extends AbstractOutOfCon runTest("analysis/low-level-api-fir/testData/getOrBuildFir/wholeDeclaration/localProperty.kt"); } + @Test + @TestMetadata("localPropertyWithPropagatedType.kt") + public void testLocalPropertyWithPropagatedType() throws Exception { + runTest("analysis/low-level-api-fir/testData/getOrBuildFir/wholeDeclaration/localPropertyWithPropagatedType.kt"); + } + @Test @TestMetadata("memberFunction.kt") public void testMemberFunction() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceGetOrBuildFirTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceGetOrBuildFirTestGenerated.java index f7bbeab1627..a52330b60ab 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceGetOrBuildFirTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceGetOrBuildFirTestGenerated.java @@ -1277,6 +1277,12 @@ public class SourceGetOrBuildFirTestGenerated extends AbstractSourceGetOrBuildFi runTest("analysis/low-level-api-fir/testData/getOrBuildFir/wholeDeclaration/localClass.kt"); } + @Test + @TestMetadata("localDelegatedPropertyWithPropagatedType.kt") + public void testLocalDelegatedPropertyWithPropagatedType() throws Exception { + runTest("analysis/low-level-api-fir/testData/getOrBuildFir/wholeDeclaration/localDelegatedPropertyWithPropagatedType.kt"); + } + @Test @TestMetadata("localFunction.kt") public void testLocalFunction() throws Exception { @@ -1289,6 +1295,12 @@ public class SourceGetOrBuildFirTestGenerated extends AbstractSourceGetOrBuildFi runTest("analysis/low-level-api-fir/testData/getOrBuildFir/wholeDeclaration/localProperty.kt"); } + @Test + @TestMetadata("localPropertyWithPropagatedType.kt") + public void testLocalPropertyWithPropagatedType() throws Exception { + runTest("analysis/low-level-api-fir/testData/getOrBuildFir/wholeDeclaration/localPropertyWithPropagatedType.kt"); + } + @Test @TestMetadata("memberFunction.kt") public void testMemberFunction() throws Exception {