【发布时间】:2011-10-07 21:32:08
【问题描述】:
我有一个插件,想检测何时将项目添加到工作区,以便从我的插件代码 Any Ideas 中设置一些项目设置。
我特别想在派生文件的某些资源中调用 setHidden,因为此设置似乎不是项目的一部分,我的意思是,如果我在新工作区中导入项目,每当隐藏资源时似乎不会持续存在。
【问题讨论】:
我有一个插件,想检测何时将项目添加到工作区,以便从我的插件代码 Any Ideas 中设置一些项目设置。
我特别想在派生文件的某些资源中调用 setHidden,因为此设置似乎不是项目的一部分,我的意思是,如果我在新工作区中导入项目,每当隐藏资源时似乎不会持续存在。
【问题讨论】:
具有讽刺意味的是,我昨天才写了这样的东西。它比您想要的要复杂一些。这是一个代码 sn-p 供您使用:
public class ProjectListener implements IResourceChangeListener {
public void resourceChanged(IResourceChangeEvent event) {
if (event.getType() == IResourceChangeEvent.POST_CHANGE) {
List<IProject> projects = getProjects(event.getDelta());
// do something with new projects
}
}
private List<IProject> getProjects(IResourceDelta delta) {
final List<IProject> projects = new ArrayList<IProject>();
try {
delta.accept(new IResourceDeltaVisitor() {
public boolean visit(IResourceDelta delta) throws CoreException {
if (delta.getKind() == IResourceDelta.ADDED &&
delta.getResource().getType() == IResource.PROJECT) {
IProject project = (IProject) delta.getResource();
if (project.isAccessible()) {
projects.add(project);
}
}
// only continue for the workspace root
return delta.getResource().getType() == IResource.ROOT;
}
});
} catch (CoreException e) {
// handle error
}
return projects;
}
然后,您需要将此 ProjectListener 添加到 Workspace,最好在您的插件激活器的 start 方法中:
ResourcesPlugin.getWorkspace().addResourceChangeListener(ProjectListener.LISTENER, IResourceChangeEvent.POST_CHANGE);
然后你想在stop 方法中删除它。我昨天刚写了这段代码。希望对你有帮助。
【讨论】:
您可以为工作区定义一个资源侦听器,并在资源根目录中查找更改。详情见以下文章:http://www.eclipse.org/articles/Article-Resource-deltas/resource-deltas.html
【讨论】: