mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
VFS converted to extension points
This commit is contained in:
@@ -68,7 +68,7 @@ public abstract class DeprecatedVirtualFileSystem extends VirtualFileSystem {
|
||||
}
|
||||
}
|
||||
|
||||
protected void fireFileCreated(Object requestor, VirtualFile file) {
|
||||
protected void fireFileCreated(@Nullable Object requestor, VirtualFile file) {
|
||||
assertWriteAccessAllowed();
|
||||
|
||||
if (!myFileListeners.isEmpty()) {
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
*/
|
||||
package com.intellij.openapi.vfs;
|
||||
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.fileTypes.FileTypes;
|
||||
import com.intellij.openapi.vfs.newvfs.NewVirtualFileSystem;
|
||||
import com.intellij.util.StringBuilderSpinAllocator;
|
||||
@@ -32,7 +31,7 @@ public abstract class JarFileSystem extends NewVirtualFileSystem {
|
||||
@NonNls public static final String JAR_SEPARATOR = "!/";
|
||||
|
||||
public static JarFileSystem getInstance(){
|
||||
return ApplicationManager.getApplication().getComponent(JarFileSystem.class);
|
||||
return (JarFileSystem)VirtualFileManager.getInstance().getFileSystem(PROTOCOL);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
*/
|
||||
package com.intellij.openapi.vfs;
|
||||
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.vfs.newvfs.NewVirtualFileSystem;
|
||||
import com.intellij.util.Processor;
|
||||
import com.intellij.util.io.fs.IFile;
|
||||
@@ -33,7 +32,7 @@ public abstract class LocalFileSystem extends NewVirtualFileSystem {
|
||||
@NonNls public static final String PROTOCOL_PREFIX = PROTOCOL + "://";
|
||||
|
||||
private static class LocalFileSystemHolder {
|
||||
private static final LocalFileSystem ourInstance = ApplicationManager.getApplication().getComponent(LocalFileSystem.class);
|
||||
private static final LocalFileSystem ourInstance = (LocalFileSystem)VirtualFileManager.getInstance().getFileSystem(PROTOCOL);
|
||||
}
|
||||
|
||||
public static LocalFileSystem getInstance() {
|
||||
|
||||
@@ -44,14 +44,6 @@ public abstract class VirtualFileManager implements ModificationTracker{
|
||||
return ApplicationManager.getApplication().getComponent(VirtualFileManager.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the array of supported file systems.
|
||||
*
|
||||
* @return array of {@link VirtualFileSystem} objects
|
||||
*/
|
||||
@NotNull
|
||||
public abstract VirtualFileSystem[] getFileSystems();
|
||||
|
||||
/**
|
||||
* Gets VirtualFileSystem with the specified protocol.
|
||||
*
|
||||
|
||||
@@ -34,6 +34,7 @@ public abstract class VirtualFileSystem {
|
||||
|
||||
/**
|
||||
* Gets the protocol for this file system. Protocols should differ for all file systems.
|
||||
* Should be the same as corresponding {@link com.intellij.util.KeyedLazyInstanceEP#key}.
|
||||
*
|
||||
* @return String representing the protocol
|
||||
* @see VirtualFile#getUrl
|
||||
|
||||
@@ -15,11 +15,11 @@
|
||||
*/
|
||||
package com.intellij.openapi.vfs.ex.http;
|
||||
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.components.ApplicationComponent;
|
||||
import com.intellij.openapi.vfs.DeprecatedVirtualFileSystem;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.vfs.VirtualFileManager;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -27,7 +27,7 @@ public abstract class HttpFileSystem extends DeprecatedVirtualFileSystem impleme
|
||||
@NonNls public static final String PROTOCOL = "http";
|
||||
|
||||
public static HttpFileSystem getInstance() {
|
||||
return ApplicationManager.getApplication().getComponent(HttpFileSystem.class);
|
||||
return (HttpFileSystem)VirtualFileManager.getInstance().getFileSystem(PROTOCOL);
|
||||
}
|
||||
|
||||
public abstract boolean isFileDownloaded(@NotNull VirtualFile file);
|
||||
|
||||
@@ -15,11 +15,10 @@
|
||||
*/
|
||||
package com.intellij.openapi.vfs.ex.dummy;
|
||||
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.components.ApplicationComponent;
|
||||
import com.intellij.openapi.vfs.DeprecatedVirtualFileSystem;
|
||||
import com.intellij.openapi.vfs.VfsBundle;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileManager;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -29,21 +28,12 @@ import java.io.IOException;
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public class DummyFileSystem extends DeprecatedVirtualFileSystem implements ApplicationComponent {
|
||||
public class DummyFileSystem extends DeprecatedVirtualFileSystem {
|
||||
@NonNls public static final String PROTOCOL = "dummy";
|
||||
private VirtualFileDirectoryImpl myRoot;
|
||||
|
||||
public static DummyFileSystem getInstance() {
|
||||
return ApplicationManager.getApplication().getComponent(DummyFileSystem.class);
|
||||
}
|
||||
|
||||
public DummyFileSystem() {
|
||||
}
|
||||
|
||||
public void disposeComponent() {
|
||||
}
|
||||
|
||||
public void initComponent() {
|
||||
return (DummyFileSystem)VirtualFileManager.getInstance().getFileSystem(PROTOCOL);
|
||||
}
|
||||
|
||||
public VirtualFile createRoot(String name) {
|
||||
@@ -92,11 +82,6 @@ public class DummyFileSystem extends DeprecatedVirtualFileSystem implements Appl
|
||||
return findFileByPath(path);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public String getComponentName() {
|
||||
return "DummyFileSystem";
|
||||
}
|
||||
|
||||
public void deleteFile(Object requestor, @NotNull VirtualFile vFile) throws IOException {
|
||||
fireBeforeFileDeletion(requestor, vFile);
|
||||
final VirtualFileDirectoryImpl parent = (VirtualFileDirectoryImpl)vFile.getParent();
|
||||
|
||||
+36
-64
@@ -20,7 +20,7 @@ import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.components.ApplicationComponent;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.SystemInfo;
|
||||
import com.intellij.openapi.util.KeyedExtensionCollector;
|
||||
import com.intellij.openapi.vfs.*;
|
||||
import com.intellij.openapi.vfs.ex.VirtualFileManagerEx;
|
||||
import com.intellij.openapi.vfs.newvfs.ManagingFS;
|
||||
@@ -28,29 +28,31 @@ import com.intellij.openapi.vfs.newvfs.NewVirtualFileSystem;
|
||||
import com.intellij.openapi.vfs.newvfs.RefreshQueue;
|
||||
import com.intellij.util.EventDispatcher;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.HashMap;
|
||||
import com.intellij.util.messages.MessageBus;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class VirtualFileManagerImpl extends VirtualFileManagerEx implements ApplicationComponent {
|
||||
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.vfs.impl.VirtualFileManagerImpl");
|
||||
|
||||
private final ArrayList<VirtualFileSystem> myFileSystems = new ArrayList<VirtualFileSystem>();
|
||||
private final Map<String, VirtualFileSystem> myProtocolToSystemMap = new HashMap<String, VirtualFileSystem>();
|
||||
private final KeyedExtensionCollector<VirtualFileSystem, String> myCollector =
|
||||
new KeyedExtensionCollector<VirtualFileSystem, String>("com.intellij.virtualFileSystem") {
|
||||
@Override
|
||||
protected String keyToString(String key) {
|
||||
return key;
|
||||
}
|
||||
};
|
||||
|
||||
private final List<VirtualFileSystem> myPhysicalFileSystems = new ArrayList<VirtualFileSystem>();
|
||||
|
||||
private final EventDispatcher<VirtualFileListener> myVirtualFileListenerMulticaster = EventDispatcher.create(VirtualFileListener.class);
|
||||
private final List<VirtualFileManagerListener> myVirtualFileManagerListeners = ContainerUtil.createEmptyCOWList();
|
||||
private final EventDispatcher<ModificationAttemptListener> myModificationAttemptListenerMulticaster = EventDispatcher.create(ModificationAttemptListener.class);
|
||||
|
||||
@NonNls private static final String USER_HOME = "user.home";
|
||||
private int myRefreshCount = 0;
|
||||
private final ManagingFS myPersistence;
|
||||
|
||||
@@ -79,26 +81,25 @@ public class VirtualFileManagerImpl extends VirtualFileManagerEx implements Appl
|
||||
}
|
||||
|
||||
public void registerFileSystem(VirtualFileSystem fileSystem) {
|
||||
myFileSystems.add(fileSystem);
|
||||
myCollector.addExplicitExtension(fileSystem.getProtocol(), fileSystem);
|
||||
if (!(fileSystem instanceof NewVirtualFileSystem)) {
|
||||
fileSystem.addVirtualFileListener(myVirtualFileListenerMulticaster.getMulticaster());
|
||||
}
|
||||
myProtocolToSystemMap.put(fileSystem.getProtocol(), fileSystem);
|
||||
myPhysicalFileSystems.add(fileSystem);
|
||||
}
|
||||
|
||||
public void unregisterFileSystem(VirtualFileSystem fileSystem) {
|
||||
myFileSystems.remove(fileSystem);
|
||||
myCollector.removeExplicitExtension(fileSystem.getProtocol(), fileSystem);
|
||||
fileSystem.removeVirtualFileListener(myVirtualFileListenerMulticaster.getMulticaster());
|
||||
myProtocolToSystemMap.remove(fileSystem.getProtocol());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public VirtualFileSystem[] getFileSystems() {
|
||||
return myFileSystems.toArray(new VirtualFileSystem[myFileSystems.size()]);
|
||||
myPhysicalFileSystems.remove(fileSystem);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public VirtualFileSystem getFileSystem(String protocol) {
|
||||
return myProtocolToSystemMap.get(protocol);
|
||||
List<VirtualFileSystem> systems = myCollector.forKey(protocol);
|
||||
if (systems.isEmpty()) return null;
|
||||
LOG.assertTrue(systems.size() == 1);
|
||||
return systems.get(0);
|
||||
}
|
||||
|
||||
public void refresh(boolean asynchronous) {
|
||||
@@ -110,7 +111,7 @@ public class VirtualFileManagerImpl extends VirtualFileManagerEx implements Appl
|
||||
ApplicationManager.getApplication().assertIsDispatchThread();
|
||||
}
|
||||
|
||||
for (VirtualFileSystem fileSystem : myFileSystems) {
|
||||
for (VirtualFileSystem fileSystem : getPhysicalFileSystems()) {
|
||||
if (fileSystem instanceof NewVirtualFileSystem) {
|
||||
((NewVirtualFileSystem)fileSystem).refreshWithoutFileWatcher(asynchronous);
|
||||
}
|
||||
@@ -120,7 +121,7 @@ public class VirtualFileManagerImpl extends VirtualFileManagerEx implements Appl
|
||||
}
|
||||
}
|
||||
|
||||
public void refresh(boolean asynchronous, final Runnable postAction) {
|
||||
public void refresh(boolean asynchronous, @Nullable final Runnable postAction) {
|
||||
if (!asynchronous) {
|
||||
ApplicationManager.getApplication().assertIsDispatchThread();
|
||||
}
|
||||
@@ -134,28 +135,34 @@ public class VirtualFileManagerImpl extends VirtualFileManagerEx implements Appl
|
||||
// RefreshQueue.getInstance().refresh(asynchronous, true, last ? postAction : null, root);
|
||||
//}
|
||||
|
||||
for (VirtualFileSystem fileSystem : myFileSystems) {
|
||||
for (VirtualFileSystem fileSystem : getPhysicalFileSystems()) {
|
||||
if (!(fileSystem instanceof NewVirtualFileSystem)) {
|
||||
fileSystem.refresh(asynchronous);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private List<VirtualFileSystem> getPhysicalFileSystems() {
|
||||
return myPhysicalFileSystems;
|
||||
}
|
||||
|
||||
public VirtualFile findFileByUrl(@NotNull String url) {
|
||||
String protocol = extractProtocol(url);
|
||||
if (protocol == null) return null;
|
||||
VirtualFileSystem fileSystem = myProtocolToSystemMap.get(protocol);
|
||||
VirtualFileSystem fileSystem = getFileSystemForUrl(url);
|
||||
if (fileSystem == null) return null;
|
||||
return fileSystem.findFileByPath(extractPath(url));
|
||||
}
|
||||
|
||||
public VirtualFile refreshAndFindFileByUrl(@NotNull String url) {
|
||||
VirtualFileSystem fileSystem = getFileSystemForUrl(url);
|
||||
if (fileSystem == null) return null;
|
||||
return fileSystem.refreshAndFindFileByPath(extractPath(url));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private VirtualFileSystem getFileSystemForUrl(String url) {
|
||||
String protocol = extractProtocol(url);
|
||||
if (protocol == null) return null;
|
||||
VirtualFileSystem fileSystem = myProtocolToSystemMap.get(protocol);
|
||||
if (fileSystem == null) return null;
|
||||
String path = extractPath(url);
|
||||
return fileSystem.refreshAndFindFileByPath(path);
|
||||
return getFileSystem(protocol);
|
||||
}
|
||||
|
||||
public void addVirtualFileListener(@NotNull VirtualFileListener listener) {
|
||||
@@ -230,41 +237,6 @@ public class VirtualFileManagerImpl extends VirtualFileManagerEx implements Appl
|
||||
}
|
||||
}
|
||||
|
||||
private static String convertLocalPathToUrl(@NonNls @NotNull String path) {
|
||||
if (path.startsWith("~")) {
|
||||
path = System.getProperty(USER_HOME) + path.substring(1);
|
||||
}
|
||||
|
||||
if (SystemInfo.isWindows || SystemInfo.isOS2) {
|
||||
if (path.endsWith(":/")) { // instead of getting canonical path - see below
|
||||
path = Character.toUpperCase(path.charAt(0)) + path.substring(1);
|
||||
}
|
||||
}
|
||||
|
||||
if (path.length() == 0) {
|
||||
try {
|
||||
path = new File("").getCanonicalPath();
|
||||
}
|
||||
catch (IOException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
if (SystemInfo.isWindows) {
|
||||
if (path.charAt(0) == '/') path = path.substring(1); //hack over new File(path).toUrl().getFile()
|
||||
if (path.contains("~")) {
|
||||
try {
|
||||
path = new File(path.replace('/', File.separatorChar)).getCanonicalPath().replace(File.separatorChar, '/');
|
||||
}
|
||||
catch (IOException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return LocalFileSystem.PROTOCOL_PREFIX + path.replace(File.separatorChar, '/');
|
||||
}
|
||||
|
||||
private static class LoggingListener implements VirtualFileListener {
|
||||
public void propertyChanged(VirtualFilePropertyEvent event) {
|
||||
LOG.debug("propertyChanged: file = " + event.getFile().getUrl() + ", propertyName = " + event.getPropertyName() + ", oldValue = " +
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
package com.intellij.openapi.vfs.impl.http;
|
||||
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.vfs.VirtualFileManager;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -30,7 +30,7 @@ public class HttpsFileSystem extends HttpFileSystemBase {
|
||||
}
|
||||
|
||||
public static HttpsFileSystem getHttpsInstance() {
|
||||
return ApplicationManager.getApplication().getComponent(HttpsFileSystem.class);
|
||||
return (HttpsFileSystem)VirtualFileManager.getInstance().getFileSystem(HTTPS_PROTOCOL);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -25,6 +25,9 @@
|
||||
<extensionPoint name="fileTypeFactory"
|
||||
interface="com.intellij.openapi.fileTypes.FileTypeFactory"/>
|
||||
|
||||
<extensionPoint name="virtualFileSystem"
|
||||
beanClass="com.intellij.util.KeyedLazyInstanceEP"/>
|
||||
|
||||
<extensionPoint name="keymapExtension"
|
||||
interface="com.intellij.openapi.keymap.KeymapExtension"/>
|
||||
|
||||
|
||||
@@ -212,4 +212,8 @@
|
||||
<statistics.usagesCollector implementation="com.intellij.openapi.vcs.statistics.VcsUsagesCollector"/>
|
||||
|
||||
<applicationConfigurable instance="com.intellij.internal.statistic.configurable.StatisticsConfigurable"/>
|
||||
|
||||
<virtualFileSystem key="dummy" implementationClass="com.intellij.openapi.vfs.ex.dummy.DummyFileSystem"/>
|
||||
<virtualFileSystem key="http" implementationClass="com.intellij.openapi.vfs.impl.http.HttpFileSystemImpl"/>
|
||||
<virtualFileSystem key="https" implementationClass="com.intellij.openapi.vfs.impl.http.HttpsFileSystem"/>
|
||||
</extensions>
|
||||
|
||||
@@ -38,20 +38,9 @@
|
||||
<interface-class>com.intellij.openapi.vfs.JarFileSystem</interface-class>
|
||||
<implementation-class>com.intellij.openapi.vfs.impl.jar.JarFileSystemImpl</implementation-class>
|
||||
</component>
|
||||
<component>
|
||||
<implementation-class>com.intellij.openapi.vfs.ex.dummy.DummyFileSystem</implementation-class>
|
||||
</component>
|
||||
<component>
|
||||
<implementation-class>com.intellij.openapi.vfs.ex.temp.TempFileSystem</implementation-class>
|
||||
</component>
|
||||
<component>
|
||||
<interface-class>com.intellij.openapi.vfs.ex.http.HttpFileSystem</interface-class>
|
||||
<implementation-class>com.intellij.openapi.vfs.impl.http.HttpFileSystemImpl</implementation-class>
|
||||
</component>
|
||||
<component>
|
||||
<implementation-class>com.intellij.openapi.vfs.impl.http.HttpsFileSystem</implementation-class>
|
||||
</component>
|
||||
|
||||
|
||||
<component>
|
||||
<interface-class>com.intellij.openapi.fileEditor.FileDocumentManager</interface-class>
|
||||
|
||||
@@ -28,12 +28,6 @@ public class MockVirtualFileManager extends VirtualFileManagerEx {
|
||||
super();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public VirtualFileSystem[] getFileSystems() {
|
||||
return new VirtualFileSystem[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
public VirtualFileSystem getFileSystem(String protocol) {
|
||||
return null;
|
||||
|
||||
+3
-9
@@ -15,9 +15,8 @@
|
||||
*/
|
||||
package org.jetbrains.idea.maven.vfs;
|
||||
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.components.ApplicationComponent;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileManager;
|
||||
import com.intellij.openapi.vfs.ex.dummy.DummyFileSystem;
|
||||
import gnu.trove.THashMap;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
@@ -27,7 +26,7 @@ import org.jetbrains.idea.maven.utils.MavenUtil;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class MavenPropertiesVirtualFileSystem extends DummyFileSystem implements ApplicationComponent {
|
||||
public class MavenPropertiesVirtualFileSystem extends DummyFileSystem {
|
||||
@NonNls public static final String PROTOCOL = "maven-properties";
|
||||
|
||||
@NonNls public static final String SYSTEM_PROPERTIES_FILE = "System.properties";
|
||||
@@ -38,12 +37,7 @@ public class MavenPropertiesVirtualFileSystem extends DummyFileSystem implements
|
||||
private final Map<String, VirtualFile> myFiles = new THashMap<String, VirtualFile>();
|
||||
|
||||
public static MavenPropertiesVirtualFileSystem getInstance() {
|
||||
return ApplicationManager.getApplication().getComponent(MavenPropertiesVirtualFileSystem.class);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public String getComponentName() {
|
||||
return MavenPropertiesVirtualFileSystem.class.getName();
|
||||
return (MavenPropertiesVirtualFileSystem)VirtualFileManager.getInstance().getFileSystem(PROTOCOL);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -102,15 +102,13 @@
|
||||
<fileTemplateGroup implementation="org.jetbrains.idea.maven.utils.MavenFileTemplateGroupFactory"/>
|
||||
|
||||
<annotator language="XML" implementationClass="org.jetbrains.idea.maven.dom.annotator.MavenDomGutterAnnotator"/>
|
||||
<virtualFileSystem key="maven-properties" implementationClass="org.jetbrains.idea.maven.vfs.MavenPropertiesVirtualFileSystem"/>
|
||||
</extensions>
|
||||
|
||||
<application-components>
|
||||
<component>
|
||||
<implementation-class>org.jetbrains.idea.maven.utils.MavenEnvironmentRegistrar</implementation-class>
|
||||
</component>
|
||||
<component>
|
||||
<implementation-class>org.jetbrains.idea.maven.vfs.MavenPropertiesVirtualFileSystem</implementation-class>
|
||||
</component>
|
||||
</application-components>
|
||||
|
||||
<project-components>
|
||||
|
||||
Reference in New Issue
Block a user