2017-10-11 9 views
2

Android Databinding Observable 개체를 생성하는 주석 프로세서를 작성하고 있습니다. 이 아이디어는 Realm과 데이터 바인딩 라이브러리간에 호환성 심을 제공하는 것입니다.다른 주석 프로세서에서 생성 된 클래스 생성

샘플 출력 :

public class ObservablePerson extends BaseObservable { 
    @Bindable 
    public String getName() { 
     return getValue(BR.name); 
    } 

    @Bindable 
    public void setName(String name) { 
     setValue(BR.name, name); 
    } 
} 

문제는 내 주석 프로세서에 의해 생성 된 클래스를 처리하지 않는 데이터 바인딩 주석 프로세서 (BR.name의 원인은 사용할 수 없게합니다).

필자는 데이터 바인딩 주석 처리기가 나중에 생성 된 클래스를 픽업하기를 희망했지만이 경우는 그렇지 않습니다. 그것이 나오는 것에 따라

답변

0

, 내가 잘못 몇 가지 일을했다 :

    내가 처리하려고 때까지 처리되지 내 주석 클래스의 처리를 일으킨 BR.class를 참조했다
  1. 내 주석 BR.class가 생성 된 후 이로 인해 내 애노테이션 프로세서가 안드로이드 데이터 바인딩 프로세서 이후에 실행되었습니다.
  2. android 데이터 바인딩 처리기는 첫 번째 라운드에서 BR.class 값만 수집합니다. 후속 라운드에서 생성 된 모든 파일은 무시됩니다. 즉, 내 파일이 생성 된 후 데이터 바인딩 주석 프로세서가 실행 중이더라도 BR 클래스가 업데이트되지 않았 음을 의미합니다.
  3. 안드로이드 데이터 바인딩 프로세서가 첫 번째 라운드에서 실행됩니다. 이것은 다른 주석 프로세서에 의해 생성 된 소비 클래스를 효과적으로 배제합니다. (2)를 참조하십시오.

내 솔루션은 @Bindable 주석이 포함 된 인터페이스를 생성하는 gradle 플러그인을 작성하는 것입니다. 이러한 파일은 컴파일러가 실행되기 전에 생성되어 주석 처리의 첫 번째 라운드에 해당 파일이 있음을 보장합니다. 이 시점에서 필자의 주석 프로세서는 위에서 설명한대로 파일을 생성 할 수 있습니다.