Мне нужен правильный CompilationUnit из файла Java, но затмение jdt генерирует неправильный код ast ,, поскольку в файле Java есть lombok.
Я вижу исходный код Eclipse JDT и обнаружил, что ASTConverter преобразует правильный CompilationUnitDeclaration в неправильный CompilationUnit.
org.eclipse.jdt.core.dom.ASTConverter.convert(CompilationUnitDeclaration, char[])
Я считаю, что ASTConverter использует положение исходного кода для получения информации, но исходного кода нет.
org.eclipse.jdt.core.dom.ASTConverter.convert (СтроковойЛитерал)
public Expression convert(org.eclipse.jdt.internal.compiler.ast.StringLiteral expression) {
if (expression instanceof StringLiteralConcatenation) {
return convert((StringLiteralConcatenation) expression);
}
int length = expression.sourceEnd - expression.sourceStart + 1;
int sourceStart = expression.sourceStart;
StringLiteral literal = new StringLiteral(this.ast);
if (this.resolveBindings) {
this.recordNodes(literal, expression);
}
literal.internalSetEscapedValue(new String(this.compilationUnitSource, sourceStart, length));
literal.setSourceRange(expression.sourceStart, expression.sourceEnd - expression.sourceStart + 1);
return literal;
}
мой код
ASTParser parser = ASTParser.newParser(AST.JLS10);
parser.setCompilerOptions(options);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setEnvironment(classpathEntries, sourcepathEntries, sourcepathEncodings, includeRunningVMBootclasspath);
parser.setResolveBindings(resolveBindings);
parser.setStatementsRecovery(false);
parser.setBindingsRecovery(true);
parser.createASTs(sourceFilePaths.toArray(new String[0]), encodings.toArray(new String[0]), wellKnownKeys,requestor, null);
исходный код
package com.test;
import lombok.Setter;
@Setter
public class DataExample {
private int age;
}
вправо CompilationUnitDeclaration
package com.test;
import lombok.Setter;
public @Setter class DataExample {
private int age;
public DataExample() {
super();
}
public @java.lang.SuppressWarnings("all") void setAge(final int age) {
this.age = age;
}
}
Последнее поколение неправильно CompilationUnit
package com.test;
import lombok.Setter;
@Setter public class DataExample {
@java.lang.SuppressWarnings(@Setter) void setAge( int age){
}
private int age;
}
}
Требует ли ASTParser какой-либо настройки? и как модифицировать ASTConverter