Introduced DispatchingDiagnosticRenderer, which replaced DefaultDiagnosticRenderer.

This commit is contained in:
Evgeny Gerashchenko
2012-04-13 19:00:53 +04:00
parent c1a9630051
commit 370af95c87
5 changed files with 21 additions and 15 deletions
@@ -36,7 +36,7 @@ import org.jetbrains.jet.lang.descriptors.ClassOrNamespaceDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.diagnostics.*; import org.jetbrains.jet.lang.diagnostics.*;
import org.jetbrains.jet.lang.diagnostics.rendering.DefaultDiagnosticRenderer; import org.jetbrains.jet.lang.diagnostics.rendering.DefaultErrorMessages;
import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM; import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM;
@@ -155,7 +155,7 @@ public class CompileSession {
render = ((SyntaxErrorDiagnostic)diagnostic).message; render = ((SyntaxErrorDiagnostic)diagnostic).message;
} }
else { else {
render = DefaultDiagnosticRenderer.INSTANCE.render(diagnostic); render = DefaultErrorMessages.RENDERER.render(diagnostic);
} }
collector.report(diagnostic.getSeverity(), render, path, lineAndColumn.getLine(), lineAndColumn.getColumn()); collector.report(diagnostic.getSeverity(), render, path, lineAndColumn.getLine(), lineAndColumn.getColumn());
} }
@@ -17,6 +17,7 @@
package org.jetbrains.jet.lang.diagnostics.rendering; package org.jetbrains.jet.lang.diagnostics.rendering;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.diagnostics.Diagnostic;
import org.jetbrains.jet.lang.psi.JetExpression; import org.jetbrains.jet.lang.psi.JetExpression;
import org.jetbrains.jet.lang.psi.JetSimpleNameExpression; import org.jetbrains.jet.lang.psi.JetSimpleNameExpression;
import org.jetbrains.jet.lang.psi.JetTypeConstraint; import org.jetbrains.jet.lang.psi.JetTypeConstraint;
@@ -38,6 +39,7 @@ import static org.jetbrains.jet.lang.diagnostics.rendering.Renderers.TO_STRING;
*/ */
public class DefaultErrorMessages { public class DefaultErrorMessages {
public static final DiagnosticFactoryToRendererMap MAP = new DiagnosticFactoryToRendererMap(); public static final DiagnosticFactoryToRendererMap MAP = new DiagnosticFactoryToRendererMap();
public static final DiagnosticRenderer<Diagnostic> RENDERER = new DispatchingDiagnosticRenderer(MAP);
static { static {
MAP.put(EXCEPTION_WHILE_ANALYZING, "{0}", new Renderer<Throwable>() { MAP.put(EXCEPTION_WHILE_ANALYZING, "{0}", new Renderer<Throwable>() {
@@ -21,21 +21,25 @@ import org.jetbrains.jet.lang.diagnostics.Diagnostic;
/** /**
* @author Evgeny Gerashchenko * @author Evgeny Gerashchenko
* @since 4/12/12 * @since 4/13/12
*/ */
public class DefaultDiagnosticRenderer implements DiagnosticRenderer<Diagnostic> { public class DispatchingDiagnosticRenderer implements DiagnosticRenderer<Diagnostic> {
public static final DefaultDiagnosticRenderer INSTANCE = new DefaultDiagnosticRenderer(); private final DiagnosticFactoryToRendererMap[] maps;
private final DiagnosticFactoryToRendererMap map = DefaultErrorMessages.MAP; public DispatchingDiagnosticRenderer(DiagnosticFactoryToRendererMap... maps) {
this.maps = maps;
}
@NotNull @NotNull
@Override @Override
public String render(@NotNull Diagnostic diagnostic) { public String render(@NotNull Diagnostic diagnostic) {
DiagnosticRenderer renderer = map.get(diagnostic.getFactory()); for (DiagnosticFactoryToRendererMap map : maps) {
if (renderer == null) { DiagnosticRenderer renderer = map.get(diagnostic.getFactory());
throw new IllegalArgumentException("Don't know how to render diagnostic of type " + diagnostic.getFactory().getName()); if (renderer != null) {
//noinspection unchecked
return renderer.render(diagnostic);
}
} }
//noinspection unchecked throw new IllegalArgumentException("Don't know how to render diagnostic of type " + diagnostic.getFactory().getName());
return renderer.render(diagnostic);
} }
} }
@@ -27,9 +27,9 @@ import org.jetbrains.jet.analyzer.AnalyzeExhaust;
import org.jetbrains.jet.compiler.JetCoreEnvironment; import org.jetbrains.jet.compiler.JetCoreEnvironment;
import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory; import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory;
import org.jetbrains.jet.lang.diagnostics.UnresolvedReferenceDiagnosticFactory; import org.jetbrains.jet.lang.diagnostics.UnresolvedReferenceDiagnosticFactory;
import org.jetbrains.jet.lang.diagnostics.rendering.DefaultDiagnosticRenderer;
import org.jetbrains.jet.lang.diagnostics.Diagnostic; import org.jetbrains.jet.lang.diagnostics.Diagnostic;
import org.jetbrains.jet.lang.diagnostics.Severity; import org.jetbrains.jet.lang.diagnostics.Severity;
import org.jetbrains.jet.lang.diagnostics.rendering.DefaultErrorMessages;
import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.BindingTrace;
@@ -153,7 +153,7 @@ public class JetTestUtils {
@Override @Override
public void report(@NotNull Diagnostic diagnostic) { public void report(@NotNull Diagnostic diagnostic) {
if (diagnostic.getSeverity() == Severity.ERROR) { if (diagnostic.getSeverity() == Severity.ERROR) {
throw new IllegalStateException(DefaultDiagnosticRenderer.INSTANCE.render(diagnostic)); throw new IllegalStateException(DefaultErrorMessages.RENDERER.render(diagnostic));
} }
} }
}; };
@@ -33,8 +33,8 @@ import com.intellij.psi.PsiReference;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.TestOnly; import org.jetbrains.annotations.TestOnly;
import org.jetbrains.jet.lang.diagnostics.rendering.DefaultDiagnosticRenderer;
import org.jetbrains.jet.lang.diagnostics.*; import org.jetbrains.jet.lang.diagnostics.*;
import org.jetbrains.jet.lang.diagnostics.rendering.DefaultErrorMessages;
import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetReferenceExpression; import org.jetbrains.jet.lang.psi.JetReferenceExpression;
import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContext;
@@ -238,7 +238,7 @@ public class JetPsiChecker implements Annotator {
@NotNull @NotNull
private static String getMessage(@NotNull Diagnostic diagnostic) { private static String getMessage(@NotNull Diagnostic diagnostic) {
String message = DefaultDiagnosticRenderer.INSTANCE.render(diagnostic); String message = DefaultErrorMessages.RENDERER.render(diagnostic);
if (ApplicationManager.getApplication().isInternal() || ApplicationManager.getApplication().isUnitTestMode()) { if (ApplicationManager.getApplication().isInternal() || ApplicationManager.getApplication().isUnitTestMode()) {
return "[" + diagnostic.getFactory().getName() + "] " + message; return "[" + diagnostic.getFactory().getName() + "] " + message;
} }