Exceptions thrown on syntax errors

This commit is contained in:
Andrey Breslav
2011-04-21 18:04:23 +04:00
parent 806bddb80c
commit 433c073778
3 changed files with 23 additions and 3 deletions
@@ -1,6 +1,9 @@
package org.jetbrains.jet.lang.resolve;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.PsiErrorElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.ErrorHandler;
import org.jetbrains.jet.lang.JetSemanticServices;
@@ -15,6 +18,20 @@ import org.jetbrains.jet.lang.types.ModuleDescriptor;
* @author abreslav
*/
public class AnalyzingUtils {
public static void checkForSyntacticErrors(@NotNull PsiElement root) {
root.acceptChildren(new PsiElementVisitor() {
@Override
public void visitElement(PsiElement element) {
element.acceptChildren(this);
}
@Override
public void visitErrorElement(PsiErrorElement element) {
throw new IllegalArgumentException(element.getErrorDescription());
}
});
}
public static BindingContext analyzeFile(@NotNull JetFile file, @NotNull ErrorHandler errorHandler) {
JetNamespace rootNamespace = file.getRootNamespace();
return analyzeNamespace(rootNamespace, errorHandler, JetControlFlowDataTraceFactory.EMPTY);
@@ -7,6 +7,7 @@ import org.jetbrains.jet.JetLightProjectDescriptor;
import org.jetbrains.jet.lang.JetFileType;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetNamespace;
import org.jetbrains.jet.lang.resolve.AnalyzingUtils;
import org.jetbrains.jet.parsing.JetParsingTest;
import java.lang.reflect.Method;
@@ -41,6 +42,7 @@ public abstract class CodegenTestCase extends LightCodeInsightFixtureTestCase {
protected String generateToText() {
Codegens state = new Codegens(getProject(), true);
JetFile jetFile = (JetFile) myFixture.getFile();
AnalyzingUtils.checkForSyntacticErrors(jetFile);
JetNamespace namespace = jetFile.getRootNamespace();
NamespaceCodegen codegen = state.forNamespace(namespace);
codegen.generate(namespace);
@@ -80,6 +82,7 @@ public abstract class CodegenTestCase extends LightCodeInsightFixtureTestCase {
protected Codegens generateClassesInFile() {
Codegens state = new Codegens(getProject(), false);
JetFile jetFile = (JetFile) myFixture.getFile();
AnalyzingUtils.checkForSyntacticErrors(jetFile);
final JetNamespace namespace = jetFile.getRootNamespace();
NamespaceCodegen codegen = state.forNamespace(namespace);
@@ -157,19 +157,19 @@ public class PrimitiveTypesTest extends CodegenTestCase {
}
public void testPreIncrement() throws Exception {
loadText("fun foo(a: Int): Int { var x = a; ++x; return x;");
loadText("fun foo(a: Int): Int { var x = a; ++x; return x;}");
final Method main = generateFunction();
assertEquals(11, main.invoke(null, 10));
}
public void testPreIncrementValue() throws Exception {
loadText("fun foo(a: Int): Int { var x = a; return ++x;");
loadText("fun foo(a: Int): Int { var x = a; return ++x;}");
final Method main = generateFunction();
assertEquals(11, main.invoke(null, 10));
}
public void testPreDecrement() throws Exception {
loadText("fun foo(a: Int): Int { return --a;");
loadText("fun foo(a: Int): Int { return --a;}");
final Method main = generateFunction();
assertEquals(9, main.invoke(null, 10));
}