Question

Considérant l'annotation processing modèle de programmation, il est bien établi comment faire pour obtenir une référence à l'compilateur contexte de l'intérieur un processeur d'annotation avec quelque chose comme ceci:

context = ((JavacProcessingEnvironment) this.processingEnv).getContext();

Ce compilateur contexte peut être utilisé lorsqu'une référence est nécessaire pour un compilateur interne installation, comme Attr, Enter, MemberEnter, TreeMaker, etc.via une méthode d'instance d'appel:

make = TreeMaker.instance(context);

Cependant, l'utilisation de Java 8 plugin mécanisme, comment peut-on référence com.sun.tools.javac.util.Context les instances?La documentation indique:

Dans le compilateur, un seul Contexte est utilisé pour chaque invocation de le compilateur.Le contexte est alors utilisé pour assurer une seule copie de chaque compilateur phase existe par le compilateur invocation.

dans le cadre d'un plugin, tandis qu'une référence à la JavacTask est passé (effectivement BasicJavacTask), comment le contexte, l'objet de la présente compilateur phase de le récupérer?

Était-ce utile?

La solution

L'appel getContext() ne fonctionne pas avec le Java 8 compilateur plugin mécanisme:

((JavacTaskImpl) task).getContext()

Par exemple:

import com.sun.tools.javac.api.JavacTaskImpl;
import com.sun.tools.javac.util.Context;
import com.sun.tools.javac.main.JavaCompiler;
// ...

JavacTask javacTask = getJavacTask();
Context context = ((JavacTaskImpl)javacTask).getContext();
JavaCompiler compiler = JavaCompiler.instance( context );

Notez, cependant, que com.sun.tools.javac.main.JavaCompiler ne pas mettre en œuvre la javax.tools.JavaCompiler de l'interface et de son API est donc pas disponible à l'aide de cette technique.En outre, tenu compte de l'avertissement pour JavacTaskImpl et com.sun.tools.javac.main.JavaCompiler:

Ce n'est PAS une partie de tout API pris en charge.Si vous écrivez du code qui en dépend, vous le faites à vos propres risques.Ce code et de ses interfaces internes sont sujettes à modification ou à la suppression sans préavis.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top