2011-10-18 11 views
1

プログラマが基本的にプロジェクト・エクスプローラからJavaソースを選択できるようにEclipseプラグインを作成し、対応するドロップダウンメニュー・オプションを選択すると、選択されたものに基づいて.javaファイルが作成されます。 すべて正常に動作しますが、今はジョブの更新部分をプログラムする必要があります。 更新要求は簡単です。変更をリッスンし、生成されたインターフェイスを持つソースが変更され、インターフェイスファイルが再作成されていることを確認する必要があります。 これを行うには、IResourceChangeListenerインターフェイスを実装するクラスを作成しました。 のようにそのクラスに見える:Eclipseプラグイン、IResourceDeltaVisitorがツリーノードの処理を終了したとき、どうすればわかりますか?

updatedUnits一覧が私にリストをproccessするために完了したときにどのように知ることができます:私は今、私が持っている質問は、ワークスペースにリスナーを追加

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

ビジター仕上げのproccessingまでブロックします:この質問へ 一つかのう答えがあること、心配しないでしょう。 しかし、少なくともそれはそうであるように文書化されていません。

すべてのアイデアをいただければ幸いです。 ありがとうございました。

ダニエル

答えて

1

それはないブロックに文書でない限り、それはブロックされます。

関連する問題