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 81ec777e818..50802e5e57e 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 @@ -5552,6 +5552,18 @@ public class BoxJsTestGenerated extends AbstractBoxJsTest { doTest(fileName); } + @TestMetadata("nativeAndTopLevelFunction.kt") + public void testNativeAndTopLevelFunction() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/nameClashes/nativeAndTopLevelFunction.kt"); + doTest(fileName); + } + + @TestMetadata("nativeDeclarationAndLocalVar.kt") + public void testNativeDeclarationAndLocalVar() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/nameClashes/nativeDeclarationAndLocalVar.kt"); + doTest(fileName); + } + @TestMetadata("overloadExtension.kt") public void testOverloadExtension() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/nameClashes/overloadExtension.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 3eef0c91e5c..6352280908f 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 @@ -352,6 +352,10 @@ public final class StaticContext { if (DynamicCallsKt.isDynamic(suggested.getDescriptor())) { scope = JsDynamicScope.INSTANCE; } + else if (AnnotationsUtils.isPredefinedObject(suggested.getDescriptor()) && + DescriptorUtils.isTopLevelDeclaration(suggested.getDescriptor())) { + scope = rootScope; + } List names = new ArrayList(); if (suggested.getStable()) { diff --git a/js/js.translator/testData/box/closure/closureThisByUsingMethodFromParentClass.kt b/js/js.translator/testData/box/closure/closureThisByUsingMethodFromParentClass.kt index 1d4e918e2dd..1ee5177b76a 100644 --- a/js/js.translator/testData/box/closure/closureThisByUsingMethodFromParentClass.kt +++ b/js/js.translator/testData/box/closure/closureThisByUsingMethodFromParentClass.kt @@ -20,7 +20,7 @@ fun box(): String { assertEquals("A::foo", f()) assertEquals("B::boo", g()) - val fs = js("B\$far\$lambda").toString() as String + val fs: String = js("B\$far\$lambda").toString() val gs = (js("B\$gar\$lambda").toString() as String).replaceAll("boo", "foo").replaceAll("gar", "far") assertEquals(gs, fs) diff --git a/js/js.translator/testData/box/nameClashes/nativeAndTopLevelFunction.js b/js/js.translator/testData/box/nameClashes/nativeAndTopLevelFunction.js new file mode 100644 index 00000000000..ecbc04659cf --- /dev/null +++ b/js/js.translator/testData/box/nameClashes/nativeAndTopLevelFunction.js @@ -0,0 +1,3 @@ +function foo() { + return "O"; +} \ No newline at end of file diff --git a/js/js.translator/testData/box/nameClashes/nativeAndTopLevelFunction.kt b/js/js.translator/testData/box/nameClashes/nativeAndTopLevelFunction.kt new file mode 100644 index 00000000000..6e2ac5f5907 --- /dev/null +++ b/js/js.translator/testData/box/nameClashes/nativeAndTopLevelFunction.kt @@ -0,0 +1,8 @@ +package test + +@native fun foo(ignore: dynamic): String + +@JsName("foo") +fun foo() = "K" + +fun box() = foo(0) + foo() \ No newline at end of file diff --git a/js/js.translator/testData/box/nameClashes/nativeDeclarationAndLocalVar.js b/js/js.translator/testData/box/nameClashes/nativeDeclarationAndLocalVar.js new file mode 100644 index 00000000000..0efc9c5a341 --- /dev/null +++ b/js/js.translator/testData/box/nameClashes/nativeDeclarationAndLocalVar.js @@ -0,0 +1,6 @@ +function foo() { + return "global foo;"; +} +function bar() { + return "global bar;"; +} \ No newline at end of file diff --git a/js/js.translator/testData/box/nameClashes/nativeDeclarationAndLocalVar.kt b/js/js.translator/testData/box/nameClashes/nativeDeclarationAndLocalVar.kt new file mode 100644 index 00000000000..61e25581108 --- /dev/null +++ b/js/js.translator/testData/box/nameClashes/nativeDeclarationAndLocalVar.kt @@ -0,0 +1,14 @@ +package test + +@native fun foo(): dynamic + +@native fun bar(): dynamic + +fun box(): String { + val foo = "local foo;" + val bar = "local bar;" + val result = foo + test.bar() + test.foo() + bar + if (result != "local foo;global bar;global foo;local bar;") return "fail: $result" + + return "OK" +} \ No newline at end of file