Eclipse JDT генерирует неверный аст когда ломбок в проекте - PullRequest
0 голосов
/ 11 января 2019

Мне нужен правильный 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

...