Better exception handling in JetPsiChecker. Exceptions are rethrowed only in test mode. In production, error is logged and error annotation is registered.

This commit is contained in:
Evgeny Gerashchenko
2012-09-04 16:54:08 +04:00
parent c8ac9b4997
commit c2b3cd79b3
@@ -23,6 +23,7 @@ import com.intellij.lang.annotation.Annotation;
import com.intellij.lang.annotation.AnnotationHolder; import com.intellij.lang.annotation.AnnotationHolder;
import com.intellij.lang.annotation.Annotator; import com.intellij.lang.annotation.Annotator;
import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.colors.TextAttributesKey; import com.intellij.openapi.editor.colors.TextAttributesKey;
import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.roots.ProjectFileIndex;
@@ -42,6 +43,7 @@ import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.plugin.project.WholeProjectAnalyzerFacade; import org.jetbrains.jet.plugin.project.WholeProjectAnalyzerFacade;
import org.jetbrains.jet.plugin.quickfix.JetIntentionActionFactory; import org.jetbrains.jet.plugin.quickfix.JetIntentionActionFactory;
import org.jetbrains.jet.plugin.quickfix.QuickFixes; import org.jetbrains.jet.plugin.quickfix.QuickFixes;
import org.jetbrains.jet.utils.ExceptionUtils;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@@ -54,6 +56,8 @@ public class JetPsiChecker implements Annotator {
private static volatile boolean errorReportingEnabled = true; private static volatile boolean errorReportingEnabled = true;
private static boolean namesHighlightingTest; private static boolean namesHighlightingTest;
private static final Logger LOG = Logger.getInstance(JetPsiChecker.class);
public static void setErrorReportingEnabled(boolean value) { public static void setErrorReportingEnabled(boolean value) {
errorReportingEnabled = value; errorReportingEnabled = value;
} }
@@ -126,15 +130,13 @@ public class JetPsiChecker implements Annotator {
catch (ProcessCanceledException e) { catch (ProcessCanceledException e) {
throw e; throw e;
} }
catch (AssertionError e) { catch (Throwable e) {
// For failing tests and to notify about idea internal error in -ea mode // For failing tests and to notify about idea internal error in -ea mode
holder.createErrorAnnotation(element, e.getClass().getCanonicalName() + ": " + e.getMessage()); holder.createErrorAnnotation(element, e.getClass().getCanonicalName() + ": " + e.getMessage());
throw e; LOG.error(e);
} if (ApplicationManager.getApplication().isUnitTestMode()) {
catch (Throwable e) { throw ExceptionUtils.rethrow(e);
// TODO }
holder.createErrorAnnotation(element, e.getClass().getCanonicalName() + ": " + e.getMessage());
e.printStackTrace();
} }
} }
} }