diff --git a/platform/lang-impl/src/com/intellij/ide/scratch/ScratchFileServiceImpl.java b/platform/lang-impl/src/com/intellij/ide/scratch/ScratchFileServiceImpl.java index 0a4422621002..17701c1f1e10 100644 --- a/platform/lang-impl/src/com/intellij/ide/scratch/ScratchFileServiceImpl.java +++ b/platform/lang-impl/src/com/intellij/ide/scratch/ScratchFileServiceImpl.java @@ -7,6 +7,7 @@ import com.intellij.lang.Language; import com.intellij.lang.LanguageUtil; import com.intellij.lang.PerFileMappings; import com.intellij.lang.PerFileMappingsBase; +import com.intellij.openapi.Disposable; import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.PathManager; @@ -26,6 +27,7 @@ import com.intellij.openapi.fileTypes.*; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; +import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.Iconable; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; @@ -61,7 +63,7 @@ import java.util.Set; import java.util.concurrent.ConcurrentMap; @State(name = "ScratchFileService", storages = @Storage(value = "scratches.xml", roamingType = RoamingType.DISABLED)) -public class ScratchFileServiceImpl extends ScratchFileService implements PersistentStateComponent{ +public class ScratchFileServiceImpl extends ScratchFileService implements PersistentStateComponent, Disposable { private static final RootType NULL_TYPE = new RootType("", null) {}; @@ -69,6 +71,7 @@ public class ScratchFileServiceImpl extends ScratchFileService implements Persis private final MyLanguages myScratchMapping = new MyLanguages(); protected ScratchFileServiceImpl(Application application) { + Disposer.register(this, myScratchMapping); myIndex = new LightDirectoryIndex<>(application, NULL_TYPE, index -> { LocalFileSystem fileSystem = LocalFileSystem.getInstance(); for (RootType r : RootType.getAllRootIds()) { @@ -155,6 +158,10 @@ public class ScratchFileServiceImpl extends ScratchFileService implements Persis myScratchMapping.loadState(state); } + @Override + public void dispose() { + } + private static class MyLanguages extends PerFileMappingsBase { @Override public List getAvailableValues() { diff --git a/platform/platform-api/src/com/intellij/lang/PerFileMappingsBase.java b/platform/platform-api/src/com/intellij/lang/PerFileMappingsBase.java index 855a8ea4644d..d9894e62954c 100644 --- a/platform/platform-api/src/com/intellij/lang/PerFileMappingsBase.java +++ b/platform/platform-api/src/com/intellij/lang/PerFileMappingsBase.java @@ -2,6 +2,7 @@ package com.intellij.lang; import com.intellij.injected.editor.VirtualFileWindow; +import com.intellij.openapi.Disposable; import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.command.CommandProcessor; @@ -40,7 +41,7 @@ import java.util.*; /** * @author gregsh */ -public abstract class PerFileMappingsBase implements PersistentStateComponent, PerFileMappings { +public abstract class PerFileMappingsBase implements PersistentStateComponent, PerFileMappings, Disposable { private final TreeMap myMappings = new TreeMap<>( (f1, f2) -> Comparing.compare(f1 == null ? null : f1.getUrl(), f2 == null ? null : f2.getUrl())); @@ -49,6 +50,10 @@ public abstract class PerFileMappingsBase implements PersistentStateComponent installDeleteUndo(); } + @Override + public void dispose() { + } + @Nullable protected FilePropertyPusher getFilePropertyPusher() { return null; @@ -281,8 +286,7 @@ public abstract class PerFileMappingsBase implements PersistentStateComponent private void installDeleteUndo() { Application app = ApplicationManager.getApplication(); if (app == null) return; - - app.getMessageBus().connect().subscribe(VirtualFileManager.VFS_CHANGES, new BulkFileListener() { + app.getMessageBus().connect(this).subscribe(VirtualFileManager.VFS_CHANGES, new BulkFileListener() { WeakReference lastAction;