From 46d929efa1d0e75bc38e18dc61bad42618003d29 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Thu, 12 Apr 2012 15:50:29 +0400 Subject: [PATCH] Introduced factory to renderer map in DefaultDiagnosticRenderer. Added first renderer there. --- .../compiler/DefaultDiagnosticRenderer.java | 48 +++++++++++++++++-- .../lang/diagnostics/DiagnosticRenderer.java | 4 +- .../DiagnosticWithParameters1.java | 1 + .../DiagnosticWithParameters2.java | 2 + .../DiagnosticWithParameters3.java | 3 ++ 5 files changed, 52 insertions(+), 6 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/jet/compiler/DefaultDiagnosticRenderer.java b/compiler/cli/src/org/jetbrains/jet/compiler/DefaultDiagnosticRenderer.java index 55d4b2f9d8e..c66171df830 100644 --- a/compiler/cli/src/org/jetbrains/jet/compiler/DefaultDiagnosticRenderer.java +++ b/compiler/cli/src/org/jetbrains/jet/compiler/DefaultDiagnosticRenderer.java @@ -16,24 +16,64 @@ package org.jetbrains.jet.compiler; +import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.lang.diagnostics.Diagnostic; -import org.jetbrains.jet.lang.diagnostics.DiagnosticRenderer; +import org.jetbrains.jet.lang.diagnostics.*; +import org.jetbrains.jet.lang.psi.JetFile; + +import java.text.MessageFormat; +import java.util.HashMap; +import java.util.Map; + +import static org.jetbrains.jet.lang.diagnostics.Errors.EXCEPTION_WHILE_ANALYZING; /** * @author Evgeny Gerashchenko * @since 4/12/12 */ -public class DefaultDiagnosticRenderer implements DiagnosticRenderer { +public class DefaultDiagnosticRenderer implements DiagnosticRenderer { public static final DefaultDiagnosticRenderer INSTANCE = new DefaultDiagnosticRenderer(); + private final Map> factoryToRenderer = new HashMap>(); + private DefaultDiagnosticRenderer() { + factoryToRenderer.put(EXCEPTION_WHILE_ANALYZING, new DiagnosticWithParameters1Renderer("{0}", new Renderer() { + @NotNull + @Override + public String render(@Nullable Throwable e) { + return e.getClass().getSimpleName() + ": " + e.getMessage(); + } + })); } @NotNull @Override public String render(@Nullable Diagnostic diagnostic) { - return diagnostic.getMessage(); + if (diagnostic == null) { + throw new IllegalArgumentException("Diagnostic passed to diagnostic renderer cannot be null"); + } + DiagnosticRenderer renderer = factoryToRenderer.get(diagnostic.getFactory()); + if (renderer == null) { + return diagnostic.getMessage(); // TODO throw IllegalArgumentException instead + } + //noinspection unchecked + return renderer.render(diagnostic); + } + + private class DiagnosticWithParameters1Renderer implements DiagnosticRenderer> { + private final MessageFormat messageFormat; + private final Renderer rendererForA; + + private DiagnosticWithParameters1Renderer(@NotNull String message, @NotNull Renderer rendererForA) { + this.messageFormat = new MessageFormat(message); + this.rendererForA = rendererForA; + } + + @NotNull + @Override + public String render(@Nullable DiagnosticWithParameters1 diagnostic) { + return diagnostic == null ? "null" : messageFormat.format(new Object[]{rendererForA.render(diagnostic.getA())}); + } } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticRenderer.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticRenderer.java index d820c6cdf11..8e0d505740e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticRenderer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticRenderer.java @@ -23,8 +23,8 @@ import org.jetbrains.annotations.Nullable; * @author Evgeny Gerashchenko * @since 4/12/12 */ -public interface DiagnosticRenderer extends Renderer { +public interface DiagnosticRenderer extends Renderer { @NotNull @Override - String render(@Nullable Diagnostic diagnostic); + String render(@Nullable D diagnostic); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticWithParameters1.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticWithParameters1.java index e02675d5c1a..147e8da5c0e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticWithParameters1.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticWithParameters1.java @@ -55,6 +55,7 @@ public class DiagnosticWithParameters1 extends Abstract return getFactory().getTextRanges(this); } + @NotNull public A getA() { return a; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticWithParameters2.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticWithParameters2.java index 031d5805a15..fa7f24140b2 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticWithParameters2.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticWithParameters2.java @@ -58,10 +58,12 @@ public class DiagnosticWithParameters2 extends Abstr return getFactory().getTextRanges(this); } + @NotNull public A getA() { return a; } + @NotNull public B getB() { return b; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticWithParameters3.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticWithParameters3.java index 82ee507aa85..ded5998fd7e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticWithParameters3.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticWithParameters3.java @@ -61,14 +61,17 @@ public class DiagnosticWithParameters3 extends Ab return getFactory().getTextRanges(this); } + @NotNull public A getA() { return a; } + @NotNull public B getB() { return b; } + @NotNull public C getC() { return c; }