fix error reporting in CodegenTestCase

This commit is contained in:
Stepan Koltsov
2011-12-31 00:53:32 +04:00
parent b22ec83b15
commit 07281691b5
4 changed files with 15 additions and 5 deletions
@@ -8,6 +8,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.Pair;
import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElement;
import com.intellij.util.containers.Stack; import com.intellij.util.containers.Stack;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.codegen.intrinsics.IntrinsicMethods; import org.jetbrains.jet.codegen.intrinsics.IntrinsicMethods;
import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory; import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
@@ -23,6 +24,7 @@ import java.util.Collections;
import java.util.List; import java.util.List;
public class GenerationState { public class GenerationState {
@NotNull
private final ClassFileFactory factory; private final ClassFileFactory factory;
private final Project project; private final Project project;
@@ -38,6 +40,7 @@ public class GenerationState {
this.intrinsics = new IntrinsicMethods(project, standardLibrary); this.intrinsics = new IntrinsicMethods(project, standardLibrary);
} }
@NotNull
public ClassFileFactory getFactory() { public ClassFileFactory getFactory() {
return factory; return factory;
} }
@@ -4,6 +4,7 @@ import com.google.common.base.Predicates;
import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile; import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager; import com.intellij.psi.PsiManager;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.JetCoreEnvironment; import org.jetbrains.jet.JetCoreEnvironment;
import org.jetbrains.jet.codegen.ClassBuilderFactory; import org.jetbrains.jet.codegen.ClassBuilderFactory;
import org.jetbrains.jet.codegen.ClassFileFactory; import org.jetbrains.jet.codegen.ClassFileFactory;
@@ -107,6 +108,7 @@ public class CompileSession {
return !errorCollector.hasErrors; return !errorCollector.hasErrors;
} }
@NotNull
public ClassFileFactory generate() { public ClassFileFactory generate() {
GenerationState generationState = new GenerationState(myEnvironment.getProject(), ClassBuilderFactory.BINARIES); GenerationState generationState = new GenerationState(myEnvironment.getProject(), ClassBuilderFactory.BINARIES);
generationState.compileCorrectFiles(myBindingContext, mySourceFiles); generationState.compileCorrectFiles(myBindingContext, mySourceFiles);
@@ -1,6 +1,7 @@
package org.jetbrains.jet.codegen; package org.jetbrains.jet.codegen;
import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.util.text.StringUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.JetLiteFixture; import org.jetbrains.jet.JetLiteFixture;
import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetFile;
@@ -109,13 +110,13 @@ public abstract class CodegenTestCase extends JetLiteFixture {
return loadRootNamespaceClass(state); return loadRootNamespaceClass(state);
} }
protected Class loadRootNamespaceClass(ClassFileFactory state) { protected Class loadRootNamespaceClass(@NotNull ClassFileFactory state) {
String fqName = NamespaceCodegen.getJVMClassName(JetPsiUtil.getFQName(myFile)).replace("/", "."); String fqName = NamespaceCodegen.getJVMClassName(JetPsiUtil.getFQName(myFile)).replace("/", ".");
Map<String, Class> classMap = loadAllClasses(state); Map<String, Class> classMap = loadAllClasses(state);
return classMap.get(fqName); return classMap.get(fqName);
} }
protected Class loadClass(String fqName, ClassFileFactory state) { protected Class loadClass(String fqName, @NotNull ClassFileFactory state) {
List<String> files = state.files(); List<String> files = state.files();
for (String file : files) { for (String file : files) {
if (file.equals(fqName.replace('.', '/') + ".class")) { if (file.equals(fqName.replace('.', '/') + ".class")) {
@@ -128,7 +129,7 @@ public abstract class CodegenTestCase extends JetLiteFixture {
return null; return null;
} }
protected Map<String, Class> loadAllClasses(ClassFileFactory state) { protected Map<String, Class> loadAllClasses(@NotNull ClassFileFactory state) {
Map<String, Class> result = new HashMap<String, Class>(); Map<String, Class> result = new HashMap<String, Class>();
for (String fileName : state.files()) { for (String fileName : state.files()) {
String className = StringUtil.trimEnd(fileName, ".class").replace('/', '.'); String className = StringUtil.trimEnd(fileName, ".class").replace('/', '.');
@@ -139,6 +140,7 @@ public abstract class CodegenTestCase extends JetLiteFixture {
return result; return result;
} }
@NotNull
protected ClassFileFactory generateClassesInFile() { protected ClassFileFactory generateClassesInFile() {
try { try {
GenerationState state = new GenerationState(getProject(), ClassBuilderFactory.BINARIES); GenerationState state = new GenerationState(getProject(), ClassBuilderFactory.BINARIES);
@@ -200,7 +202,7 @@ public abstract class CodegenTestCase extends JetLiteFixture {
assertTrue(Math.abs(returnValue - currentTime) <= 1L); 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); return loadClass(name, codegens);
} }
@@ -1,5 +1,7 @@
package org.jetbrains.jet.codegen; 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.CompileEnvironment;
import org.jetbrains.jet.compiler.CompileSession; import org.jetbrains.jet.compiler.CompileSession;
@@ -30,6 +32,7 @@ public class StdlibTest extends CodegenTestCase {
return session.generateText(); return session.generateText();
} }
@NotNull
protected ClassFileFactory generateClassesInFile() { protected ClassFileFactory generateClassesInFile() {
try { try {
CompileSession session = new CompileSession(myEnvironment); CompileSession session = new CompileSession(myEnvironment);
@@ -38,7 +41,7 @@ public class StdlibTest extends CodegenTestCase {
session.addStdLibSources(true); session.addStdLibSources(true);
if (!session.analyze(System.out)) { if (!session.analyze(System.out)) {
return null; throw new RuntimeException();
} }
return session.generate(); return session.generate();