2016-10-27 3 views
1

편의상 여러 클래스에 병합하려는 정적 메서드가 새 클래스로 생성되었습니다.주석 처리 및 javapoet을 사용하여 정적 메서드를 병합

저는 주석 처리 및 javapoet을 사용하고 있습니다.

내 문제 : 주석 처리에서 정적 메서드를 ExecutableElements 목록으로 가져옵니다.

JavaPoet의 경우 해당 메소드의 MethodSpec을 만들어야합니다. 나는 노력하고있다 :

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처럼 작동하지 않는 것 같습니다.

답변

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()); 
} 
+0

감사합니다. 그러나 위의 코드에서 보듯이 getReturnType은 "TypeMirror"유형입니다 ... javapoet에 전달하면 TypeMirror가 반환됩니다. –

+0

'com.squareup.javapoet.ClassName'을 사용하여 빌드 할 수 있습니다. 've.asType()'의 출력의 캐릭터 라인 표현으로부터의 형태를 설정합니다. 필자는 [javapoet] (https://github.com/square/javapoet)에서 가져온 샘플 코드를 기반으로 글을 작성할 때이를 가정했습니다. –