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.");
MAP.put(NOT_AN_ANNOTATION_CLASS, "{0} is not an annotation class", TO_STRING);
MAP.setImmutable();
}
private DefaultErrorMessages() {
@@ -28,35 +28,50 @@ import java.util.Map;
* @author Evgeny Gerashchenko
* @since 4/13/12
*/
public class DiagnosticFactoryToRendererMap {
public final class DiagnosticFactoryToRendererMap {
private final Map<AbstractDiagnosticFactory, DiagnosticRenderer<?>> map =
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));
}
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));
}
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,
Renderer<? super A> rendererA,
Renderer<? super B> rendererB) {
checkMutability();
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,
Renderer<? super A> rendererA,
Renderer<? super B> rendererB,
Renderer<? super C> rendererC) {
checkMutability();
map.put(factory, new DiagnosticWithParameters3Renderer<A, B, C>(message, rendererA, rendererB, rendererC));
}
@Nullable
public final DiagnosticRenderer<?> get(@NotNull AbstractDiagnosticFactory factory) {
public DiagnosticRenderer<?> get(@NotNull AbstractDiagnosticFactory factory) {
return map.get(factory);
}
public void setImmutable() {
immutable = false;
}
}
@@ -32,6 +32,7 @@ public class IdeErrorMessages {
static {
// TODO
MAP.setImmutable();
}
private IdeErrorMessages() {