Ich baue einen Annotation Processor für Android (aus Gründen zukünftiger Erklärungen nennen wir es TestProcessor
).Wie kann überprüft werden, ob das Paket im Annotationsprozessor vorhanden ist (während der Kompilierung)?
Der Plan ist für den Prozessor in zwei Betriebsarten zu arbeiten:
Mode 1
: Erzeugung des CodesA
Mode 2
: Erzeugung des CodesA
undB
Mode 2
sollte nur dann, wenn das zusätzliche (optional) ausgewählt wird Paket in der Umgebung vorhanden ist, für die der Prozessor Code erzeugt.
Gibt es eine Möglichkeit in der process
Methode des Annotation Processors herauszufinden, wenn das optionale Paket existiert?
EDIT 1:
Kleine Klarstellung der "(optional) Paket". Mit dem zusätzlichen Paket meine ich ein Java-Paket, das kann, muss aber nicht im Projekt existieren (das heißt mit dem Prozessor). Das optionale Paket kann beispielsweise den Inhalt einer externen Bibliothek darstellen. Die externe Bibliothek kann, muss aber nicht im Projekt enthalten sein.
Lassen Sie mich nur ein kleines Beispiel machen:
- Nehmen wir an, wir haben ein (ein Modul) Projekt
Sample
. Sample
verwendet meineTestProcessor
.- die
Square's
Picasso
als Beispiel für eine externe Bibliothek - Wenn
Sample
HASSquare's
Picasso
als eine ihrer Abhängigkeiten nehmen lassen, arbeitetTestProcessor
inMode 2
und CodeA
undB
erzeugt. Mit anderen Worten: Wenn Sie problemlos Klassen voncom.square.picasso
(inSample
) verwenden können, sollte der Prozessor inMode 2
arbeiten. - Wenn es keine
Square's
Picasso
inSample's
Abhängigkeiten betreibtTestProcessor
inMode 1
und erzeugt nur CodeA
.
EDIT 2:
Ich dachte an zwei Abhilfen für dieses Problem:
- Verwendung von zwei Arten von Annotationen für zwei
processor
Modes
(Beispiel:@DoStuffModeOne
,@DoStuffModeTwo
) - eine zweite Art von Anmerkung Verwendung (das zum Beispiel auf den
Application
verwendet werden soll), die die Verwendung vonMode 2
(Beispiel:@TriggerModeTwo
) löst
Für meinen Fall der zweite Problemumgehung ist viel mehr bevorzugt, aber ist immer noch viel schlechter als es wäre, wenn die TestProcessor
selbst entscheiden könnte, welche Mode
zu wählen.
Was genau ist ein "zusätzliches (optional) Paket"? Meinst du ein Java-Paket? Wenn ja, was bedeutet es, dass ein Java-Paket existiert? Meinst du, dass ein Verzeichnis für dieses Java-Paket existiert? Meinst du, dass eine Quelldatei in diesem Verzeichnis existiert?Ich habe keinen Annotationsprozessor geschrieben, daher kann ich Ihnen nicht direkt helfen, aber Ihre Frage zu bearbeiten, um zu verdeutlichen, worauf Sie sich beziehen, könnte anderen helfen, Ihnen zu helfen. – CommonsWare
Sicher, lassen Sie mich klarstellen, dass ... –
zielen Sie auf eine bestimmte Paketprüfung? –