diff --git a/js/js.tests/test/org/jetbrains/k2js/test/semantics/MultiNamespaceTest.java b/js/js.tests/test/org/jetbrains/k2js/test/semantics/MultiNamespaceTest.java index 75be3de270b..2f9c3239cb3 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/semantics/MultiNamespaceTest.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/semantics/MultiNamespaceTest.java @@ -40,5 +40,9 @@ public class MultiNamespaceTest extends MultipleFilesTranslationTest { checkFooBoxIsTrue("namespaceVariableVisibleFromOtherNamespace"); } + + public void testNestedNamespaceFunctionCalledFromOtherNamespace() throws Exception { + checkFooBoxIsTrue("nestedNamespaceFunctionCalledFromOtherNamespace"); + } } diff --git a/js/js.tests/test/org/jetbrains/k2js/test/semantics/NamespaceTest.java b/js/js.tests/test/org/jetbrains/k2js/test/semantics/NamespaceTest.java index debe4e03257..4aec71a5c93 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/semantics/NamespaceTest.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/semantics/NamespaceTest.java @@ -34,4 +34,7 @@ public final class NamespaceTest extends SingleFileTranslationTest { runFunctionOutputTest("deeplyNestedNamespace.kt", "foo1.foo2.foo3.foo5.foo6.foo7.foo8", "box", true); } + public void testDeeplyNestedNamespaceFunctionCalled() throws Exception { + runFunctionOutputTest("deeplyNestedNamespaceFunctionCalled.kt", "foo1.foo2.foo3.foo5.foo6.foo7.foo8", "box", true); + } } diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/reference/QualifiedExpressionTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/reference/QualifiedExpressionTranslator.java index 62733e04f22..65e0609b5cb 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/reference/QualifiedExpressionTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/reference/QualifiedExpressionTranslator.java @@ -42,8 +42,8 @@ public final class QualifiedExpressionTranslator { JsExpression receiver = translateReceiver(expression, context); PropertyAccessTranslator result = - PropertyAccessTranslator.newInstance(getNotNullSimpleNameSelector(expression), receiver, - CallType.getCallTypeForQualifiedExpression(expression), context); + PropertyAccessTranslator.newInstance(getNotNullSimpleNameSelector(expression), receiver, + CallType.getCallTypeForQualifiedExpression(expression), context); result.setCallType(CallType.getCallTypeForQualifiedExpression(expression)); return result; } @@ -65,12 +65,15 @@ public final class QualifiedExpressionTranslator { if (PropertyAccessTranslator.canBePropertyGetterCall(selector, context)) { assert selector instanceof JetSimpleNameExpression : "Selectors for properties must be simple names."; return PropertyAccessTranslator.translateAsPropertyGetterCall - ((JetSimpleNameExpression) selector, receiver, callType, context); + ((JetSimpleNameExpression)selector, receiver, callType, context); } if (selector instanceof JetCallExpression) { - return CallExpressionTranslator.translate((JetCallExpression) selector, receiver, callType, context); + return CallExpressionTranslator.translate((JetCallExpression)selector, receiver, callType, context); } - throw new AssertionError("Unexpected qualified expression"); + if (selector instanceof JetSimpleNameExpression) { + return ReferenceTranslator.translateSimpleName((JetSimpleNameExpression)selector, context); + } + throw new AssertionError("Unexpected qualified expression: " + selector.getText()); } //TODO: if has duplications diff --git a/js/js.translator/testFiles/multiNamespace/cases/nestedNamespaceFunctionCalledFromOtherNamespace/a.kt b/js/js.translator/testFiles/multiNamespace/cases/nestedNamespaceFunctionCalledFromOtherNamespace/a.kt new file mode 100644 index 00000000000..f5866daebc5 --- /dev/null +++ b/js/js.translator/testFiles/multiNamespace/cases/nestedNamespaceFunctionCalledFromOtherNamespace/a.kt @@ -0,0 +1,3 @@ +package a.foo + +fun box() = b.bar.f() \ No newline at end of file diff --git a/js/js.translator/testFiles/multiNamespace/cases/nestedNamespaceFunctionCalledFromOtherNamespace/b.kt b/js/js.translator/testFiles/multiNamespace/cases/nestedNamespaceFunctionCalledFromOtherNamespace/b.kt new file mode 100644 index 00000000000..46d2f58d420 --- /dev/null +++ b/js/js.translator/testFiles/multiNamespace/cases/nestedNamespaceFunctionCalledFromOtherNamespace/b.kt @@ -0,0 +1,2 @@ +package b.bar +fun f() = true \ No newline at end of file diff --git a/js/js.translator/testFiles/namespace/cases/deeplyNestedNamespaceFunctionCalled.kt b/js/js.translator/testFiles/namespace/cases/deeplyNestedNamespaceFunctionCalled.kt new file mode 100644 index 00000000000..050ef609347 --- /dev/null +++ b/js/js.translator/testFiles/namespace/cases/deeplyNestedNamespaceFunctionCalled.kt @@ -0,0 +1,4 @@ +package foo1.foo2.foo3.foo5.foo6.foo7.foo8 + +fun box() = f() +fun f() = true \ No newline at end of file