Pergunta

Considerando a anotação de processamento de modelo de programação, está bem estabelecido como obter uma referência para o compilador contexto de dentro de um processador de anotação com algo como isto:

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

Este compilador de contexto pode ser utilizado quando uma referência é necessária para um compilador interno facilidade como Attr, Enter, MemberEnter, TreeMaker, etc.através de um método de instância chamada:

make = TreeMaker.instance(context);

No entanto, usando o Java 8 plugin mecanismo de, como referência com.sun.tools.javac.util.Context instâncias?A documentação declara:

Dentro do compilador, um único Contexto é usado para cada invocação de o compilador.O contexto é, então, usado para garantir que uma única cópia de cada compilador fase existe por compilador de invocação.

assim, dentro de um plugin, enquanto uma referência para o JavacTask é passado (efetivamente BasicJavacTask), como pode o objeto de contexto do atual compilador fase de ser recuperada?

Foi útil?

Solução

Chamar getContext() não irá funcionar com o Java 8 compiler plugin mecanismo:

((JavacTaskImpl) task).getContext()

Por exemplo:

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 );

Note, no entanto, que com.sun.tools.javac.main.JavaCompiler não implementar o javax.tools.JavaCompiler interface e sua API é, portanto, indisponível a utilizar esta técnica.Além disso, ouvidos o aviso para JavacTaskImpl e com.sun.tools.javac.main.JavaCompiler:

Este NÃO é parte de nenhuma API suportada.Se você escrever código que depende, você o faz por sua própria conta e risco.Este código e suas interfaces internas estão sujeitos a alterações ou cancelamento sem aviso prévio.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top