Exceptions thrown on syntax errors
This commit is contained in:
@@ -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));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user