diff --git a/idea/testData/codegen/newInstanceDefaultConstructor.jet b/idea/testData/codegen/newInstanceDefaultConstructor.jet new file mode 100644 index 00000000000..84ef4b312e2 --- /dev/null +++ b/idea/testData/codegen/newInstanceDefaultConstructor.jet @@ -0,0 +1,8 @@ +class SimpleClass() { + fun foo() = 610 +} + +fun test() { + val c = new SimpleClass() + return c.foo() +} diff --git a/idea/testData/codegen/newInstanceExplicitConstructor.jet b/idea/testData/codegen/newInstanceExplicitConstructor.jet new file mode 100644 index 00000000000..f16447addad --- /dev/null +++ b/idea/testData/codegen/newInstanceExplicitConstructor.jet @@ -0,0 +1,10 @@ +class SimpleClass { + this() {} + + fun foo() = 610 +} + +fun test() { + val c = new SimpleClass() + return c.foo() +} diff --git a/idea/tests/org/jetbrains/jet/codegen/ClassGenTest.java b/idea/tests/org/jetbrains/jet/codegen/ClassGenTest.java index 7cebefb5923..c0a019b0e24 100644 --- a/idea/tests/org/jetbrains/jet/codegen/ClassGenTest.java +++ b/idea/tests/org/jetbrains/jet/codegen/ClassGenTest.java @@ -24,10 +24,20 @@ public class ClassGenTest extends CodegenTestCase { checkInterface(aClass, List.class); } - private void checkInterface(Class aClass, Class ifs) { + private static void checkInterface(Class aClass, Class ifs) { for (Class anInterface : aClass.getInterfaces()) { if (anInterface == ifs) return; } fail(aClass.getName() + " must have " + ifs.getName() + " in its interfaces"); } + + public void testNewInstanceExplicitConstructor() throws Exception { + loadFile("newInstanceDefaultConstructor.jet"); + final Codegens codegens = generateClassesInFile(); + loadImplementationClass(codegens, "SimpleClass"); + Class ns = loadRootNamespaceClass(codegens); + final Method method = findMethodByName(ns, "test"); + final Integer returnValue = (Integer) method.invoke(null); + assertEquals(610, returnValue.intValue()); + } } diff --git a/idea/tests/org/jetbrains/jet/codegen/CodegenTestCase.java b/idea/tests/org/jetbrains/jet/codegen/CodegenTestCase.java index ede78f23acd..ba65b5e702f 100644 --- a/idea/tests/org/jetbrains/jet/codegen/CodegenTestCase.java +++ b/idea/tests/org/jetbrains/jet/codegen/CodegenTestCase.java @@ -60,10 +60,14 @@ public abstract class CodegenTestCase extends LightCodeInsightFixtureTestCase { } protected Class generateNamespaceClass() { + Codegens state = generateClassesInFile(); + return loadRootNamespaceClass(state); + } + + protected Class loadRootNamespaceClass(Codegens state) { JetFile jetFile = (JetFile) myFixture.getFile(); final JetNamespace namespace = jetFile.getRootNamespace(); String fqName = NamespaceCodegen.getJVMClassName(namespace.getFQName()).replace("/", "."); - Codegens state = generateClassesInFile(); return loadClass(fqName, state); }