2015-10-17 3 views
1

Я пишу приложение Swing Java с помощью Java Development Tool (JDT) следующим образом.Проведите анализ Java-проекта с помощью JDT

Входной: проект Java

Выход: все названия элементов в этом проекте (пакет, класса, метод, поле и т.д.) и т.д.

До сих пор я понял, что как разобрать один файл Java для сбора информации с использованием JDT для создания соответствующих Аннотация Синтаксическое дерево (AST). Однако этот подход приведет к отсутствию аналитической информации (например: Получить все методы, которые вызывают один и тот же метод).

Как я могу разобрать проект от абсолютного пути, применяя JDT без разбора всех одиночных .java файлов независимо друг от друга?

+0

Может показаться, что мы не можем разобрать проект без запуска в плагине среде. Помоги мне. – ducanhnguyen

ответ

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 
    } 
} 

Пример использования приведенного выше кода.

  • являются классы, соответствующий абсолютного путем rt.java в JRE папки.

  • источники - это список папок с исходным кодом.

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

    }

Смежные вопросы