[LL FIR] fix designation path for synthetic declarations

A designation path for synthetic declarations like fake override
or member delegate contained the wrong FirFile, because it
was provided by the original declaration that is wrong.
So we should pick up the file from our path, because it shouldn't be
synthetic

^KT-59505 Fixed
This commit is contained in:
Dmitrii Gridin
2023-06-20 17:04:40 +02:00
committed by Space Team
parent a3758bf70b
commit f74d4494aa
19 changed files with 1445 additions and 17 deletions
@@ -274,7 +274,7 @@ fun FirElementWithResolveState.tryCollectDesignationWithFile(): FirDesignationWi
}
is FirDeclaration -> {
val path = collectDesignationPath(this) ?: return null
val firFile = getContainingFile() ?: return null
val firFile = path.lastOrNull()?.getContainingFile() ?: getContainingFile() ?: return null
FirDesignationWithFile(path, this, firFile)
}
else -> unexpectedElementError<FirElementWithResolveState>(this)
@@ -0,0 +1,7 @@
// MEMBER_NAME_FILTER: implicitType
class Aa<caret>a(i: Interface) : Interface by i
interface Interface {
fun implicitType() = 42
}
@@ -0,0 +1,257 @@
RAW_FIR:
TARGET: public open [ResolvedTo(STATUS)] [DelegatedWrapperDataKey=[wrapped=FirNamedFunctionSymbol /Interface.implicitType, containingClass=Aaa, delegateField=FirFieldSymbol /Aaa.$$delegate_0, FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor=Empty, baseSymbol=FirNamedFunctionSymbol /Interface.implicitType)] fun implicitType(): <implicit>
FILE: [ResolvedTo(IMPORTS)] delegateWithImplicitType.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public final [ResolvedTo(STATUS)] [DelegateFieldsMapKey={0=FirFieldSymbol /Aaa.$$delegate_0}] class Aaa : R|Interface| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Aaa] constructor([ResolvedTo(STATUS)] i: R|Interface|): R|Aaa| {
LAZY_super<<implicit>>
}
private final [ResolvedTo(STATUS)] field $$delegate_0: R|Interface| = LAZY_EXPRESSION
}
public abstract [ResolvedTo(STATUS)] interface Interface : R|kotlin/Any| {
public open [ResolvedTo(STATUS)] fun implicitType(): <implicit> { LAZY_BLOCK }
}
IMPORTS:
TARGET: public open [ResolvedTo(STATUS)] [DelegatedWrapperDataKey=[wrapped=FirNamedFunctionSymbol /Interface.implicitType, containingClass=Aaa, delegateField=FirFieldSymbol /Aaa.$$delegate_0, FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor=Empty, baseSymbol=FirNamedFunctionSymbol /Interface.implicitType)] fun implicitType(): <implicit>
FILE: [ResolvedTo(IMPORTS)] delegateWithImplicitType.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public final [ResolvedTo(STATUS)] [DelegateFieldsMapKey={0=FirFieldSymbol /Aaa.$$delegate_0}] class Aaa : R|Interface| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Aaa] constructor([ResolvedTo(STATUS)] i: R|Interface|): R|Aaa| {
LAZY_super<<implicit>>
}
private final [ResolvedTo(STATUS)] field $$delegate_0: R|Interface| = LAZY_EXPRESSION
}
public abstract [ResolvedTo(STATUS)] interface Interface : R|kotlin/Any| {
public open [ResolvedTo(STATUS)] fun implicitType(): <implicit> { LAZY_BLOCK }
}
COMPILER_REQUIRED_ANNOTATIONS:
TARGET: public open [ResolvedTo(STATUS)] [DelegatedWrapperDataKey=[wrapped=FirNamedFunctionSymbol /Interface.implicitType, containingClass=Aaa, delegateField=FirFieldSymbol /Aaa.$$delegate_0, FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor=Empty, baseSymbol=FirNamedFunctionSymbol /Interface.implicitType)] fun implicitType(): <implicit>
FILE: [ResolvedTo(IMPORTS)] delegateWithImplicitType.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public final [ResolvedTo(STATUS)] [DelegateFieldsMapKey={0=FirFieldSymbol /Aaa.$$delegate_0}] class Aaa : R|Interface| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Aaa] constructor([ResolvedTo(STATUS)] i: R|Interface|): R|Aaa| {
LAZY_super<<implicit>>
}
private final [ResolvedTo(STATUS)] field $$delegate_0: R|Interface| = LAZY_EXPRESSION
}
public abstract [ResolvedTo(STATUS)] interface Interface : R|kotlin/Any| {
public open [ResolvedTo(STATUS)] fun implicitType(): <implicit> { LAZY_BLOCK }
}
COMPANION_GENERATION:
TARGET: public open [ResolvedTo(STATUS)] [DelegatedWrapperDataKey=[wrapped=FirNamedFunctionSymbol /Interface.implicitType, containingClass=Aaa, delegateField=FirFieldSymbol /Aaa.$$delegate_0, FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor=Empty, baseSymbol=FirNamedFunctionSymbol /Interface.implicitType)] fun implicitType(): <implicit>
FILE: [ResolvedTo(IMPORTS)] delegateWithImplicitType.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public final [ResolvedTo(STATUS)] [DelegateFieldsMapKey={0=FirFieldSymbol /Aaa.$$delegate_0}] class Aaa : R|Interface| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Aaa] constructor([ResolvedTo(STATUS)] i: R|Interface|): R|Aaa| {
LAZY_super<<implicit>>
}
private final [ResolvedTo(STATUS)] field $$delegate_0: R|Interface| = LAZY_EXPRESSION
}
public abstract [ResolvedTo(STATUS)] interface Interface : R|kotlin/Any| {
public open [ResolvedTo(STATUS)] fun implicitType(): <implicit> { LAZY_BLOCK }
}
SUPER_TYPES:
TARGET: public open [ResolvedTo(STATUS)] [DelegatedWrapperDataKey=[wrapped=FirNamedFunctionSymbol /Interface.implicitType, containingClass=Aaa, delegateField=FirFieldSymbol /Aaa.$$delegate_0, FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor=Empty, baseSymbol=FirNamedFunctionSymbol /Interface.implicitType)] fun implicitType(): <implicit>
FILE: [ResolvedTo(IMPORTS)] delegateWithImplicitType.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public final [ResolvedTo(STATUS)] [DelegateFieldsMapKey={0=FirFieldSymbol /Aaa.$$delegate_0}] class Aaa : R|Interface| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Aaa] constructor([ResolvedTo(STATUS)] i: R|Interface|): R|Aaa| {
LAZY_super<<implicit>>
}
private final [ResolvedTo(STATUS)] field $$delegate_0: R|Interface| = LAZY_EXPRESSION
}
public abstract [ResolvedTo(STATUS)] interface Interface : R|kotlin/Any| {
public open [ResolvedTo(STATUS)] fun implicitType(): <implicit> { LAZY_BLOCK }
}
TYPES:
TARGET: public open [ResolvedTo(STATUS)] [DelegatedWrapperDataKey=[wrapped=FirNamedFunctionSymbol /Interface.implicitType, containingClass=Aaa, delegateField=FirFieldSymbol /Aaa.$$delegate_0, FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor=Empty, baseSymbol=FirNamedFunctionSymbol /Interface.implicitType)] fun implicitType(): <implicit>
FILE: [ResolvedTo(IMPORTS)] delegateWithImplicitType.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public final [ResolvedTo(STATUS)] [DelegateFieldsMapKey={0=FirFieldSymbol /Aaa.$$delegate_0}] class Aaa : R|Interface| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Aaa] constructor([ResolvedTo(STATUS)] i: R|Interface|): R|Aaa| {
LAZY_super<<implicit>>
}
private final [ResolvedTo(STATUS)] field $$delegate_0: R|Interface| = LAZY_EXPRESSION
}
public abstract [ResolvedTo(STATUS)] interface Interface : R|kotlin/Any| {
public open [ResolvedTo(STATUS)] fun implicitType(): <implicit> { LAZY_BLOCK }
}
STATUS:
TARGET: public open [ResolvedTo(STATUS)] [DelegatedWrapperDataKey=[wrapped=FirNamedFunctionSymbol /Interface.implicitType, containingClass=Aaa, delegateField=FirFieldSymbol /Aaa.$$delegate_0, FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor=Empty, baseSymbol=FirNamedFunctionSymbol /Interface.implicitType)] fun implicitType(): <implicit>
FILE: [ResolvedTo(IMPORTS)] delegateWithImplicitType.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public final [ResolvedTo(STATUS)] [DelegateFieldsMapKey={0=FirFieldSymbol /Aaa.$$delegate_0}] class Aaa : R|Interface| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Aaa] constructor([ResolvedTo(STATUS)] i: R|Interface|): R|Aaa| {
LAZY_super<<implicit>>
}
private final [ResolvedTo(STATUS)] field $$delegate_0: R|Interface| = LAZY_EXPRESSION
}
public abstract [ResolvedTo(STATUS)] interface Interface : R|kotlin/Any| {
public open [ResolvedTo(STATUS)] fun implicitType(): <implicit> { LAZY_BLOCK }
}
EXPECT_ACTUAL_MATCHING:
TARGET: public open [ResolvedTo(EXPECT_ACTUAL_MATCHING)] [DelegatedWrapperDataKey=[wrapped=FirNamedFunctionSymbol /Interface.implicitType, containingClass=Aaa, delegateField=FirFieldSymbol /Aaa.$$delegate_0, FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor=Empty, baseSymbol=FirNamedFunctionSymbol /Interface.implicitType)] fun implicitType(): <implicit>
FILE: [ResolvedTo(IMPORTS)] delegateWithImplicitType.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public final [ResolvedTo(STATUS)] [DelegateFieldsMapKey={0=FirFieldSymbol /Aaa.$$delegate_0}] class Aaa : R|Interface| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Aaa] constructor([ResolvedTo(STATUS)] i: R|Interface|): R|Aaa| {
LAZY_super<<implicit>>
}
private final [ResolvedTo(STATUS)] field $$delegate_0: R|Interface| = LAZY_EXPRESSION
}
public abstract [ResolvedTo(STATUS)] interface Interface : R|kotlin/Any| {
public open [ResolvedTo(STATUS)] fun implicitType(): <implicit> { LAZY_BLOCK }
}
ARGUMENTS_OF_ANNOTATIONS:
TARGET: public open [ResolvedTo(ARGUMENTS_OF_ANNOTATIONS)] [DelegatedWrapperDataKey=[wrapped=FirNamedFunctionSymbol /Interface.implicitType, containingClass=Aaa, delegateField=FirFieldSymbol /Aaa.$$delegate_0, FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor=Empty, baseSymbol=FirNamedFunctionSymbol /Interface.implicitType)] fun implicitType(): <implicit>
FILE: [ResolvedTo(IMPORTS)] delegateWithImplicitType.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public final [ResolvedTo(STATUS)] [DelegateFieldsMapKey={0=FirFieldSymbol /Aaa.$$delegate_0}] class Aaa : R|Interface| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Aaa] constructor([ResolvedTo(STATUS)] i: R|Interface|): R|Aaa| {
LAZY_super<<implicit>>
}
private final [ResolvedTo(STATUS)] field $$delegate_0: R|Interface| = LAZY_EXPRESSION
}
public abstract [ResolvedTo(STATUS)] interface Interface : R|kotlin/Any| {
public open [ResolvedTo(STATUS)] fun implicitType(): <implicit> { LAZY_BLOCK }
}
CONTRACTS:
TARGET: public open [ResolvedTo(CONTRACTS)] [DelegatedWrapperDataKey=[wrapped=FirNamedFunctionSymbol /Interface.implicitType, containingClass=Aaa, delegateField=FirFieldSymbol /Aaa.$$delegate_0, FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor=Empty, baseSymbol=FirNamedFunctionSymbol /Interface.implicitType)] fun implicitType(): <implicit>
FILE: [ResolvedTo(IMPORTS)] delegateWithImplicitType.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public final [ResolvedTo(STATUS)] [DelegateFieldsMapKey={0=FirFieldSymbol /Aaa.$$delegate_0}] class Aaa : R|Interface| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Aaa] constructor([ResolvedTo(STATUS)] i: R|Interface|): R|Aaa| {
LAZY_super<<implicit>>
}
private final [ResolvedTo(STATUS)] field $$delegate_0: R|Interface| = LAZY_EXPRESSION
}
public abstract [ResolvedTo(STATUS)] interface Interface : R|kotlin/Any| {
public open [ResolvedTo(STATUS)] fun implicitType(): <implicit> { LAZY_BLOCK }
}
IMPLICIT_TYPES_BODY_RESOLVE:
TARGET: public open [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] [DelegatedWrapperDataKey=[wrapped=FirNamedFunctionSymbol /Interface.implicitType, containingClass=Aaa, delegateField=FirFieldSymbol /Aaa.$$delegate_0] fun implicitType(): R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] delegateWithImplicitType.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public final [ResolvedTo(STATUS)] [DelegateFieldsMapKey={0=FirFieldSymbol /Aaa.$$delegate_0}] class Aaa : R|Interface| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Aaa] constructor([ResolvedTo(STATUS)] i: R|Interface|): R|Aaa| {
LAZY_super<<implicit>>
}
private final [ResolvedTo(STATUS)] field $$delegate_0: R|Interface| = LAZY_EXPRESSION
}
public abstract [ResolvedTo(STATUS)] interface Interface : R|kotlin/Any| {
public open [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] fun implicitType(): R|kotlin/Int| {
^implicitType Int(42)
}
}
ANNOTATIONS_ARGUMENTS_MAPPING:
TARGET: public open [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] [DelegatedWrapperDataKey=[wrapped=FirNamedFunctionSymbol /Interface.implicitType, containingClass=Aaa, delegateField=FirFieldSymbol /Aaa.$$delegate_0] fun implicitType(): R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] delegateWithImplicitType.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public final [ResolvedTo(STATUS)] [DelegateFieldsMapKey={0=FirFieldSymbol /Aaa.$$delegate_0}] class Aaa : R|Interface| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Aaa] constructor([ResolvedTo(STATUS)] i: R|Interface|): R|Aaa| {
LAZY_super<<implicit>>
}
private final [ResolvedTo(STATUS)] field $$delegate_0: R|Interface| = LAZY_EXPRESSION
}
public abstract [ResolvedTo(STATUS)] interface Interface : R|kotlin/Any| {
public open [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] fun implicitType(): R|kotlin/Int| {
^implicitType Int(42)
}
}
BODY_RESOLVE:
TARGET: public open [ResolvedTo(BODY_RESOLVE)] [DelegatedWrapperDataKey=[wrapped=FirNamedFunctionSymbol /Interface.implicitType, containingClass=Aaa, delegateField=FirFieldSymbol /Aaa.$$delegate_0] fun implicitType(): R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] delegateWithImplicitType.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public final [ResolvedTo(STATUS)] [DelegateFieldsMapKey={0=FirFieldSymbol /Aaa.$$delegate_0}] class Aaa : R|Interface| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Aaa] constructor([ResolvedTo(STATUS)] i: R|Interface|): R|Aaa| {
LAZY_super<<implicit>>
}
private final [ResolvedTo(STATUS)] field $$delegate_0: R|Interface| = LAZY_EXPRESSION
}
public abstract [ResolvedTo(STATUS)] interface Interface : R|kotlin/Any| {
public open [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] fun implicitType(): R|kotlin/Int| {
^implicitType Int(42)
}
}
FILE RAW TO BODY:
FILE: [ResolvedTo(IMPORTS)] delegateWithImplicitType.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public final [ResolvedTo(BODY_RESOLVE)] [DelegateFieldsMapKey={0=FirFieldSymbol /Aaa.$$delegate_0}] class Aaa : R|Interface| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=Aaa] constructor([ResolvedTo(BODY_RESOLVE)] i: R|Interface|): R|Aaa| {
super<R|kotlin/Any|>()
}
private final [ResolvedTo(BODY_RESOLVE)] field $$delegate_0: R|Interface| = R|<local>/i|
}
public abstract [ResolvedTo(BODY_RESOLVE)] interface Interface : R|kotlin/Any| {
public open [ResolvedTo(BODY_RESOLVE)] fun implicitType(): R|kotlin/Int| {
^implicitType Int(42)
}
}
@@ -0,0 +1,11 @@
// SKIP_WHEN_OUT_OF_CONTENT_ROOT
// MODULE: m1
// FILE: Interface.kt
interface Interface {
fun implicitType() = 42
}
// MODULE: m2(m1)
// MEMBER_NAME_FILTER: implicitType
// FILE: usage.kt
class Aa<caret>a(i: Interface) : Interface by i
@@ -0,0 +1,193 @@
RAW_FIR:
TARGET: public open [ResolvedTo(STATUS)] [DelegatedWrapperDataKey=[wrapped=FirNamedFunctionSymbol /Interface.implicitType, containingClass=Aaa, delegateField=FirFieldSymbol /Aaa.$$delegate_0, FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor=Empty, baseSymbol=FirNamedFunctionSymbol /Interface.implicitType)] fun implicitType(): <implicit>
FILE: [ResolvedTo(IMPORTS)] usage.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public final [ResolvedTo(STATUS)] [DelegateFieldsMapKey={0=FirFieldSymbol /Aaa.$$delegate_0}] class Aaa : R|Interface| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Aaa] constructor([ResolvedTo(STATUS)] i: R|Interface|): R|Aaa| {
LAZY_super<<implicit>>
}
private final [ResolvedTo(STATUS)] field $$delegate_0: R|Interface| = LAZY_EXPRESSION
}
IMPORTS:
TARGET: public open [ResolvedTo(STATUS)] [DelegatedWrapperDataKey=[wrapped=FirNamedFunctionSymbol /Interface.implicitType, containingClass=Aaa, delegateField=FirFieldSymbol /Aaa.$$delegate_0, FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor=Empty, baseSymbol=FirNamedFunctionSymbol /Interface.implicitType)] fun implicitType(): <implicit>
FILE: [ResolvedTo(IMPORTS)] usage.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public final [ResolvedTo(STATUS)] [DelegateFieldsMapKey={0=FirFieldSymbol /Aaa.$$delegate_0}] class Aaa : R|Interface| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Aaa] constructor([ResolvedTo(STATUS)] i: R|Interface|): R|Aaa| {
LAZY_super<<implicit>>
}
private final [ResolvedTo(STATUS)] field $$delegate_0: R|Interface| = LAZY_EXPRESSION
}
COMPILER_REQUIRED_ANNOTATIONS:
TARGET: public open [ResolvedTo(STATUS)] [DelegatedWrapperDataKey=[wrapped=FirNamedFunctionSymbol /Interface.implicitType, containingClass=Aaa, delegateField=FirFieldSymbol /Aaa.$$delegate_0, FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor=Empty, baseSymbol=FirNamedFunctionSymbol /Interface.implicitType)] fun implicitType(): <implicit>
FILE: [ResolvedTo(IMPORTS)] usage.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public final [ResolvedTo(STATUS)] [DelegateFieldsMapKey={0=FirFieldSymbol /Aaa.$$delegate_0}] class Aaa : R|Interface| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Aaa] constructor([ResolvedTo(STATUS)] i: R|Interface|): R|Aaa| {
LAZY_super<<implicit>>
}
private final [ResolvedTo(STATUS)] field $$delegate_0: R|Interface| = LAZY_EXPRESSION
}
COMPANION_GENERATION:
TARGET: public open [ResolvedTo(STATUS)] [DelegatedWrapperDataKey=[wrapped=FirNamedFunctionSymbol /Interface.implicitType, containingClass=Aaa, delegateField=FirFieldSymbol /Aaa.$$delegate_0, FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor=Empty, baseSymbol=FirNamedFunctionSymbol /Interface.implicitType)] fun implicitType(): <implicit>
FILE: [ResolvedTo(IMPORTS)] usage.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public final [ResolvedTo(STATUS)] [DelegateFieldsMapKey={0=FirFieldSymbol /Aaa.$$delegate_0}] class Aaa : R|Interface| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Aaa] constructor([ResolvedTo(STATUS)] i: R|Interface|): R|Aaa| {
LAZY_super<<implicit>>
}
private final [ResolvedTo(STATUS)] field $$delegate_0: R|Interface| = LAZY_EXPRESSION
}
SUPER_TYPES:
TARGET: public open [ResolvedTo(STATUS)] [DelegatedWrapperDataKey=[wrapped=FirNamedFunctionSymbol /Interface.implicitType, containingClass=Aaa, delegateField=FirFieldSymbol /Aaa.$$delegate_0, FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor=Empty, baseSymbol=FirNamedFunctionSymbol /Interface.implicitType)] fun implicitType(): <implicit>
FILE: [ResolvedTo(IMPORTS)] usage.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public final [ResolvedTo(STATUS)] [DelegateFieldsMapKey={0=FirFieldSymbol /Aaa.$$delegate_0}] class Aaa : R|Interface| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Aaa] constructor([ResolvedTo(STATUS)] i: R|Interface|): R|Aaa| {
LAZY_super<<implicit>>
}
private final [ResolvedTo(STATUS)] field $$delegate_0: R|Interface| = LAZY_EXPRESSION
}
TYPES:
TARGET: public open [ResolvedTo(STATUS)] [DelegatedWrapperDataKey=[wrapped=FirNamedFunctionSymbol /Interface.implicitType, containingClass=Aaa, delegateField=FirFieldSymbol /Aaa.$$delegate_0, FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor=Empty, baseSymbol=FirNamedFunctionSymbol /Interface.implicitType)] fun implicitType(): <implicit>
FILE: [ResolvedTo(IMPORTS)] usage.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public final [ResolvedTo(STATUS)] [DelegateFieldsMapKey={0=FirFieldSymbol /Aaa.$$delegate_0}] class Aaa : R|Interface| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Aaa] constructor([ResolvedTo(STATUS)] i: R|Interface|): R|Aaa| {
LAZY_super<<implicit>>
}
private final [ResolvedTo(STATUS)] field $$delegate_0: R|Interface| = LAZY_EXPRESSION
}
STATUS:
TARGET: public open [ResolvedTo(STATUS)] [DelegatedWrapperDataKey=[wrapped=FirNamedFunctionSymbol /Interface.implicitType, containingClass=Aaa, delegateField=FirFieldSymbol /Aaa.$$delegate_0, FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor=Empty, baseSymbol=FirNamedFunctionSymbol /Interface.implicitType)] fun implicitType(): <implicit>
FILE: [ResolvedTo(IMPORTS)] usage.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public final [ResolvedTo(STATUS)] [DelegateFieldsMapKey={0=FirFieldSymbol /Aaa.$$delegate_0}] class Aaa : R|Interface| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Aaa] constructor([ResolvedTo(STATUS)] i: R|Interface|): R|Aaa| {
LAZY_super<<implicit>>
}
private final [ResolvedTo(STATUS)] field $$delegate_0: R|Interface| = LAZY_EXPRESSION
}
EXPECT_ACTUAL_MATCHING:
TARGET: public open [ResolvedTo(EXPECT_ACTUAL_MATCHING)] [DelegatedWrapperDataKey=[wrapped=FirNamedFunctionSymbol /Interface.implicitType, containingClass=Aaa, delegateField=FirFieldSymbol /Aaa.$$delegate_0, FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor=Empty, baseSymbol=FirNamedFunctionSymbol /Interface.implicitType)] fun implicitType(): <implicit>
FILE: [ResolvedTo(IMPORTS)] usage.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public final [ResolvedTo(STATUS)] [DelegateFieldsMapKey={0=FirFieldSymbol /Aaa.$$delegate_0}] class Aaa : R|Interface| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Aaa] constructor([ResolvedTo(STATUS)] i: R|Interface|): R|Aaa| {
LAZY_super<<implicit>>
}
private final [ResolvedTo(STATUS)] field $$delegate_0: R|Interface| = LAZY_EXPRESSION
}
ARGUMENTS_OF_ANNOTATIONS:
TARGET: public open [ResolvedTo(ARGUMENTS_OF_ANNOTATIONS)] [DelegatedWrapperDataKey=[wrapped=FirNamedFunctionSymbol /Interface.implicitType, containingClass=Aaa, delegateField=FirFieldSymbol /Aaa.$$delegate_0, FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor=Empty, baseSymbol=FirNamedFunctionSymbol /Interface.implicitType)] fun implicitType(): <implicit>
FILE: [ResolvedTo(IMPORTS)] usage.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public final [ResolvedTo(STATUS)] [DelegateFieldsMapKey={0=FirFieldSymbol /Aaa.$$delegate_0}] class Aaa : R|Interface| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Aaa] constructor([ResolvedTo(STATUS)] i: R|Interface|): R|Aaa| {
LAZY_super<<implicit>>
}
private final [ResolvedTo(STATUS)] field $$delegate_0: R|Interface| = LAZY_EXPRESSION
}
CONTRACTS:
TARGET: public open [ResolvedTo(CONTRACTS)] [DelegatedWrapperDataKey=[wrapped=FirNamedFunctionSymbol /Interface.implicitType, containingClass=Aaa, delegateField=FirFieldSymbol /Aaa.$$delegate_0, FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor=Empty, baseSymbol=FirNamedFunctionSymbol /Interface.implicitType)] fun implicitType(): <implicit>
FILE: [ResolvedTo(IMPORTS)] usage.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public final [ResolvedTo(STATUS)] [DelegateFieldsMapKey={0=FirFieldSymbol /Aaa.$$delegate_0}] class Aaa : R|Interface| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Aaa] constructor([ResolvedTo(STATUS)] i: R|Interface|): R|Aaa| {
LAZY_super<<implicit>>
}
private final [ResolvedTo(STATUS)] field $$delegate_0: R|Interface| = LAZY_EXPRESSION
}
IMPLICIT_TYPES_BODY_RESOLVE:
TARGET: public open [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] [DelegatedWrapperDataKey=[wrapped=FirNamedFunctionSymbol /Interface.implicitType, containingClass=Aaa, delegateField=FirFieldSymbol /Aaa.$$delegate_0] fun implicitType(): R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] usage.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public final [ResolvedTo(STATUS)] [DelegateFieldsMapKey={0=FirFieldSymbol /Aaa.$$delegate_0}] class Aaa : R|Interface| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Aaa] constructor([ResolvedTo(STATUS)] i: R|Interface|): R|Aaa| {
LAZY_super<<implicit>>
}
private final [ResolvedTo(STATUS)] field $$delegate_0: R|Interface| = LAZY_EXPRESSION
}
ANNOTATIONS_ARGUMENTS_MAPPING:
TARGET: public open [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] [DelegatedWrapperDataKey=[wrapped=FirNamedFunctionSymbol /Interface.implicitType, containingClass=Aaa, delegateField=FirFieldSymbol /Aaa.$$delegate_0] fun implicitType(): R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] usage.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public final [ResolvedTo(STATUS)] [DelegateFieldsMapKey={0=FirFieldSymbol /Aaa.$$delegate_0}] class Aaa : R|Interface| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Aaa] constructor([ResolvedTo(STATUS)] i: R|Interface|): R|Aaa| {
LAZY_super<<implicit>>
}
private final [ResolvedTo(STATUS)] field $$delegate_0: R|Interface| = LAZY_EXPRESSION
}
BODY_RESOLVE:
TARGET: public open [ResolvedTo(BODY_RESOLVE)] [DelegatedWrapperDataKey=[wrapped=FirNamedFunctionSymbol /Interface.implicitType, containingClass=Aaa, delegateField=FirFieldSymbol /Aaa.$$delegate_0] fun implicitType(): R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] usage.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public final [ResolvedTo(STATUS)] [DelegateFieldsMapKey={0=FirFieldSymbol /Aaa.$$delegate_0}] class Aaa : R|Interface| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Aaa] constructor([ResolvedTo(STATUS)] i: R|Interface|): R|Aaa| {
LAZY_super<<implicit>>
}
private final [ResolvedTo(STATUS)] field $$delegate_0: R|Interface| = LAZY_EXPRESSION
}
FILE RAW TO BODY:
FILE: [ResolvedTo(IMPORTS)] usage.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public final [ResolvedTo(BODY_RESOLVE)] [DelegateFieldsMapKey={0=FirFieldSymbol /Aaa.$$delegate_0}] class Aaa : R|Interface| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=Aaa] constructor([ResolvedTo(BODY_RESOLVE)] i: R|Interface|): R|Aaa| {
super<R|kotlin/Any|>()
}
private final [ResolvedTo(BODY_RESOLVE)] field $$delegate_0: R|Interface| = R|<local>/i|
}
@@ -0,0 +1,6 @@
// MEMBER_NAME_FILTER: property
abstract class S<caret>ubClass: AbstractClass<Int>()
abstract class AbstractClass<T> {
abstract val property: T
}
@@ -0,0 +1,304 @@
RAW_FIR:
TARGET: public abstract [ResolvedTo(STATUS)] [SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] substitutionFakeOverride.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
public abstract [ResolvedTo(STATUS)] class AbstractClass<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] constructor<[ResolvedTo(STATUS)] T>(): R|AbstractClass<T>| {
LAZY_super<R|kotlin/Any|>
}
public abstract [ResolvedTo(STATUS)] val property: R|T|
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] get(): R|T|
}
IMPORTS:
TARGET: public abstract [ResolvedTo(STATUS)] [SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] substitutionFakeOverride.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
public abstract [ResolvedTo(STATUS)] class AbstractClass<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] constructor<[ResolvedTo(STATUS)] T>(): R|AbstractClass<T>| {
LAZY_super<R|kotlin/Any|>
}
public abstract [ResolvedTo(STATUS)] val property: R|T|
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] get(): R|T|
}
COMPILER_REQUIRED_ANNOTATIONS:
TARGET: public abstract [ResolvedTo(STATUS)] [SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] substitutionFakeOverride.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
public abstract [ResolvedTo(STATUS)] class AbstractClass<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] constructor<[ResolvedTo(STATUS)] T>(): R|AbstractClass<T>| {
LAZY_super<R|kotlin/Any|>
}
public abstract [ResolvedTo(STATUS)] val property: R|T|
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] get(): R|T|
}
COMPANION_GENERATION:
TARGET: public abstract [ResolvedTo(STATUS)] [SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] substitutionFakeOverride.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
public abstract [ResolvedTo(STATUS)] class AbstractClass<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] constructor<[ResolvedTo(STATUS)] T>(): R|AbstractClass<T>| {
LAZY_super<R|kotlin/Any|>
}
public abstract [ResolvedTo(STATUS)] val property: R|T|
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] get(): R|T|
}
SUPER_TYPES:
TARGET: public abstract [ResolvedTo(STATUS)] [SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] substitutionFakeOverride.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
public abstract [ResolvedTo(STATUS)] class AbstractClass<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] constructor<[ResolvedTo(STATUS)] T>(): R|AbstractClass<T>| {
LAZY_super<R|kotlin/Any|>
}
public abstract [ResolvedTo(STATUS)] val property: R|T|
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] get(): R|T|
}
TYPES:
TARGET: public abstract [ResolvedTo(STATUS)] [SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] substitutionFakeOverride.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
public abstract [ResolvedTo(STATUS)] class AbstractClass<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] constructor<[ResolvedTo(STATUS)] T>(): R|AbstractClass<T>| {
LAZY_super<R|kotlin/Any|>
}
public abstract [ResolvedTo(STATUS)] val property: R|T|
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] get(): R|T|
}
STATUS:
TARGET: public abstract [ResolvedTo(STATUS)] [SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] substitutionFakeOverride.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
public abstract [ResolvedTo(STATUS)] class AbstractClass<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] constructor<[ResolvedTo(STATUS)] T>(): R|AbstractClass<T>| {
LAZY_super<R|kotlin/Any|>
}
public abstract [ResolvedTo(STATUS)] val property: R|T|
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] get(): R|T|
}
EXPECT_ACTUAL_MATCHING:
TARGET: public abstract [ResolvedTo(EXPECT_ACTUAL_MATCHING)] [SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] substitutionFakeOverride.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
public abstract [ResolvedTo(STATUS)] class AbstractClass<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] constructor<[ResolvedTo(STATUS)] T>(): R|AbstractClass<T>| {
LAZY_super<R|kotlin/Any|>
}
public abstract [ResolvedTo(STATUS)] val property: R|T|
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] get(): R|T|
}
ARGUMENTS_OF_ANNOTATIONS:
TARGET: public abstract [ResolvedTo(ARGUMENTS_OF_ANNOTATIONS)] [SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] substitutionFakeOverride.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
public abstract [ResolvedTo(STATUS)] class AbstractClass<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] constructor<[ResolvedTo(STATUS)] T>(): R|AbstractClass<T>| {
LAZY_super<R|kotlin/Any|>
}
public abstract [ResolvedTo(STATUS)] val property: R|T|
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] get(): R|T|
}
CONTRACTS:
TARGET: public abstract [ResolvedTo(CONTRACTS)] [SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] substitutionFakeOverride.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
public abstract [ResolvedTo(STATUS)] class AbstractClass<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] constructor<[ResolvedTo(STATUS)] T>(): R|AbstractClass<T>| {
LAZY_super<R|kotlin/Any|>
}
public abstract [ResolvedTo(STATUS)] val property: R|T|
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] get(): R|T|
}
IMPLICIT_TYPES_BODY_RESOLVE:
TARGET: public abstract [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] [SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] substitutionFakeOverride.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
public abstract [ResolvedTo(STATUS)] class AbstractClass<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] constructor<[ResolvedTo(STATUS)] T>(): R|AbstractClass<T>| {
LAZY_super<R|kotlin/Any|>
}
public abstract [ResolvedTo(STATUS)] val property: R|T|
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] get(): R|T|
}
ANNOTATIONS_ARGUMENTS_MAPPING:
TARGET: public abstract [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] [SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] substitutionFakeOverride.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
public abstract [ResolvedTo(STATUS)] class AbstractClass<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] constructor<[ResolvedTo(STATUS)] T>(): R|AbstractClass<T>| {
LAZY_super<R|kotlin/Any|>
}
public abstract [ResolvedTo(STATUS)] val property: R|T|
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] get(): R|T|
}
BODY_RESOLVE:
TARGET: public abstract [ResolvedTo(BODY_RESOLVE)] [SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] substitutionFakeOverride.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
public abstract [ResolvedTo(STATUS)] class AbstractClass<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] constructor<[ResolvedTo(STATUS)] T>(): R|AbstractClass<T>| {
LAZY_super<R|kotlin/Any|>
}
public abstract [ResolvedTo(STATUS)] val property: R|T|
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] get(): R|T|
}
FILE RAW TO BODY:
FILE: [ResolvedTo(IMPORTS)] substitutionFakeOverride.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(BODY_RESOLVE)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
super<R|AbstractClass<kotlin/Int>|>()
}
}
public abstract [ResolvedTo(BODY_RESOLVE)] class AbstractClass<[ResolvedTo(BODY_RESOLVE)] T> : R|kotlin/Any| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=AbstractClass] constructor<[ResolvedTo(BODY_RESOLVE)] T>(): R|AbstractClass<T>| {
super<R|kotlin/Any|>()
}
public abstract [ResolvedTo(BODY_RESOLVE)] val property: R|T|
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=AbstractClass] get(): R|T|
}
@@ -0,0 +1,11 @@
// SKIP_WHEN_OUT_OF_CONTENT_ROOT
// MODULE: m1
// FILE: AbstractClass.kt
abstract class AbstractClass<T> {
abstract val property: T
}
// MODULE: m2(m1)
// MEMBER_NAME_FILTER: property
// FILE: SubClass.kt
abstract class S<caret>ubClass: AbstractClass<Int>()
@@ -0,0 +1,178 @@
RAW_FIR:
TARGET: public abstract [ResolvedTo(STATUS)] [SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] SubClass.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
IMPORTS:
TARGET: public abstract [ResolvedTo(STATUS)] [SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] SubClass.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
COMPILER_REQUIRED_ANNOTATIONS:
TARGET: public abstract [ResolvedTo(STATUS)] [SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] SubClass.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
COMPANION_GENERATION:
TARGET: public abstract [ResolvedTo(STATUS)] [SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] SubClass.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
SUPER_TYPES:
TARGET: public abstract [ResolvedTo(STATUS)] [SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] SubClass.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
TYPES:
TARGET: public abstract [ResolvedTo(STATUS)] [SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] SubClass.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
STATUS:
TARGET: public abstract [ResolvedTo(STATUS)] [SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] SubClass.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
EXPECT_ACTUAL_MATCHING:
TARGET: public abstract [ResolvedTo(EXPECT_ACTUAL_MATCHING)] [SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] SubClass.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
ARGUMENTS_OF_ANNOTATIONS:
TARGET: public abstract [ResolvedTo(ARGUMENTS_OF_ANNOTATIONS)] [SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] SubClass.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
CONTRACTS:
TARGET: public abstract [ResolvedTo(CONTRACTS)] [SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] SubClass.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
IMPLICIT_TYPES_BODY_RESOLVE:
TARGET: public abstract [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] [SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] SubClass.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
ANNOTATIONS_ARGUMENTS_MAPPING:
TARGET: public abstract [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] [SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] SubClass.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
BODY_RESOLVE:
TARGET: public abstract [ResolvedTo(BODY_RESOLVE)] [SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] SubClass.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
FILE RAW TO BODY:
FILE: [ResolvedTo(IMPORTS)] SubClass.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(BODY_RESOLVE)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
super<R|AbstractClass<kotlin/Int>|>()
}
}
@@ -0,0 +1,7 @@
// MEMBER_NAME_FILTER: property
abstract class S<caret>ubClass: AbstractClass<Int>()
abstract class AbstractClass<T> {
val property = foo()
abstract fun foo(): T
}
@@ -0,0 +1,332 @@
RAW_FIR:
TARGET: public final [ResolvedTo(STATUS)] [FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor={T -> kotlin/Int}, baseSymbol=FirPropertySymbol /AbstractClass.property), SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: <implicit>
FILE: [ResolvedTo(IMPORTS)] substitutionFakeOverrideWithImplicitType.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
public abstract [ResolvedTo(STATUS)] class AbstractClass<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] constructor<[ResolvedTo(STATUS)] T>(): R|AbstractClass<T>| {
LAZY_super<R|kotlin/Any|>
}
public final [ResolvedTo(STATUS)] val property: <implicit> = LAZY_EXPRESSION
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] get(): <implicit>
public abstract [ResolvedTo(STATUS)] fun foo(): R|T|
}
IMPORTS:
TARGET: public final [ResolvedTo(STATUS)] [FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor={T -> kotlin/Int}, baseSymbol=FirPropertySymbol /AbstractClass.property), SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: <implicit>
FILE: [ResolvedTo(IMPORTS)] substitutionFakeOverrideWithImplicitType.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
public abstract [ResolvedTo(STATUS)] class AbstractClass<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] constructor<[ResolvedTo(STATUS)] T>(): R|AbstractClass<T>| {
LAZY_super<R|kotlin/Any|>
}
public final [ResolvedTo(STATUS)] val property: <implicit> = LAZY_EXPRESSION
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] get(): <implicit>
public abstract [ResolvedTo(STATUS)] fun foo(): R|T|
}
COMPILER_REQUIRED_ANNOTATIONS:
TARGET: public final [ResolvedTo(STATUS)] [FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor={T -> kotlin/Int}, baseSymbol=FirPropertySymbol /AbstractClass.property), SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: <implicit>
FILE: [ResolvedTo(IMPORTS)] substitutionFakeOverrideWithImplicitType.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
public abstract [ResolvedTo(STATUS)] class AbstractClass<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] constructor<[ResolvedTo(STATUS)] T>(): R|AbstractClass<T>| {
LAZY_super<R|kotlin/Any|>
}
public final [ResolvedTo(STATUS)] val property: <implicit> = LAZY_EXPRESSION
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] get(): <implicit>
public abstract [ResolvedTo(STATUS)] fun foo(): R|T|
}
COMPANION_GENERATION:
TARGET: public final [ResolvedTo(STATUS)] [FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor={T -> kotlin/Int}, baseSymbol=FirPropertySymbol /AbstractClass.property), SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: <implicit>
FILE: [ResolvedTo(IMPORTS)] substitutionFakeOverrideWithImplicitType.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
public abstract [ResolvedTo(STATUS)] class AbstractClass<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] constructor<[ResolvedTo(STATUS)] T>(): R|AbstractClass<T>| {
LAZY_super<R|kotlin/Any|>
}
public final [ResolvedTo(STATUS)] val property: <implicit> = LAZY_EXPRESSION
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] get(): <implicit>
public abstract [ResolvedTo(STATUS)] fun foo(): R|T|
}
SUPER_TYPES:
TARGET: public final [ResolvedTo(STATUS)] [FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor={T -> kotlin/Int}, baseSymbol=FirPropertySymbol /AbstractClass.property), SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: <implicit>
FILE: [ResolvedTo(IMPORTS)] substitutionFakeOverrideWithImplicitType.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
public abstract [ResolvedTo(STATUS)] class AbstractClass<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] constructor<[ResolvedTo(STATUS)] T>(): R|AbstractClass<T>| {
LAZY_super<R|kotlin/Any|>
}
public final [ResolvedTo(STATUS)] val property: <implicit> = LAZY_EXPRESSION
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] get(): <implicit>
public abstract [ResolvedTo(STATUS)] fun foo(): R|T|
}
TYPES:
TARGET: public final [ResolvedTo(STATUS)] [FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor={T -> kotlin/Int}, baseSymbol=FirPropertySymbol /AbstractClass.property), SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: <implicit>
FILE: [ResolvedTo(IMPORTS)] substitutionFakeOverrideWithImplicitType.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
public abstract [ResolvedTo(STATUS)] class AbstractClass<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] constructor<[ResolvedTo(STATUS)] T>(): R|AbstractClass<T>| {
LAZY_super<R|kotlin/Any|>
}
public final [ResolvedTo(STATUS)] val property: <implicit> = LAZY_EXPRESSION
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] get(): <implicit>
public abstract [ResolvedTo(STATUS)] fun foo(): R|T|
}
STATUS:
TARGET: public final [ResolvedTo(STATUS)] [FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor={T -> kotlin/Int}, baseSymbol=FirPropertySymbol /AbstractClass.property), SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: <implicit>
FILE: [ResolvedTo(IMPORTS)] substitutionFakeOverrideWithImplicitType.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
public abstract [ResolvedTo(STATUS)] class AbstractClass<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] constructor<[ResolvedTo(STATUS)] T>(): R|AbstractClass<T>| {
LAZY_super<R|kotlin/Any|>
}
public final [ResolvedTo(STATUS)] val property: <implicit> = LAZY_EXPRESSION
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] get(): <implicit>
public abstract [ResolvedTo(STATUS)] fun foo(): R|T|
}
EXPECT_ACTUAL_MATCHING:
TARGET: public final [ResolvedTo(EXPECT_ACTUAL_MATCHING)] [FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor={T -> kotlin/Int}, baseSymbol=FirPropertySymbol /AbstractClass.property), SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: <implicit>
FILE: [ResolvedTo(IMPORTS)] substitutionFakeOverrideWithImplicitType.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
public abstract [ResolvedTo(STATUS)] class AbstractClass<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] constructor<[ResolvedTo(STATUS)] T>(): R|AbstractClass<T>| {
LAZY_super<R|kotlin/Any|>
}
public final [ResolvedTo(STATUS)] val property: <implicit> = LAZY_EXPRESSION
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] get(): <implicit>
public abstract [ResolvedTo(STATUS)] fun foo(): R|T|
}
ARGUMENTS_OF_ANNOTATIONS:
TARGET: public final [ResolvedTo(ARGUMENTS_OF_ANNOTATIONS)] [FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor={T -> kotlin/Int}, baseSymbol=FirPropertySymbol /AbstractClass.property), SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: <implicit>
FILE: [ResolvedTo(IMPORTS)] substitutionFakeOverrideWithImplicitType.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
public abstract [ResolvedTo(STATUS)] class AbstractClass<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] constructor<[ResolvedTo(STATUS)] T>(): R|AbstractClass<T>| {
LAZY_super<R|kotlin/Any|>
}
public final [ResolvedTo(STATUS)] val property: <implicit> = LAZY_EXPRESSION
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] get(): <implicit>
public abstract [ResolvedTo(STATUS)] fun foo(): R|T|
}
CONTRACTS:
TARGET: public final [ResolvedTo(CONTRACTS)] [FakeOverrideSubstitutionKey=FakeOverrideSubstitution(substitutor={T -> kotlin/Int}, baseSymbol=FirPropertySymbol /AbstractClass.property), SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: <implicit>
FILE: [ResolvedTo(IMPORTS)] substitutionFakeOverrideWithImplicitType.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
public abstract [ResolvedTo(STATUS)] class AbstractClass<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] constructor<[ResolvedTo(STATUS)] T>(): R|AbstractClass<T>| {
LAZY_super<R|kotlin/Any|>
}
public final [ResolvedTo(STATUS)] val property: <implicit> = LAZY_EXPRESSION
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] get(): <implicit>
public abstract [ResolvedTo(STATUS)] fun foo(): R|T|
}
IMPLICIT_TYPES_BODY_RESOLVE:
TARGET: public final [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] [SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] substitutionFakeOverrideWithImplicitType.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
public abstract [ResolvedTo(STATUS)] class AbstractClass<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] constructor<[ResolvedTo(STATUS)] T>(): R|AbstractClass<T>| {
LAZY_super<R|kotlin/Any|>
}
public final [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] val property: R|T| = this@R|/AbstractClass|.R|/AbstractClass.foo|()
public [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] [ContainingClassKey=AbstractClass] get(): R|T|
public abstract [ResolvedTo(CONTRACTS)] fun foo(): R|T|
}
ANNOTATIONS_ARGUMENTS_MAPPING:
TARGET: public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] [SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] substitutionFakeOverrideWithImplicitType.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
public abstract [ResolvedTo(STATUS)] class AbstractClass<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] constructor<[ResolvedTo(STATUS)] T>(): R|AbstractClass<T>| {
LAZY_super<R|kotlin/Any|>
}
public final [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] val property: R|T| = this@R|/AbstractClass|.R|/AbstractClass.foo|()
public [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] [ContainingClassKey=AbstractClass] get(): R|T|
public abstract [ResolvedTo(CONTRACTS)] fun foo(): R|T|
}
BODY_RESOLVE:
TARGET: public final [ResolvedTo(BODY_RESOLVE)] [SubstitutedOverrideOriginalKey=/AbstractClass.property] val property: R|kotlin/Int|
FILE: [ResolvedTo(IMPORTS)] substitutionFakeOverrideWithImplicitType.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(STATUS)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(STATUS)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
LAZY_super<R|AbstractClass<kotlin/Int>|>
}
}
public abstract [ResolvedTo(STATUS)] class AbstractClass<[ResolvedTo(STATUS)] T> : R|kotlin/Any| {
public [ResolvedTo(STATUS)] [ContainingClassKey=AbstractClass] constructor<[ResolvedTo(STATUS)] T>(): R|AbstractClass<T>| {
LAZY_super<R|kotlin/Any|>
}
public final [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] val property: R|T| = this@R|/AbstractClass|.R|/AbstractClass.foo|()
public [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] [ContainingClassKey=AbstractClass] get(): R|T|
public abstract [ResolvedTo(CONTRACTS)] fun foo(): R|T|
}
FILE RAW TO BODY:
FILE: [ResolvedTo(IMPORTS)] substitutionFakeOverrideWithImplicitType.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public abstract [ResolvedTo(BODY_RESOLVE)] class SubClass : R|AbstractClass<kotlin/Int>| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=SubClass] constructor(): R|SubClass| {
super<R|AbstractClass<kotlin/Int>|>()
}
}
public abstract [ResolvedTo(BODY_RESOLVE)] class AbstractClass<[ResolvedTo(BODY_RESOLVE)] T> : R|kotlin/Any| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=AbstractClass] constructor<[ResolvedTo(BODY_RESOLVE)] T>(): R|AbstractClass<T>| {
super<R|kotlin/Any|>()
}
public final [ResolvedTo(BODY_RESOLVE)] val property: R|T| = this@R|/AbstractClass|.R|/AbstractClass.foo|()
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=AbstractClass] get(): R|T|
public abstract [ResolvedTo(BODY_RESOLVE)] fun foo(): R|T|
}
@@ -36,7 +36,7 @@ abstract class AbstractFirLazyDeclarationResolveTest : AbstractFirLazyDeclaratio
if (Directives.RESOLVE_FILE_ANNOTATIONS in moduleStructure.allDirectives) {
val annotationContainer = firResolveSession.getOrBuildFirFile(ktFile).annotationsContainer
val session = annotationContainer.moduleData.session as LLFirResolvableModuleSession
fun(phase: FirResolvePhase) {
annotationContainer to fun(phase: FirResolvePhase) {
session.moduleComponents.firModuleLazyDeclarationResolver.lazyResolve(
annotationContainer,
session.getScopeSession(),
@@ -46,8 +46,8 @@ abstract class AbstractFirLazyDeclarationResolveTest : AbstractFirLazyDeclaratio
} else {
val ktDeclaration = testServices.expressionMarkerProvider.getElementOfTypeAtCaret<KtDeclaration>(ktFile)
val declarationSymbol = ktDeclaration.resolveToFirSymbol(firResolveSession)
val firDeclaration = chooseMemberDeclarationIfNeeded(declarationSymbol, moduleStructure)
fun(phase: FirResolvePhase) {
val firDeclaration = chooseMemberDeclarationIfNeeded(declarationSymbol, moduleStructure, firResolveSession)
firDeclaration.fir to fun(phase: FirResolvePhase) {
firDeclaration.lazyResolveToPhase(phase)
}
}
@@ -6,7 +6,10 @@
package org.jetbrains.kotlin.analysis.low.level.api.fir
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.LLFirResolveMultiDesignationCollector
import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.FirElementFinder.findElementIn
import org.jetbrains.kotlin.fir.FirElementWithResolveState
import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.renderer.FirDeclarationRendererWithFilteredAttributes
@@ -14,6 +17,7 @@ import org.jetbrains.kotlin.fir.renderer.FirErrorExpressionExtendedRenderer
import org.jetbrains.kotlin.fir.renderer.FirFileAnnotationsContainerRenderer
import org.jetbrains.kotlin.fir.renderer.FirRenderer
import org.jetbrains.kotlin.fir.renderer.FirResolvePhaseRenderer
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
@@ -35,7 +39,7 @@ abstract class AbstractFirLazyDeclarationResolveTestCase : AbstractLowLevelApiSi
protected fun doLazyResolveTest(
ktFile: KtFile,
testServices: TestServices,
resolverProvider: (LLFirResolveSession) -> ((FirResolvePhase) -> Unit),
resolverProvider: (LLFirResolveSession) -> Pair<FirElementWithResolveState, ((FirResolvePhase) -> Unit)>,
) {
val resultBuilder = StringBuilder()
val renderer = FirRenderer(
@@ -48,18 +52,35 @@ abstract class AbstractFirLazyDeclarationResolveTestCase : AbstractLowLevelApiSi
resolveWithClearCaches(ktFile) { firResolveSession ->
checkSession(firResolveSession)
val resolver = resolverProvider(firResolveSession)
val firFile = firResolveSession.getOrBuildFirFile(ktFile)
val (elementToResolve, resolver) = resolverProvider(firResolveSession)
val designations = LLFirResolveMultiDesignationCollector.getDesignationsToResolve(elementToResolve)
val filesToRender = listOf(firFile).plus(designations.map { it.firFile }).distinct()
val shouldRenderDeclaration = filesToRender.all { file ->
findElementIn<FirElementWithResolveState>(file) {
it == elementToResolve
} == null
}
for (currentPhase in FirResolvePhase.entries) {
if (currentPhase == FirResolvePhase.SEALED_CLASS_INHERITORS) continue
resolver(currentPhase)
val firFile = firResolveSession.getOrBuildFirFile(ktFile)
if (resultBuilder.isNotEmpty()) {
resultBuilder.appendLine()
}
resultBuilder.append("${currentPhase.name}:\n")
renderer.renderElementAsString(firFile)
resultBuilder.append("${currentPhase.name}:")
if (shouldRenderDeclaration) {
resultBuilder.append("\nTARGET: ")
renderer.renderElementAsString(elementToResolve)
}
for (file in filesToRender) {
resultBuilder.appendLine()
renderer.renderElementAsString(file)
}
}
}
@@ -78,7 +99,11 @@ abstract class AbstractFirLazyDeclarationResolveTestCase : AbstractLowLevelApiSi
testServices.assertions.assertEqualsToTestDataFileSibling(resultBuilder.toString())
}
protected fun chooseMemberDeclarationIfNeeded(symbol: FirBasedSymbol<*>, moduleStructure: TestModuleStructure): FirBasedSymbol<*> {
protected fun chooseMemberDeclarationIfNeeded(
symbol: FirBasedSymbol<*>,
moduleStructure: TestModuleStructure,
session: LLFirResolveSession,
): FirBasedSymbol<*> {
val directives = moduleStructure.allDirectives
val memberClassFilters = listOfNotNull(
directives.singleOrZeroValue(Directives.MEMBER_CLASS_FILTER),
@@ -87,14 +112,46 @@ abstract class AbstractFirLazyDeclarationResolveTestCase : AbstractLowLevelApiSi
val classSymbol = symbol as FirClassSymbol
val declarations = classSymbol.declarationSymbols
val filteredSymbols = declarations.filter { declaration -> memberClassFilters.all { it.invoke(declaration) } }
val filter = { declaration: FirBasedSymbol<*> -> memberClassFilters.all { it.invoke(declaration) } }
val filteredSymbols = declarations.filter(filter)
return when (filteredSymbols.size) {
0 -> error("Empty result for:${declarations.joinToString("\n")}")
0 -> deepSearch(classSymbol, session, filter) ?: error("Empty result for:${declarations.joinToString("\n")}")
1 -> filteredSymbols.single()
else -> error("Result ambiguity:\n${filteredSymbols.joinToString("\n")}")
}
}
private fun deepSearch(
classSymbol: FirClassSymbol<*>,
session: LLFirResolveSession,
filter: (FirBasedSymbol<*>) -> Boolean,
): FirBasedSymbol<*>? {
val scope = classSymbol.unsubstitutedScope(
session.useSiteFirSession,
session.getScopeSessionFor(session.useSiteFirSession),
false,
FirResolvePhase.STATUS,
)
val names = scope.getCallableNames()
val declarations = mutableListOf<FirBasedSymbol<*>>()
for (name in names) {
scope.processFunctionsByName(name) {
if (filter(it)) {
declarations += it
}
}
scope.processPropertiesByName(name) {
if (filter(it)) {
declarations += it
}
}
}
return declarations.singleOrNull() ?: error("Can't choose from:\n${declarations.joinToString("\n")}")
}
override fun configureTest(builder: TestConfigurationBuilder) {
super.configureTest(builder)
with(builder) {
@@ -47,8 +47,8 @@ abstract class AbstractStdLibSourcesLazyDeclarationResolveTest : AbstractFirLazy
doLazyResolveTest(file, testServices) { firSession ->
val regularClass = findRegularClass(classId, module, firSession)
val declarationToResolve = chooseMemberDeclarationIfNeeded(regularClass, moduleStructure)
fun(phase: FirResolvePhase) {
val declarationToResolve = chooseMemberDeclarationIfNeeded(regularClass, moduleStructure, firSession)
declarationToResolve.fir to fun(phase: FirResolvePhase) {
declarationToResolve.lazyResolveToPhase(phase)
}
}
@@ -162,6 +162,18 @@ public class FirOutOfContentRootLazyDeclarationResolveTestGenerated extends Abst
runTest("analysis/low-level-api-fir/testdata/lazyResolve/dataComponent2.kt");
}
@Test
@TestMetadata("delegateWithImplicitType.kt")
public void testDelegateWithImplicitType() throws Exception {
runTest("analysis/low-level-api-fir/testdata/lazyResolve/delegateWithImplicitType.kt");
}
@Test
@TestMetadata("delegateWithImplicitTypeInDifferentModules.kt")
public void testDelegateWithImplicitTypeInDifferentModules() throws Exception {
runTest("analysis/low-level-api-fir/testdata/lazyResolve/delegateWithImplicitTypeInDifferentModules.kt");
}
@Test
@TestMetadata("delegatedField.kt")
public void testDelegatedField() throws Exception {
@@ -402,6 +414,24 @@ public class FirOutOfContentRootLazyDeclarationResolveTestGenerated extends Abst
runTest("analysis/low-level-api-fir/testdata/lazyResolve/secondaryConstructorParameter.kt");
}
@Test
@TestMetadata("substitutionFakeOverride.kt")
public void testSubstitutionFakeOverride() throws Exception {
runTest("analysis/low-level-api-fir/testdata/lazyResolve/substitutionFakeOverride.kt");
}
@Test
@TestMetadata("substitutionFakeOverrideInDifferentModules.kt")
public void testSubstitutionFakeOverrideInDifferentModules() throws Exception {
runTest("analysis/low-level-api-fir/testdata/lazyResolve/substitutionFakeOverrideInDifferentModules.kt");
}
@Test
@TestMetadata("substitutionFakeOverrideWithImplicitType.kt")
public void testSubstitutionFakeOverrideWithImplicitType() throws Exception {
runTest("analysis/low-level-api-fir/testdata/lazyResolve/substitutionFakeOverrideWithImplicitType.kt");
}
@Test
@TestMetadata("superTypes.kt")
public void testSuperTypes() throws Exception {
@@ -162,6 +162,18 @@ public class FirSourceLazyDeclarationResolveTestGenerated extends AbstractFirSou
runTest("analysis/low-level-api-fir/testdata/lazyResolve/dataComponent2.kt");
}
@Test
@TestMetadata("delegateWithImplicitType.kt")
public void testDelegateWithImplicitType() throws Exception {
runTest("analysis/low-level-api-fir/testdata/lazyResolve/delegateWithImplicitType.kt");
}
@Test
@TestMetadata("delegateWithImplicitTypeInDifferentModules.kt")
public void testDelegateWithImplicitTypeInDifferentModules() throws Exception {
runTest("analysis/low-level-api-fir/testdata/lazyResolve/delegateWithImplicitTypeInDifferentModules.kt");
}
@Test
@TestMetadata("delegatedField.kt")
public void testDelegatedField() throws Exception {
@@ -402,6 +414,24 @@ public class FirSourceLazyDeclarationResolveTestGenerated extends AbstractFirSou
runTest("analysis/low-level-api-fir/testdata/lazyResolve/secondaryConstructorParameter.kt");
}
@Test
@TestMetadata("substitutionFakeOverride.kt")
public void testSubstitutionFakeOverride() throws Exception {
runTest("analysis/low-level-api-fir/testdata/lazyResolve/substitutionFakeOverride.kt");
}
@Test
@TestMetadata("substitutionFakeOverrideInDifferentModules.kt")
public void testSubstitutionFakeOverrideInDifferentModules() throws Exception {
runTest("analysis/low-level-api-fir/testdata/lazyResolve/substitutionFakeOverrideInDifferentModules.kt");
}
@Test
@TestMetadata("substitutionFakeOverrideWithImplicitType.kt")
public void testSubstitutionFakeOverrideWithImplicitType() throws Exception {
runTest("analysis/low-level-api-fir/testdata/lazyResolve/substitutionFakeOverrideWithImplicitType.kt");
}
@Test
@TestMetadata("superTypes.kt")
public void testSuperTypes() throws Exception {
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.test.services.TestServices
abstract class AbstractLowLevelApiSingleFileTest : AbstractAnalysisApiBasedTest() {
final override fun doTestByModuleStructure(moduleStructure: TestModuleStructure, testServices: TestServices) {
val singleModule = moduleStructure.modules.single()
val singleModule = moduleStructure.modules.last()
val singleFile = testServices.ktModuleProvider.getModuleFiles(singleModule).filterIsInstance<KtFile>().first()
doTestByFileStructure(singleFile, moduleStructure, testServices)
}
@@ -21,6 +21,7 @@ abstract class ConeSubstitutor : TypeSubstitutorMarker {
return null
}
override fun toString(): String = "Empty"
}
}
@@ -207,7 +207,11 @@ class DelegatedWrapperData<D : FirCallableDeclaration>(
val wrapped: D,
val containingClass: ConeClassLikeLookupTag,
val delegateField: FirField,
)
) {
override fun toString(): String = "[${::wrapped.name}=${wrapped.symbol}, " +
"${::containingClass.name}=$containingClass, " +
"${::delegateField.name}=${delegateField.symbol}"
}
var <D : FirCallableDeclaration>
D.delegatedWrapperData: DelegatedWrapperData<D>? by FirDeclarationDataRegistry.data(DelegatedWrapperDataKey)