Cómo modificar la AST usando Java 9+

usuario:

He estado tratando de modificar la AST usando procesadores de anotación. He intentado extender Lombok, pero que parecía demasiado difícil, así que decidí usar cosas de com.sun.source. * Y com.sun.tools.javac. * Sin embargo, estoy usando java 11, y el documento que estaba aprendiendo de "La Guía del Hacker a javac" http://scg.unibe.ch/archive/projects/Erni08b.pdf , utiliza Java 6. La API que utilizan ahora es interno y mi módulo no puede leerlo.

En IntelliJ, me dio un par de errores, pero lo hace clic en las sugerencias (que decían cosas como "Añadir --Xxx-xxx xxx a" sin prestar atención a ellos. Cuando intenté compilar con Maven, fracasó, ya que el módulo no lee los detalles internos de jdk.compiler.

Estos son algunos de mis importaciones:

    import com.sun.source.util.Trees;
    import com.sun.tools.javac.tree.JCTree;
    import com.sun.tools.javac.tree.TreeMaker;
    import com.sun.tools.javac.tree.TreeTranslator;
    import com.sun.tools.javac.util.Context;

Mi archivo de módulo de información contiene

    requires jdk.compiler;
    requires java.compiler;

Tengo mensajes como "[ERROR] com.sun.tools.javac.util paquete se declara en jdk.compiler módulo, que no lo exporte al módulo OtherAnnot" y "[ERROR] (paquete com.sun.tools.javac. árbol se declara en jdk.compiler módulo, que no lo exporte al módulo OtherAnnot)"

Editar: Supongo que esto es un duplicado, pero quería saber si había alguna alternativa API para las transformaciones de AST en java 9.

Jacob G.:

Con la introducción del Proyecto de Jigsaw, el JDK se ha modularizado, lo que permite a los usuarios crear sus propios módulos. Estos módulos le permite exportar los paquetes de los suyos, permitiendo que los programas que requieren su módulo (en su module-info.java) para utilizar los paquetes exportados.

Idealmente, usted estaría prohibido el uso de clases que residen en paquetes que son no exportan. Sin embargo, para no romper la compatibilidad hacia atrás, se introdujeron banderas VM que le permiten exportar enérgicamente paquetes (que no pertenecen a usted) a su módulo.

Dada su mensaje de error, la bandera VM correspondiente a añadir es:

--add-exports jdk.compiler/com.sun.tools.javac.tree=OtherAnnot

El patrón aquí es:

--add-exports THEIR_MODULE/THEIR_PACKAGE=YOUR_MODULE

Si el compilador se queja de que los paquetes no se exportan al módulo sin nombre , a continuación, puede utilizar lo siguiente:

--add-exports THEIR_MODULE/THEIR_PACKAGE=ALL-UNNAMED

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=229925&siteId=1
Recomendado
Clasificación