Исключение при генерации AST с использованием Eclipse JDT SDK в среде без затмений - PullRequest
0 голосов
/ 03 апреля 2012

Я пытаюсь использовать функцию генерации AST в jdt в среде без затмений (как плагин для другого базового java-представления).Моя программа правильно создает AST, когда я запускаю его в Eclipse, но когда я тестирую плагин из ide, я получаю следующее исключение:

Exception in thread "AWT-EventQueue-0" java.lang.NoSuchFieldError: ignoreMethodBodies 
at org.eclipse.jdt.core.dom.CompilationUnitResolver.parse(CompilationUnitResolver.java:491)
at org.eclipse.jdt.core.dom.ASTParser.internalCreateAST(ASTParser.java:1200) 
at org.eclipse.jdt.core.dom.ASTParser.createAST(ASTParser.java :807) 
at mytreetest.TreeMaker.buildTree(Unknown Source)
...
(further stack trace)
...

Код, который я использовал, довольно прост:

Код:

ASTParser parser = ASTParser.newParser(AST.JLS4);
String src = readFile(filePath);
parser.setSource(src.toCharArray());
parser.setKind(ASTParser.K_COMPILATION_UNIT);
Map<String, String> options = JavaCore.getOptions();
JavaCore.setComplianceOptions(JavaCore.VERSION_1_7, options);
parser.setCompilerOptions(options);
CompilationUnit cu = (CompilationUnit) parser.createAST(null);

Я просмотрел исходный код org.eclipse.jdt.core.dom.CompilationUnitResolver и org.eclipse.jdt.internal.compiler.impl.CompilerOptions.У CompilerOptions есть открытое булево поле ignoreMethodBodies.

Что может быть причиной этой ошибки?

Пожалуйста, помогите мне.

Вот файлы Jar Eclipse, которые я включил:

org.eclipse.core.contenttype_3.4.100.v20110423-0524.jar
org.eclipse.core.jobs_3.5.100.v20110404.jar
org.eclipse.core.resources_3.7100.v20110510-0712.jar
org.eclipse.core.runtime_3.7.O.v20110110.jar
org.eclipse.equinoxcommon_3.6.O.v20110523.jar
org.eclipse.equinox.preferences_3.4.1.R37x_v20110725.jar
org.eclipse.jdt.compiler.apt_1.O.400.v0110816-0800.jar
org.eclipse.jdt.compiler.tooLl.O.100.v_B76_R37x.jar
org.edipse.jdt.core_3.7.1.v_B76_R37x.jar
org.eclipse.jface3.7.0J20110522-1430.jar
org.eclipse.osgi_3.7.1.R37x_v20110808-1106.jar
org.eclipse.osgi.utiL3.2.200.v20110110.jar
org.eclipse.text3.5101 .r371y20110810-O800jar

ОБНОВЛЕНИЕ:

Я нашел исправление для этого.Java-ide, из которого я запускал этот код, использовал ecj.Проблема заключалась в том, что ecj.jar конфликтовал с модулями jdt-core, которые я включил в свой плагин.Замена ecj ide на jdt-core (org.eclipse.jdt.core_XX.XX.jar и остальные файлы jar) и обновление его пути к классам решило проблему.

1 Ответ

1 голос
/ 06 апреля 2012

Я использовал JDT - это динамический веб-проект, и получил ту же ошибку.

Благодаря ответу Маниндры Мохараны я выяснил причину ошибки.

Сначала я добавилСерверная библиотека «Apache Tomcat 6.0» для пути к классам.К сожалению, Tomcat также использует ecj, который конфликтует с классом CompilerOptions в jdt.core.

Таким образом, решение заключается в удалении серверной библиотеки Tomcat из пути к классам.

И теперь все кажется в порядке.

...