diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/api/FirDesignation.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/api/FirDesignation.kt index b198c9fd99f..a8a54df10ee 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/api/FirDesignation.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/api/FirDesignation.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.util.getContainingFile import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withFirEntry import org.jetbrains.kotlin.analysis.utils.errors.buildErrorWithAttachment import org.jetbrains.kotlin.analysis.utils.errors.checkWithAttachmentBuilder +import org.jetbrains.kotlin.analysis.utils.errors.requireIsInstance import org.jetbrains.kotlin.analysis.utils.errors.unexpectedElementError import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.descriptors.Visibilities @@ -59,10 +60,11 @@ private fun collectDesignationPath(target: FirElementWithResolveState): List { - require(target is FirCallableDeclaration) + is FirPropertyAccessor, + -> { + requireIsInstance(target) - if ((target !is FirConstructor && target.symbol.callableId.isLocal) || target.status.visibility == Visibilities.Local) { + if (target.symbol.callableId.isLocal || target.status.visibility == Visibilities.Local) { return null } diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTypeLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTypeLazyResolver.kt index bf19dcbd1a2..80db97989d3 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTypeLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTypeLazyResolver.kt @@ -125,6 +125,10 @@ private class LLFirTypeTargetResolver( override fun doLazyResolveUnderLock(target: FirElementWithResolveState) { when (target) { + is FirConstructor -> { + // TODO: should be uncommented after KT-58546 +// error("Shoul be resolved during ${::resolveConstructors.name}") + } is FirDanglingModifierList, is FirFileAnnotationsContainer, is FirCallableDeclaration, is FirTypeAlias, is FirScript -> { target.accept(transformer, null) } diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/localConstructor.kt b/analysis/low-level-api-fir/testdata/lazyResolve/localConstructor.kt new file mode 100644 index 00000000000..32f55af2141 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/lazyResolve/localConstructor.kt @@ -0,0 +1,12 @@ +fun magic(): T = null!! + +class Q { + fun foo() = { + class C { + val e: E = magic() + val f: F = magic() + val g: G = magic() + } + C() + } +} \ No newline at end of file diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/localConstructor.txt b/analysis/low-level-api-fir/testdata/lazyResolve/localConstructor.txt new file mode 100644 index 00000000000..72b5221b08b --- /dev/null +++ b/analysis/low-level-api-fir/testdata/lazyResolve/localConstructor.txt @@ -0,0 +1,294 @@ +RAW_FIR: +FILE: [ResolvedTo(RAW_FIR)] localConstructor.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] fun <[ResolvedTo(RAW_FIR)] T> magic(): T { LAZY_BLOCK } + public? final? [ResolvedTo(RAW_FIR)] class Q : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Q] constructor(): R|Q| { + LAZY_super + } + + public? final? [ResolvedTo(RAW_FIR)] fun <[ResolvedTo(RAW_FIR)] E, [ResolvedTo(RAW_FIR)] F> foo(): { LAZY_BLOCK } + + } + +IMPORTS: +FILE: [ResolvedTo(IMPORTS)] localConstructor.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] fun <[ResolvedTo(RAW_FIR)] T> magic(): T { LAZY_BLOCK } + public? final? [ResolvedTo(RAW_FIR)] class Q : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Q] constructor(): R|Q| { + LAZY_super + } + + public? final? [ResolvedTo(RAW_FIR)] fun <[ResolvedTo(RAW_FIR)] E, [ResolvedTo(RAW_FIR)] F> foo(): { LAZY_BLOCK } + + } + +COMPILER_REQUIRED_ANNOTATIONS: +FILE: [ResolvedTo(IMPORTS)] localConstructor.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] fun <[ResolvedTo(RAW_FIR)] T> magic(): T { LAZY_BLOCK } + public? final? [ResolvedTo(RAW_FIR)] class Q : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Q] constructor(): R|Q| { + LAZY_super + } + + public? final? [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] fun <[ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] E, [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] F> foo(): { LAZY_BLOCK } + + } + +COMPANION_GENERATION: +FILE: [ResolvedTo(IMPORTS)] localConstructor.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] fun <[ResolvedTo(RAW_FIR)] T> magic(): T { LAZY_BLOCK } + public? final? [ResolvedTo(RAW_FIR)] class Q : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Q] constructor(): R|Q| { + LAZY_super + } + + public? final? [ResolvedTo(COMPANION_GENERATION)] fun <[ResolvedTo(COMPANION_GENERATION)] E, [ResolvedTo(COMPANION_GENERATION)] F> foo(): { LAZY_BLOCK } + + } + +SUPER_TYPES: +FILE: [ResolvedTo(IMPORTS)] localConstructor.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] fun <[ResolvedTo(RAW_FIR)] T> magic(): T { LAZY_BLOCK } + public? final? [ResolvedTo(SUPER_TYPES)] class Q : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Q] constructor(): R|Q| { + LAZY_super + } + + public? final? [ResolvedTo(SUPER_TYPES)] fun <[ResolvedTo(SUPER_TYPES)] E, [ResolvedTo(SUPER_TYPES)] F> foo(): { LAZY_BLOCK } + + } + +TYPES: +FILE: [ResolvedTo(IMPORTS)] localConstructor.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] fun <[ResolvedTo(RAW_FIR)] T> magic(): T { LAZY_BLOCK } + public? final? [ResolvedTo(TYPES)] class Q : R|kotlin/Any| { + public? [ResolvedTo(TYPES)] [ContainingClassKey=Q] constructor(): R|Q| { + LAZY_super + } + + public? final? [ResolvedTo(TYPES)] fun <[ResolvedTo(TYPES)] E, [ResolvedTo(TYPES)] F> foo(): { LAZY_BLOCK } + + } + +STATUS: +FILE: [ResolvedTo(IMPORTS)] localConstructor.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] fun <[ResolvedTo(RAW_FIR)] T> magic(): T { LAZY_BLOCK } + public final [ResolvedTo(STATUS)] class Q : R|kotlin/Any| { + public [ResolvedTo(STATUS)] [ContainingClassKey=Q] constructor(): R|Q| { + LAZY_super + } + + public final [ResolvedTo(STATUS)] fun <[ResolvedTo(STATUS)] E, [ResolvedTo(STATUS)] F> foo(): { LAZY_BLOCK } + + } + +EXPECT_ACTUAL_MATCHING: +FILE: [ResolvedTo(IMPORTS)] localConstructor.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] fun <[ResolvedTo(RAW_FIR)] T> magic(): T { LAZY_BLOCK } + public final [ResolvedTo(STATUS)] class Q : R|kotlin/Any| { + public [ResolvedTo(STATUS)] [ContainingClassKey=Q] constructor(): R|Q| { + LAZY_super + } + + public final [ResolvedTo(EXPECT_ACTUAL_MATCHING)] fun <[ResolvedTo(EXPECT_ACTUAL_MATCHING)] E, [ResolvedTo(EXPECT_ACTUAL_MATCHING)] F> foo(): { LAZY_BLOCK } + + } + +ARGUMENTS_OF_ANNOTATIONS: +FILE: [ResolvedTo(IMPORTS)] localConstructor.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] fun <[ResolvedTo(RAW_FIR)] T> magic(): T { LAZY_BLOCK } + public final [ResolvedTo(STATUS)] class Q : R|kotlin/Any| { + public [ResolvedTo(STATUS)] [ContainingClassKey=Q] constructor(): R|Q| { + LAZY_super + } + + public final [ResolvedTo(ARGUMENTS_OF_ANNOTATIONS)] fun <[ResolvedTo(ARGUMENTS_OF_ANNOTATIONS)] E, [ResolvedTo(ARGUMENTS_OF_ANNOTATIONS)] F> foo(): { LAZY_BLOCK } + + } + +CONTRACTS: +FILE: [ResolvedTo(IMPORTS)] localConstructor.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] fun <[ResolvedTo(RAW_FIR)] T> magic(): T { LAZY_BLOCK } + public final [ResolvedTo(STATUS)] class Q : R|kotlin/Any| { + public [ResolvedTo(STATUS)] [ContainingClassKey=Q] constructor(): R|Q| { + LAZY_super + } + + public final [ResolvedTo(CONTRACTS)] fun <[ResolvedTo(CONTRACTS)] E, [ResolvedTo(CONTRACTS)] F> foo(): { + ^foo [ResolvedTo(RAW_FIR)] fun .(): { + local final? [ResolvedTo(RAW_FIR)] class C<[ResolvedTo(RAW_FIR)] G, [ResolvedTo(CONTRACTS)] E, [ResolvedTo(CONTRACTS)] F> : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=C] constructor<[ResolvedTo(RAW_FIR)] G>(): R|Q.C| { + super() + } + + public? final? [ResolvedTo(RAW_FIR)] val e: E = magic#() + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=C] get(): E + + public? final? [ResolvedTo(RAW_FIR)] val f: F = magic#() + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=C] get(): F + + public? final? [ResolvedTo(RAW_FIR)] val g: G = magic#() + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=C] get(): G + + } + + C#() + } + + } + + } + +IMPLICIT_TYPES_BODY_RESOLVE: +FILE: [ResolvedTo(IMPORTS)] localConstructor.kt + [ResolvedTo(RAW_FIR)] annotations container + public final [ResolvedTo(CONTRACTS)] fun <[ResolvedTo(CONTRACTS)] T> magic(): R|T| { + ^magic Null(null)!! + } + public final [ResolvedTo(STATUS)] class Q : R|kotlin/Any| { + public [ResolvedTo(STATUS)] [ContainingClassKey=Q] constructor(): R|Q| { + LAZY_super + } + + public final [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] fun <[ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] E, [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] F> foo(): R|() -> Q.C| { + ^foo [ResolvedTo(RAW_FIR)] fun (): R|Q.C| { + local final [ResolvedTo(RAW_FIR)] class C<[ResolvedTo(RAW_FIR)] G, [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] E, [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] F> : R|kotlin/Any| { + public [ResolvedTo(RAW_FIR)] [ContainingClassKey=C] constructor<[ResolvedTo(RAW_FIR)] G>(): R|Q.C| { + super() + } + + public final [ResolvedTo(RAW_FIR)] val e: R|E| = R|/magic|() + public [ResolvedTo(RAW_FIR)] [ContainingClassKey=C] get(): R|E| + + public final [ResolvedTo(RAW_FIR)] val f: R|F| = R|/magic|() + public [ResolvedTo(RAW_FIR)] [ContainingClassKey=C] get(): R|F| + + public final [ResolvedTo(RAW_FIR)] val g: R|G| = R|/magic|() + public [ResolvedTo(RAW_FIR)] [ContainingClassKey=C] get(): R|G| + + } + + ^ R|SubstitutionOverride</Q.C.C>|() + } + + } + + } + +ANNOTATIONS_ARGUMENTS_MAPPING: +FILE: [ResolvedTo(IMPORTS)] localConstructor.kt + [ResolvedTo(RAW_FIR)] annotations container + public final [ResolvedTo(CONTRACTS)] fun <[ResolvedTo(CONTRACTS)] T> magic(): R|T| { + ^magic Null(null)!! + } + public final [ResolvedTo(STATUS)] class Q : R|kotlin/Any| { + public [ResolvedTo(STATUS)] [ContainingClassKey=Q] constructor(): R|Q| { + LAZY_super + } + + public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] fun <[ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] E, [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] F> foo(): R|() -> Q.C| { + ^foo [ResolvedTo(RAW_FIR)] fun (): R|Q.C| { + local final [ResolvedTo(RAW_FIR)] class C<[ResolvedTo(RAW_FIR)] G, [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] E, [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] F> : R|kotlin/Any| { + public [ResolvedTo(RAW_FIR)] [ContainingClassKey=C] constructor<[ResolvedTo(RAW_FIR)] G>(): R|Q.C| { + super() + } + + public final [ResolvedTo(RAW_FIR)] val e: R|E| = R|/magic|() + public [ResolvedTo(RAW_FIR)] [ContainingClassKey=C] get(): R|E| + + public final [ResolvedTo(RAW_FIR)] val f: R|F| = R|/magic|() + public [ResolvedTo(RAW_FIR)] [ContainingClassKey=C] get(): R|F| + + public final [ResolvedTo(RAW_FIR)] val g: R|G| = R|/magic|() + public [ResolvedTo(RAW_FIR)] [ContainingClassKey=C] get(): R|G| + + } + + ^ R|SubstitutionOverride</Q.C.C>|() + } + + } + + } + +BODY_RESOLVE: +FILE: [ResolvedTo(IMPORTS)] localConstructor.kt + [ResolvedTo(RAW_FIR)] annotations container + public final [ResolvedTo(CONTRACTS)] fun <[ResolvedTo(CONTRACTS)] T> magic(): R|T| { + ^magic Null(null)!! + } + public final [ResolvedTo(STATUS)] class Q : R|kotlin/Any| { + public [ResolvedTo(STATUS)] [ContainingClassKey=Q] constructor(): R|Q| { + LAZY_super + } + + public final [ResolvedTo(BODY_RESOLVE)] fun <[ResolvedTo(BODY_RESOLVE)] E, [ResolvedTo(BODY_RESOLVE)] F> foo(): R|() -> Q.C| { + ^foo [ResolvedTo(BODY_RESOLVE)] fun (): R|Q.C| { + local final [ResolvedTo(BODY_RESOLVE)] class C<[ResolvedTo(BODY_RESOLVE)] G, [ResolvedTo(BODY_RESOLVE)] E, [ResolvedTo(BODY_RESOLVE)] F> : R|kotlin/Any| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=C] constructor<[ResolvedTo(BODY_RESOLVE)] G>(): R|Q.C| { + super() + } + + public final [ResolvedTo(BODY_RESOLVE)] val e: R|E| = R|/magic|() + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=C] get(): R|E| + + public final [ResolvedTo(BODY_RESOLVE)] val f: R|F| = R|/magic|() + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=C] get(): R|F| + + public final [ResolvedTo(BODY_RESOLVE)] val g: R|G| = R|/magic|() + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=C] get(): R|G| + + } + + ^ R|SubstitutionOverride</Q.C.C>|() + } + + } + + } + +FILE RAW TO BODY: +FILE: [ResolvedTo(IMPORTS)] localConstructor.kt + [ResolvedTo(BODY_RESOLVE)] annotations container + public final [ResolvedTo(BODY_RESOLVE)] fun <[ResolvedTo(BODY_RESOLVE)] T> magic(): R|T| { + ^magic Null(null)!! + } + public final [ResolvedTo(BODY_RESOLVE)] class Q : R|kotlin/Any| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=Q] constructor(): R|Q| { + super() + } + + public final [ResolvedTo(BODY_RESOLVE)] fun <[ResolvedTo(BODY_RESOLVE)] E, [ResolvedTo(BODY_RESOLVE)] F> foo(): R|() -> Q.C| { + ^foo [ResolvedTo(BODY_RESOLVE)] fun (): R|Q.C| { + local final [ResolvedTo(BODY_RESOLVE)] class C<[ResolvedTo(BODY_RESOLVE)] G, [ResolvedTo(BODY_RESOLVE)] E, [ResolvedTo(BODY_RESOLVE)] F> : R|kotlin/Any| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=C] constructor<[ResolvedTo(BODY_RESOLVE)] G>(): R|Q.C| { + super() + } + + public final [ResolvedTo(BODY_RESOLVE)] val e: R|E| = R|/magic|() + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=C] get(): R|E| + + public final [ResolvedTo(BODY_RESOLVE)] val f: R|F| = R|/magic|() + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=C] get(): R|F| + + public final [ResolvedTo(BODY_RESOLVE)] val g: R|G| = R|/magic|() + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=C] get(): R|G| + + } + + ^ R|SubstitutionOverride</Q.C.C>|() + } + + } + + } diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/redeclaration.kt b/analysis/low-level-api-fir/testdata/lazyResolve/redeclaration.kt new file mode 100644 index 00000000000..4f0df01d6d3 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/lazyResolve/redeclaration.kt @@ -0,0 +1,2 @@ +class A +class A constructor() \ No newline at end of file diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/redeclaration.txt b/analysis/low-level-api-fir/testdata/lazyResolve/redeclaration.txt new file mode 100644 index 00000000000..dcf0471230b --- /dev/null +++ b/analysis/low-level-api-fir/testdata/lazyResolve/redeclaration.txt @@ -0,0 +1,223 @@ +RAW_FIR: +FILE: [ResolvedTo(RAW_FIR)] redeclaration.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class A : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor(): R|A| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] class A : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor(): R|A| { + LAZY_super + } + + } + +IMPORTS: +FILE: [ResolvedTo(IMPORTS)] redeclaration.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class A : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor(): R|A| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] class A : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor(): R|A| { + LAZY_super + } + + } + +COMPILER_REQUIRED_ANNOTATIONS: +FILE: [ResolvedTo(IMPORTS)] redeclaration.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class A : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor(): R|A| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] class A : R|kotlin/Any| { + public? [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] [ContainingClassKey=A] constructor(): R|A| { + LAZY_super + } + + } + +COMPANION_GENERATION: +FILE: [ResolvedTo(IMPORTS)] redeclaration.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(RAW_FIR)] class A : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor(): R|A| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] class A : R|kotlin/Any| { + public? [ResolvedTo(COMPANION_GENERATION)] [ContainingClassKey=A] constructor(): R|A| { + LAZY_super + } + + } + +SUPER_TYPES: +FILE: [ResolvedTo(IMPORTS)] redeclaration.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(SUPER_TYPES)] class A : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=A] constructor(): R|A| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] class A : R|kotlin/Any| { + public? [ResolvedTo(SUPER_TYPES)] [ContainingClassKey=A] constructor(): R|A| { + LAZY_super + } + + } + +TYPES: +FILE: [ResolvedTo(IMPORTS)] redeclaration.kt + [ResolvedTo(RAW_FIR)] annotations container + public? final? [ResolvedTo(TYPES)] class A : R|kotlin/Any| { + public? [ResolvedTo(TYPES)] [ContainingClassKey=A] constructor(): R|A| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] class A : R|kotlin/Any| { + public? [ResolvedTo(TYPES)] [ContainingClassKey=A] constructor(): R|A| { + LAZY_super + } + + } + +STATUS: +FILE: [ResolvedTo(IMPORTS)] redeclaration.kt + [ResolvedTo(RAW_FIR)] annotations container + public final [ResolvedTo(STATUS)] class A : R|kotlin/Any| { + public [ResolvedTo(STATUS)] [ContainingClassKey=A] constructor(): R|A| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] class A : R|kotlin/Any| { + public [ResolvedTo(STATUS)] [ContainingClassKey=A] constructor(): R|A| { + LAZY_super + } + + } + +EXPECT_ACTUAL_MATCHING: +FILE: [ResolvedTo(IMPORTS)] redeclaration.kt + [ResolvedTo(RAW_FIR)] annotations container + public final [ResolvedTo(STATUS)] class A : R|kotlin/Any| { + public [ResolvedTo(STATUS)] [ContainingClassKey=A] constructor(): R|A| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] class A : R|kotlin/Any| { + public [ResolvedTo(EXPECT_ACTUAL_MATCHING)] [ContainingClassKey=A] constructor(): R|A| { + LAZY_super + } + + } + +ARGUMENTS_OF_ANNOTATIONS: +FILE: [ResolvedTo(IMPORTS)] redeclaration.kt + [ResolvedTo(RAW_FIR)] annotations container + public final [ResolvedTo(STATUS)] class A : R|kotlin/Any| { + public [ResolvedTo(STATUS)] [ContainingClassKey=A] constructor(): R|A| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] class A : R|kotlin/Any| { + public [ResolvedTo(ARGUMENTS_OF_ANNOTATIONS)] [ContainingClassKey=A] constructor(): R|A| { + LAZY_super + } + + } + +CONTRACTS: +FILE: [ResolvedTo(IMPORTS)] redeclaration.kt + [ResolvedTo(RAW_FIR)] annotations container + public final [ResolvedTo(STATUS)] class A : R|kotlin/Any| { + public [ResolvedTo(STATUS)] [ContainingClassKey=A] constructor(): R|A| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] class A : R|kotlin/Any| { + public [ResolvedTo(CONTRACTS)] [ContainingClassKey=A] constructor(): R|A| { + super() + } + + } + +IMPLICIT_TYPES_BODY_RESOLVE: +FILE: [ResolvedTo(IMPORTS)] redeclaration.kt + [ResolvedTo(RAW_FIR)] annotations container + public final [ResolvedTo(STATUS)] class A : R|kotlin/Any| { + public [ResolvedTo(STATUS)] [ContainingClassKey=A] constructor(): R|A| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] class A : R|kotlin/Any| { + public [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] [ContainingClassKey=A] constructor(): R|A| { + super() + } + + } + +ANNOTATIONS_ARGUMENTS_MAPPING: +FILE: [ResolvedTo(IMPORTS)] redeclaration.kt + [ResolvedTo(RAW_FIR)] annotations container + public final [ResolvedTo(STATUS)] class A : R|kotlin/Any| { + public [ResolvedTo(STATUS)] [ContainingClassKey=A] constructor(): R|A| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] class A : R|kotlin/Any| { + public [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] [ContainingClassKey=A] constructor(): R|A| { + super() + } + + } + +BODY_RESOLVE: +FILE: [ResolvedTo(IMPORTS)] redeclaration.kt + [ResolvedTo(RAW_FIR)] annotations container + public final [ResolvedTo(STATUS)] class A : R|kotlin/Any| { + public [ResolvedTo(STATUS)] [ContainingClassKey=A] constructor(): R|A| { + LAZY_super + } + + } + public? final? [ResolvedTo(RAW_FIR)] class A : R|kotlin/Any| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=A] constructor(): R|A| { + super() + } + + } + +FILE RAW TO BODY: +FILE: [ResolvedTo(IMPORTS)] redeclaration.kt + [ResolvedTo(BODY_RESOLVE)] annotations container + public final [ResolvedTo(BODY_RESOLVE)] class A : R|kotlin/Any| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=A] constructor(): R|A| { + super() + } + + } + public final [ResolvedTo(BODY_RESOLVE)] class A : R|kotlin/Any| { + public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=A] constructor(): R|A| { + super() + } + + } diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirOutOfContentRootLazyDeclarationResolveTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirOutOfContentRootLazyDeclarationResolveTestGenerated.java index 575b47173ef..3958d579173 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirOutOfContentRootLazyDeclarationResolveTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirOutOfContentRootLazyDeclarationResolveTestGenerated.java @@ -198,6 +198,12 @@ public class FirOutOfContentRootLazyDeclarationResolveTestGenerated extends Abst runTest("analysis/low-level-api-fir/testdata/lazyResolve/lazyProperty.kt"); } + @Test + @TestMetadata("localConstructor.kt") + public void testLocalConstructor() throws Exception { + runTest("analysis/low-level-api-fir/testdata/lazyResolve/localConstructor.kt"); + } + @Test @TestMetadata("localFunctionInsideSuperEntryCall.kt") public void testLocalFunctionInsideSuperEntryCall() throws Exception { @@ -276,6 +282,12 @@ public class FirOutOfContentRootLazyDeclarationResolveTestGenerated extends Abst runTest("analysis/low-level-api-fir/testdata/lazyResolve/propertyWithInitializer.kt"); } + @Test + @TestMetadata("redeclaration.kt") + public void testRedeclaration() throws Exception { + runTest("analysis/low-level-api-fir/testdata/lazyResolve/redeclaration.kt"); + } + @Test @TestMetadata("resolveSuperTypeFromLocalClass.kt") public void testResolveSuperTypeFromLocalClass() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirSourceLazyDeclarationResolveTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirSourceLazyDeclarationResolveTestGenerated.java index 52893df740d..d9654985dd4 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirSourceLazyDeclarationResolveTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirSourceLazyDeclarationResolveTestGenerated.java @@ -198,6 +198,12 @@ public class FirSourceLazyDeclarationResolveTestGenerated extends AbstractFirSou runTest("analysis/low-level-api-fir/testdata/lazyResolve/lazyProperty.kt"); } + @Test + @TestMetadata("localConstructor.kt") + public void testLocalConstructor() throws Exception { + runTest("analysis/low-level-api-fir/testdata/lazyResolve/localConstructor.kt"); + } + @Test @TestMetadata("localFunctionInsideSuperEntryCall.kt") public void testLocalFunctionInsideSuperEntryCall() throws Exception { @@ -276,6 +282,12 @@ public class FirSourceLazyDeclarationResolveTestGenerated extends AbstractFirSou runTest("analysis/low-level-api-fir/testdata/lazyResolve/propertyWithInitializer.kt"); } + @Test + @TestMetadata("redeclaration.kt") + public void testRedeclaration() throws Exception { + runTest("analysis/low-level-api-fir/testdata/lazyResolve/redeclaration.kt"); + } + @Test @TestMetadata("resolveSuperTypeFromLocalClass.kt") public void testResolveSuperTypeFromLocalClass() throws Exception { diff --git a/compiler/fir/analysis-tests/testData/resolve/expresssions/localConstructor.fir.txt b/compiler/fir/analysis-tests/testData/resolve/expresssions/localConstructor.fir.txt index 0fb17b39b70..d57cb9b6e4e 100644 --- a/compiler/fir/analysis-tests/testData/resolve/expresssions/localConstructor.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/expresssions/localConstructor.fir.txt @@ -7,5 +7,5 @@ FILE: localConstructor.kt } - lval l: R|Local| = R|/Local.Local|() + lval l: R|Local| = R|/Local.Local|() } diff --git a/compiler/fir/analysis-tests/testData/resolve/expresssions/localInnerClass.fir.txt b/compiler/fir/analysis-tests/testData/resolve/expresssions/localInnerClass.fir.txt index dacc7c6880c..779e85d2325 100644 --- a/compiler/fir/analysis-tests/testData/resolve/expresssions/localInnerClass.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/expresssions/localInnerClass.fir.txt @@ -8,7 +8,7 @@ FILE: localInnerClass.kt } public final fun foo(): R|Foo| { - ^foo this@R|/|.R|/.Derived.Derived|(Int(42)) + ^foo this@R|/|.R|/.Derived.Derived|(Int(42)) } local final inner class Derived : R|Foo| { diff --git a/compiler/fir/analysis-tests/testData/resolve/expresssions/localScopes.fir.txt b/compiler/fir/analysis-tests/testData/resolve/expresssions/localScopes.fir.txt index 112bf6b7235..05479e956c0 100644 --- a/compiler/fir/analysis-tests/testData/resolve/expresssions/localScopes.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/expresssions/localScopes.fir.txt @@ -19,7 +19,7 @@ FILE: localScopes.kt } - lval base: R|BaseLocal| = R|/BaseLocal.BaseLocal|() + lval base: R|BaseLocal| = R|/BaseLocal.BaseLocal|() R|/base|.R|/baz|() R|/base|.R|/Bar.foo|() lval anonymous: R|| = object : R|Bar| { @@ -44,7 +44,7 @@ FILE: localScopes.kt } - lval derived: R|DerivedLocal| = R|/DerivedLocal.DerivedLocal|() + lval derived: R|DerivedLocal| = R|/DerivedLocal.DerivedLocal|() R|/derived|.R|/gau|() R|/derived|.R|/baz|() R|/derived|.R|/Bar.foo|() diff --git a/compiler/fir/analysis-tests/testData/resolve/expresssions/privateVisibility.fir.txt b/compiler/fir/analysis-tests/testData/resolve/expresssions/privateVisibility.fir.txt index 159512e8807..a3c0349ed75 100644 --- a/compiler/fir/analysis-tests/testData/resolve/expresssions/privateVisibility.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/expresssions/privateVisibility.fir.txt @@ -72,7 +72,7 @@ FILE: first.kt public final fun baz(): R|kotlin/Unit| { this@R|/Local|.R|/bar|() - this@R|/Local|.R|/Local.Inner.Inner|() + this@R|/Local|.R|/Local.Inner.Inner|() } local final inner class Inner : R|kotlin/Any| { @@ -88,8 +88,8 @@ FILE: first.kt } - R|/Local.Local|().R|/baz|() - R|/Local.Local|().R|/bar/bar is invisible>#|() + R|/Local.Local|().R|/baz|() + R|/Local.Local|().R|/bar/bar is invisible>#|() } public final fun test(): R|kotlin/Unit| { R|/foo|() diff --git a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantVisibilityModifierChecker.fir.txt b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantVisibilityModifierChecker.fir.txt index 742c9e91c2c..a1ef6514bab 100644 --- a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantVisibilityModifierChecker.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantVisibilityModifierChecker.fir.txt @@ -12,7 +12,7 @@ FILE: RedundantVisibilityModifierChecker.kt } - R|/LocalClass.LocalClass|().R|/foo| = Int(1) + R|/LocalClass.LocalClass|().R|/foo| = Int(1) } internal final inline fun internal(): R|kotlin/Unit| { R|/f|() diff --git a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantVisibilityModifierCheckerWithExplicitApiMode.fir.txt b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantVisibilityModifierCheckerWithExplicitApiMode.fir.txt index a6365ac9bc4..084a1703300 100644 --- a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantVisibilityModifierCheckerWithExplicitApiMode.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantVisibilityModifierCheckerWithExplicitApiMode.fir.txt @@ -11,7 +11,7 @@ FILE: RedundantVisibilityModifierCheckerWithExplicitApiMode.kt } - R|/LocalClass.LocalClass|().R|/foo| = Int(1) + R|/LocalClass.LocalClass|().R|/foo| = Int(1) } public final fun f2(): R|kotlin/Unit| { R|/f1|() diff --git a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/unused/localVariableInSecondaryConstructor.fir.txt b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/unused/localVariableInSecondaryConstructor.fir.txt index fd9d1fac306..0396a582d1d 100644 --- a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/unused/localVariableInSecondaryConstructor.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/unused/localVariableInSecondaryConstructor.fir.txt @@ -15,5 +15,5 @@ FILE: localVariableInSecondaryConstructor.kt } - R|/LocalClass.LocalClass|().R|/arg| + R|/LocalClass.LocalClass|().R|/arg| } diff --git a/compiler/fir/analysis-tests/testData/resolve/localClasses/implicitInLocalClasses.fir.txt b/compiler/fir/analysis-tests/testData/resolve/localClasses/implicitInLocalClasses.fir.txt index 864350d4110..3e21762ab17 100644 --- a/compiler/fir/analysis-tests/testData/resolve/localClasses/implicitInLocalClasses.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/localClasses/implicitInLocalClasses.fir.txt @@ -27,7 +27,7 @@ FILE: implicitInLocalClasses.kt } - lval a: R|A| = R|/A.A|() + lval a: R|A| = R|/A.A|() R|/useBoolean|(R|/a|.R|/foo|(Int(1))) R|/useBoolean|(R|/a|.R|/bar|(Int(1))) R|/useBoolean|(R|/a|.R|/w|) @@ -45,7 +45,7 @@ FILE: implicitInLocalClasses.kt ^bar CMP(>, this@R|/B|.R|kotlin/Any.hashCode|().R|kotlin/Int.plus|(R|/y|).R|kotlin/Int.compareTo|(Int(0))) } - public final val inner: R|B.Inner| = this@R|/B|.R|/B.Inner.Inner|() + public final val inner: R|B.Inner| = this@R|/B|.R|/B.Inner.Inner|() public get(): R|B.Inner| local final inner class Inner : R|kotlin/Any| { @@ -67,7 +67,7 @@ FILE: implicitInLocalClasses.kt } - lval b: R|B| = R|/B.B|() + lval b: R|B| = R|/B.B|() R|/useBoolean|(R|/b|.R|/foo|(Int(1))) R|/useBoolean|(R|/b|.R|/bar|(Int(1))) R|/useBoolean|(R|/b|.R|/inner|.R|/w|) diff --git a/compiler/fir/analysis-tests/testData/resolve/objectInnerClass.fir.txt b/compiler/fir/analysis-tests/testData/resolve/objectInnerClass.fir.txt index 5a33ad11176..b089946a947 100644 --- a/compiler/fir/analysis-tests/testData/resolve/objectInnerClass.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/objectInnerClass.fir.txt @@ -44,14 +44,14 @@ FILE: objectInnerClass.kt } public final fun caseForBase(): R|kotlin/Unit| { - lval base: R|.Base| = this@R|/|.R|/.Base.Base|(R|/B.B|()) + lval base: R|.Base| = this@R|/|.R|/.Base.Base|(R|/B.B|()) R|/base|.R|/baseFun|() R|/base|.R|/property| (this@R|/|, R|/base|).R|/.hoo|() } public final fun caseForChild(): R|kotlin/Unit| { - lval child: R|.Child| = this@R|/|.R|/.Child.Child|(R|/B.B|()) + lval child: R|.Child| = this@R|/|.R|/.Child.Child|(R|/B.B|()) R|/child|.R|/baseFun|() R|/child|.R|/property| R|/child|.R|/foo|() @@ -169,14 +169,14 @@ FILE: objectInnerClass.kt } public final fun caseForBase(): R|kotlin/Unit| { - lval base: R|Case3..Base| = this@R|/|.R|/Case3..Base.Base|(R|/B.B|()) + lval base: R|Case3..Base| = this@R|/|.R|/Case3..Base.Base|(R|/B.B|()) R|/base|.R|/baseFun|() R|/base|.R|/property| (this@R|/|, R|/base|).R|/.hoo|() } public final fun caseForChild(): R|kotlin/Unit| { - lval child: R|Case3..Child| = this@R|/|.R|/Case3..Child.Child|(R|/B.B|()) + lval child: R|Case3..Child| = this@R|/|.R|/Case3..Child.Child|(R|/B.B|()) R|/child|.R|/baseFun|() R|/child|.R|/property| R|/child|.R|/foo|() diff --git a/compiler/fir/analysis-tests/testData/resolve/propertyVsField/javaFieldAndKotlinPropertyReferenceFromInner.fir.txt b/compiler/fir/analysis-tests/testData/resolve/propertyVsField/javaFieldAndKotlinPropertyReferenceFromInner.fir.txt index 040e6cf3835..8c3b6db01c9 100644 --- a/compiler/fir/analysis-tests/testData/resolve/propertyVsField/javaFieldAndKotlinPropertyReferenceFromInner.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/propertyVsField/javaFieldAndKotlinPropertyReferenceFromInner.fir.txt @@ -20,7 +20,7 @@ FILE: test.kt } public final fun bar(): R|kotlin/String| { - ^bar this@R|/|.R|/.S.S|().R|/foo|() + ^bar this@R|/|.R|/.S.S|().R|/foo|() } } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/callsInPlace/inLocalClass.dot b/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/callsInPlace/inLocalClass.dot index 9c79abe2db4..4ad249c056a 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/callsInPlace/inLocalClass.dot +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/callsInPlace/inLocalClass.dot @@ -15,8 +15,8 @@ digraph inLocalClass_kt { 3 [label="Exit block"]; } 4 [label="Local class declaration"]; - 5 [label="Function call: R|/LocalClass.LocalClass|()" style="filled" fillcolor=yellow]; - 6 [label="Function call: R|/LocalClass.LocalClass|().R|/run|()" style="filled" fillcolor=yellow]; + 5 [label="Function call: R|/LocalClass.LocalClass|()" style="filled" fillcolor=yellow]; + 6 [label="Function call: R|/LocalClass.LocalClass|().R|/run|()" style="filled" fillcolor=yellow]; 7 [label="Function call: R|/e|.R|SubstitutionOverride|()" style="filled" fillcolor=yellow]; 8 [label="Exit block"]; } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/callsInPlace/inLocalClass.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/callsInPlace/inLocalClass.fir.txt index d892b67122d..9b939f9d60a 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/callsInPlace/inLocalClass.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/callsInPlace/inLocalClass.fir.txt @@ -42,6 +42,6 @@ FILE: inLocalClass.kt } - R|/LocalClass.LocalClass|().R|/run|() + R|/LocalClass.LocalClass|().R|/run|() R|/e|.R|SubstitutionOverride|() } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/problems.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/problems.fir.txt index 9ecaa638176..269c5b8c818 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/problems.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/problems.fir.txt @@ -24,7 +24,7 @@ FILE: problems.kt } - R|/Local.Local|() + R|/Local.Local|() } public final val R|kotlin/Any|.bar: R|kotlin/String| public get(): R|kotlin/String| { diff --git a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt index 2bfe343d3ce..95786240ff1 100644 --- a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt +++ b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt @@ -151,9 +151,19 @@ abstract class BaseFirBuilder(val baseSession: FirSession, val context: Conte return dispatchReceivers.getOrNull(dispatchReceivers.lastIndex - 1) } - fun callableIdForClassConstructor() = - if (context.className == FqName.ROOT) CallableId(context.packageFqName, Name.special("")) - else CallableId(context.packageFqName, context.className, context.className.shortName()) + fun callableIdForClassConstructor(): CallableId { + val packageName = if (context.inLocalContext) { + CallableId.PACKAGE_FQ_NAME_FOR_LOCAL + } else { + context.packageFqName + } + + return if (context.className == FqName.ROOT) { + CallableId(packageName, Name.special("")) + } else { + CallableId(packageName, context.className, context.className.shortName()) + } + } /**** Function utils ****/ diff --git a/core/compiler.common/src/org/jetbrains/kotlin/name/CallableId.kt b/core/compiler.common/src/org/jetbrains/kotlin/name/CallableId.kt index 56ca4c2a497..fdd0fd9d925 100644 --- a/core/compiler.common/src/org/jetbrains/kotlin/name/CallableId.kt +++ b/core/compiler.common/src/org/jetbrains/kotlin/name/CallableId.kt @@ -13,8 +13,8 @@ data class CallableId( // Currently, it's only used for debug info private val pathToLocal: FqName? = null ) { - private companion object { - val LOCAL_NAME = SpecialNames.LOCAL + companion object { + private val LOCAL_NAME = SpecialNames.LOCAL val PACKAGE_FQ_NAME_FOR_LOCAL = FqName.topLevel(LOCAL_NAME) } @@ -23,13 +23,12 @@ data class CallableId( * Otherwise, returns `false` */ val isLocal: Boolean - get() = packageName == PACKAGE_FQ_NAME_FOR_LOCAL - || classId?.isLocal == true + get() = packageName == PACKAGE_FQ_NAME_FOR_LOCAL || classId?.isLocal == true var classId: ClassId? = null get() { if (field == null && className != null) { - field = ClassId(packageName, className, false) + field = ClassId(packageName, className, packageName == PACKAGE_FQ_NAME_FOR_LOCAL) } return field }