Процессор аннотаций с библиотекой Android (область)

Я пытаюсь создать процессор аннотаций, который работает поверх realm.io. К сожалению, для использования области вам нужен проект Android, в то время как для создания процессора аннотаций вам нужен Java (для того, чтобы импортировать javax.annotation.processing.*)

Кто-нибудь знает способ импортировать AbstractProcessor и все другие необходимые вещи в библиотеке Android? Я не могу найти способ сделать это (уже переключил targetCompatibility и sourceCompatibility на 1.7)

1 ответ

Решение

способ импортировать AbstractProcessor и все другие необходимые вещи в библиотеку Android

Лучший вопрос: зачем тебе это?

Если у вас сложилось впечатление, что ваш процессор будет зависеть от классов Realm (или любых других классов Android), - это не так. Когда вы пишете код, который использует APT Mirror API, вам не нужно ссылаться на эти классы напрямую, только по именам. Полученный код будет выглядеть так:

DeclaredType theBinder = lookup("android.os.Binder");
DeclaredType theIInterface = lookup("android.os.IInterface");
DeclaredType theCreator = lookup("android.os.Parcelable.Creator");
...
private DeclaredType lookup(CharSequence name) {
    return types.getDeclaredType(elements.getTypeElement(name));
}

Затем вы приступите к манипулированию созданными TypeMirrors с помощью методов Types а также Elements служебные классы. Вы также можете преобразовать эти зеркала в альтернативные форматы, такие как JavaPoet TypeName от Square, но вам это не нужно, поскольку Mirror API предоставляет большинство возможностей, которые вам могут понадобиться.

Вы определенно не хотите загружать классы Realm в свой процессор аннотаций. Во-первых, в этом просто нет необходимости. Но, что более важно, как вы указали в этом вопросе, зачастую невозможно использовать одну и ту же настройку для процессора аннотаций и его устройств времени выполнения. Эта проблема не является уникальной для Android, например, никто не ожидает установки полноценного сервера приложений для компиляции серверной программы, использующей процессор аннотаций с поддержкой JAXB.

Если вам действительно нужен какой-то кусок кода из Realm в вашем процессоре, и он не доступен как отдельная библиотека Java, самый простой способ - просто скопировать этот код в ваш процессор.

Другие вопросы по тегам