2011-07-12 23 views
0

有没有人有过使用Eclipse JDT Core API在java源文件中重新定义导入的例子吗?如何使用Eclipse JDT Core重新定义导入

我有以下(这不起作用),它让我生气。

try { 
    for (IPackageFragmentRoot root : project.getPackageFragmentRoots()) { 
     if (root.getElementName().equals("src")) { 
      for (ICompilationUnit unit : root.getPackageFragment("soap.service.implementation.strongProfile.delegate").getCompilationUnits()) { 
       System.out.println(unit.getElementName()); 
       for (IImportDeclaration dec : unit.getImports()) { 
        dec.rename("soap.service.implementation.strongProfile.reader.HeadlineReader", true, null); 
       } 
      } 
     } 
    } 
}catch(Exception e) { 
    e.printStackTrace(); 
} 

我得到的例外是:

Java Model Exception: Java Model Status [Invalid name specified: soap.service.implementation.strongProfile.reader.HeadlineReader] 

我把进口的名字,并将其粘贴到我的java源文件,它是完美的,它并没有给我任何错误。任何帮助或指导,将不胜感激。

回答

0

原来,这是Eclipse中的一个错误。

0

我在同一个异常(即使是在Eclipse 3.7.2中)也陷入了困境。这应该是错误报告:https://bugs.eclipse.org/bugs/show_bug.cgi?id=351940

这里是工作(而不是重命名)的解决方案:

dec.delete(false, null); 
unit.createImport(redefinedImport, null, dec.getFlags(), null); 

或者去接近原来的位置

unit.createImport(redefinedImport, dec, dec.getFlags(), null); 
dec.delete(false, null); 

但是这种方法确实不保持进口申报的原始职位。由于我的代码包含注释和注释,导入声明必须在原始位置进行更改。

用ImportRewrite直接操纵AST也只允许removeImport和addImport。

是否有任何替代解决方案来重新定义/重命名导入声明以编程方式?