[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 -> { is FirDeclaration -> {
val path = collectDesignationPath(this) ?: return null val path = collectDesignationPath(this) ?: return null
val firFile = getContainingFile() ?: return null val firFile = path.lastOrNull()?.getContainingFile() ?: getContainingFile() ?: return null
FirDesignationWithFile(path, this, firFile) FirDesignationWithFile(path, this, firFile)
} }
else -> unexpectedElementError<FirElementWithResolveState>(this) 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) { if (Directives.RESOLVE_FILE_ANNOTATIONS in moduleStructure.allDirectives) {
val annotationContainer = firResolveSession.getOrBuildFirFile(ktFile).annotationsContainer val annotationContainer = firResolveSession.getOrBuildFirFile(ktFile).annotationsContainer
val session = annotationContainer.moduleData.session as LLFirResolvableModuleSession val session = annotationContainer.moduleData.session as LLFirResolvableModuleSession
fun(phase: FirResolvePhase) { annotationContainer to fun(phase: FirResolvePhase) {
session.moduleComponents.firModuleLazyDeclarationResolver.lazyResolve( session.moduleComponents.firModuleLazyDeclarationResolver.lazyResolve(
annotationContainer, annotationContainer,
session.getScopeSession(), session.getScopeSession(),
@@ -46,8 +46,8 @@ abstract class AbstractFirLazyDeclarationResolveTest : AbstractFirLazyDeclaratio
} else { } else {
val ktDeclaration = testServices.expressionMarkerProvider.getElementOfTypeAtCaret<KtDeclaration>(ktFile) val ktDeclaration = testServices.expressionMarkerProvider.getElementOfTypeAtCaret<KtDeclaration>(ktFile)
val declarationSymbol = ktDeclaration.resolveToFirSymbol(firResolveSession) val declarationSymbol = ktDeclaration.resolveToFirSymbol(firResolveSession)
val firDeclaration = chooseMemberDeclarationIfNeeded(declarationSymbol, moduleStructure) val firDeclaration = chooseMemberDeclarationIfNeeded(declarationSymbol, moduleStructure, firResolveSession)
fun(phase: FirResolvePhase) { firDeclaration.fir to fun(phase: FirResolvePhase) {
firDeclaration.lazyResolveToPhase(phase) firDeclaration.lazyResolveToPhase(phase)
} }
} }
@@ -6,7 +6,10 @@
package org.jetbrains.kotlin.analysis.low.level.api.fir 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.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.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.FirFile
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.renderer.FirDeclarationRendererWithFilteredAttributes 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.FirFileAnnotationsContainerRenderer
import org.jetbrains.kotlin.fir.renderer.FirRenderer import org.jetbrains.kotlin.fir.renderer.FirRenderer
import org.jetbrains.kotlin.fir.renderer.FirResolvePhaseRenderer 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.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
@@ -35,7 +39,7 @@ abstract class AbstractFirLazyDeclarationResolveTestCase : AbstractLowLevelApiSi
protected fun doLazyResolveTest( protected fun doLazyResolveTest(
ktFile: KtFile, ktFile: KtFile,
testServices: TestServices, testServices: TestServices,
resolverProvider: (LLFirResolveSession) -> ((FirResolvePhase) -> Unit), resolverProvider: (LLFirResolveSession) -> Pair<FirElementWithResolveState, ((FirResolvePhase) -> Unit)>,
) { ) {
val resultBuilder = StringBuilder() val resultBuilder = StringBuilder()
val renderer = FirRenderer( val renderer = FirRenderer(
@@ -48,18 +52,35 @@ abstract class AbstractFirLazyDeclarationResolveTestCase : AbstractLowLevelApiSi
resolveWithClearCaches(ktFile) { firResolveSession -> resolveWithClearCaches(ktFile) { firResolveSession ->
checkSession(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) { for (currentPhase in FirResolvePhase.entries) {
if (currentPhase == FirResolvePhase.SEALED_CLASS_INHERITORS) continue if (currentPhase == FirResolvePhase.SEALED_CLASS_INHERITORS) continue
resolver(currentPhase) resolver(currentPhase)
val firFile = firResolveSession.getOrBuildFirFile(ktFile)
if (resultBuilder.isNotEmpty()) { if (resultBuilder.isNotEmpty()) {
resultBuilder.appendLine() resultBuilder.appendLine()
} }
resultBuilder.append("${currentPhase.name}:\n") resultBuilder.append("${currentPhase.name}:")
renderer.renderElementAsString(firFile) 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()) 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 directives = moduleStructure.allDirectives
val memberClassFilters = listOfNotNull( val memberClassFilters = listOfNotNull(
directives.singleOrZeroValue(Directives.MEMBER_CLASS_FILTER), directives.singleOrZeroValue(Directives.MEMBER_CLASS_FILTER),
@@ -87,14 +112,46 @@ abstract class AbstractFirLazyDeclarationResolveTestCase : AbstractLowLevelApiSi
val classSymbol = symbol as FirClassSymbol val classSymbol = symbol as FirClassSymbol
val declarations = classSymbol.declarationSymbols 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) { 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() 1 -> filteredSymbols.single()
else -> error("Result ambiguity:\n${filteredSymbols.joinToString("\n")}") 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) { override fun configureTest(builder: TestConfigurationBuilder) {
super.configureTest(builder) super.configureTest(builder)
with(builder) { with(builder) {
@@ -47,8 +47,8 @@ abstract class AbstractStdLibSourcesLazyDeclarationResolveTest : AbstractFirLazy
doLazyResolveTest(file, testServices) { firSession -> doLazyResolveTest(file, testServices) { firSession ->
val regularClass = findRegularClass(classId, module, firSession) val regularClass = findRegularClass(classId, module, firSession)
val declarationToResolve = chooseMemberDeclarationIfNeeded(regularClass, moduleStructure) val declarationToResolve = chooseMemberDeclarationIfNeeded(regularClass, moduleStructure, firSession)
fun(phase: FirResolvePhase) { declarationToResolve.fir to fun(phase: FirResolvePhase) {
declarationToResolve.lazyResolveToPhase(phase) declarationToResolve.lazyResolveToPhase(phase)
} }
} }
@@ -162,6 +162,18 @@ public class FirOutOfContentRootLazyDeclarationResolveTestGenerated extends Abst
runTest("analysis/low-level-api-fir/testdata/lazyResolve/dataComponent2.kt"); 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 @Test
@TestMetadata("delegatedField.kt") @TestMetadata("delegatedField.kt")
public void testDelegatedField() throws Exception { public void testDelegatedField() throws Exception {
@@ -402,6 +414,24 @@ public class FirOutOfContentRootLazyDeclarationResolveTestGenerated extends Abst
runTest("analysis/low-level-api-fir/testdata/lazyResolve/secondaryConstructorParameter.kt"); 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 @Test
@TestMetadata("superTypes.kt") @TestMetadata("superTypes.kt")
public void testSuperTypes() throws Exception { public void testSuperTypes() throws Exception {
@@ -162,6 +162,18 @@ public class FirSourceLazyDeclarationResolveTestGenerated extends AbstractFirSou
runTest("analysis/low-level-api-fir/testdata/lazyResolve/dataComponent2.kt"); 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 @Test
@TestMetadata("delegatedField.kt") @TestMetadata("delegatedField.kt")
public void testDelegatedField() throws Exception { public void testDelegatedField() throws Exception {
@@ -402,6 +414,24 @@ public class FirSourceLazyDeclarationResolveTestGenerated extends AbstractFirSou
runTest("analysis/low-level-api-fir/testdata/lazyResolve/secondaryConstructorParameter.kt"); 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 @Test
@TestMetadata("superTypes.kt") @TestMetadata("superTypes.kt")
public void testSuperTypes() throws Exception { 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. * 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() { abstract class AbstractLowLevelApiSingleFileTest : AbstractAnalysisApiBasedTest() {
final override fun doTestByModuleStructure(moduleStructure: TestModuleStructure, testServices: TestServices) { 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() val singleFile = testServices.ktModuleProvider.getModuleFiles(singleModule).filterIsInstance<KtFile>().first()
doTestByFileStructure(singleFile, moduleStructure, testServices) doTestByFileStructure(singleFile, moduleStructure, testServices)
} }
@@ -21,6 +21,7 @@ abstract class ConeSubstitutor : TypeSubstitutorMarker {
return null return null
} }
override fun toString(): String = "Empty"
} }
} }
@@ -207,7 +207,11 @@ class DelegatedWrapperData<D : FirCallableDeclaration>(
val wrapped: D, val wrapped: D,
val containingClass: ConeClassLikeLookupTag, val containingClass: ConeClassLikeLookupTag,
val delegateField: FirField, val delegateField: FirField,
) ) {
override fun toString(): String = "[${::wrapped.name}=${wrapped.symbol}, " +
"${::containingClass.name}=$containingClass, " +
"${::delegateField.name}=${delegateField.symbol}"
}
var <D : FirCallableDeclaration> var <D : FirCallableDeclaration>
D.delegatedWrapperData: DelegatedWrapperData<D>? by FirDeclarationDataRegistry.data(DelegatedWrapperDataKey) D.delegatedWrapperData: DelegatedWrapperData<D>? by FirDeclarationDataRegistry.data(DelegatedWrapperDataKey)