我有一个示例代码,该示例代码使用记录器库解析器获取任何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(link here)而不是记录器库。但是在javaparser中,我无法在Typedeclaration中找到getallfields,就像有录音机的人在这里提供帮助一样。