diff --git a/compiler/testData/codegen/box/innerNested/protectedNestedClass.kt b/compiler/testData/codegen/box/innerNested/protectedNestedClass.kt index 122cc29a12c..7de7c5cf0a6 100644 --- a/compiler/testData/codegen/box/innerNested/protectedNestedClass.kt +++ b/compiler/testData/codegen/box/innerNested/protectedNestedClass.kt @@ -1,5 +1,4 @@ // See KT-9246 IllegalAccessError when trying to access protected nested class from parent class -// TARGET_BACKEND: JVM // FILE: a.kt package a diff --git a/compiler/testData/codegen/box/innerNested/superConstructorCall/localExtendsInner.kt b/compiler/testData/codegen/box/innerNested/superConstructorCall/localExtendsInner.kt index 32c42af614d..bd2fe48d847 100644 --- a/compiler/testData/codegen/box/innerNested/superConstructorCall/localExtendsInner.kt +++ b/compiler/testData/codegen/box/innerNested/superConstructorCall/localExtendsInner.kt @@ -1,5 +1,3 @@ -// TARGET_BACKEND: JVM - open class Father(val param: String) { abstract inner class InClass { fun work(): String { diff --git a/compiler/testData/codegen/box/innerNested/superConstructorCall/objectExtendsInner.kt b/compiler/testData/codegen/box/innerNested/superConstructorCall/objectExtendsInner.kt index ad017ba003b..f02f1d4edc1 100644 --- a/compiler/testData/codegen/box/innerNested/superConstructorCall/objectExtendsInner.kt +++ b/compiler/testData/codegen/box/innerNested/superConstructorCall/objectExtendsInner.kt @@ -1,5 +1,3 @@ -// TARGET_BACKEND: JVM - class A { open inner class Inner(val result: String) diff --git a/compiler/testData/codegen/box/innerNested/superConstructorCall/objectExtendsInnerDefaultArgument.kt b/compiler/testData/codegen/box/innerNested/superConstructorCall/objectExtendsInnerDefaultArgument.kt index 40e09dca327..c94d6ab49ca 100644 --- a/compiler/testData/codegen/box/innerNested/superConstructorCall/objectExtendsInnerDefaultArgument.kt +++ b/compiler/testData/codegen/box/innerNested/superConstructorCall/objectExtendsInnerDefaultArgument.kt @@ -1,5 +1,3 @@ -// TARGET_BACKEND: JVM - class A { open inner class Inner(val result: String = "OK", val int: Int) diff --git a/compiler/testData/codegen/box/innerNested/superConstructorCall/objectExtendsInnerOfLocalVarargAndDefault.kt b/compiler/testData/codegen/box/innerNested/superConstructorCall/objectExtendsInnerOfLocalVarargAndDefault.kt index ad50318d5ca..eef3131ae2b 100644 --- a/compiler/testData/codegen/box/innerNested/superConstructorCall/objectExtendsInnerOfLocalVarargAndDefault.kt +++ b/compiler/testData/codegen/box/innerNested/superConstructorCall/objectExtendsInnerOfLocalVarargAndDefault.kt @@ -1,5 +1,3 @@ -// TARGET_BACKEND: JVM - fun box(): String { val capture = "oh" diff --git a/compiler/testData/codegen/box/innerNested/superConstructorCall/objectExtendsInnerOfLocalWithCapture.kt b/compiler/testData/codegen/box/innerNested/superConstructorCall/objectExtendsInnerOfLocalWithCapture.kt index c89eff1edab..b4fb7a47cee 100644 --- a/compiler/testData/codegen/box/innerNested/superConstructorCall/objectExtendsInnerOfLocalWithCapture.kt +++ b/compiler/testData/codegen/box/innerNested/superConstructorCall/objectExtendsInnerOfLocalWithCapture.kt @@ -1,5 +1,3 @@ -// TARGET_BACKEND: JVM - fun box(): String { class Local { open inner class Inner(val s: String) { diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index d3520f2be3d..791246385e7 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -9453,6 +9453,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { doTest(fileName); } + @TestMetadata("protectedNestedClass.kt") + public void testProtectedNestedClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/innerNested/protectedNestedClass.kt"); + doTest(fileName); + } + @TestMetadata("compiler/testData/codegen/box/innerNested/superConstructorCall") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) @@ -9503,6 +9509,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { doTest(fileName); } + @TestMetadata("localExtendsInner.kt") + public void testLocalExtendsInner() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/innerNested/superConstructorCall/localExtendsInner.kt"); + doTest(fileName); + } + @TestMetadata("localExtendsLocalWithClosure.kt") public void testLocalExtendsLocalWithClosure() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/innerNested/superConstructorCall/localExtendsLocalWithClosure.kt"); @@ -9527,6 +9539,30 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { doTest(fileName); } + @TestMetadata("objectExtendsInner.kt") + public void testObjectExtendsInner() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/innerNested/superConstructorCall/objectExtendsInner.kt"); + doTest(fileName); + } + + @TestMetadata("objectExtendsInnerDefaultArgument.kt") + public void testObjectExtendsInnerDefaultArgument() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/innerNested/superConstructorCall/objectExtendsInnerDefaultArgument.kt"); + doTest(fileName); + } + + @TestMetadata("objectExtendsInnerOfLocalVarargAndDefault.kt") + public void testObjectExtendsInnerOfLocalVarargAndDefault() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/innerNested/superConstructorCall/objectExtendsInnerOfLocalVarargAndDefault.kt"); + doTest(fileName); + } + + @TestMetadata("objectExtendsInnerOfLocalWithCapture.kt") + public void testObjectExtendsInnerOfLocalWithCapture() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/innerNested/superConstructorCall/objectExtendsInnerOfLocalWithCapture.kt"); + doTest(fileName); + } + @TestMetadata("objectExtendsLocalCaptureInSuperCall.kt") public void testObjectExtendsLocalCaptureInSuperCall() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/innerNested/superConstructorCall/objectExtendsLocalCaptureInSuperCall.kt"); diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/initializer/ClassInitializerTranslator.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/initializer/ClassInitializerTranslator.java index c0a501b69de..3259d1c9051 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/initializer/ClassInitializerTranslator.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/initializer/ClassInitializerTranslator.java @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.js.translate.general.AbstractTranslator; import org.jetbrains.kotlin.js.translate.reference.CallArgumentTranslator; import org.jetbrains.kotlin.js.translate.utils.BindingUtils; import org.jetbrains.kotlin.js.translate.utils.JsAstUtils; +import org.jetbrains.kotlin.js.translate.utils.JsDescriptorUtils; import org.jetbrains.kotlin.js.translate.utils.jsAstUtils.AstUtilsKt; import org.jetbrains.kotlin.lexer.KtTokens; import org.jetbrains.kotlin.psi.KtClassOrObject; @@ -200,8 +201,10 @@ public final class ClassInitializerTranslator extends AbstractTranslator { } } - if (superDescriptor.getConstructedClass().isInner() && classDescriptor.isInner()) { - arguments.add(pureFqn(Namer.OUTER_FIELD_NAME, JsLiteral.THIS)); + if (superCall.getDispatchReceiver() != null) { + JsExpression receiver = context.getDispatchReceiver(JsDescriptorUtils.getReceiverParameterForReceiver( + superCall.getDispatchReceiver())); + arguments.add(receiver); } if (!DescriptorUtils.isAnonymousObject(classDescriptor)) {