Analysis attempt #0
KT element: KtProperty
KT element text:
val x = foo.wrapper.value
FIR element: FirPropertyImpl
FIR source kind: KtRealSourceElementKind

FIR element rendered:
[ResolvedTo(BODY_RESOLVE)] lval x: R|kotlin/String| = R|<local>/foo|.R|SubstitutionOverride</Foo.wrapper: R|Wrapper<kotlin/String>|>|.R|SubstitutionOverride</Wrapper.value: R|kotlin/String|>|

FIR FILE:
FILE: [ResolvedTo(RAW_FIR)] anno.kt
    @Target[Unresolved](LAZY_EXPRESSION) public final? [ResolvedTo(RAW_FIR)] annotation class Anno : R|kotlin/Annotation| {
        public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Anno] constructor(): R|Anno| {
            LAZY_super<R|kotlin/Any|>
        }

    }
FIR FILE:
FILE: [ResolvedTo(IMPORTS)] first.kt
    public final [ResolvedTo(STATUS)] class Wrapper<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
        public [ResolvedTo(STATUS)] [ContainingClassKey=Wrapper] constructor<[ResolvedTo(STATUS)] T>([ResolvedTo(STATUS)] [CorrespondingProperty=/Wrapper.value] value: R|T|): R|Wrapper<T>| {
            LAZY_super<R|kotlin/Any|>
        }

        public final [ResolvedTo(STATUS)] [IsFromPrimaryConstructor=true] val value: R|T| = R|<local>/value|
            public [ResolvedTo(STATUS)] [ContainingClassKey=Wrapper] get(): R|T|

    }
    public final [ResolvedTo(STATUS)] class Foo<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
        public [ResolvedTo(STATUS)] [ContainingClassKey=Foo] constructor<[ResolvedTo(STATUS)] T>([ResolvedTo(STATUS)] [CorrespondingProperty=/Foo.wrapper] wrapper: R|Wrapper<T>|): R|Foo<T>| {
            LAZY_super<R|kotlin/Any|>
        }

        public final [ResolvedTo(STATUS)] [IsFromPrimaryConstructor=true] val wrapper: R|Wrapper<T>| = R|<local>/wrapper|
            public [ResolvedTo(STATUS)] [ContainingClassKey=Foo] get(): R|Wrapper<T>|

    }
    public? final? [ResolvedTo(RAW_FIR)] fun test([ResolvedTo(RAW_FIR)] foo: Foo<@Anno[Unresolved]() String>): R|kotlin/Unit| { LAZY_BLOCK }
FIR FILE:
FILE: [ResolvedTo(IMPORTS)] second.kt
    public final [ResolvedTo(BODY_RESOLVE)] fun other([ResolvedTo(BODY_RESOLVE)] foo: R|Foo<kotlin/String>|): R|kotlin/Unit| {
        [ResolvedTo(BODY_RESOLVE)] lval x: R|kotlin/String| = R|<local>/foo|.R|SubstitutionOverride</Foo.wrapper: R|Wrapper<kotlin/String>|>|.R|SubstitutionOverride</Wrapper.value: R|kotlin/String|>|
    }

=====

Analysis attempt #1
KT element: KtProperty
KT element text:
val x = foo.wrapper.value
FIR element: FirPropertyImpl
FIR source kind: KtRealSourceElementKind

FIR element rendered:
[ResolvedTo(BODY_RESOLVE)] lval x: R|@R|Anno|()  kotlin/String| = R|<local>/foo|.R|SubstitutionOverride</Foo.wrapper: R|Wrapper<@R|Anno|()  kotlin/String>|>|.R|SubstitutionOverride</Wrapper.value: R|@R|Anno|()  kotlin/String|>|

FIR FILE:
FILE: [ResolvedTo(IMPORTS)] anno.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(): R|Anno| {
            LAZY_super<R|kotlin/Any|>
        }

    }
FIR FILE:
FILE: [ResolvedTo(IMPORTS)] first.kt
    public final [ResolvedTo(STATUS)] class Wrapper<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
        public [ResolvedTo(STATUS)] [ContainingClassKey=Wrapper] constructor<[ResolvedTo(STATUS)] T>([ResolvedTo(STATUS)] [CorrespondingProperty=/Wrapper.value] value: R|T|): R|Wrapper<T>| {
            LAZY_super<R|kotlin/Any|>
        }

        public final [ResolvedTo(STATUS)] [IsFromPrimaryConstructor=true] val value: R|T| = R|<local>/value|
            public [ResolvedTo(STATUS)] [ContainingClassKey=Wrapper] get(): R|T|

    }
    public final [ResolvedTo(STATUS)] class Foo<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
        public [ResolvedTo(STATUS)] [ContainingClassKey=Foo] constructor<[ResolvedTo(STATUS)] T>([ResolvedTo(STATUS)] [CorrespondingProperty=/Foo.wrapper] wrapper: R|Wrapper<T>|): R|Foo<T>| {
            LAZY_super<R|kotlin/Any|>
        }

        public final [ResolvedTo(STATUS)] [IsFromPrimaryConstructor=true] val wrapper: R|Wrapper<T>| = R|<local>/wrapper|
            public [ResolvedTo(STATUS)] [ContainingClassKey=Foo] get(): R|Wrapper<T>|

    }
    public final [ResolvedTo(BODY_RESOLVE)] fun test([ResolvedTo(BODY_RESOLVE)] foo: R|Foo<@R|Anno|()  kotlin/String>|): R|kotlin/Unit| {
        [ResolvedTo(BODY_RESOLVE)] lval x: R|@R|Anno|()  kotlin/String| = R|<local>/foo|.R|SubstitutionOverride</Foo.wrapper: R|Wrapper<@R|Anno|()  kotlin/String>|>|.R|SubstitutionOverride</Wrapper.value: R|@R|Anno|()  kotlin/String|>|
    }
FIR FILE:
FILE: [ResolvedTo(IMPORTS)] second.kt
    public final [ResolvedTo(BODY_RESOLVE)] fun other([ResolvedTo(BODY_RESOLVE)] foo: R|Foo<kotlin/String>|): R|kotlin/Unit| {
        [ResolvedTo(BODY_RESOLVE)] lval x: R|kotlin/String| = R|<local>/foo|.R|SubstitutionOverride</Foo.wrapper: R|Wrapper<kotlin/String>|>|.R|SubstitutionOverride</Wrapper.value: R|kotlin/String|>|
    }
