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;
|
package org.jetbrains.jet.compiler;
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiElement;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.diagnostics.Diagnostic;
|
import org.jetbrains.jet.lang.diagnostics.*;
|
||||||
import org.jetbrains.jet.lang.diagnostics.DiagnosticRenderer;
|
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
|
* @author Evgeny Gerashchenko
|
||||||
* @since 4/12/12
|
* @since 4/12/12
|
||||||
*/
|
*/
|
||||||
public class DefaultDiagnosticRenderer implements DiagnosticRenderer {
|
public class DefaultDiagnosticRenderer implements DiagnosticRenderer<Diagnostic> {
|
||||||
public static final DefaultDiagnosticRenderer INSTANCE = new DefaultDiagnosticRenderer();
|
public static final DefaultDiagnosticRenderer INSTANCE = new DefaultDiagnosticRenderer();
|
||||||
|
|
||||||
|
private final Map<AbstractDiagnosticFactory, DiagnosticRenderer<?>> factoryToRenderer = new HashMap<AbstractDiagnosticFactory, DiagnosticRenderer<?>>();
|
||||||
|
|
||||||
private DefaultDiagnosticRenderer() {
|
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
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public String render(@Nullable Diagnostic diagnostic) {
|
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
|
* @author Evgeny Gerashchenko
|
||||||
* @since 4/12/12
|
* @since 4/12/12
|
||||||
*/
|
*/
|
||||||
public interface DiagnosticRenderer extends Renderer<Diagnostic> {
|
public interface DiagnosticRenderer<D extends Diagnostic> extends Renderer<D> {
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@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);
|
return getFactory().getTextRanges(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
public A getA() {
|
public A getA() {
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|||||||
+2
@@ -58,10 +58,12 @@ public class DiagnosticWithParameters2<E extends PsiElement, A, B> extends Abstr
|
|||||||
return getFactory().getTextRanges(this);
|
return getFactory().getTextRanges(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
public A getA() {
|
public A getA() {
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
public B getB() {
|
public B getB() {
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
|||||||
+3
@@ -61,14 +61,17 @@ public class DiagnosticWithParameters3<E extends PsiElement, A, B, C> extends Ab
|
|||||||
return getFactory().getTextRanges(this);
|
return getFactory().getTextRanges(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
public A getA() {
|
public A getA() {
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
public B getB() {
|
public B getB() {
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
public C getC() {
|
public C getC() {
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user