Introduced factory to renderer map in DefaultDiagnosticRenderer. Added first renderer there.
This commit is contained in:
@@ -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<Diagnostic> {
|
||||
public static final DefaultDiagnosticRenderer INSTANCE = new DefaultDiagnosticRenderer();
|
||||
|
||||
private final Map<AbstractDiagnosticFactory, DiagnosticRenderer<?>> factoryToRenderer = new HashMap<AbstractDiagnosticFactory, DiagnosticRenderer<?>>();
|
||||
|
||||
private DefaultDiagnosticRenderer() {
|
||||
factoryToRenderer.put(EXCEPTION_WHILE_ANALYZING, new DiagnosticWithParameters1Renderer<JetFile, Throwable>("{0}", new Renderer<Throwable>() {
|
||||
@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<E extends PsiElement, A> implements DiagnosticRenderer<DiagnosticWithParameters1<E, A>> {
|
||||
private final MessageFormat messageFormat;
|
||||
private final Renderer<? super A> rendererForA;
|
||||
|
||||
private DiagnosticWithParameters1Renderer(@NotNull String message, @NotNull Renderer<? super A> rendererForA) {
|
||||
this.messageFormat = new MessageFormat(message);
|
||||
this.rendererForA = rendererForA;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String render(@Nullable DiagnosticWithParameters1<E, A> diagnostic) {
|
||||
return diagnostic == null ? "null" : messageFormat.format(new Object[]{rendererForA.render(diagnostic.getA())});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,8 +23,8 @@ import org.jetbrains.annotations.Nullable;
|
||||
* @author Evgeny Gerashchenko
|
||||
* @since 4/12/12
|
||||
*/
|
||||
public interface DiagnosticRenderer extends Renderer<Diagnostic> {
|
||||
public interface DiagnosticRenderer<D extends Diagnostic> extends Renderer<D> {
|
||||
@NotNull
|
||||
@Override
|
||||
String render(@Nullable Diagnostic diagnostic);
|
||||
String render(@Nullable D diagnostic);
|
||||
}
|
||||
|
||||
+1
@@ -55,6 +55,7 @@ public class DiagnosticWithParameters1<E extends PsiElement, A> extends Abstract
|
||||
return getFactory().getTextRanges(this);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public A getA() {
|
||||
return a;
|
||||
}
|
||||
|
||||
+2
@@ -58,10 +58,12 @@ public class DiagnosticWithParameters2<E extends PsiElement, A, B> extends Abstr
|
||||
return getFactory().getTextRanges(this);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public A getA() {
|
||||
return a;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public B getB() {
|
||||
return b;
|
||||
}
|
||||
|
||||
+3
@@ -61,14 +61,17 @@ public class DiagnosticWithParameters3<E extends PsiElement, A, B, C> extends Ab
|
||||
return getFactory().getTextRanges(this);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public A getA() {
|
||||
return a;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public B getB() {
|
||||
return b;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public C getC() {
|
||||
return c;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user