diff --git a/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 6b3650925f0..8c74d403175 100644 --- a/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -615,7 +615,7 @@ public class ExpressionCodegen extends JetVisitor { myStack.push(iValue); } } - else { + else if (!(descriptor instanceof NamespaceDescriptor)) { throw new UnsupportedOperationException("don't know how to generate reference " + descriptor); } } diff --git a/idea/src/org/jetbrains/jet/codegen/NamespaceCodegen.java b/idea/src/org/jetbrains/jet/codegen/NamespaceCodegen.java index 8f7b3489733..80d5e22c87e 100644 --- a/idea/src/org/jetbrains/jet/codegen/NamespaceCodegen.java +++ b/idea/src/org/jetbrains/jet/codegen/NamespaceCodegen.java @@ -38,9 +38,8 @@ public class NamespaceCodegen { } public void generate(JetNamespace namespace) { - BindingContext bindingContext1 = AnalyzingUtils.analyzeNamespace(namespace, JetControlFlowDataTraceFactory.EMPTY); - AnalyzingUtils.applyHandler(ErrorHandler.THROW_EXCEPTION, bindingContext1); - BindingContext bindingContext = bindingContext1; + BindingContext bindingContext = AnalyzingUtils.analyzeNamespace(namespace, JetControlFlowDataTraceFactory.EMPTY); + AnalyzingUtils.applyHandler(ErrorHandler.THROW_EXCEPTION, bindingContext); final JetStandardLibrary standardLibrary = JetStandardLibrary.getJetStandardLibrary(project); final FunctionCodegen functionCodegen = new FunctionCodegen(namespace, v, standardLibrary, bindingContext); @@ -65,6 +64,10 @@ public class NamespaceCodegen { else if (declaration instanceof JetClassOrObject) { classCodegen.generate((JetClassOrObject) declaration); } + else if (declaration instanceof JetNamespace) { + JetNamespace childNamespace = (JetNamespace) declaration; + codegens.forNamespace(childNamespace).generate(childNamespace); + } } } diff --git a/idea/testData/codegen/namespaceQualifiedMethod.jet b/idea/testData/codegen/namespaceQualifiedMethod.jet new file mode 100644 index 00000000000..b532836e3e2 --- /dev/null +++ b/idea/testData/codegen/namespaceQualifiedMethod.jet @@ -0,0 +1,7 @@ +namespace Foo { + fun bar() = 610 +} + +fun box(): String { + return if (Foo.bar() == 610) "OK" else "fail" +} diff --git a/idea/tests/org/jetbrains/jet/codegen/NamespaceGenTest.java b/idea/tests/org/jetbrains/jet/codegen/NamespaceGenTest.java index 95093596439..cc597b51ca2 100644 --- a/idea/tests/org/jetbrains/jet/codegen/NamespaceGenTest.java +++ b/idea/tests/org/jetbrains/jet/codegen/NamespaceGenTest.java @@ -400,4 +400,8 @@ public class NamespaceGenTest extends CodegenTestCase { final StringBuilder sb = new StringBuilder("x"); assertEquals('x', ((Character) main.invoke(null, sb)).charValue()); } + + public void testNamespaceQualifiedMethod() throws Exception { + blackBoxFile("namespaceQualifiedMethod.jet"); + } }