将静态方法与注释处理和javapoet合并

时间:2016-10-27 20:47:06

标签: java annotation-processing javapoet

我有多个类中的静态方法,为了方便起见,我想在一个新的,生成的类中合并。

我正在使用注释处理和javapoet。

我的问题:从注释处理中,我将静态方法作为ExecutableElements列表。

对于JavaPoet,我需要创建那些的MethodSpecs。我在尝试:

 public MethodSpec apply(@Nullable ExecutableElement input) {
  TypeMirror returnType = input.getReturnType();

  return MethodSpec.methodBuilder(THE_METHOD_NAME)
    .addModifiers(Modifier.PUBLIC, Modifier.STATIC)
    .returns(THE_RETURN_TYPE)
    .addParameter(EVERY_PARAMETER_WITH_TYPE_AND_NAME)
    .addStatement("$T.$S($S)", THE_ENCLOSING_CLASS, THE_METHOD_NAME, THE_PARAMETERS)
    .build();
}

我的问题:如何获取CAPS中缺失单词的类型值?好像ExecutableElements的行为不像反射api。

1 个答案:

答案 0 :(得分:0)

这可能是一个可用于帮助您入门的示意代码:

THE_METHOD_NAME - > input.getSimpleName()

THE_RETURN_TYPE - > input.getReturnType()

THE_ENCLOSING_CLASS - > input.getEnclosingElement().getSimpleName()

EVERY_PARAMETER_WITH_TYPE_AND_NAME - >

for (VariableElement ve: executableElement.getParameters()){
   System.out.println("Param name: " + ve.getSimpleName());
   // note here that the type can be generic, so you'll need to parse 
   // the generic part and use to build a javapoet 
   // ParameterizedTypeName
   System.out.println("Param type: " + ve.asType());
}