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())});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user