Eclipse 插件 - 刷新 eclipse 项目中的链接文件夹
Eclipse plugin - refresh linked folders in eclipse project
我正在尝试为 Eclipse 插件实现刷新算法,但找不到处理链接文件夹的方法。
总而言之,我的应用程序中有一些功能可以在我工作的同一个项目中生成一些文件。为了查看这些文件,我通常必须按 F5。但是,我尝试实施刷新算法,这样我就不必再按 F5 并自动进行刷新了。
这是我算法的一部分
File osFile = iPath.toFile();
if (osFile.exists()) {
if (osFile.isFile()) {
IFile[] filesArr = workspaceRoot
.findFilesForLocationURI(iPath.toFile().toURI());
if (filesArr != null && filesArr.length > 0) {
for (IFile file : filesArr) {
try {
file.refreshLocal(IResource.DEPTH_INFINITE,
new NullProgressMonitor());
} catch (CoreException e) {
Activator.getDefault().log(IStatus.ERROR,
e.getLocalizedMessage(), e);
}
}
}
} else if (osFile.isDirectory()) {
iPath = iPath.makeRelativeTo(workspaceRoot.getLocation());
IResource resource = null;
if (iPath.segmentCount() == 1) {
resource = workspaceRoot.getProject(iPath.toString());
} else {
try {
resource = workspaceRoot.getFolder(iPath);
} catch (Exception e) {
Activator.getDefault().log(IStatus.ERROR,
e.getLocalizedMessage(), e);
}
}
try {
if (resource != null) {
resource.refreshLocal(IResource.DEPTH_INFINITE,
new NullProgressMonitor());
}
} catch (CoreException e) {
Activator.getDefault().log(IStatus.ERROR,
e.getLocalizedMessage(), e);
}
}
其中iPath是我要刷新的文件或文件夹的绝对路径(C:......)。
对于单个文件和非链接文件夹,这很有效,但是当涉及到链接文件夹时,它就失败了。问题出在这一行:
iPath = iPath.makeRelativeTo(workspaceRoot.getLocation());
在非链接文件夹中,它会将绝对路径 (C:......) 转换为 Eclipse 本地路径 (MyProject/tmp/destinationFolder),对于链接文件夹,它只会获取OS 上的绝对路径。
然后是下面一行代码:
resource = workspaceRoot.getFolder(iPath);
将从路径中删除 "C:\" 并将其连接到一个暂定的 eclipse 路径(产生类似 F/user/desktop/project/folder 的结果)最终指向任何内容。
那么,谁能帮我重构我的算法以正确处理链接文件夹?可能有一些方法或 类 我不熟悉并且错过了,可能正好处理这类问题。
IWorkspaceRoot
有 findContainersForLocationURI
其中 returns 位置 URI 的容器(容器是文件夹或项目)。
我正在尝试为 Eclipse 插件实现刷新算法,但找不到处理链接文件夹的方法。
总而言之,我的应用程序中有一些功能可以在我工作的同一个项目中生成一些文件。为了查看这些文件,我通常必须按 F5。但是,我尝试实施刷新算法,这样我就不必再按 F5 并自动进行刷新了。
这是我算法的一部分
File osFile = iPath.toFile();
if (osFile.exists()) {
if (osFile.isFile()) {
IFile[] filesArr = workspaceRoot
.findFilesForLocationURI(iPath.toFile().toURI());
if (filesArr != null && filesArr.length > 0) {
for (IFile file : filesArr) {
try {
file.refreshLocal(IResource.DEPTH_INFINITE,
new NullProgressMonitor());
} catch (CoreException e) {
Activator.getDefault().log(IStatus.ERROR,
e.getLocalizedMessage(), e);
}
}
}
} else if (osFile.isDirectory()) {
iPath = iPath.makeRelativeTo(workspaceRoot.getLocation());
IResource resource = null;
if (iPath.segmentCount() == 1) {
resource = workspaceRoot.getProject(iPath.toString());
} else {
try {
resource = workspaceRoot.getFolder(iPath);
} catch (Exception e) {
Activator.getDefault().log(IStatus.ERROR,
e.getLocalizedMessage(), e);
}
}
try {
if (resource != null) {
resource.refreshLocal(IResource.DEPTH_INFINITE,
new NullProgressMonitor());
}
} catch (CoreException e) {
Activator.getDefault().log(IStatus.ERROR,
e.getLocalizedMessage(), e);
}
}
其中iPath是我要刷新的文件或文件夹的绝对路径(C:......)。
对于单个文件和非链接文件夹,这很有效,但是当涉及到链接文件夹时,它就失败了。问题出在这一行:
iPath = iPath.makeRelativeTo(workspaceRoot.getLocation());
在非链接文件夹中,它会将绝对路径 (C:......) 转换为 Eclipse 本地路径 (MyProject/tmp/destinationFolder),对于链接文件夹,它只会获取OS 上的绝对路径。
然后是下面一行代码:
resource = workspaceRoot.getFolder(iPath);
将从路径中删除 "C:\" 并将其连接到一个暂定的 eclipse 路径(产生类似 F/user/desktop/project/folder 的结果)最终指向任何内容。
那么,谁能帮我重构我的算法以正确处理链接文件夹?可能有一些方法或 类 我不熟悉并且错过了,可能正好处理这类问题。
IWorkspaceRoot
有 findContainersForLocationURI
其中 returns 位置 URI 的容器(容器是文件夹或项目)。