From 1a9f63efebf716cfb567d31a5f12a091409804d5 Mon Sep 17 00:00:00 2001 From: Nikolay Lunyak Date: Fri, 24 Sep 2021 16:50:51 +0000 Subject: [PATCH] [FIR] Fix INSTANCE_ACCESS_BEFORE_SUPER_CALL --- .../transformers/body/resolve/BodyResolveContext.kt | 2 +- .../accessBaseGenericFromInnerExtendingSameBase2.fir.kt | 2 +- .../headerCallChecker/accessBaseWithSameExtension.fir.kt | 2 +- .../accessGenericBaseWithSameExtension.fir.kt | 2 +- .../headerCallChecker/lambdaAsArgument.fir.kt | 2 +- .../headerCallChecker/objectLiteralAsArgument.fir.kt | 2 +- .../objectLiteralAsDefaultValueParameter.fir.kt | 2 +- .../headerCallChecker/passingInstance.fir.kt | 8 -------- .../headerCallChecker/passingInstance.kt | 1 + .../headerCallChecker/thisAsExtensionReceiver.fir.kt | 2 +- 10 files changed, 9 insertions(+), 16 deletions(-) delete mode 100644 compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/passingInstance.fir.kt diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveContext.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveContext.kt index 5b4cd66d281..945361eaaa0 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveContext.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveContext.kt @@ -261,7 +261,7 @@ class BodyResolveContext( ) { if (owningClass == null) return addReceiver( - name = null, + name = owningClass.name, implicitReceiverValue = InaccessibleImplicitReceiverValue( owningClass.symbol, owningClass.defaultType(), diff --git a/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/accessBaseGenericFromInnerExtendingSameBase2.fir.kt b/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/accessBaseGenericFromInnerExtendingSameBase2.fir.kt index 3e2b78700fd..7b41f938372 100644 --- a/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/accessBaseGenericFromInnerExtendingSameBase2.fir.kt +++ b/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/accessBaseGenericFromInnerExtendingSameBase2.fir.kt @@ -7,7 +7,7 @@ open class Base(p: Any?) { class D: Base(1) { inner class B : Base { constructor() : super(foo1(1)) - constructor(x: Int) : super(this@B.foo1(1)) + constructor(x: Int) : super(this@B.foo1(1)) constructor(x: Int, y: Int) : super(this@D.foo1(1)) } } diff --git a/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/accessBaseWithSameExtension.fir.kt b/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/accessBaseWithSameExtension.fir.kt index a0c8a3bab39..b8f664c4a7f 100644 --- a/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/accessBaseWithSameExtension.fir.kt +++ b/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/accessBaseWithSameExtension.fir.kt @@ -7,6 +7,6 @@ fun Base.foo() { class B : Base { constructor() : super(foo1()) constructor(x: Int) : super(this@foo.foo1()) - constructor(x: Int, y: Int) : super(this@B.foo1()) + constructor(x: Int, y: Int) : super(this@B.foo1()) } } diff --git a/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/accessGenericBaseWithSameExtension.fir.kt b/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/accessGenericBaseWithSameExtension.fir.kt index 5d004a9c48b..47c8050aec7 100644 --- a/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/accessGenericBaseWithSameExtension.fir.kt +++ b/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/accessGenericBaseWithSameExtension.fir.kt @@ -8,6 +8,6 @@ fun Base.foo() { constructor() : super(foo1("")) constructor(x: Int) : super(foo1(1)) constructor(x: Int, y: Int) : super(this@foo.foo1(12)) - constructor(x: Int, y: Int, z: Int) : super(this@B.foo1("")) + constructor(x: Int, y: Int, z: Int) : super(this@B.foo1("")) } } diff --git a/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/lambdaAsArgument.fir.kt b/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/lambdaAsArgument.fir.kt index 7da36c3d4ee..b9218464f5b 100644 --- a/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/lambdaAsArgument.fir.kt +++ b/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/lambdaAsArgument.fir.kt @@ -9,7 +9,7 @@ class A { { foo() + this.foo() + - this@A.foo() + + this@A.foo() + foobar() }) } diff --git a/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/objectLiteralAsArgument.fir.kt b/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/objectLiteralAsArgument.fir.kt index 3382a175652..d3bd8cf44b1 100644 --- a/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/objectLiteralAsArgument.fir.kt +++ b/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/objectLiteralAsArgument.fir.kt @@ -6,7 +6,7 @@ class A { fun foo() = 1 constructor(x: Any?) constructor() : this(object { - fun bar() = foo() + this@A.foo() + + fun bar() = foo() + this@A.foo() + foobar() + super@A.hashCode() }) } diff --git a/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/objectLiteralAsDefaultValueParameter.fir.kt b/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/objectLiteralAsDefaultValueParameter.fir.kt index bb841e6846f..cca89cd5fc2 100644 --- a/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/objectLiteralAsDefaultValueParameter.fir.kt +++ b/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/objectLiteralAsDefaultValueParameter.fir.kt @@ -5,7 +5,7 @@ fun A.foobar() = 3 class A { fun foo() = 1 constructor( x: Any = object { - fun bar() = foo() + this@A.foo() + + fun bar() = foo() + this@A.foo() + foobar() }) } diff --git a/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/passingInstance.fir.kt b/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/passingInstance.fir.kt deleted file mode 100644 index fd1cdb16f88..00000000000 --- a/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/passingInstance.fir.kt +++ /dev/null @@ -1,8 +0,0 @@ -// !DIAGNOSTICS: -UNUSED_PARAMETER -fun foo(x: A) = 1 - -class A { - constructor(x: Int) - constructor(x: Int, y: Int, z: Int = x + foo(this) + foo(this@A)) : - this(x + foo(this) + foo(this@A)) -} diff --git a/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/passingInstance.kt b/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/passingInstance.kt index 4233f7f90ba..0d555775697 100644 --- a/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/passingInstance.kt +++ b/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/passingInstance.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !DIAGNOSTICS: -UNUSED_PARAMETER fun foo(x: A) = 1 diff --git a/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/thisAsExtensionReceiver.fir.kt b/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/thisAsExtensionReceiver.fir.kt index bbbf93d5f81..631933bf3db 100644 --- a/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/thisAsExtensionReceiver.fir.kt +++ b/compiler/testData/diagnostics/tests/secondaryConstructors/headerCallChecker/thisAsExtensionReceiver.fir.kt @@ -10,6 +10,6 @@ class A { this.foobar() + prop + this.prop + - this@A.prop + this@A.prop ) }