Do not expose FileObjects from VCS filesystem. Use the FileObjects from MasterFS where possible.
This is a fix of issue #51955.
1.1 --- a/vcscore/src/org/netbeans/modules/vcscore/versioning/impl/FileNode.java Mon Dec 06 12:58:25 2004 +0000
1.2 +++ b/vcscore/src/org/netbeans/modules/vcscore/versioning/impl/FileNode.java Tue Dec 07 18:53:06 2004 +0000
1.3 @@ -17,6 +17,7 @@
1.4 import org.openide.util.actions.SystemAction;
1.5 import org.openide.util.RequestProcessor;
1.6
1.7 +import org.netbeans.modules.vcscore.VcsAttributes;
1.8 import org.netbeans.modules.vcscore.versioning.*;
1.9
1.10 import javax.swing.*;
1.11 @@ -78,12 +79,8 @@
1.12
1.13 private RevisionList getRevisionList(boolean refresh) {
1.14 VersioningFileSystem vfs;
1.15 - try {
1.16 - vfs = VersioningFileSystem.findFor(getFile().getFileSystem());
1.17 - return vfs.getVersions().getRevisions(getFile().getPath(), refresh);
1.18 - } catch (FileStateInvalidException exc) {
1.19 - return null;
1.20 - }
1.21 + vfs = VersioningFileSystem.findFor((FileSystem) getFile().getAttribute(VcsAttributes.VCS_NATIVE_FS));
1.22 + return vfs.getVersions().getRevisions((String) getFile().getAttribute(VcsAttributes.VCS_NATIVE_PACKAGE_NAME_EXT), refresh);
1.23 }
1.24
1.25 private final Object childrenRefreshingLock = new Object();
2.1 --- a/vcscore/src/org/netbeans/modules/vcscore/versioning/impl/FileSystemNode.java Mon Dec 06 12:58:25 2004 +0000
2.2 +++ b/vcscore/src/org/netbeans/modules/vcscore/versioning/impl/FileSystemNode.java Tue Dec 07 18:53:06 2004 +0000
2.3 @@ -53,18 +53,33 @@
2.4 * @param root folder to work on
2.5 */
2.6 public FileSystemNode(FileObject root) {
2.7 + super(getRootChildren(root));
2.8 + this.root = root;
2.9 + init();
2.10 + }
2.11 +
2.12 + private static final Children getRootChildren(FileObject root) {
2.13 + FileObject masterRoot = FileUtil.toFileObject(FileUtil.toFile(root));
2.14 + if (masterRoot != null) root = masterRoot;
2.15 // TODO I'm hiding here a bug in FS, it wrongly works over deleted roots and shows random files!
2.16 // visible after deserialization of old setting that used already deleted folders
2.17 - super(FileUtil.toFile(root).exists() ? new FolderChildren(root) : Children.LEAF);
2.18 - this.root = root;
2.19 - init();
2.20 + if (FileUtil.toFile(root).exists()) {
2.21 + return new FolderChildren(root);
2.22 + } else {
2.23 + return Children.LEAF;
2.24 + }
2.25 }
2.26
2.27 public Cookie getCookie(Class type) {
2.28 // mimics DataNode because some actions heavily depends on DataObject cookie existence
2.29 if (type.isAssignableFrom(DataObject.class) || type.isAssignableFrom(DataFolder.class)) {
2.30 try {
2.31 - return DataObject.find(root);
2.32 + FileObject masterRoot = FileUtil.toFileObject(FileUtil.toFile(root));
2.33 + if (masterRoot != null) {
2.34 + return DataObject.find(masterRoot);
2.35 + } else {
2.36 + return DataObject.find(root);
2.37 + }
2.38 } catch (DataObjectNotFoundException e) {
2.39 // ignore, call super later on
2.40 }
2.41 @@ -262,7 +277,7 @@
2.42 }
2.43 if (org.openide.filesystems.FileSystem.PROP_ROOT.equals(ev.getPropertyName())) {
2.44 this.root = fileSystem().getRoot();
2.45 - setChildren(new FolderChildren(root));
2.46 + setChildren(getRootChildren(root));
2.47 }
2.48 }
2.49
3.1 --- a/vcscore/src/org/netbeans/modules/vcscore/versioning/impl/FolderChildren.java Mon Dec 06 12:58:25 2004 +0000
3.2 +++ b/vcscore/src/org/netbeans/modules/vcscore/versioning/impl/FolderChildren.java Tue Dec 07 18:53:06 2004 +0000
3.3 @@ -23,6 +23,7 @@
3.4 import java.io.File;
3.5
3.6 import org.netbeans.api.queries.*;
3.7 +import org.netbeans.modules.vcscore.VcsAttributes;
3.8
3.9 import org.netbeans.modules.vcscore.versioning.VersioningFileSystem;
3.10
3.11 @@ -156,13 +157,10 @@
3.12
3.13 VersioningFileSystem versioningFS;
3.14 boolean visibleByFS = true;
3.15 - try {
3.16 - versioningFS = VersioningFileSystem.findFor(file.getFileSystem());
3.17 - if (versioningFS != null) {
3.18 - File iofile = FileUtil.toFile(file);
3.19 - visibleByFS = versioningFS.getFileFilter().accept(iofile.getParentFile(), iofile.getName());
3.20 - }
3.21 - } catch (FileStateInvalidException e) {
3.22 + versioningFS = VersioningFileSystem.findFor((FileSystem) file.getAttribute(VcsAttributes.VCS_NATIVE_FS));
3.23 + if (versioningFS != null) {
3.24 + File iofile = FileUtil.toFile(file);
3.25 + visibleByFS = versioningFS.getFileFilter().accept(iofile.getParentFile(), iofile.getName());
3.26 }
3.27
3.28 // merge with visibility query results (hide .bak etc.)
4.1 --- a/vcscore/src/org/netbeans/modules/vcscore/versioning/impl/FolderNode.java Mon Dec 06 12:58:25 2004 +0000
4.2 +++ b/vcscore/src/org/netbeans/modules/vcscore/versioning/impl/FolderNode.java Tue Dec 07 18:53:06 2004 +0000
4.3 @@ -38,6 +38,7 @@
4.4 import java.util.Set;
4.5 import java.util.Collections;
4.6
4.7 +import org.netbeans.modules.vcscore.VcsAttributes;
4.8 import org.netbeans.modules.vcscore.caching.FileStatusProvider;
4.9 import org.netbeans.modules.vcscore.versioning.VersioningFileSystem;
4.10
4.11 @@ -135,15 +136,9 @@
4.12 }
4.13
4.14 private void init(FileObject file) {
4.15 - try {
4.16 - FileSystem fs = file.getFileSystem();
4.17 - vcsFileStatusListener = new VCSFileStatusListener();
4.18 - fs.addFileStatusListener((FileStatusListener) WeakListeners.create(FileStatusListener.class, vcsFileStatusListener, fs));
4.19 - } catch (FileStateInvalidException exc) {
4.20 - ErrorManager err = ErrorManager.getDefault();
4.21 - err.notify(ErrorManager.INFORMATIONAL, exc);
4.22 - return;
4.23 - }
4.24 + FileSystem fs = (FileSystem) file.getAttribute(VcsAttributes.VCS_NATIVE_FS);
4.25 + vcsFileStatusListener = new VCSFileStatusListener();
4.26 + fs.addFileStatusListener((FileStatusListener) WeakListeners.create(FileStatusListener.class, vcsFileStatusListener, fs));
4.27 }
4.28
4.29 public String getName() {
4.30 @@ -318,12 +313,8 @@
4.31
4.32 private FileStatusProvider getFileStatusProvider() {
4.33 VersioningFileSystem vfs;
4.34 - try {
4.35 - vfs = VersioningFileSystem.findFor(file.getFileSystem());
4.36 - return vfs.getFileStatusProvider();
4.37 - } catch (FileStateInvalidException exc) {
4.38 - return null;
4.39 - }
4.40 + vfs = VersioningFileSystem.findFor((FileSystem) file.getAttribute(VcsAttributes.VCS_NATIVE_FS));
4.41 + return vfs.getFileStatusProvider();
4.42 }
4.43
4.44 /**
4.45 @@ -335,7 +326,7 @@
4.46 if (status == null) {
4.47 FileStatusProvider statusProvider = getFileStatusProvider();
4.48 if (statusProvider == null) return null;
4.49 - status = statusProvider.getFileStatus(file.getPath());
4.50 + status = statusProvider.getFileStatus((String) file.getAttribute(VcsAttributes.VCS_NATIVE_PACKAGE_NAME_EXT));
4.51 }
4.52 return status;
4.53 }
4.54 @@ -349,7 +340,7 @@
4.55 if (locker == null) {
4.56 FileStatusProvider statusProvider = getFileStatusProvider();
4.57 if (statusProvider == null) return null;
4.58 - locker = statusProvider.getFileLocker(file.getPath());
4.59 + locker = statusProvider.getFileLocker((String) file.getAttribute(VcsAttributes.VCS_NATIVE_PACKAGE_NAME_EXT));
4.60 }
4.61 return locker;
4.62 }
4.63 @@ -363,7 +354,7 @@
4.64 if (revision == null) {
4.65 FileStatusProvider statusProvider = getFileStatusProvider();
4.66 if (statusProvider == null) return null;
4.67 - revision = statusProvider.getFileRevision(file.getPath());
4.68 + revision = statusProvider.getFileRevision((String) file.getAttribute(VcsAttributes.VCS_NATIVE_PACKAGE_NAME_EXT));
4.69 }
4.70 return revision;
4.71 }
4.72 @@ -377,7 +368,7 @@
4.73 if (sticky == null) {
4.74 FileStatusProvider statusProvider = getFileStatusProvider();
4.75 if (statusProvider == null) return null;
4.76 - sticky = statusProvider.getFileSticky(file.getPath());
4.77 + sticky = statusProvider.getFileSticky((String) file.getAttribute(VcsAttributes.VCS_NATIVE_PACKAGE_NAME_EXT));
4.78 }
4.79 return sticky;
4.80 }
4.81 @@ -386,7 +377,7 @@
4.82 private class VCSFileStatusListener implements FileStatusListener {
4.83 public void annotationChanged(FileStatusEvent ev) {
4.84 if (ev.hasChanged(file)) {
4.85 - String name = file.getPath();
4.86 + String name = (String) file.getAttribute(VcsAttributes.VCS_NATIVE_PACKAGE_NAME_EXT);
4.87 String newState;
4.88 String oldState;
4.89 FileStatusProvider statusProvider = null;