如何使用xtend的活动注释创建`String []`字段?

时间:2013-03-30 10:47:16

标签: xtend

我尝试使用xtend的活动注释,我想创建一个实时注释,它可以生成一个String[]字段来记录方法参数的名称。

@Target(ElementType::TYPE)
@Active(typeof(ParameterRecorderProcessor))
annotation ParameterRecorder {
}

class ParameterRecorderProcessor extends AbstractClassProcessor {

    override doTransform(MutableClassDeclaration annotatedClass, extension TransformationContext context) {

        var iii = 0;

        // add the public methods to the interface
        for (method : annotatedClass.declaredMethods) {
            if (method.visibility == Visibility::PUBLIC) {
                iii = iii + 1
                annotatedClass.addField(method.simpleName + "_" + iii) [
                    type = typeof(String[]).newTypeReference // String[] doesn't work

                    var s = ""
                    for (p : method.parameters) {
                        if(s.length > 0) s = s + ","
                        s = s + "\"" + p.simpleName + "\""
                    }
                    val ss = s

                    initializer = [
                        '''[«ss»]'''
                    ]
                ]
            }
        }
    }
}

您可以看到我使用typeof(String[]).newTypeReference来定义新创建字段的类型,但它不起作用。生成的java代码如下所示:

private Object index_1;

它使用Objectinitializer部分为空。

如何解决?

1 个答案:

答案 0 :(得分:1)

对我来说这看起来像个错误。要解决此问题,您可能需要使用typeof(String).newTypeReference.newArrayTypeReference或更简洁的string.newArrayTypeReference