diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/localClassesWithImplicit.dot b/compiler/fir/analysis-tests/testData/resolve/cfg/localClassesWithImplicit.dot index 1276e767deb..104858e4eb9 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/localClassesWithImplicit.dot +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/localClassesWithImplicit.dot @@ -352,7 +352,7 @@ digraph localClassesWithImplicit_kt { 123 [label="Enter block"]; 124 [label="Access variable R|/b|"]; 125 [label="Access variable R|kotlin/String.length|"]; - 126 [label="Function call: this@R|/|.R|/bar|()"]; + 126 [label="Function call: this@R|/|.R|/.bar|()"]; 127 [label="Exit block"]; } 128 [label="Exit when branch result"]; @@ -369,7 +369,7 @@ digraph localClassesWithImplicit_kt { ^ when () { (R|/b| is R|kotlin/String|) -> { R|/b|.R|kotlin/String.length| - this@R|/|.R|/bar|() + this@R|/|.R|/.bar|() } else -> { Int(1) @@ -439,7 +439,7 @@ digraph localClassesWithImplicit_kt { 144 [label="Access variable R|kotlin/String.length|"]; 145 [label="Access variable R|/b|"]; 146 [label="Access variable #"]; - 147 [label="Function call: this@R|/|.R|/baz|()"]; + 147 [label="Function call: this@R|/|.R|/.baz|()"]; 148 [label="Exit block"]; } 149 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; @@ -449,7 +449,7 @@ digraph localClassesWithImplicit_kt { 137 [label="Jump: ^bar R|/myRun|( = myRun@fun (): R|kotlin/Int| { R|/a|.R|kotlin/String.length| R|/b|.# - ^ this@R|/|.R|/baz|() + ^ this@R|/|.R|/.baz|() } )"]; 138 [label="Stub" style="filled" fillcolor=gray]; diff --git a/compiler/fir/analysis-tests/testData/resolve/cfg/localClassesWithImplicit.fir.txt b/compiler/fir/analysis-tests/testData/resolve/cfg/localClassesWithImplicit.fir.txt index a36a90cef1a..1c2126030b5 100644 --- a/compiler/fir/analysis-tests/testData/resolve/cfg/localClassesWithImplicit.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/cfg/localClassesWithImplicit.fir.txt @@ -57,7 +57,7 @@ FILE: localClassesWithImplicit.kt ^ when () { (R|/b| is R|kotlin/String|) -> { R|/b|.R|kotlin/String.length| - this@R|/|.R|/bar|() + this@R|/|.R|/.bar|() } else -> { Int(1) @@ -72,7 +72,7 @@ FILE: localClassesWithImplicit.kt ^bar R|/myRun|( = myRun@fun (): R|kotlin/Int| { R|/a|.R|kotlin/String.length| R|/b|.# - ^ this@R|/|.R|/baz|() + ^ this@R|/|.R|/.baz|() } ) } diff --git a/compiler/fir/analysis-tests/testData/resolve/expresssions/CallBasedInExpressionGenerator.fir.txt b/compiler/fir/analysis-tests/testData/resolve/expresssions/CallBasedInExpressionGenerator.fir.txt index 1a0e2d46dc8..55139a3c5a5 100644 --- a/compiler/fir/analysis-tests/testData/resolve/expresssions/CallBasedInExpressionGenerator.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/expresssions/CallBasedInExpressionGenerator.fir.txt @@ -57,12 +57,12 @@ FILE: CallBasedInExpressionGenerator.kt } public final override fun putSelector(type: R|org/jetbrains/kotlin/codegen/range/inExpression/Type|, kotlinType: R|org/jetbrains/kotlin/codegen/range/inExpression/KotlinType?|, v: R|org/jetbrains/kotlin/codegen/range/inExpression/InstructionAdapter|): R|kotlin/Unit| { - this@R|/|.R|/invokeFunction|(R|/v|) + this@R|/|.R|/.invokeFunction|(R|/v|) #(R|/type|, R|/kotlinType|, R|/v|) } public final override fun condJump(jumpLabel: R|org/jetbrains/kotlin/codegen/range/inExpression/Label|, v: R|org/jetbrains/kotlin/codegen/range/inExpression/InstructionAdapter|, jumpIfFalse: R|kotlin/Boolean|): R|kotlin/Unit| { - this@R|/|.R|/invokeFunction|(R|/v|) + this@R|/|.R|/.invokeFunction|(R|/v|) R|/v|.#(when () { R|/jumpIfFalse| -> { #.# diff --git a/compiler/fir/analysis-tests/testData/resolve/expresssions/localImplicitBodies.fir.txt b/compiler/fir/analysis-tests/testData/resolve/expresssions/localImplicitBodies.fir.txt index e7486f98d7d..bce3a5999eb 100644 --- a/compiler/fir/analysis-tests/testData/resolve/expresssions/localImplicitBodies.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/expresssions/localImplicitBodies.fir.txt @@ -6,7 +6,7 @@ FILE: localImplicitBodies.kt } public final fun sss(): R|kotlin/Int| { - ^sss this@R|/|.R|/abc|() + ^sss this@R|/|.R|/.abc|() } public final fun abc(): R|kotlin/Int| { @@ -15,5 +15,5 @@ FILE: localImplicitBodies.kt } - lval g: R|kotlin/Int| = R|/x|.R|/sss|() + lval g: R|kotlin/Int| = R|/x|.R|/.sss|() } 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 fc4a8b5bef4..112bf6b7235 100644 --- a/compiler/fir/analysis-tests/testData/resolve/expresssions/localScopes.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/expresssions/localScopes.fir.txt @@ -32,7 +32,7 @@ FILE: localScopes.kt } - R|/anonymous|.R|/baz|() + R|/anonymous|.R|/.baz|() R|/anonymous|.R|/Bar.foo|() local final class DerivedLocal : R|BaseLocal| { public constructor(): R|DerivedLocal| { diff --git a/compiler/fir/analysis-tests/testData/resolve/expresssions/localWithBooleanNot.fir.txt b/compiler/fir/analysis-tests/testData/resolve/expresssions/localWithBooleanNot.fir.txt index f6f83b7aff8..e346ae60b05 100644 --- a/compiler/fir/analysis-tests/testData/resolve/expresssions/localWithBooleanNot.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/expresssions/localWithBooleanNot.fir.txt @@ -10,11 +10,11 @@ FILE: foo.kt private set(value: R|kotlin/Boolean|): R|kotlin/Unit| public final fun bar(): R|kotlin/Boolean| { - ^bar this@R|/|.R|/result|.R|kotlin/Boolean.not|() + ^bar this@R|/|.R|/.result|.R|kotlin/Boolean.not|() } public final override fun result(): R|kotlin/Boolean| { - ^result this@R|/|.R|/result| + ^result this@R|/|.R|/.result| } } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/callsInPlace/inAnonymousObject.dot b/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/callsInPlace/inAnonymousObject.dot index d026ebe5ef9..2fcac12ad47 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/callsInPlace/inAnonymousObject.dot +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/callsInPlace/inAnonymousObject.dot @@ -12,7 +12,7 @@ digraph inAnonymousObject_kt { 2 [label="Exit anonymous object"]; 3 [label="Variable declaration: lval obj: R||"]; 4 [label="Access variable R|/obj|"]; - 5 [label="Function call: R|/obj|.R|/run|()"]; + 5 [label="Function call: R|/obj|.R|/.run|()"]; 6 [label="Function call: R|/d|.R|SubstitutionOverride|()"]; 7 [label="Exit block"]; } @@ -70,7 +70,7 @@ digraph inAnonymousObject_kt { color=blue 20 [label="Enter block"]; 21 [label="Access variable R|/b|"]; - 22 [label="Assignment: R|/leaked|"]; + 22 [label="Assignment: R|/.leaked|"]; 23 [label="Exit block"]; } 24 [label="Exit init block" style="filled" fillcolor=red]; diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/callsInPlace/inAnonymousObject.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/callsInPlace/inAnonymousObject.fir.txt index 6067533015e..088e438a102 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/callsInPlace/inAnonymousObject.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/callsInPlace/inAnonymousObject.fir.txt @@ -21,7 +21,7 @@ FILE: inAnonymousObject.kt public get(): R|kotlin/Any| init { - this@R|/|.R|/leaked| = R|/b| + this@R|/|.R|/.leaked| = R|/b| } public final override fun run(): R|kotlin/Unit| { @@ -30,6 +30,6 @@ FILE: inAnonymousObject.kt } - R|/obj|.R|/run|() + R|/obj|.R|/.run|() R|/d|.R|SubstitutionOverride|() } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/anonymousInDelegate.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/anonymousInDelegate.fir.txt index 1e07b8777cc..1d5def93c8e 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/anonymousInDelegate.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/delegates/anonymousInDelegate.fir.txt @@ -15,7 +15,7 @@ FILE: anonymousInDelegate.kt } - ^ R|/foo|.R|/bar|() + ^ R|/foo|.R|/.bar|() } ) public get(): R|kotlin/Int| { diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/problems/selfReferenceToCompanionObject.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/problems/selfReferenceToCompanionObject.fir.txt index aae77a3be4f..bc0d1e28ff7 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/problems/selfReferenceToCompanionObject.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/problems/selfReferenceToCompanionObject.fir.txt @@ -57,12 +57,12 @@ FILE: selfReferenceToCompanionObject.kt public get(): R|kotlin/String| public final val closure2: R|() -> kotlin/String| = fun (): R|kotlin/String| { - ^ this@R|/|.R|/y| + ^ this@R|/|.R|/.y| } public get(): R|() -> kotlin/String| - public final override val z: R|kotlin/String| = this@R|/|.R|/closure2|.R|SubstitutionOverride|() + public final override val z: R|kotlin/String| = this@R|/|.R|/.closure2|.R|SubstitutionOverride|() public get(): R|kotlin/String| } diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index 4d30b588de5..1bb059f7528 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -942,7 +942,7 @@ open class RawFirBuilder( override fun visitObjectLiteralExpression(expression: KtObjectLiteralExpression, data: Unit): FirElement { val objectDeclaration = expression.objectDeclaration - return withChildClassName(ANONYMOUS_OBJECT_NAME) { + return withChildClassName(ANONYMOUS_OBJECT_NAME, forceLocalContext = true) { buildAnonymousObject { source = objectDeclaration.toFirSourceElement() moduleData = baseModuleData 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 327185b6a6c..c56e73fc522 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 @@ -102,10 +102,12 @@ abstract class BaseFirBuilder(val baseSession: FirSession, val context: Conte fun callableIdForName(name: Name) = when { + context.className.shortNameOrSpecial() == ANONYMOUS_OBJECT_NAME -> CallableId(ANONYMOUS_CLASS_ID, name) + context.className.isRoot && !context.inLocalContext -> CallableId(context.packageFqName, name) context.inLocalContext -> { val pathFqName = context.firFunctionTargets.fold( - if (context.className == FqName.ROOT) context.packageFqName else context.currentClassId.asSingleFqName() + if (context.className.isRoot) context.packageFqName else context.currentClassId.asSingleFqName() ) { result, firFunctionTarget -> if (firFunctionTarget.isLambda || firFunctionTarget.labelName == null) result @@ -114,8 +116,6 @@ abstract class BaseFirBuilder(val baseSession: FirSession, val context: Conte } CallableId(name, pathFqName) } - context.className == FqName.ROOT -> CallableId(context.packageFqName, name) - context.className.shortName() == ANONYMOUS_OBJECT_NAME -> CallableId(ANONYMOUS_CLASS_ID, name) else -> CallableId(context.packageFqName, context.className, name) }