diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/NestedTypesTest.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/NestedTypesTest.java index 3dbdb063065..cebc9c38468 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/NestedTypesTest.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/NestedTypesTest.java @@ -58,6 +58,10 @@ public class NestedTypesTest extends SingleFileTranslationTest { checkFooBoxIsOk(); } + public void testInnerReferenceFromChild() throws Exception { + checkFooBoxIsOk(); + } + @NotNull @Override protected List additionalJsFiles(@NotNull EcmaVersion ecmaVersion) { diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/CallInfo.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/CallInfo.kt index f9b443c0b7c..56c3ffe9717 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/CallInfo.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/CallInfo.kt @@ -35,6 +35,7 @@ import org.jetbrains.kotlin.js.translate.general.Translation import org.jetbrains.kotlin.js.translate.utils.JsDescriptorUtils import org.jetbrains.kotlin.psi.KtSuperExpression import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver +import org.jetbrains.kotlin.resolve.scopes.receivers.ExtensionReceiver import org.jetbrains.kotlin.resolve.scopes.receivers.ThisClassReceiver interface CallInfo { @@ -79,6 +80,9 @@ val CallInfo.superCallReceiver : JsExpression? is ThisClassReceiver -> { JsLiteral.THIS } + is ExtensionReceiver -> { + JsLiteral.THIS + } else -> { null } diff --git a/js/js.translator/testData/nestedTypes/cases/innerReferenceFromChild.kt b/js/js.translator/testData/nestedTypes/cases/innerReferenceFromChild.kt new file mode 100644 index 00000000000..934422ddd6c --- /dev/null +++ b/js/js.translator/testData/nestedTypes/cases/innerReferenceFromChild.kt @@ -0,0 +1,25 @@ +package foo + +var i = 0 + +abstract class Base { + val base = "b" + i++ + inner class Inner { + fun o() = "O" + base + fun k() = "K" + base + } +} + +class Child : Base() + +fun box(): String { + var result = "" + result += Child().Inner().o() + + fun Child.f() { + result += Inner().k() + } + Child().f() + + return if (result == "Ob0Kb1") "OK" else result +} \ No newline at end of file