From 2c0a67d52033b7c65dfe0705503521690a77643e Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Mon, 24 Apr 2017 20:43:21 +0300 Subject: [PATCH] EA-99913 - assert: ConsoleHistoryController.install --- .../console/ConsoleHistoryController.java | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/execution/console/ConsoleHistoryController.java b/platform/lang-impl/src/com/intellij/execution/console/ConsoleHistoryController.java index ccd9c48c7941..e8f33dc250a8 100644 --- a/platform/lang-impl/src/com/intellij/execution/console/ConsoleHistoryController.java +++ b/platform/lang-impl/src/com/intellij/execution/console/ConsoleHistoryController.java @@ -63,6 +63,7 @@ import com.intellij.util.io.SafeFileOutputStream; import com.intellij.xml.util.XmlStringUtil; import com.thoughtworks.xstream.io.HierarchicalStreamReader; import com.thoughtworks.xstream.io.xml.XppReader; +import gnu.trove.TObjectHashingStrategy; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.xmlpull.v1.XmlPullParserFactory; @@ -73,14 +74,13 @@ import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.io.*; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; /** * @author gregsh */ public class ConsoleHistoryController { - private static final Key CONTROLLER_KEY = Key.create("CONTROLLER_KEY"); - private static final Logger LOG = Logger.getInstance("com.intellij.execution.console.ConsoleHistoryController"); /** @noinspection MismatchedQueryAndUpdateOfCollection*/ @@ -90,12 +90,13 @@ public class ConsoleHistoryController { return ContainerUtil.createConcurrentWeakValueMap(); } - @Nullable @Override protected ConsoleHistoryModel create(String key) { return new ConsoleHistoryModel(null); } }; + private final static Map ourControllers = + ContainerUtil.createConcurrentWeakMap(ContainerUtil.identityStrategy()); private final LanguageConsoleView myConsole; private final AnAction myHistoryNext = new MyAction(true, getKeystrokesUpDown(true)); @@ -120,8 +121,9 @@ public class ConsoleHistoryController { myConsole = console; } - public static ConsoleHistoryController getController(LanguageConsoleView console) { - return console.getVirtualFile().getUserData(CONTROLLER_KEY); + //@Nullable + public static ConsoleHistoryController getController(@NotNull LanguageConsoleView console) { + return ourControllers.get(console); } public static void addToHistory(@NotNull LanguageConsoleView consoleView, @Nullable String command) { @@ -177,16 +179,15 @@ public class ConsoleHistoryController { ApplicationManager.getApplication().getMessageBus().connect(myConsole).subscribe(ProjectEx.ProjectSaved.TOPIC, listener); myConsole.getProject().getMessageBus().connect(myConsole).subscribe(AppTopics.FILE_DOCUMENT_SYNC, listener); - VirtualFile consoleFile = myConsole.getVirtualFile(); - LOG.assertTrue(consoleFile.getUserData(CONTROLLER_KEY) == null, - "History controller already installed for " + consoleFile.getName()); - consoleFile.putUserData(CONTROLLER_KEY, this); + ConsoleHistoryController original = ourControllers.put(myConsole, this); + LOG.assertTrue(original == null, + "History controller already installed for: " + myConsole.getTitle()); Disposer.register(myConsole, new Disposable() { @Override public void dispose() { - VirtualFile consoleFile = myConsole.getVirtualFile(); - if (consoleFile.getUserData(CONTROLLER_KEY) == ConsoleHistoryController.this) { - consoleFile.putUserData(CONTROLLER_KEY, null); + ConsoleHistoryController controller = getController(myConsole); + if (controller == ConsoleHistoryController.this) { + ourControllers.remove(myConsole); } saveHistory(); }