From 8d1860a5f3e362c192ce6363ea421015052a7cff Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Mon, 16 Apr 2012 17:29:02 +0400 Subject: [PATCH] Added immutability flag in DiagnosticFactoryToRendererMap. --- .../rendering/DefaultErrorMessages.java | 2 ++ .../DiagnosticFactoryToRendererMap.java | 27 ++++++++++++++----- .../plugin/highlighter/IdeErrorMessages.java | 1 + 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java index f83c2a65983..2cda78e8617 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java @@ -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() { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DiagnosticFactoryToRendererMap.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DiagnosticFactoryToRendererMap.java index 3172e3f9144..96067f8fd53 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DiagnosticFactoryToRendererMap.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DiagnosticFactoryToRendererMap.java @@ -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> map = new HashMap>(); + private boolean immutable = false; - public final void put(SimpleDiagnosticFactory factory, String message) { + private void checkMutability() { + if (immutable) { + throw new IllegalStateException("factory to renderer map is already immutable"); + } + } + + public void put(SimpleDiagnosticFactory factory, String message) { + checkMutability(); map.put(factory, new SimpleDiagnosticRenderer(message)); } - public final void put(DiagnosticFactory1 factory, String message, Renderer rendererA) { + public void put(DiagnosticFactory1 factory, String message, Renderer rendererA) { + checkMutability(); map.put(factory, new DiagnosticWithParameters1Renderer(message, rendererA)); } - public final void put(DiagnosticFactory2 factory, + public void put(DiagnosticFactory2 factory, String message, Renderer rendererA, Renderer rendererB) { + checkMutability(); map.put(factory, new DiagnosticWithParameters2Renderer(message, rendererA, rendererB)); } - public final void put(DiagnosticFactory3 factory, + public void put(DiagnosticFactory3 factory, String message, Renderer rendererA, Renderer rendererB, Renderer rendererC) { + checkMutability(); map.put(factory, new DiagnosticWithParameters3Renderer(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; + } } diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/IdeErrorMessages.java b/idea/src/org/jetbrains/jet/plugin/highlighter/IdeErrorMessages.java index e7dafaeb274..9d58c574412 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/IdeErrorMessages.java +++ b/idea/src/org/jetbrains/jet/plugin/highlighter/IdeErrorMessages.java @@ -32,6 +32,7 @@ public class IdeErrorMessages { static { // TODO + MAP.setImmutable(); } private IdeErrorMessages() {