Eclipse插件,我如何知道IResourceDeltaVisitor何时结束处理树节点?
我编写了一个Eclipse插件,它基本上允许程序员从ProjectExplorer中选择一个Java源代码,通过选择相应的下拉菜单选项,它将基于所选的文件创建一个interface.Java文件。 一切正常,但现在我需要对作业的更新部分进行编程。 更新要求很简单,我需要监听更改并确定生成接口的源已经修改并重新创建接口文件。 为此,我编写了一个实现IResourceChangeListener接口的类。 这个类看起来像:Eclipse插件,我如何知道IResourceDeltaVisitor何时结束处理树节点?,eclipse,eclipse-plugin,Eclipse,Eclipse Plugin,我编写了一个Eclipse插件,它基本上允许程序员从ProjectExplorer中选择一个Java源代码,通过选择相应的下拉菜单选项,它将基于所选的文件创建一个interface.Java文件。 一切正常,但现在我需要对作业的更新部分进行编程。 更新要求很简单,我需要监听更改并确定生成接口的源已经修改并重新创建接口文件。 为此,我编写了一个实现IResourceChangeListener接口的类。 这个类看起来像: public class DTOChangeListener impleme
public class DTOChangeListener implements IResourceChangeListener {
private List<UpdatedUnit> updatedUnits;
public DTOChangeListener() {
super();
this.updatedUnits=new ArrayList<UpdatedUnit>();
}
@Override
public void resourceChanged(IResourceChangeEvent event) {
try{
if(event.getType() == IResourceChangeEvent.POST_CHANGE){
event.getDelta().accept(this.buildVisitor());
}
}catch(CoreException ex){
ex.printStackTrace();
}
}
protected IResourceDeltaVisitor buildVisitor(){
IResourceDeltaVisitor result=new IResourceDeltaVisitor() {
@Override
public boolean visit(IResourceDelta resDelta) throws CoreException {
String resName=resDelta.getResource().getName();
if(resName==null || resName.equals("")){
return true;
}
String[] splits=resName.split("\\.");
String name = splits[0];
if(name.contains("PropertyAccess")){
return false;
}
String interfaceName=name + "PropertyAccess";
String interfaceFile=interfaceName + ".java";
IResource res=resDelta.getResource();
if((res instanceof IFolder) || (res instanceof IProject)){
// Avoid Folder & Project Nodes
return true;
}
IProject project=res.getProject();
if(project!=null){
if(project.isNatureEnabled("org.eclipse.jdt.core.javanature")){
IJavaElement element=JavaCore.create(res);
if(element instanceof ICompilationUnit){
ICompilationUnit unit=(ICompilationUnit)element;
IPath path=res.getProjectRelativePath().removeLastSegments(1);
IResource propertyAccess=project.findMember(path.append(interfaceFile));
if(propertyAccess!=null){
UpdatedUnit updatedUnit=new UpdatedUnit(project, path, unit);
updatedUnits.add(updatedUnit);
return false;
}
}
}
}
return true;
}
};
return result;
}
public List<UpdatedUnit> getUpdatedUnits() {
return updatedUnits;
}
}
将阻止,直到访客处理完成。
但至少没有像它那样被记录下来
任何想法都将不胜感激。
提前谢谢
丹尼尔除非记录到非块,否则它将被阻止。除非记录到非块,否则它将被阻止
event.getData().accept(this.buildVisitor());