Je travaille sur une grammaire Xtext utilisant Xbase. La grammaire permet à l'utilisateur de créer un ensemble de classes Java avec des supertypes à partir d'un fichier DSL. J'ai donc créé une règle comme suit:types générés dans Xtext/Xbase grammaire
javaClass:
name=ID ':' supertype=JvmParameterizedTypeReference
Mon générateur pour les fichiers de classe fonctionne très bien aussi longtemps que le type ne fait pas référence à un fichier de classe qui est en cours de création par le DSL. Lorsqu'une classe ClassA est créée par exemple à la ligne 3, et une autre classe ClassB avec supertype = ClassA définie à la ligne 4, l'analyseur n'accepte pas le fichier.
Je sais que cela parce que ClassA n'est pas un type connu quand ClassB est analysé, car le générateur est démarré après que le fichier entier ont été analysés.
Est-il néanmoins possible de résoudre mon problème et permettre aux utilisateurs de se référer à des classes qui ont été déclarées plus tôt dans le même fichier DSL?
Oui, je déduis un modèle. J'ai défini la méthode infer dans la classe modelInferrer pour la racine de ce fichier, qui est appelée après que le fichier entier a été analysé. J'ai essayé de définir en plus des méthodes infer pour chaque type de classe défini. Cela pourrait résoudre mon problème, mais ces méthodes ne sont jamais appelées. – Thomas
Pourriez-vous montrer le code? Il se pourrait que vous oubliez le mot-clé "dispatch". Vous devriez appeler la méthode 'accept' sur chaque classe pour les indexer. –
J'ai trouvé le problème entre-temps - il semble que la méthode infer n'est appelée que pour l'élément le plus haut qui correspond. Une fois que la méthode infer est appelée pour un noeud, elle ne sera plus appelée pour aucun noeud contenu. Merci de votre aide! – Thomas