Exceptions thrown on syntax errors
This commit is contained in:
@@ -1,6 +1,9 @@
|
|||||||
package org.jetbrains.jet.lang.resolve;
|
package org.jetbrains.jet.lang.resolve;
|
||||||
|
|
||||||
import com.intellij.openapi.project.Project;
|
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.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.ErrorHandler;
|
import org.jetbrains.jet.lang.ErrorHandler;
|
||||||
import org.jetbrains.jet.lang.JetSemanticServices;
|
import org.jetbrains.jet.lang.JetSemanticServices;
|
||||||
@@ -15,6 +18,20 @@ import org.jetbrains.jet.lang.types.ModuleDescriptor;
|
|||||||
* @author abreslav
|
* @author abreslav
|
||||||
*/
|
*/
|
||||||
public class AnalyzingUtils {
|
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) {
|
public static BindingContext analyzeFile(@NotNull JetFile file, @NotNull ErrorHandler errorHandler) {
|
||||||
JetNamespace rootNamespace = file.getRootNamespace();
|
JetNamespace rootNamespace = file.getRootNamespace();
|
||||||
return analyzeNamespace(rootNamespace, errorHandler, JetControlFlowDataTraceFactory.EMPTY);
|
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.JetFileType;
|
||||||
import org.jetbrains.jet.lang.psi.JetFile;
|
import org.jetbrains.jet.lang.psi.JetFile;
|
||||||
import org.jetbrains.jet.lang.psi.JetNamespace;
|
import org.jetbrains.jet.lang.psi.JetNamespace;
|
||||||
|
import org.jetbrains.jet.lang.resolve.AnalyzingUtils;
|
||||||
import org.jetbrains.jet.parsing.JetParsingTest;
|
import org.jetbrains.jet.parsing.JetParsingTest;
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
@@ -41,6 +42,7 @@ public abstract class CodegenTestCase extends LightCodeInsightFixtureTestCase {
|
|||||||
protected String generateToText() {
|
protected String generateToText() {
|
||||||
Codegens state = new Codegens(getProject(), true);
|
Codegens state = new Codegens(getProject(), true);
|
||||||
JetFile jetFile = (JetFile) myFixture.getFile();
|
JetFile jetFile = (JetFile) myFixture.getFile();
|
||||||
|
AnalyzingUtils.checkForSyntacticErrors(jetFile);
|
||||||
JetNamespace namespace = jetFile.getRootNamespace();
|
JetNamespace namespace = jetFile.getRootNamespace();
|
||||||
NamespaceCodegen codegen = state.forNamespace(namespace);
|
NamespaceCodegen codegen = state.forNamespace(namespace);
|
||||||
codegen.generate(namespace);
|
codegen.generate(namespace);
|
||||||
@@ -80,6 +82,7 @@ public abstract class CodegenTestCase extends LightCodeInsightFixtureTestCase {
|
|||||||
protected Codegens generateClassesInFile() {
|
protected Codegens generateClassesInFile() {
|
||||||
Codegens state = new Codegens(getProject(), false);
|
Codegens state = new Codegens(getProject(), false);
|
||||||
JetFile jetFile = (JetFile) myFixture.getFile();
|
JetFile jetFile = (JetFile) myFixture.getFile();
|
||||||
|
AnalyzingUtils.checkForSyntacticErrors(jetFile);
|
||||||
final JetNamespace namespace = jetFile.getRootNamespace();
|
final JetNamespace namespace = jetFile.getRootNamespace();
|
||||||
|
|
||||||
NamespaceCodegen codegen = state.forNamespace(namespace);
|
NamespaceCodegen codegen = state.forNamespace(namespace);
|
||||||
|
|||||||
@@ -157,19 +157,19 @@ public class PrimitiveTypesTest extends CodegenTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void testPreIncrement() throws Exception {
|
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();
|
final Method main = generateFunction();
|
||||||
assertEquals(11, main.invoke(null, 10));
|
assertEquals(11, main.invoke(null, 10));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testPreIncrementValue() throws Exception {
|
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();
|
final Method main = generateFunction();
|
||||||
assertEquals(11, main.invoke(null, 10));
|
assertEquals(11, main.invoke(null, 10));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testPreDecrement() throws Exception {
|
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();
|
final Method main = generateFunction();
|
||||||
assertEquals(9, main.invoke(null, 10));
|
assertEquals(9, main.invoke(null, 10));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user