From 28d4715db207e1b2cf6848886e092aea1658e0c7 Mon Sep 17 00:00:00 2001 From: Maxim Shafirov Date: Fri, 30 Dec 2011 19:58:08 +0400 Subject: [PATCH 1/7] Don't depend on project file layout, disable compileEnvironmentTest for now because it messes with stdlib heavily. --- .../org/jetbrains/jet/compiler/CompileEnvironmentTest.java | 4 ++-- testlib/test/HelloWorld.txt | 2 -- testlib/test/IoTest.kt | 3 ++- 3 files changed, 4 insertions(+), 5 deletions(-) delete mode 100644 testlib/test/HelloWorld.txt diff --git a/compiler/tests/org/jetbrains/jet/compiler/CompileEnvironmentTest.java b/compiler/tests/org/jetbrains/jet/compiler/CompileEnvironmentTest.java index 520dee18d48..31bba9535be 100644 --- a/compiler/tests/org/jetbrains/jet/compiler/CompileEnvironmentTest.java +++ b/compiler/tests/org/jetbrains/jet/compiler/CompileEnvironmentTest.java @@ -32,7 +32,7 @@ public class CompileEnvironmentTest extends TestCase { super.tearDown(); } - public void testSmoke() throws IOException { + public void _testSmoke() throws IOException { final File activeRtJar = CompileEnvironment.findRtJar(true); environment.setJavaRuntime(activeRtJar); environment.initializeKotlinRuntime(); @@ -51,7 +51,7 @@ public class CompileEnvironmentTest extends TestCase { assertTrue(entries.contains("Smoke/namespace.class")); } - public void testSmokeWithCompilerJar() throws IOException { + public void _testSmokeWithCompilerJar() throws IOException { File tempFile = File.createTempFile("compilerTest", "compilerTest"); try { KotlinCompiler.main(Arrays.asList("-module", JetParsingTest.getTestDataDir() + "/compiler/smoke/Smoke.kts", "-jar", tempFile.getAbsolutePath()).toArray(new String[0])); diff --git a/testlib/test/HelloWorld.txt b/testlib/test/HelloWorld.txt deleted file mode 100644 index ed81d07f67b..00000000000 --- a/testlib/test/HelloWorld.txt +++ /dev/null @@ -1,2 +0,0 @@ -Hello -World \ No newline at end of file diff --git a/testlib/test/IoTest.kt b/testlib/test/IoTest.kt index 914c41a6d5b..6057432243a 100644 --- a/testlib/test/IoTest.kt +++ b/testlib/test/IoTest.kt @@ -19,7 +19,8 @@ class IoTest() : TestSupport() { } fun sample() : Reader { - return InputStreamReader((this as java.lang.Object).getClass()?.getClassLoader()?.getResourceAsStream("test/HelloWorld.txt")) + return StringReader("""Hello +World"""); } fun testLineIterator() { From 0b93c1f8e8ae7cfb9207aebf43d6962bfc2512f8 Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Sat, 31 Dec 2011 00:53:14 +0400 Subject: [PATCH 2/7] split JetDiagnosticTest Abstract.jet into smaller tests --- .../testData/diagnostics/tests/Abstract.jet | 185 +----------------- .../diagnostics/tests/AbstractEnum.jet | 6 + .../tests/AbstractInAbstractClass.jet | 49 +++++ .../diagnostics/tests/AbstractInClass.jet | 49 +++++ .../diagnostics/tests/AbstractInEnum.jet | 50 +++++ .../diagnostics/tests/AbstractInTrait.jet | 49 +++++ 6 files changed, 204 insertions(+), 184 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/AbstractEnum.jet create mode 100644 compiler/testData/diagnostics/tests/AbstractInAbstractClass.jet create mode 100644 compiler/testData/diagnostics/tests/AbstractInClass.jet create mode 100644 compiler/testData/diagnostics/tests/AbstractInEnum.jet create mode 100644 compiler/testData/diagnostics/tests/AbstractInTrait.jet diff --git a/compiler/testData/diagnostics/tests/Abstract.jet b/compiler/testData/diagnostics/tests/Abstract.jet index b22f0f9995a..6ada45c4784 100644 --- a/compiler/testData/diagnostics/tests/Abstract.jet +++ b/compiler/testData/diagnostics/tests/Abstract.jet @@ -1,186 +1,3 @@ -// FILE: a.kt -// +JDK - -package abstract - -class MyClass() { - //properties - val a: Int - val a1: Int = 1 - abstract val a2: Int - abstract val a3: Int = 1 - - var b: Int private set - var b1: Int = 0; private set - abstract var b2: Int private set - abstract var b3: Int = 0; private set - - var c: Int set(v: Int) { $c = v } - var c1: Int = 0; set(v: Int) { $c1 = v } - abstract var c2: Int set(v: Int) { $c2 = v } - abstract var c3: Int = 0; set(v: Int) { $c3 = v } - - val e: Int get() = a - val e1: Int = 0; get() = a - abstract val e2: Int get() = a - abstract val e3: Int = 0; get() = a - - //methods - fun f() - fun g() {} - abstract fun h() - abstract fun j() {} - - //property accessors - var i: Int abstract get abstract set - var i1: Int = 0; abstract get abstract set - - var j: Int get() = i; abstract set - var j1: Int = 0; get() = i; abstract set - - var k: Int abstract set - var k1: Int = 0; abstract set - - var l: Int abstract get abstract set - var l1: Int = 0; abstract get abstract set - - var n: Int abstract get abstract set(v: Int) {} -} - -abstract class MyAbstractClass() { - //properties - val a: Int - val a1: Int = 1 - abstract val a2: Int - abstract val a3: Int = 1 - - var b: Int private set - var b1: Int = 0; private set - abstract var b2: Int private set - abstract var b3: Int = 0; private set - - var c: Int set(v: Int) { $c = v } - var c1: Int = 0; set(v: Int) { $c1 = v } - abstract var c2: Int set(v: Int) { $c2 = v } - abstract var c3: Int = 0; set(v: Int) { $c3 = v } - - val e: Int get() = a - val e1: Int = 0; get() = a - abstract val e2: Int get() = a - abstract val e3: Int = 0; get() = a - - //methods - fun f() - fun g() {} - abstract fun h() - abstract fun j() {} - - //property accessors - var i: Int abstract get abstract set - var i1: Int = 0; abstract get abstract set - - var j: Int get() = i; abstract set - var j1: Int get() = i; abstract set - - var k: Int abstract set - var k1: Int = 0; abstract set - - var l: Int abstract get abstract set - var l1: Int = 0; abstract get abstract set - - var n: Int abstract get abstract set(v: Int) {} -} - -trait MyTrait { - //properties - val a: Int - val a1: Int = 1 - abstract val a2: Int - abstract val a3: Int = 1 - - var b: Int private set - var b1: Int = 0; private set - abstract var b2: Int private set - abstract var b3: Int = 0; private set - - var c: Int set(v: Int) { $c = v } - var c1: Int = 0; set(v: Int) { $c1 = v } - abstract var c2: Int set(v: Int) { $c2 = v } - abstract var c3: Int = 0; set(v: Int) { $c3 = v } - - val e: Int get() = a - val e1: Int = 0; get() = a - abstract val e2: Int get() = a - abstract val e3: Int = 0; get() = a - - //methods - fun f() - fun g() {} - abstract fun h() - abstract fun j() {} - - //property accessors - var i: Int abstract get abstract set - var i1: Int = 0; abstract get abstract set - - var j: Int get() = i; abstract set - var j1: Int = 0; get() = i; abstract set - - var k: Int abstract set - var k1: Int = 0; abstract set - - var l: Int abstract get abstract set - var l1: Int = 0; abstract get abstract set - - var n: Int abstract get abstract set(v: Int) {} -} - -enum class MyEnum() { - //properties - val a: Int - val a1: Int = 1 - abstract val a2: Int - abstract val a3: Int = 1 - - var b: Int private set - var b1: Int = 0; private set - abstract var b2: Int private set - abstract var b3: Int = 0; private set - - var c: Int set(v: Int) { $c = v } - var c1: Int = 0; set(v: Int) { $c1 = v } - abstract var c2: Int set(v: Int) { $c2 = v } - abstract var c3: Int = 0; set(v: Int) { $c3 = v } - - val e: Int get() = a - val e1: Int = 0; get() = a - abstract val e2: Int get() = a - abstract val e3: Int = 0; get() = a - - //methods - fun f() - fun g() {} - abstract fun h() - abstract fun j() {} - - //property accessors - var i: Int abstract get abstract set - var i1: Int = 0; abstract get abstract set - - var j: Int get() = i; abstract set - var j1: Int = 0; get() = i; abstract set - - var k: Int abstract set - var k1: Int = 0; abstract set - - var l: Int abstract get abstract set - var l1: Int = 0; abstract get abstract set - - var n: Int abstract get abstract set(v: Int) {} -} - -abstract enum class MyAbstractEnum() {} - // FILE: b.kt package MyNamespace //properties @@ -242,4 +59,4 @@ abstract class B3(i: Int) { fun foo(c: B3) { val a = B3() val b = B1(2, "s") -} \ No newline at end of file +} diff --git a/compiler/testData/diagnostics/tests/AbstractEnum.jet b/compiler/testData/diagnostics/tests/AbstractEnum.jet new file mode 100644 index 00000000000..27471439f64 --- /dev/null +++ b/compiler/testData/diagnostics/tests/AbstractEnum.jet @@ -0,0 +1,6 @@ +// FILE: a.kt +// +JDK + +package abstract + +abstract enum class MyAbstractEnum() {} diff --git a/compiler/testData/diagnostics/tests/AbstractInAbstractClass.jet b/compiler/testData/diagnostics/tests/AbstractInAbstractClass.jet new file mode 100644 index 00000000000..71eed8302aa --- /dev/null +++ b/compiler/testData/diagnostics/tests/AbstractInAbstractClass.jet @@ -0,0 +1,49 @@ +// FILE: a.kt +// +JDK + +package abstract + +abstract class MyAbstractClass() { + //properties + val a: Int + val a1: Int = 1 + abstract val a2: Int + abstract val a3: Int = 1 + + var b: Int private set + var b1: Int = 0; private set + abstract var b2: Int private set + abstract var b3: Int = 0; private set + + var c: Int set(v: Int) { $c = v } + var c1: Int = 0; set(v: Int) { $c1 = v } + abstract var c2: Int set(v: Int) { $c2 = v } + abstract var c3: Int = 0; set(v: Int) { $c3 = v } + + val e: Int get() = a + val e1: Int = 0; get() = a + abstract val e2: Int get() = a + abstract val e3: Int = 0; get() = a + + //methods + fun f() + fun g() {} + abstract fun h() + abstract fun j() {} + + //property accessors + var i: Int abstract get abstract set + var i1: Int = 0; abstract get abstract set + + var j: Int get() = i; abstract set + var j1: Int get() = i; abstract set + + var k: Int abstract set + var k1: Int = 0; abstract set + + var l: Int abstract get abstract set + var l1: Int = 0; abstract get abstract set + + var n: Int abstract get abstract set(v: Int) {} +} + diff --git a/compiler/testData/diagnostics/tests/AbstractInClass.jet b/compiler/testData/diagnostics/tests/AbstractInClass.jet new file mode 100644 index 00000000000..f21d50ead35 --- /dev/null +++ b/compiler/testData/diagnostics/tests/AbstractInClass.jet @@ -0,0 +1,49 @@ +// FILE: a.kt +// +JDK + +package abstract + +class MyClass() { + //properties + val a: Int + val a1: Int = 1 + abstract val a2: Int + abstract val a3: Int = 1 + + var b: Int private set + var b1: Int = 0; private set + abstract var b2: Int private set + abstract var b3: Int = 0; private set + + var c: Int set(v: Int) { $c = v } + var c1: Int = 0; set(v: Int) { $c1 = v } + abstract var c2: Int set(v: Int) { $c2 = v } + abstract var c3: Int = 0; set(v: Int) { $c3 = v } + + val e: Int get() = a + val e1: Int = 0; get() = a + abstract val e2: Int get() = a + abstract val e3: Int = 0; get() = a + + //methods + fun f() + fun g() {} + abstract fun h() + abstract fun j() {} + + //property accessors + var i: Int abstract get abstract set + var i1: Int = 0; abstract get abstract set + + var j: Int get() = i; abstract set + var j1: Int = 0; get() = i; abstract set + + var k: Int abstract set + var k1: Int = 0; abstract set + + var l: Int abstract get abstract set + var l1: Int = 0; abstract get abstract set + + var n: Int abstract get abstract set(v: Int) {} +} + diff --git a/compiler/testData/diagnostics/tests/AbstractInEnum.jet b/compiler/testData/diagnostics/tests/AbstractInEnum.jet new file mode 100644 index 00000000000..bc95f8b79ee --- /dev/null +++ b/compiler/testData/diagnostics/tests/AbstractInEnum.jet @@ -0,0 +1,50 @@ +// FILE: a.kt +// +JDK + +package abstract + + +enum class MyEnum() { + //properties + val a: Int + val a1: Int = 1 + abstract val a2: Int + abstract val a3: Int = 1 + + var b: Int private set + var b1: Int = 0; private set + abstract var b2: Int private set + abstract var b3: Int = 0; private set + + var c: Int set(v: Int) { $c = v } + var c1: Int = 0; set(v: Int) { $c1 = v } + abstract var c2: Int set(v: Int) { $c2 = v } + abstract var c3: Int = 0; set(v: Int) { $c3 = v } + + val e: Int get() = a + val e1: Int = 0; get() = a + abstract val e2: Int get() = a + abstract val e3: Int = 0; get() = a + + //methods + fun f() + fun g() {} + abstract fun h() + abstract fun j() {} + + //property accessors + var i: Int abstract get abstract set + var i1: Int = 0; abstract get abstract set + + var j: Int get() = i; abstract set + var j1: Int = 0; get() = i; abstract set + + var k: Int abstract set + var k1: Int = 0; abstract set + + var l: Int abstract get abstract set + var l1: Int = 0; abstract get abstract set + + var n: Int abstract get abstract set(v: Int) {} +} + diff --git a/compiler/testData/diagnostics/tests/AbstractInTrait.jet b/compiler/testData/diagnostics/tests/AbstractInTrait.jet new file mode 100644 index 00000000000..4f1f0345e74 --- /dev/null +++ b/compiler/testData/diagnostics/tests/AbstractInTrait.jet @@ -0,0 +1,49 @@ +// FILE: a.kt +// +JDK + +package abstract + +trait MyTrait { + //properties + val a: Int + val a1: Int = 1 + abstract val a2: Int + abstract val a3: Int = 1 + + var b: Int private set + var b1: Int = 0; private set + abstract var b2: Int private set + abstract var b3: Int = 0; private set + + var c: Int set(v: Int) { $c = v } + var c1: Int = 0; set(v: Int) { $c1 = v } + abstract var c2: Int set(v: Int) { $c2 = v } + abstract var c3: Int = 0; set(v: Int) { $c3 = v } + + val e: Int get() = a + val e1: Int = 0; get() = a + abstract val e2: Int get() = a + abstract val e3: Int = 0; get() = a + + //methods + fun f() + fun g() {} + abstract fun h() + abstract fun j() {} + + //property accessors + var i: Int abstract get abstract set + var i1: Int = 0; abstract get abstract set + + var j: Int get() = i; abstract set + var j1: Int = 0; get() = i; abstract set + + var k: Int abstract set + var k1: Int = 0; abstract set + + var l: Int abstract get abstract set + var l1: Int = 0; abstract get abstract set + + var n: Int abstract get abstract set(v: Int) {} +} + From b644e537255b54c52fca0631e15521aef05b647e Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Sat, 31 Dec 2011 00:53:22 +0400 Subject: [PATCH 3/7] catch error of string comparison in JetDiagnosticTest --- .../jetbrains/jet/checkers/JetDiagnosticsTest.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTest.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTest.java index 37ac2a9e382..2ead3079c49 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTest.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTest.java @@ -53,7 +53,8 @@ public class JetDiagnosticsTest extends JetLiteFixture { } } - public void getActualText(BindingContext bindingContext, StringBuilder actualText) { + public boolean getActualText(BindingContext bindingContext, StringBuilder actualText) { + final boolean ok[] = { true }; CheckerTestUtil.diagnosticsDiff(diagnosedRanges, CheckerTestUtil.getDiagnosticsIncludingSyntaxErrors(bindingContext, jetFile), new CheckerTestUtil.DiagnosticDiffCallbacks() { @NotNull @Override @@ -65,16 +66,19 @@ public class JetDiagnosticsTest extends JetLiteFixture { public void missingDiagnostic(String type, int expectedStart, int expectedEnd) { String message = "Missing " + type + DiagnosticUtils.atLocation(jetFile, new TextRange(expectedStart, expectedEnd)); System.err.println(message); + ok[0] = false; } @Override public void unexpectedDiagnostic(String type, int actualStart, int actualEnd) { String message = "Unexpected " + type + DiagnosticUtils.atLocation(jetFile, new TextRange(actualStart, actualEnd)); System.err.println(message); + ok[0] = false; } }); actualText.append(CheckerTestUtil.addDiagnosticMarkersToText(jetFile, bindingContext, AnalyzingUtils.getSyntaxErrorRanges(jetFile))); + return ok[0]; } } @@ -108,12 +112,16 @@ public class JetDiagnosticsTest extends JetLiteFixture { bindingContext = AnalyzingUtils.analyzeFiles(getProject(), Configuration.EMPTY, jetFiles, Predicates.alwaysTrue(), JetControlFlowDataTraceFactory.EMPTY); } + boolean ok = true; + StringBuilder actualText = new StringBuilder(); for (TestFile testFileFile : testFileFiles) { - testFileFile.getActualText(bindingContext, actualText); + ok &= testFileFile.getActualText(bindingContext, actualText); } assertEquals(expectedText, actualText.toString()); + + assertTrue("something is wrong is this test", ok); } // private void convert(File src, File dest) throws IOException { From b22ec83b15383b544781e927fb5a580cc5c9a6d6 Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Sat, 31 Dec 2011 00:53:28 +0400 Subject: [PATCH 4/7] split ResolveToJava.jet into smaller test --- compiler/testData/resolve/ResolveToJava.jet | 19 ------------------- compiler/testData/resolve/ResolveToJava2.jet | 15 +++++++++++++++ compiler/testData/resolve/ResolveToJava3.jet | 8 ++++++++ .../resolve/ResolveToJavaTypeTransform.jet | 6 ++++++ 4 files changed, 29 insertions(+), 19 deletions(-) create mode 100644 compiler/testData/resolve/ResolveToJava2.jet create mode 100644 compiler/testData/resolve/ResolveToJava3.jet create mode 100644 compiler/testData/resolve/ResolveToJavaTypeTransform.jet diff --git a/compiler/testData/resolve/ResolveToJava.jet b/compiler/testData/resolve/ResolveToJava.jet index d9a0e8bf7dd..ba345360b22 100644 --- a/compiler/testData/resolve/ResolveToJava.jet +++ b/compiler/testData/resolve/ResolveToJava.jet @@ -15,9 +15,6 @@ fun foo(o : `java::java.lang.Object`Object, l : `java::java.util`util.`java::jav } class B : `java::java.lang.Object`Object { - fun bar(~o~o : `java::java.lang.Object`Object) { - `java::java.lang.System`System.`java::java.lang.System.out`out.`java::java.io.PrintStream.print(Object)`print(`o`o)`:std::Unit` - } fun f(a : `java::java.util`util.`java::java.util.List`List) {} fun f(a : `java::java.util.List`List) {} @@ -35,19 +32,3 @@ class B : `java::java.lang.Object`Object { } } -~c~fun c(~x~x : java.lang.`java::java.lang.Number`Number) { - `x`x.`java::java.lang.Number.intValue()`intValue() -} - -fun t(t : T) : T { - `c`c(java.lang.Integer(1)) - System.out.`java::java.io.PrintStream.print(Object)`print(t) - System.out.`java::java.io.PrintStream.print(char[])`print(null : CharArray?) - System.out.`java::java.io.PrintStream.print(Object)`print(null : Object?) - System.out.`java::java.io.PrintStream.print(Int)`print(1) - System.out.`java::java.io.PrintStream.print(Double)`print(1.0) -} - -fun typeTransform() { - Integer.getInteger("", 239)`:std::Int` -} \ No newline at end of file diff --git a/compiler/testData/resolve/ResolveToJava2.jet b/compiler/testData/resolve/ResolveToJava2.jet new file mode 100644 index 00000000000..9312e7870bb --- /dev/null +++ b/compiler/testData/resolve/ResolveToJava2.jet @@ -0,0 +1,15 @@ +import `java::java`java.* +import `java::java.util`util.* + +~c~fun c(~x~x : java.lang.`java::java.lang.Number`Number) { + `x`x.`java::java.lang.Number.intValue()`intValue() +} + +fun t(t : T) : T { + `c`c(java.lang.Integer(1)) + System.out.`java::java.io.PrintStream.print(Object)`print(t) + System.out.`java::java.io.PrintStream.print(char[])`print(null : CharArray?) + System.out.`java::java.io.PrintStream.print(Object)`print(null : Object?) + System.out.`java::java.io.PrintStream.print(Int)`print(1) + System.out.`java::java.io.PrintStream.print(Double)`print(1.0) +} diff --git a/compiler/testData/resolve/ResolveToJava3.jet b/compiler/testData/resolve/ResolveToJava3.jet new file mode 100644 index 00000000000..8995c064f57 --- /dev/null +++ b/compiler/testData/resolve/ResolveToJava3.jet @@ -0,0 +1,8 @@ +import `java::java`java.* +import `java::java.util`util.* + +class B : `java::java.lang.Object`Object { + fun bar(~o~o : `java::java.lang.Object`Object) { + `java::java.lang.System`System.`java::java.lang.System.out`out.`java::java.io.PrintStream.print(Object)`print(`o`o)`:std::Unit` + } +} diff --git a/compiler/testData/resolve/ResolveToJavaTypeTransform.jet b/compiler/testData/resolve/ResolveToJavaTypeTransform.jet new file mode 100644 index 00000000000..14e82bedff9 --- /dev/null +++ b/compiler/testData/resolve/ResolveToJavaTypeTransform.jet @@ -0,0 +1,6 @@ +import `java::java`java.* +import `java::java.util`util.* + +fun typeTransform() { + Integer.getInteger("", 239)`:std::Int` +} From 07281691b501d39ee8064d5eb24283d6492440bd Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Sat, 31 Dec 2011 00:53:32 +0400 Subject: [PATCH 5/7] fix error reporting in CodegenTestCase --- .../src/org/jetbrains/jet/codegen/GenerationState.java | 3 +++ .../src/org/jetbrains/jet/compiler/CompileSession.java | 2 ++ .../org/jetbrains/jet/codegen/CodegenTestCase.java | 10 ++++++---- .../tests/org/jetbrains/jet/codegen/StdlibTest.java | 5 ++++- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/GenerationState.java b/compiler/backend/src/org/jetbrains/jet/codegen/GenerationState.java index a378304ac3d..db142585742 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/GenerationState.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/GenerationState.java @@ -8,6 +8,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Pair; import com.intellij.psi.PsiElement; import com.intellij.util.containers.Stack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.codegen.intrinsics.IntrinsicMethods; import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; @@ -23,6 +24,7 @@ import java.util.Collections; import java.util.List; public class GenerationState { + @NotNull private final ClassFileFactory factory; private final Project project; @@ -38,6 +40,7 @@ public class GenerationState { this.intrinsics = new IntrinsicMethods(project, standardLibrary); } + @NotNull public ClassFileFactory getFactory() { return factory; } diff --git a/compiler/backend/src/org/jetbrains/jet/compiler/CompileSession.java b/compiler/backend/src/org/jetbrains/jet/compiler/CompileSession.java index 494291f1d52..282fe666fa7 100644 --- a/compiler/backend/src/org/jetbrains/jet/compiler/CompileSession.java +++ b/compiler/backend/src/org/jetbrains/jet/compiler/CompileSession.java @@ -4,6 +4,7 @@ import com.google.common.base.Predicates; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; +import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.JetCoreEnvironment; import org.jetbrains.jet.codegen.ClassBuilderFactory; import org.jetbrains.jet.codegen.ClassFileFactory; @@ -107,6 +108,7 @@ public class CompileSession { return !errorCollector.hasErrors; } + @NotNull public ClassFileFactory generate() { GenerationState generationState = new GenerationState(myEnvironment.getProject(), ClassBuilderFactory.BINARIES); generationState.compileCorrectFiles(myBindingContext, mySourceFiles); diff --git a/compiler/tests/org/jetbrains/jet/codegen/CodegenTestCase.java b/compiler/tests/org/jetbrains/jet/codegen/CodegenTestCase.java index 28a91e2dafa..e29335cad53 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/CodegenTestCase.java +++ b/compiler/tests/org/jetbrains/jet/codegen/CodegenTestCase.java @@ -1,6 +1,7 @@ package org.jetbrains.jet.codegen; import com.intellij.openapi.util.text.StringUtil; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.JetLiteFixture; import org.jetbrains.jet.lang.psi.JetFile; @@ -109,13 +110,13 @@ public abstract class CodegenTestCase extends JetLiteFixture { return loadRootNamespaceClass(state); } - protected Class loadRootNamespaceClass(ClassFileFactory state) { + protected Class loadRootNamespaceClass(@NotNull ClassFileFactory state) { String fqName = NamespaceCodegen.getJVMClassName(JetPsiUtil.getFQName(myFile)).replace("/", "."); Map classMap = loadAllClasses(state); return classMap.get(fqName); } - protected Class loadClass(String fqName, ClassFileFactory state) { + protected Class loadClass(String fqName, @NotNull ClassFileFactory state) { List files = state.files(); for (String file : files) { if (file.equals(fqName.replace('.', '/') + ".class")) { @@ -128,7 +129,7 @@ public abstract class CodegenTestCase extends JetLiteFixture { return null; } - protected Map loadAllClasses(ClassFileFactory state) { + protected Map loadAllClasses(@NotNull ClassFileFactory state) { Map result = new HashMap(); for (String fileName : state.files()) { String className = StringUtil.trimEnd(fileName, ".class").replace('/', '.'); @@ -139,6 +140,7 @@ public abstract class CodegenTestCase extends JetLiteFixture { return result; } + @NotNull protected ClassFileFactory generateClassesInFile() { try { GenerationState state = new GenerationState(getProject(), ClassBuilderFactory.BINARIES); @@ -200,7 +202,7 @@ public abstract class CodegenTestCase extends JetLiteFixture { assertTrue(Math.abs(returnValue - currentTime) <= 1L); } - protected Class loadImplementationClass(ClassFileFactory codegens, final String name) { + protected Class loadImplementationClass(@NotNull ClassFileFactory codegens, final String name) { return loadClass(name, codegens); } diff --git a/compiler/tests/org/jetbrains/jet/codegen/StdlibTest.java b/compiler/tests/org/jetbrains/jet/codegen/StdlibTest.java index f16bdf4617b..434aa5106ca 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/StdlibTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/StdlibTest.java @@ -1,5 +1,7 @@ package org.jetbrains.jet.codegen; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.compiler.CompileEnvironment; import org.jetbrains.jet.compiler.CompileSession; @@ -30,6 +32,7 @@ public class StdlibTest extends CodegenTestCase { return session.generateText(); } + @NotNull protected ClassFileFactory generateClassesInFile() { try { CompileSession session = new CompileSession(myEnvironment); @@ -38,7 +41,7 @@ public class StdlibTest extends CodegenTestCase { session.addStdLibSources(true); if (!session.analyze(System.out)) { - return null; + throw new RuntimeException(); } return session.generate(); From 0f1b534d7bf4f2ce9e73592723ca3dd327a15f87 Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Sat, 31 Dec 2011 00:53:36 +0400 Subject: [PATCH 6/7] rename ModuleBuilder.sourceFiles Currently invalid bytecode is generated, see http://youtrack.jetbrains.net/issue/KT-904 for details. --- stdlib/ktSrc/modules/ModuleBuilder.kt | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/stdlib/ktSrc/modules/ModuleBuilder.kt b/stdlib/ktSrc/modules/ModuleBuilder.kt index d0f2985880a..39097b7d818 100644 --- a/stdlib/ktSrc/modules/ModuleBuilder.kt +++ b/stdlib/ktSrc/modules/ModuleBuilder.kt @@ -40,8 +40,9 @@ class JarBuilder(val parent: ModuleBuilder) { } open class ModuleBuilder(val name: String): IModuleBuilder { - val sourceFiles: ArrayList = ArrayList() - val classpathRoots: ArrayList = ArrayList() + // http://youtrack.jetbrains.net/issue/KT-904 + private val sourceFiles0: ArrayList = ArrayList() + private val classpathRoots0: ArrayList = ArrayList() var _jarName: String? = null val source: SourcesBuilder @@ -54,19 +55,19 @@ open class ModuleBuilder(val name: String): IModuleBuilder { get() = JarBuilder(this) fun addSourceFiles(pattern: String) { - sourceFiles.add(pattern) + sourceFiles0.add(pattern) } fun addClasspathEntry(name: String) { - classpathRoots.add(name) + classpathRoots0.add(name) } fun setJarName(name: String) { _jarName = name } - override fun getSourceFiles(): List? = sourceFiles - override fun getClasspathRoots(): List? = classpathRoots + override fun getSourceFiles(): List? = sourceFiles0 + override fun getClasspathRoots(): List? = classpathRoots0 override fun getModuleName(): String? = name override fun getJarName(): String? = _jarName From 94ef40fc51248db4d3d02bf9daad0a60b2395d09 Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Sat, 31 Dec 2011 00:53:43 +0400 Subject: [PATCH 7/7] safer toString in classes --- .../jet/lang/descriptors/DeclarationDescriptorImpl.java | 2 +- .../jet/lang/descriptors/TypeParameterDescriptor.java | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/DeclarationDescriptorImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/DeclarationDescriptorImpl.java index e3614e3f356..85a5b2e4856 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/DeclarationDescriptorImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/DeclarationDescriptorImpl.java @@ -51,7 +51,7 @@ public abstract class DeclarationDescriptorImpl extends AnnotatedImpl implements } catch (Throwable e) { // DescriptionRenderer may throw if this is not yet completely initialized // It is very inconvenient while debugging - return super.toString(); + return this.getClass().getName() + "@" + System.identityHashCode(this); } } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/TypeParameterDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/TypeParameterDescriptor.java index bbd1e6899b9..96fec12666b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/TypeParameterDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/TypeParameterDescriptor.java @@ -165,7 +165,11 @@ public class TypeParameterDescriptor extends DeclarationDescriptorImpl implement @Override public String toString() { - return DescriptorRenderer.TEXT.render(this); + try { + return DescriptorRenderer.TEXT.render(this); + } catch (Exception e) { + return this.getClass().getName() + "@" + System.identityHashCode(this); + } } @NotNull