如何从Javaparser获取所有字段

时间:2018-08-23 14:35:11

标签: java abstract-syntax-tree 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(link here)而不是记录器库。但是在javaparser中,我无法在Typedeclaration中找到getallfields,就像有录音机的人在这里提供帮助一样。

0 个答案:

没有答案