使用 JavaParser 将 String 字段添加到新的 compilationUnit

Adding a String field to a new compilationUnit with JavaParser

这可能是一个愚蠢的问题,但我想了解主题的内容。我想将一个新的 String 字段添加到一个新的新 compilationUnit 中新声明的 classOrInterface 对象。但据我从源文件中可以看出,该选项是不可能的。 primitiveClass 仅包含所有其他基元、Long、char、bytes 等的枚举。

我错过了什么吗?还是开发人员忘记了 String 选项?

已解决 感谢 Riduidels 的回答,我设法破解了代码,可以这么说 :) 事情是创建一个新的 ClassOrInterfaceType 并将其命名为 String,非常简单。不过,我必须说,JavaParser 背后的人应该考虑为 String 添加一个枚举,就像他们为其他 Primitives 所做的那样。工作代码:

public static void main(String[] args){
    // TODO Auto-generated method stub
     // creates the compilation unit
    CompilationUnit cu = createCU();


    // prints the created compilation unit
    System.out.println(cu.toString());
}

/**
 * creates the compilation unit
 */
private static CompilationUnit createCU() {
    CompilationUnit cu = new CompilationUnit();
    // set the package
    cu.setPackage(new PackageDeclaration(ASTHelper.createNameExpr("java.parser.test")));

    // create the type declaration 
    ClassOrInterfaceDeclaration type = new ClassOrInterfaceDeclaration(ModifierSet.PUBLIC, false, "GeneratedClass");
    ASTHelper.addTypeDeclaration(cu, type); // create a field
    FieldDeclaration field = ASTHelper.createFieldDeclaration(ModifierSet.PUBLIC, new ClassOrInterfaceType("String"),"test");

    ASTHelper.addMember(type, field);



    return cu;
}

谢谢 Riduidel!

嗯,这很正常:Java解析器类型层次结构非常接近 Java 源文件中的层次结构。在源文件中,您不会将字符串直接放在文件中,而是放在文件中声明的 class 中。

这在Java解析器部分Creating a CompilationUnit from scratch中有很好的描述,可以添加哪些内容成为

public class ClassCreator {

    public static void main(String[] args) throws Exception {
        // creates the compilation unit
        CompilationUnit cu = createCU();

        // prints the created compilation unit
        System.out.println(cu.toString());
    }

    /**
     * creates the compilation unit
     */
    private static CompilationUnit createCU() {
        CompilationUnit cu = new CompilationUnit();
        // set the package
        cu.setPackage(new PackageDeclaration(ASTHelper.createNameExpr("java.parser.test")));

        // create the type declaration 
        ClassOrInterfaceDeclaration type = new ClassOrInterfaceDeclaration(ModifierSet.PUBLIC, false, "GeneratedClass");
        ASTHelper.addTypeDeclaration(cu, type);

        // create a field
        FieldDeclaration field = new FieldDeclaration(ModifierSet.PUBLIC, new ClassOrInterface(String.class.getName()), new VariableDeclarator(new VariableDeclaratorId("variableName")))
        ASTHelper.addMember(type, field);
        return cu;
    }
}

这将在包 java.parser.test 中创建一个包含名为 GeneratedClass 的 class 的文件,其中包含一个名为 GeneratedClass 的简单字段(尽管我没有编译上面的内容代码以确保其正确性)。