2013-04-30 2 views
0

В настоящее время я занимаюсь разработкой инструкторов по программированию. Эти преподаватели являются автономными приложениями Java. Я использую Eclipse JDT для анализа исходного кода Java и построения соответствующего абстрактного синтаксического дерева. Более того, я хочу зафиксировать сообщения об ошибках, которые будут запущены, если ученик будет компилировать свой код в Eclipse. Eclipse позволяет анализировать и отслеживать сообщения об ошибках для определенной строки кода (без контекста). После «скомпилированной» этой строки я получил 9 сообщений об ошибках. Когда я вставлял этот код в проект Eclipse, у меня было около 90 сообщений об ошибках. Очевидно, цель состоит в том, чтобы отслеживать как можно больше ошибок. Я подозреваю, что это зависит от контекста исходного кода.Отслеживание сообщений об ошибках компилятора JQT Eclipse (IProblem)

С этой целью я попытался создать программный проект в рабочей области и создать файл, содержащий строку исходного кода. Однако при выполнении моего приложения Java я получаю следующее сообщение об ошибке:

Exception in thread "main" java.lang.IllegalStateException: Workspace is closed. 
    at org.eclipse.core.resources.ResourcesPlugin.getWorkspace(ResourcesPlugin.java:399) 
    at com.example.helloworld.JavaErr.main(JavaErr.java:67) 

Я прочитал много статей на эту тему. Похоже, мы можем получить доступ к ресурсам в рабочей области только в рамках проекта плагина Eclipse. Прежде чем отказаться от этого пути «решения», можно ли узнать, можем ли мы программно обращаться к рабочему пространству и всем его ресурсам в рамках внешнего автономного приложения Java?

ответ

0

Мне понадобилось, наконец, разрешить привязки между исходным кодом char [] и его окружением (setEnvironment) и установить имя единицы компиляции. Настройка среды позволяет обойти рабочую область и создать наш собственный «виртуальный» проект, импортируя соответствующие библиотеки (classpath) и исходный код (sourcepath).

Если кто-то хочет также получить синтаксические ошибки, он должен только активировать восстановление операторов. Таким образом, мы можем разбирать внешний Java-файл в автономном приложении Java и извлекать столько же ошибок, сколько и в реальном проекте Eclipse (за исключением ошибки объявления пакета).

Вот фрагмент кода, я использовал:

 File file = new File(""); 
     String srcCode = Files.toString(file, Charsets.UTF_8); 
     ASTParser parser = ASTParser.newParser(AST.JLS3); 
     parser.setSource(srcCode.toCharArray()); 
     parser.setKind(ASTParser.K_COMPILATION_UNIT); 
     Map options = JavaCore.getOptions(); 
     JavaCore.setComplianceOptions(JavaCore.VERSION_1_5, options); 
     parser.setCompilerOptions(options); 

     String[] classpath = {"", "", ""}; 
     String[] sourcepath = {""}; 

     parser.setEnvironment(classpath, sourcepath, null, true); 
     parser.setUnitName(""); 
     parser.setResolveBindings(true); 
     parser.setBindingsRecovery(true); 
     parser.setStatementsRecovery(true); 
     CompilationUnit cu = (CompilationUnit) parser.createAST(null); 
     cu.accept(new ASTVisitor2(cu)); 
Смежные вопросы