我有一个CompilationUnit
包含一个其中未导入对另一个类的引用的类。
Eclipse可以轻松解决此类问题,并建议导入缺少的类(位于父包中)。
如何在不知道其名称或位置的情况下以编程方式导入丢失的类,以便在生成的Java类源文件中,导入显示为:import com.foobar.missingclass
。
谢谢。
编辑1:
为了回应一些意见:反射,注入,ClassLoader和其他运行时机制不是正确的选择,因为我正在通过Eclipse JDT API静态地处理类。
拜托,我只是在寻找静态的解决方案。
仅供参考:这就是我们从imports
列出CompilationUnit
的方式:
List<ImportDeclaration> existingImports = aCompilationUnit.imports();
Reference.
问题是我不知道如何生成丢失的
ImportDeclaration
。谢谢。
最佳答案
引用我自己的answer in the JDT forum:
有关操纵Java文件导入的信息,请参见org.eclipse.jdt.core.dom.rewrite.ImportRewrite类:Javadoc概述了其用法。
如果您仅有一个无法解析的简单名称,则诸如ASTResolving.guessBindingForTypeReference(node)之类的实用程序将派上用场。
如果这对您不起作用,则可能必须使用org.eclipse.jdt.core.search.SearchEngine并以某种方式处理给定简单名称的可能很多匹配项。
让我补充一下:如果创建ImportDeclaration是您唯一的问题,请使用aCompilationUnit.getAST().newImportDeclaration()
,但是使用ImportRewrite
的功能要强大得多,因为它直接产生更新文件所需的TextEdit
。
关于java - Java:以编程方式导入类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31572602/