Eclipse插件,我如何知道IResourceDeltaVisitor何时结束处理树节点?

Eclipse插件,我如何知道IResourceDeltaVisitor何时结束处理树节点?,eclipse,eclipse-plugin,Eclipse,Eclipse Plugin,我编写了一个Eclipse插件,它基本上允许程序员从ProjectExplorer中选择一个Java源代码,通过选择相应的下拉菜单选项,它将基于所选的文件创建一个interface.Java文件。 一切正常,但现在我需要对作业的更新部分进行编程。 更新要求很简单,我需要监听更改并确定生成接口的源已经修改并重新创建接口文件。 为此,我编写了一个实现IResourceChangeListener接口的类。 这个类看起来像: public class DTOChangeListener impleme

我编写了一个Eclipse插件,它基本上允许程序员从ProjectExplorer中选择一个Java源代码,通过选择相应的下拉菜单选项,它将基于所选的文件创建一个interface.Java文件。 一切正常,但现在我需要对作业的更新部分进行编程。 更新要求很简单,我需要监听更改并确定生成接口的源已经修改并重新创建接口文件。 为此,我编写了一个实现IResourceChangeListener接口的类。 这个类看起来像:

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());