2017-12-25 10 views
3

클래스에 @RunWith(AndroidJUnit4.class)과 같은 주석을 달고 싶다고합시다. ...JavaPoet을 사용하여 이름이없는 주석을 어떻게 생성합니까?

private static ClassName RUN_WITH=ClassName.get("org.junit.runner", "RunWith"); 
    private static ClassName ANDROID_JUNIT4=ClassName.get("android.support.test.runner", "AndroidJUnit4"); 

    private TypeSpec buildTestClass() { 
    return TypeSpec.classBuilder("MainActivityTest") 
     .addModifiers(Modifier.PUBLIC) 
     .addAnnotation(AnnotationSpec.builder(RUN_WITH) 
     .addMember(null, "$T.class", ANDROID_JUNIT4) 
     .build()) 
     .build(); 
    } 

그러나, AnnotationSpec.Builder에있는 두 개의 addMember() 방법은 각 멤버의 이름을 내가 이름을 원하지 않는다 : 일반 JavaPoet 조리법이 될 것입니다. 우리가 생성 어떻게 ...

@RunWith(
    null = AndroidJUnit4.class 
) 

정도에 "익명"(또는 적절한 용어는 단일 이름-구성원에 대해 무엇이든) 주석 : 위의 그림과 같이 나는 null 시도하고, 그 생성? 사용

답변

3

마법의 이름은 value입니다 : 원하는대로

private static ClassName RUN_WITH=ClassName.get("org.junit.runner", "RunWith"); 
    private static ClassName ANDROID_JUNIT4=ClassName.get("android.support.test.runner", "AndroidJUnit4"); 

    private TypeSpec buildTestClass() { 
    return TypeSpec.classBuilder("MainActivityTest") 
     .addModifiers(Modifier.PUBLIC) 
     .addAnnotation(AnnotationSpec.builder(RUN_WITH) 
     .addMember("value", "$T.class", ANDROID_JUNIT4) 
     .build()) 
     .build(); 
    } 

@RunWith(AndroidJUnit4.class)를 생성합니다.