我正在使用Java开发工具( JDT )编写Swing Java应用程序,如下所示。
输入:Java项目
输出:此项目中所有元素的名称(包,类,方法,字段等)等。
到目前为止,我已经了解如何使用 JDT 来解析单个 Java 文件以收集信息,以创建相应的抽象语法树< / strong>(AST)。但是,这种方法会导致缺乏分析信息(例如:获取调用相同方法的所有方法)。
如何在不解析所有单个 .java 文件的情况下应用 JDT 从绝对路径解析项目?
答案 0 :(得分:0)
我的想法是,我们将独立解析每个 .jav 文件。获得的 AST 可以解析绑定。方法 Utils.getFile()将获取 .java 文件的内容并保存在String对象中。
public parseJavaFile(String pathOfJavaFile, String[] sources, String[] classpath, String nameOfJavaFile)
throws Exception {
ASTParser parser = ASTParser.newParser(AST.JLS8);//choose source code analyzing strategy
parser.setResolveBindings(true);// turn on binding strategy
parser.setKind(ASTParser.K_COMPILATION_UNIT);// the source code is a file .java
parser.setBindingsRecovery(true);
parser.setCompilerOptions(JavaCore.getOptions());
parser.setUnitName(nameOfJavaFile);
parser.setEnvironment(classpath, sources, new String[] { "UTF-8" }, true);
parser.setSource(Utils.getFile(pathOfJavaFile).toCharArray());
CompilationUnit cu = (CompilationUnit) parser.createAST(null);
if (cu.getAST().hasBindingsRecovery()) {
// Now binding is activated. Do something else
}
}
如何使用上述代码的示例。
classpath 对应 jre 文件夹中 rt.java 的绝对路径。
sources 是源代码文件夹列表。
public static void main(String[] args) throws IOException {
String projectPath = "G:\\Dropbox\\Workspace\\Wave-CIA-rebuid-v2";
String[] sources = { "G:\\Dropbox\\Workspace\\Wave-CIA-rebuid-v2\\src" };
String[] classpath = { "C:\\Program Files\\Java\\jre1.8.0_40\\lib\\rt.jar" };
String pathOfJavaFile = "G:\\Dropbox\\Workspace\\Wave-CIA-rebuid-v2\\src\\test.java";
String nameOfJavaFile = "test.java";
new parseJavaFile(pathOfJavaFile, sources, classpath, nameOfJavaFile);
}
答案 1 :(得分:-1)
你可以使用eclipse资源。 Eclipse资源将为您提供所有与项目相关的信息。