0

我尝试使用 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;

它使用Object并且该initializer部分是空的。

如何解决?

4

1 回答 1

1

这对我来说似乎是一个错误。作为一种解决方法,您可能希望使用typeof(String).newTypeReference.newArrayTypeReference或更简洁string.newArrayTypeReference

于 2013-04-02T06:21:45.467 回答