diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/CallTranslator.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/CallTranslator.kt index a07118ba6b9..ba5153457e2 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/CallTranslator.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/CallTranslator.kt @@ -82,8 +82,7 @@ object CallTranslator { return DefaultFunctionCallCase.buildDefaultCallWithDispatchReceiver(argumentsInfo, dispatchReceiver, functionName, isNative, hasSpreadOperator) } else { - return DefaultFunctionCallCase.buildDefaultCallWithoutReceiver(context, argumentsInfo, functionDescriptor, isNative, - hasSpreadOperator) + return DefaultFunctionCallCase.buildDefaultCallWithoutReceiver(context, argumentsInfo, functionDescriptor, isNative, hasSpreadOperator) } } } diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/VariableCallCases.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/VariableCallCases.kt index 3d7a6c34370..f78f8ff9a04 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/VariableCallCases.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/callTranslator/VariableCallCases.kt @@ -59,7 +59,7 @@ object NativeVariableAccessCase : VariableAccessCase() { JsInvocation(methodRef, *additionalArguments.toTypedArray()) } else { - constructAccessExpression(variableName.makeRef()) + constructAccessExpression(context.getQualifiedReference(callableDescriptor)) } } } 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 7f0459bc56d..f70de694996 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 @@ -235,19 +235,7 @@ public final class StaticContext { @NotNull private JsExpression buildQualifiedExpression(@NotNull DeclarationDescriptor descriptor) { - String moduleName = AnnotationsUtils.getModuleName(descriptor); - if (moduleName != null) { - return JsAstUtils.pureFqn(getModuleInternalName(moduleName), null); - } - - if (isNativeObject(descriptor)) { - String fileModuleName = AnnotationsUtils.getFileModuleName(getBindingContext(), descriptor); - if (fileModuleName != null) { - return pureFqn(getNameForDescriptor(descriptor), pureFqn(getModuleInternalName(fileModuleName), null)); - } - } - - if (descriptor instanceof ClassDescriptor) { + if (descriptor instanceof ClassDescriptor) { ClassDescriptor classDescriptor = (ClassDescriptor) descriptor; if (KotlinBuiltIns.isAny(classDescriptor)) { return pureFqn("Object", null); @@ -261,6 +249,18 @@ public final class StaticContext { return result != null ? result : pureFqn(Namer.getRootPackageName(), null); } + String moduleName = AnnotationsUtils.getModuleName(suggested.getDescriptor()); + if (moduleName != null) { + return JsAstUtils.pureFqn(getModuleInternalName(moduleName), null); + } + + if (isNativeObject(suggested.getDescriptor())) { + String fileModuleName = AnnotationsUtils.getFileModuleName(getBindingContext(), suggested.getDescriptor()); + if (fileModuleName != null) { + return pureFqn(getNameForDescriptor(suggested.getDescriptor()), pureFqn(getModuleInternalName(fileModuleName), null)); + } + } + JsExpression expression; List partNames = getActualNameFromSuggested(suggested); if (isLibraryObject(suggested.getDescriptor())) { diff --git a/js/js.translator/testData/box/jsModule/externalPackage.kt b/js/js.translator/testData/box/jsModule/externalPackage.kt index 81fc11480b7..7105e89e9d4 100644 --- a/js/js.translator/testData/box/jsModule/externalPackage.kt +++ b/js/js.translator/testData/box/jsModule/externalPackage.kt @@ -24,7 +24,7 @@ fun box(): String { assertEquals(123, B.x) assertEquals(265, B.foo(142)) - assertEquals(365, foo(23)) + assertEquals(365, foo(42)) assertEquals(423, bar) return "OK" diff --git a/js/js.translator/testData/box/jsModule/externalPackageInDifferentFile.kt b/js/js.translator/testData/box/jsModule/externalPackageInDifferentFile.kt index fecb2a5568f..4fd2f572a98 100644 --- a/js/js.translator/testData/box/jsModule/externalPackageInDifferentFile.kt +++ b/js/js.translator/testData/box/jsModule/externalPackageInDifferentFile.kt @@ -35,7 +35,7 @@ fun box(): String { assertEquals(123, B.x) assertEquals(265, B.foo(142)) - assertEquals(365, foo(23)) + assertEquals(365, foo(42)) assertEquals(423, bar) assertEquals(12345, C.f()) diff --git a/js/js.translator/testData/box/multiModuleWrappers/amd/jsModuleOnPackage.kt b/js/js.translator/testData/box/multiModuleWrappers/amd/jsModuleOnPackage.kt index 3e3718624a2..ac1b8930e94 100644 --- a/js/js.translator/testData/box/multiModuleWrappers/amd/jsModuleOnPackage.kt +++ b/js/js.translator/testData/box/multiModuleWrappers/amd/jsModuleOnPackage.kt @@ -32,7 +32,7 @@ fun box(): String { assertEquals(123, B.x) assertEquals(265, B.foo(142)) - assertEquals(365, foo(23)) + assertEquals(365, foo(42)) assertEquals(423, bar) return "OK" diff --git a/js/js.translator/testData/jsModule/cases/externalPackage/externalPackage.kt b/js/js.translator/testData/jsModule/cases/externalPackage/externalPackage.kt new file mode 100644 index 00000000000..9c29cb801a9 --- /dev/null +++ b/js/js.translator/testData/jsModule/cases/externalPackage/externalPackage.kt @@ -0,0 +1,30 @@ +@file:JsModule("lib") +package foo + +@native class A(@native val x: Int = noImpl) { + @native fun foo(y: Int): Int = noImpl +} + +@native object B { + @native val x: Int = noImpl + + @native fun foo(y: Int): Int = noImpl +} + +@native fun foo(y: Int): Int = noImpl + +@native val bar: Int = noImpl + +fun box(): String { + val a = A(23) + assertEquals(23, a.x) + assertEquals(65, a.foo(42)) + + assertEquals(123, B.x) + assertEquals(265, B.foo(142)) + + assertEquals(365, foo(42)) + assertEquals(423, bar) + + return "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/jsModule/cases/externalPackageInDifferentFile/externalPackageInDifferentFile.b.kt b/js/js.translator/testData/jsModule/cases/externalPackageInDifferentFile/externalPackageInDifferentFile.b.kt new file mode 100644 index 00000000000..88862b028d5 --- /dev/null +++ b/js/js.translator/testData/jsModule/cases/externalPackageInDifferentFile/externalPackageInDifferentFile.b.kt @@ -0,0 +1,17 @@ +package foo + +fun box(): String { + val a = A(23) + assertEquals(23, a.x) + assertEquals(65, a.foo(42)) + + assertEquals(123, B.x) + assertEquals(265, B.foo(142)) + + assertEquals(365, foo(42)) + assertEquals(423, bar) + + assertEquals(12345, C.f()) + + return "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/multiModuleWrappers/cases/jsModuleOnPackage/main/main.kt b/js/js.translator/testData/multiModuleWrappers/cases/jsModuleOnPackage/main/main.kt index 3dba15db599..a2a43c1f503 100644 --- a/js/js.translator/testData/multiModuleWrappers/cases/jsModuleOnPackage/main/main.kt +++ b/js/js.translator/testData/multiModuleWrappers/cases/jsModuleOnPackage/main/main.kt @@ -8,9 +8,8 @@ fun box(): String { assertEquals(123, B.x) assertEquals(265, B.foo(142)) - /* TODO: get rid of usages of getQualifier, then uncomment it (it's already fixed by js-name branch) - assertEquals(365, foo(23)) - assertEquals(423, bar)*/ + assertEquals(365, foo(42)) + assertEquals(423, bar) return "OK" } \ No newline at end of file