Как получить все поля из Javaparser
У меня есть пример кода, который использует анализатор библиотеки рекордера, чтобы получить все поля любого исходного кода Java.
Вот код
Первый класс абстрагирует метод execute
import java.util.List;
import recoder.abstraction.Field;
import recoder.java.declaration.TypeDeclaration;
public interface GetFieldsCommand {
List<Field> execute(TypeDeclaration td);
}
Этот класс проверяет, есть ли какой-либо предшественник класса, и если его нет, просто добавьте результат в список.
import java.util.ArrayList;
import java.util.List;
import recoder.abstraction.Field;
import recoder.java.declaration.TypeDeclaration;
public class BaseGetFields implements GetFieldsCommand {
private GetFieldsCommand predecesor = null;
@Override
public List<Field> execute(TypeDeclaration td) {
List<Field> result;
if (predecesor != null) {
result = predecesor.execute(td);
} else {
result = new ArrayList<Field>();
}
return result;
}
public GetFieldsCommand setPredecesor(GetFieldsCommand command) {
predecesor = command;
return this;
}
}
Это основная реализация, в которой сначала извлекаются все поля любого объявленного типа, а затем извлекается поле, если оно принадлежит какому-либо конкретному классу.
import java.util.List;
import recoder.abstraction.Field;
import recoder.java.declaration.ClassDeclaration;
import recoder.java.declaration.TypeDeclaration;
public class GetAllFields extends BaseGetFields {
@Override
public List<Field> execute(TypeDeclaration td) {
List<Field> result = super.execute(td);
for (Field field : td.getAllFields()) {
if (field.getContainingClassType() instanceof ClassDeclaration) {
result.add(field);
}
}
return result;
}
@Override
public final GetFieldsCommand setPredecesor(GetFieldsCommand command) {
throw new RuntimeException("This command cannot have predecesors");
}
}
Я хочу подобную вещь, но с javaparser( ссылка здесь) не с библиотекой рекордера. но в javaparser я не могу найти getallfields в Typedeclaration, как в случае с рекордером, кто-нибудь здесь, чтобы помочь.