Added immutability flag in DiagnosticFactoryToRendererMap.

This commit is contained in:
Evgeny Gerashchenko
2012-04-16 17:29:02 +04:00
parent 6fb0f79de9
commit 8d1860a5f3
3 changed files with 24 additions and 6 deletions
@@ -388,6 +388,8 @@ public class DefaultErrorMessages {
"Separate it with a semicolon (;) if it is not intended to be an argument."); "Separate it with a semicolon (;) if it is not intended to be an argument.");
MAP.put(NOT_AN_ANNOTATION_CLASS, "{0} is not an annotation class", TO_STRING); MAP.put(NOT_AN_ANNOTATION_CLASS, "{0} is not an annotation class", TO_STRING);
MAP.setImmutable();
} }
private DefaultErrorMessages() { private DefaultErrorMessages() {
@@ -28,35 +28,50 @@ import java.util.Map;
* @author Evgeny Gerashchenko * @author Evgeny Gerashchenko
* @since 4/13/12 * @since 4/13/12
*/ */
public class DiagnosticFactoryToRendererMap { public final class DiagnosticFactoryToRendererMap {
private final Map<AbstractDiagnosticFactory, DiagnosticRenderer<?>> map = private final Map<AbstractDiagnosticFactory, DiagnosticRenderer<?>> map =
new HashMap<AbstractDiagnosticFactory, DiagnosticRenderer<?>>(); new HashMap<AbstractDiagnosticFactory, DiagnosticRenderer<?>>();
private boolean immutable = false;
public final <E extends PsiElement> void put(SimpleDiagnosticFactory<E> factory, String message) { private void checkMutability() {
if (immutable) {
throw new IllegalStateException("factory to renderer map is already immutable");
}
}
public <E extends PsiElement> void put(SimpleDiagnosticFactory<E> factory, String message) {
checkMutability();
map.put(factory, new SimpleDiagnosticRenderer(message)); map.put(factory, new SimpleDiagnosticRenderer(message));
} }
public final <E extends PsiElement, A> void put(DiagnosticFactory1<E, A> factory, String message, Renderer<? super A> rendererA) { public <E extends PsiElement, A> void put(DiagnosticFactory1<E, A> factory, String message, Renderer<? super A> rendererA) {
checkMutability();
map.put(factory, new DiagnosticWithParameters1Renderer<A>(message, rendererA)); map.put(factory, new DiagnosticWithParameters1Renderer<A>(message, rendererA));
} }
public final <E extends PsiElement, A, B> void put(DiagnosticFactory2<E, A, B> factory, public <E extends PsiElement, A, B> void put(DiagnosticFactory2<E, A, B> factory,
String message, String message,
Renderer<? super A> rendererA, Renderer<? super A> rendererA,
Renderer<? super B> rendererB) { Renderer<? super B> rendererB) {
checkMutability();
map.put(factory, new DiagnosticWithParameters2Renderer<A, B>(message, rendererA, rendererB)); map.put(factory, new DiagnosticWithParameters2Renderer<A, B>(message, rendererA, rendererB));
} }
public final <E extends PsiElement, A, B, C> void put(DiagnosticFactory3<E, A, B, C> factory, public <E extends PsiElement, A, B, C> void put(DiagnosticFactory3<E, A, B, C> factory,
String message, String message,
Renderer<? super A> rendererA, Renderer<? super A> rendererA,
Renderer<? super B> rendererB, Renderer<? super B> rendererB,
Renderer<? super C> rendererC) { Renderer<? super C> rendererC) {
checkMutability();
map.put(factory, new DiagnosticWithParameters3Renderer<A, B, C>(message, rendererA, rendererB, rendererC)); map.put(factory, new DiagnosticWithParameters3Renderer<A, B, C>(message, rendererA, rendererB, rendererC));
} }
@Nullable @Nullable
public final DiagnosticRenderer<?> get(@NotNull AbstractDiagnosticFactory factory) { public DiagnosticRenderer<?> get(@NotNull AbstractDiagnosticFactory factory) {
return map.get(factory); return map.get(factory);
} }
public void setImmutable() {
immutable = false;
}
} }
@@ -32,6 +32,7 @@ public class IdeErrorMessages {
static { static {
// TODO // TODO
MAP.setImmutable();
} }
private IdeErrorMessages() { private IdeErrorMessages() {