From 370af95c8750e63f07f6c4baaaccce28e39d89d3 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Fri, 13 Apr 2012 19:00:53 +0400 Subject: [PATCH] Introduced DispatchingDiagnosticRenderer, which replaced DefaultDiagnosticRenderer. --- .../jet/compiler/CompileSession.java | 4 ++-- .../rendering/DefaultErrorMessages.java | 2 ++ ...ava => DispatchingDiagnosticRenderer.java} | 22 +++++++++++-------- .../tests/org/jetbrains/jet/JetTestUtils.java | 4 ++-- .../jet/plugin/highlighter/JetPsiChecker.java | 4 ++-- 5 files changed, 21 insertions(+), 15 deletions(-) rename compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/{DefaultDiagnosticRenderer.java => DispatchingDiagnosticRenderer.java} (56%) diff --git a/compiler/cli/src/org/jetbrains/jet/compiler/CompileSession.java b/compiler/cli/src/org/jetbrains/jet/compiler/CompileSession.java index 458efc9ed12..7bb24420e5a 100644 --- a/compiler/cli/src/org/jetbrains/jet/compiler/CompileSession.java +++ b/compiler/cli/src/org/jetbrains/jet/compiler/CompileSession.java @@ -36,7 +36,7 @@ import org.jetbrains.jet.lang.descriptors.ClassOrNamespaceDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; 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.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM; @@ -155,7 +155,7 @@ public class CompileSession { render = ((SyntaxErrorDiagnostic)diagnostic).message; } else { - render = DefaultDiagnosticRenderer.INSTANCE.render(diagnostic); + render = DefaultErrorMessages.RENDERER.render(diagnostic); } collector.report(diagnostic.getSeverity(), render, path, lineAndColumn.getLine(), lineAndColumn.getColumn()); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java index f0cae982a4c..f83c2a65983 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java @@ -17,6 +17,7 @@ package org.jetbrains.jet.lang.diagnostics.rendering; 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.JetSimpleNameExpression; 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 static final DiagnosticFactoryToRendererMap MAP = new DiagnosticFactoryToRendererMap(); + public static final DiagnosticRenderer RENDERER = new DispatchingDiagnosticRenderer(MAP); static { MAP.put(EXCEPTION_WHILE_ANALYZING, "{0}", new Renderer() { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultDiagnosticRenderer.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DispatchingDiagnosticRenderer.java similarity index 56% rename from compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultDiagnosticRenderer.java rename to compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DispatchingDiagnosticRenderer.java index 6453e0465e7..7a580b14556 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultDiagnosticRenderer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DispatchingDiagnosticRenderer.java @@ -21,21 +21,25 @@ import org.jetbrains.jet.lang.diagnostics.Diagnostic; /** * @author Evgeny Gerashchenko - * @since 4/12/12 + * @since 4/13/12 */ -public class DefaultDiagnosticRenderer implements DiagnosticRenderer { - public static final DefaultDiagnosticRenderer INSTANCE = new DefaultDiagnosticRenderer(); +public class DispatchingDiagnosticRenderer implements DiagnosticRenderer { + private final DiagnosticFactoryToRendererMap[] maps; - private final DiagnosticFactoryToRendererMap map = DefaultErrorMessages.MAP; + public DispatchingDiagnosticRenderer(DiagnosticFactoryToRendererMap... maps) { + this.maps = maps; + } @NotNull @Override public String render(@NotNull Diagnostic diagnostic) { - DiagnosticRenderer renderer = map.get(diagnostic.getFactory()); - if (renderer == null) { - throw new IllegalArgumentException("Don't know how to render diagnostic of type " + diagnostic.getFactory().getName()); + for (DiagnosticFactoryToRendererMap map : maps) { + DiagnosticRenderer renderer = map.get(diagnostic.getFactory()); + if (renderer != null) { + //noinspection unchecked + return renderer.render(diagnostic); + } } - //noinspection unchecked - return renderer.render(diagnostic); + throw new IllegalArgumentException("Don't know how to render diagnostic of type " + diagnostic.getFactory().getName()); } } diff --git a/compiler/tests/org/jetbrains/jet/JetTestUtils.java b/compiler/tests/org/jetbrains/jet/JetTestUtils.java index de37982408a..d206a7b1e97 100644 --- a/compiler/tests/org/jetbrains/jet/JetTestUtils.java +++ b/compiler/tests/org/jetbrains/jet/JetTestUtils.java @@ -27,9 +27,9 @@ import org.jetbrains.jet.analyzer.AnalyzeExhaust; import org.jetbrains.jet.compiler.JetCoreEnvironment; import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory; 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.Severity; +import org.jetbrains.jet.lang.diagnostics.rendering.DefaultErrorMessages; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingTrace; @@ -153,7 +153,7 @@ public class JetTestUtils { @Override public void report(@NotNull Diagnostic diagnostic) { if (diagnostic.getSeverity() == Severity.ERROR) { - throw new IllegalStateException(DefaultDiagnosticRenderer.INSTANCE.render(diagnostic)); + throw new IllegalStateException(DefaultErrorMessages.RENDERER.render(diagnostic)); } } }; diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/JetPsiChecker.java b/idea/src/org/jetbrains/jet/plugin/highlighter/JetPsiChecker.java index ed012e03db0..7ea6b579896 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/JetPsiChecker.java +++ b/idea/src/org/jetbrains/jet/plugin/highlighter/JetPsiChecker.java @@ -33,8 +33,8 @@ import com.intellij.psi.PsiReference; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; 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.rendering.DefaultErrorMessages; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetReferenceExpression; import org.jetbrains.jet.lang.resolve.BindingContext; @@ -238,7 +238,7 @@ public class JetPsiChecker implements Annotator { @NotNull 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()) { return "[" + diagnostic.getFactory().getName() + "] " + message; }