move filetypes topic to FileTypeManager; move its listener to PsiVFSListener

This commit is contained in:
Dmitry Jemerov
2011-09-09 12:22:15 +02:00
parent 70fc87ed44
commit 5eca0a1d5a
12 changed files with 36 additions and 33 deletions
@@ -16,7 +16,6 @@
package com.intellij.ide.todo;
import com.intellij.AppTopics;
import com.intellij.ide.IdeBundle;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationManager;
@@ -26,6 +25,7 @@ import com.intellij.openapi.components.State;
import com.intellij.openapi.components.Storage;
import com.intellij.openapi.fileTypes.FileTypeEvent;
import com.intellij.openapi.fileTypes.FileTypeListener;
import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.project.DumbService;
@@ -102,7 +102,7 @@ public class TodoView implements PersistentStateComponent<Element>, Disposable {
TodoConfiguration.getInstance().addPropertyChangeListener(myPropertyChangeListener,this);
MessageBusConnection connection = myProject.getMessageBus().connect(this);
connection.subscribe(AppTopics.FILE_TYPES, new MyFileTypeListener());
connection.subscribe(FileTypeManager.TOPIC, new MyFileTypeListener());
}
public void loadState(Element element) {
@@ -16,7 +16,6 @@
package com.intellij.openapi.roots.impl;
import com.intellij.AppTopics;
import com.intellij.ProjectTopics;
import com.intellij.openapi.components.ProjectComponent;
import com.intellij.openapi.diagnostic.Logger;
@@ -156,7 +155,7 @@ public class DirectoryIndexImpl extends DirectoryIndex implements ProjectCompone
}
private void subscribeToFileChanges() {
myConnection.subscribe(AppTopics.FILE_TYPES, new FileTypeListener() {
myConnection.subscribe(FileTypeManager.TOPIC, new FileTypeListener() {
public void beforeFileTypesChanged(FileTypeEvent event) {
}
@@ -16,7 +16,6 @@
package com.intellij.openapi.roots.impl;
import com.intellij.AppTopics;
import com.intellij.ProjectTopics;
import com.intellij.ide.caches.CacheUpdater;
import com.intellij.openapi.Disposable;
@@ -163,7 +162,7 @@ public class ProjectRootManagerImpl extends ProjectRootManagerEx implements Proj
StartupManager startupManager) {
myProject = (ProjectEx)project;
myConnection = project.getMessageBus().connect(project);
myConnection.subscribe(AppTopics.FILE_TYPES, new FileTypeListener() {
myConnection.subscribe(FileTypeManager.TOPIC, new FileTypeListener() {
public void beforeFileTypesChanged(FileTypeEvent event) {
beforeRootsChange(true);
}
@@ -204,18 +204,6 @@ public class FileManagerImpl implements FileManager {
myDisposed = false;
myInitialized = true;
myConnection.subscribe(AppTopics.FILE_TYPES, new FileTypeListener() {
public void beforeFileTypesChanged(FileTypeEvent event) {}
public void fileTypesChanged(FileTypeEvent e) {
handleFileTypesChange(new FileTypesChanged() {
protected void updateMaps() {
removeInvalidFilesAndDirs(true);
}
});
}
});
myConnection.subscribe(AppTopics.FILE_DOCUMENT_SYNC, new MyFileDocumentManagerAdapter());
}
@@ -223,6 +211,14 @@ public class FileManagerImpl implements FileManager {
return myInitialized;
}
void processFileTypesChanged() {
handleFileTypesChange(new FileTypesChanged() {
protected void updateMaps() {
removeInvalidFilesAndDirs(true);
}
});
}
private abstract class FileTypesChanged implements Runnable {
protected abstract void updateMaps();
@@ -21,6 +21,8 @@ import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.FileTypeEvent;
import com.intellij.openapi.fileTypes.FileTypeListener;
import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.roots.*;
@@ -63,6 +65,13 @@ public class PsiVFSListener extends VirtualFileAdapter {
public void run() {
myConnection.subscribe(VirtualFileManager.VFS_CHANGES, new BulkVirtualFileListenerAdapter(PsiVFSListener.this));
myConnection.subscribe(ProjectTopics.PROJECT_ROOTS, new MyModuleRootListener());
myConnection.subscribe(FileTypeManager.TOPIC, new FileTypeListener() {
public void beforeFileTypesChanged(FileTypeEvent event) {}
public void fileTypesChanged(FileTypeEvent e) {
myFileManager.processFileTypesChanged();
}
});
}
});
}
@@ -165,7 +165,7 @@ public class FileBasedIndex implements ApplicationComponent {
}
});
connection.subscribe(AppTopics.FILE_TYPES, new FileTypeListener() {
connection.subscribe(FileTypeManager.TOPIC, new FileTypeListener() {
private Map<FileType, Set<String>> myTypeToExtensionMap;
public void beforeFileTypesChanged(final FileTypeEvent event) {
cleanupProcessedFlag();
@@ -20,10 +20,8 @@
package com.intellij;
import com.intellij.openapi.fileEditor.FileDocumentManagerListener;
import com.intellij.openapi.fileTypes.FileTypeListener;
import com.intellij.util.messages.Topic;
public class AppTopics {
public static final Topic<FileTypeListener> FILE_TYPES = new Topic<FileTypeListener>("File types change", FileTypeListener.class);
public static final Topic<FileDocumentManagerListener> FILE_DOCUMENT_SYNC = new Topic<FileDocumentManagerListener>("Document load, save and reload events", FileDocumentManagerListener.class);
}
@@ -19,6 +19,7 @@ import com.intellij.openapi.application.ApplicationComponentLocator;
import com.intellij.openapi.application.CachedSingletonsRegistry;
import com.intellij.openapi.util.Getter;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.messages.Topic;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -41,6 +42,9 @@ public abstract class FileTypeManager extends FileTypeRegistry {
}
private static FileTypeManager ourInstance = CachedSingletonsRegistry.markCachedField(FileTypeManager.class);
public static final Topic<FileTypeListener> TOPIC = new Topic<FileTypeListener>("File types change", FileTypeListener.class);
/**
* Returns the singleton instance of the FileTypeManager component.
*
@@ -117,7 +121,7 @@ public abstract class FileTypeManager extends FileTypeRegistry {
* registered file types.
*
* @param listener The listener instance.
* @deprecated Subscribe to #FILE_TYPES on any message bus level.
* @deprecated Subscribe to #TOPIC on any message bus level.
*/
public abstract void addFileTypeListener(@NotNull FileTypeListener listener);
@@ -127,7 +131,7 @@ public abstract class FileTypeManager extends FileTypeRegistry {
* registered file types.
*
* @param listener The listener instance.
* @deprecated Subscribe to #FILE_TYPES on any message bus level.
* @deprecated Subscribe to #TOPIC on any message bus level.
*/
public abstract void removeFileTypeListener(@NotNull FileTypeListener listener);
@@ -15,7 +15,6 @@
*/
package com.intellij.openapi.fileEditor.impl;
import com.intellij.AppTopics;
import com.intellij.ProjectTopics;
import com.intellij.ide.IdeBundle;
import com.intellij.ide.plugins.PluginManager;
@@ -41,6 +40,7 @@ import com.intellij.openapi.fileEditor.impl.text.TextEditorImpl;
import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider;
import com.intellij.openapi.fileTypes.FileTypeEvent;
import com.intellij.openapi.fileTypes.FileTypeListener;
import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.project.DumbAwareRunnable;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project;
@@ -1201,7 +1201,7 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec
final MyFileStatusListener myFileStatusListener = new MyFileStatusListener();
fileStatusManager.addFileStatusListener(myFileStatusListener, myProject);
}
connection.subscribe(AppTopics.FILE_TYPES, new MyFileTypeListener());
connection.subscribe(FileTypeManager.TOPIC, new MyFileTypeListener());
connection.subscribe(ProjectTopics.PROJECT_ROOTS, new MyRootsListener());
/**
@@ -15,7 +15,6 @@
*/
package com.intellij.openapi.fileEditor.impl.text;
import com.intellij.AppTopics;
import com.intellij.ide.ui.customization.CustomActionsSchema;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.application.ApplicationManager;
@@ -36,6 +35,7 @@ import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl;
import com.intellij.openapi.fileTypes.FileTypeEvent;
import com.intellij.openapi.fileTypes.FileTypeListener;
import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileAdapter;
@@ -107,7 +107,7 @@ class TextEditorComponent extends JPanel implements DataProvider{
myEditorPropertyChangeListener = new MyEditorPropertyChangeListener();
myConnection = project.getMessageBus().connect();
myConnection.subscribe(AppTopics.FILE_TYPES, new MyFileTypeListener());
myConnection.subscribe(FileTypeManager.TOPIC, new MyFileTypeListener());
myVirtualFileListener = new MyVirtualFileListener();
myFile.getFileSystem().addVirtualFileListener(myVirtualFileListener);
@@ -15,7 +15,6 @@
*/
package com.intellij.openapi.fileTypes.impl;
import com.intellij.AppTopics;
import com.intellij.ide.highlighter.custom.SyntaxTable;
import com.intellij.ide.highlighter.custom.impl.ReadFileType;
import com.intellij.ide.plugins.PluginManager;
@@ -408,7 +407,7 @@ public class FileTypeManagerImpl extends FileTypeManagerEx implements NamedJDOME
public void fireBeforeFileTypesChanged() {
FileTypeEvent event = new FileTypeEvent(this);
myMessageBus.syncPublisher(AppTopics.FILE_TYPES).beforeFileTypesChanged(event);
myMessageBus.syncPublisher(TOPIC).beforeFileTypesChanged(event);
}
public SchemesManager<FileType, AbstractFileType> getSchemesManager() {
@@ -416,14 +415,14 @@ public class FileTypeManagerImpl extends FileTypeManagerEx implements NamedJDOME
}
public void fireFileTypesChanged() {
myMessageBus.syncPublisher(AppTopics.FILE_TYPES).fileTypesChanged(new FileTypeEvent(this));
myMessageBus.syncPublisher(TOPIC).fileTypesChanged(new FileTypeEvent(this));
}
private final Map<FileTypeListener, MessageBusConnection> myAdapters = new HashMap<FileTypeListener, MessageBusConnection>();
public void addFileTypeListener(@NotNull FileTypeListener listener) {
final MessageBusConnection connection = myMessageBus.connect();
connection.subscribe(AppTopics.FILE_TYPES, listener);
connection.subscribe(TOPIC, listener);
myAdapters.put(listener, connection);
}
@@ -16,7 +16,6 @@
package com.maddyhome.idea.copyright.util;
import com.intellij.AppTopics;
import com.intellij.lang.Commenter;
import com.intellij.lang.LanguageCommenters;
import com.intellij.openapi.components.ServiceManager;
@@ -294,7 +293,7 @@ public class FileTypeUtil
{
createMappings();
loadFileTypes();
bus.connect().subscribe(AppTopics.FILE_TYPES, new FileTypeListener() {
bus.connect().subscribe(FileTypeManager.TOPIC, new FileTypeListener() {
@Override
public void beforeFileTypesChanged(FileTypeEvent event) {
}