From c25dfe997cd2f54ca993d4279302d3b89961fe6f Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Mon, 14 Nov 2016 19:11:49 +0300 Subject: [PATCH] KJS: fix inheritance from renamed native classes --- .../kotlin/js/test/semantics/BoxJsTestGenerated.java | 6 ++++++ .../kotlin/js/translate/context/StaticContext.java | 5 +++++ .../box/jsName/inherietFromRenamedNativeClass.js | 3 +++ .../box/jsName/inherietFromRenamedNativeClass.kt | 11 +++++++++++ 4 files changed, 25 insertions(+) create mode 100644 js/js.translator/testData/box/jsName/inherietFromRenamedNativeClass.js create mode 100644 js/js.translator/testData/box/jsName/inherietFromRenamedNativeClass.kt diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java index bedfa991201..6b6d9ac42f8 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java @@ -4952,6 +4952,12 @@ public class BoxJsTestGenerated extends AbstractBoxJsTest { doTest(fileName); } + @TestMetadata("inherietFromRenamedNativeClass.kt") + public void testInherietFromRenamedNativeClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/jsName/inherietFromRenamedNativeClass.kt"); + doTest(fileName); + } + @TestMetadata("jsName.kt") public void testJsName() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/jsName/jsName.kt"); diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/StaticContext.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/StaticContext.java index 3c0fb9ecb92..dbd3a49d2f9 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/StaticContext.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/StaticContext.java @@ -48,6 +48,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt; import java.util.*; import static org.jetbrains.kotlin.js.config.LibrarySourcesConfig.UNKNOWN_EXTERNAL_MODULE_NAME; +import static org.jetbrains.kotlin.js.translate.utils.AnnotationsUtils.getNameForAnnotatedObject; import static org.jetbrains.kotlin.js.translate.utils.AnnotationsUtils.isLibraryObject; import static org.jetbrains.kotlin.js.translate.utils.AnnotationsUtils.isNativeObject; import static org.jetbrains.kotlin.js.translate.utils.JsAstUtils.pureFqn; @@ -435,6 +436,10 @@ public final class StaticContext { if (descriptor instanceof LocalVariableDescriptor || descriptor instanceof ParameterDescriptor) { return getNameForDescriptor(descriptor); } + if (isNativeObject(descriptor)) { + String name = getNameForAnnotatedObject(descriptor); + if (name != null) return rootFunction.getScope().declareName(name); + } if (descriptor instanceof ConstructorDescriptor) { if (((ConstructorDescriptor) descriptor).isPrimary()) { return getInnerNameForDescriptor(((ConstructorDescriptor) descriptor).getConstructedClass()); diff --git a/js/js.translator/testData/box/jsName/inherietFromRenamedNativeClass.js b/js/js.translator/testData/box/jsName/inherietFromRenamedNativeClass.js new file mode 100644 index 00000000000..8acd3dc6a61 --- /dev/null +++ b/js/js.translator/testData/box/jsName/inherietFromRenamedNativeClass.js @@ -0,0 +1,3 @@ +function A(foo) { + this.foo = foo; +} \ No newline at end of file diff --git a/js/js.translator/testData/box/jsName/inherietFromRenamedNativeClass.kt b/js/js.translator/testData/box/jsName/inherietFromRenamedNativeClass.kt new file mode 100644 index 00000000000..c0cd4e0019f --- /dev/null +++ b/js/js.translator/testData/box/jsName/inherietFromRenamedNativeClass.kt @@ -0,0 +1,11 @@ +package foo + +@native +@JsName("A") +open class B(val foo: String) + +class C(s: String) : B(s) + +fun box(): String { + return C("OK").foo +} \ No newline at end of file