상세 컨텐츠

본문 제목

TIL: Anotation Processor

Programming/TIL

by 홍잭슨 2021. 12. 13. 06:58

본문

  • Processor Interface
    • 여러 라운드(rounds)에 걸쳐 소스 및 컴파일 된 코드를 처리할 수 있다.
  • 어노테이션 프로세서 사용 예
    • 롬복
    • AutoService : java.util.ServiceLoader 용 파일 생성 유틸리티
    • @Override
    • Dagger 2 : 컴파일 타임 DI 제공
    • 안드로이드 라이브러리
  • 어노테이션 프로세서의 장점
    • 런타임 비용이 제로
  • 어노테이션 프로세서를 사용법
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
  Set<? extends Element> elements = roundEnv.getElementsAnnotatedWith(Magic.class);
  for (Element element : elements) {
      Name elementName = element.getSimpleName();
      if (element.getKind() != ElementKind.INTERFACE) {
          processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, "Magic annotation can not be used on " + elementName);
      } else {
          processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, "Processing " + elementName);
      }

      TypeElement typeElement = (TypeElement)element;
      ClassName className = ClassName.get(typeElement);

      MethodSpec pullOut = MethodSpec.methodBuilder("pullOut")
              .addModifiers(Modifier.PUBLIC)
              .returns(String.class)
              .addStatement("return $S", "Rabbit!")
              .build();

      TypeSpec magicMoja = TypeSpec.classBuilder("MagicMoja")
              .addModifiers(Modifier.PUBLIC)
              .addSuperinterface(className)
              .addMethod(pullOut)
              .build();

      Filer filer = processingEnv.getFiler();
      try {
          JavaFile.builder(className.packageName(), magicMoja)
                  .build()
                  .writeTo(filer);
      } catch (IOException e) {
          processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, "FATAL ERROR: " + e);
      }
  }
return true;

강의 끗!

'Programming > TIL' 카테고리의 다른 글

TIL : JUnit, Mockito  (0) 2021.12.20
TIL : JUnit - 테스트 순서, Properties  (0) 2021.12.17
TIL : JUnit  (0) 2021.12.15
TIL: JUnit  (0) 2021.12.14
TIL: 리플렉션, 다이나믹 프록시  (0) 2021.12.12

관련글 더보기