Comment modifier l'AST en utilisant Java 9+

utilisateur:

J'ai essayé de modifier l'AST en utilisant les processeurs d'annotation. J'ai essayé étendre Lombok, mais qui semblait trop dur, alors j'ai décidé d'utiliser les choses de com.sun.source. * Et com.sun.tools.javac. * Cependant, j'utilise java 11, et le document que j'apprenais de , « Guide de Javac du Hacker » http://scg.unibe.ch/archive/projects/Erni08b.pdf utilise Java 6. api ils ont utilisé est maintenant interne et mon module ne peut pas le lire.

En IntelliJ, il m'a donné quelques erreurs, mais je cliqué sur les suggestions (qui dit des choses comme « Ajouter --Xxx-xxx à xxx » sans y prêter attention. Quand j'ai essayé la compilation avec Maven, il a échoué, car le module ne lit pas les entrailles de jdk.compiler.

Voici quelques-unes de mes importations:

    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;

Mon fichier contient le module-info

    requires jdk.compiler;
    requires java.compiler;

J'ai des messages comme "[ERREUR] package com.sun.tools.javac.util est déclaré dans le module jdk.compiler, qui n'exporte pas au module OtherAnnot" et « [ERREUR] (package com.sun.tools.javac. arbre est déclaré dans le module jdk.compiler, qui n'exporte pas au module OtherAnnot) »

Edit: Je suppose que cela est un double, mais je voulais savoir s'il y avait une API alternative pour les transformations AST en java 9.

Jacob G.:

Avec l'introduction du projet Jigsaw, le JDK a été modularisé, ce qui permet aux utilisateurs de créer leurs propres modules. Ces modules vous permet d'exporter des paquets de la vôtre, ce qui permet des programmes qui nécessitent votre module (leur module-info.java) d'utiliser les emballages exportés.

Idéalement, vous seriez interdit d'utiliser des classes qui résident dans des emballages qui ne sont pas exportés. Cependant, pour ne pas casser la rétrocompatibilité, drapeaux VM ont été introduits qui vous permettent de force d' exporter des paquets (qui ne vous appartient pas) à votre module.

Compte tenu de votre message d'erreur, le drapeau VM respectif pour ajouter est:

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

Le modèle est ici:

--add-exports THEIR_MODULE/THEIR_PACKAGE=YOUR_MODULE

Si le compilateur se plaint que les paquets ne sont pas exportés vers le module de sans nom , vous pouvez utiliser les éléments suivants:

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

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=229923&siteId=1
conseillé
Classement