0

I'm currently creating a Maven build for a legacy project, and I'm trying to perform the compilation of an Xtext language within the Maven build, as described here. I'm able to run the build, but once maven starts the Xtext MWE2 workflow I get the following issue within the workflow:

[ERROR]: GeneratorException: (Element: -UNKNOWN-; Reported by: Generator)
         org.eclipse.internal.xtend.xtend.parser.ParseException: extraneous input '-' expecting TEXT on line 289
        at org.eclipse.internal.xpand2.parser.XpandParseFacade$3.handleError(XpandParseFacade.java:74)
        at org.eclipse.internal.xpand2.parser.XpandParseFacade$2.reportError(XpandParseFacade.java:63)
        at org.antlr.runtime.BaseRecognizer.recoverFromMismatchedToken(BaseRecognizer.java:596)
        at org.antlr.runtime.BaseRecognizer.match(BaseRecognizer.java:115)
        at org.eclipse.internal.xpand2.parser.XpandParser.template(XpandParser.java:489)
        at org.eclipse.internal.xpand2.parser.XpandParseFacade.file(XpandParseFacade.java:40)
        at org.eclipse.internal.xpand2.parser.XpandParseFacade.file(XpandParseFacade.java:27)
        at org.eclipse.xpand2.XpandExecutionContextImpl$1.parse(XpandExecutionContextImpl.java:174)
        at org.eclipse.xtend.expression.ResourceManagerDefaultImpl.loadResource(ResourceManagerDefaultImpl.java:70)
        at org.eclipse.xpand2.XpandExecutionContextImpl.findTemplate(XpandExecutionContextImpl.java:286)
        at org.eclipse.xpand2.XpandExecutionContextImpl.findTemplate(XpandExecutionContextImpl.java:281)
        at org.eclipse.xpand2.XpandExecutionContextImpl.findDefinition(XpandExecutionContextImpl.java:233)
        at org.eclipse.internal.xpand2.ast.ExpandStatement.invokeDefinition(ExpandStatement.java:236)
        at org.eclipse.internal.xpand2.ast.ExpandStatement.evaluateInternal(ExpandStatement.java:228)
        at org.eclipse.internal.xpand2.ast.Statement.evaluate(Statement.java:41)
        at org.eclipse.internal.xpand2.ast.AbstractDefinition.evaluate(AbstractDefinition.java:176)
        at org.eclipse.xpand2.XpandFacade.evaluate2(XpandFacade.java:62)
        at org.eclipse.xtext.generator.AbstractGeneratorFragment.generate(AbstractGeneratorFragment.java:42)
        at org.eclipse.xtext.generator.parser.antlr.AbstractAntlrGeneratorFragment.generate(AbstractAntlrGeneratorFragment.java:98)
        at org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment.generate(XtextAntlrGeneratorFragment.java:41)
        at org.eclipse.xtext.generator.DefaultGeneratorFragment.generate(DefaultGeneratorFragment.java:122)
        at org.eclipse.xtext.generator.CompositeGeneratorFragment.generate(CompositeGeneratorFragment.java:154)
        at org.eclipse.xtext.generator.Generator.generate(Generator.java:396)
        at org.eclipse.xtext.generator.Generator.invokeInternal(Generator.java:138)
        at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:126)
        at org.eclipse.emf.mwe.core.lib.Mwe2Bridge.invoke(Mwe2Bridge.java:34)
        at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:201)
        at org.eclipse.emf.mwe2.runtime.workflow.AbstractCompositeWorkflowComponent.invoke(AbstractCompositeWorkflowComponent.java:35)
        at org.eclipse.emf.mwe2.runtime.workflow.Workflow.run(Workflow.java:19)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:102)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:62)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:52)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.run(Mwe2Launcher.java:74)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.main(Mwe2Launcher.java:35)
        at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:254)
        at java.lang.Thread.run(Thread.java:748)

java.lang.RuntimeException: Problems running workflow at.jku.mevss.cdsl.GenerateConstraintDSL:
[ERROR]: GeneratorException: (Element: -UNKNOWN-; Reported by: Generator)
         org.eclipse.internal.xtend.xtend.parser.ParseException: extraneous input '-' expecting TEXT on line 289
        at org.eclipse.internal.xpand2.parser.XpandParseFacade$3.handleError(XpandParseFacade.java:74)
        at org.eclipse.internal.xpand2.parser.XpandParseFacade$2.reportError(XpandParseFacade.java:63)
        at org.antlr.runtime.BaseRecognizer.recoverFromMismatchedToken(BaseRecognizer.java:596)
        at org.antlr.runtime.BaseRecognizer.match(BaseRecognizer.java:115)
        at org.eclipse.internal.xpand2.parser.XpandParser.template(XpandParser.java:489)
        at org.eclipse.internal.xpand2.parser.XpandParseFacade.file(XpandParseFacade.java:40)
        at org.eclipse.internal.xpand2.parser.XpandParseFacade.file(XpandParseFacade.java:27)
        at org.eclipse.xpand2.XpandExecutionContextImpl$1.parse(XpandExecutionContextImpl.java:174)
        at org.eclipse.xtend.expression.ResourceManagerDefaultImpl.loadResource(ResourceManagerDefaultImpl.java:70)
        at org.eclipse.xpand2.XpandExecutionContextImpl.findTemplate(XpandExecutionContextImpl.java:286)
        at org.eclipse.xpand2.XpandExecutionContextImpl.findTemplate(XpandExecutionContextImpl.java:281)
        at org.eclipse.xpand2.XpandExecutionContextImpl.findDefinition(XpandExecutionContextImpl.java:233)
        at org.eclipse.internal.xpand2.ast.ExpandStatement.invokeDefinition(ExpandStatement.java:236)
        at org.eclipse.internal.xpand2.ast.ExpandStatement.evaluateInternal(ExpandStatement.java:228)
        at org.eclipse.internal.xpand2.ast.Statement.evaluate(Statement.java:41)
        at org.eclipse.internal.xpand2.ast.AbstractDefinition.evaluate(AbstractDefinition.java:176)
        at org.eclipse.xpand2.XpandFacade.evaluate2(XpandFacade.java:62)
        at org.eclipse.xtext.generator.AbstractGeneratorFragment.generate(AbstractGeneratorFragment.java:42)
        at org.eclipse.xtext.generator.parser.antlr.AbstractAntlrGeneratorFragment.generate(AbstractAntlrGeneratorFragment.java:98)
        at org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment.generate(XtextAntlrGeneratorFragment.java:41)
        at org.eclipse.xtext.generator.DefaultGeneratorFragment.generate(DefaultGeneratorFragment.java:122)
        at org.eclipse.xtext.generator.CompositeGeneratorFragment.generate(CompositeGeneratorFragment.java:154)
        at org.eclipse.xtext.generator.Generator.generate(Generator.java:396)
        at org.eclipse.xtext.generator.Generator.invokeInternal(Generator.java:138)
        at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:126)
        at org.eclipse.emf.mwe.core.lib.Mwe2Bridge.invoke(Mwe2Bridge.java:34)
        at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:201)
        at org.eclipse.emf.mwe2.runtime.workflow.AbstractCompositeWorkflowComponent.invoke(AbstractCompositeWorkflowComponent.java:35)
        at org.eclipse.emf.mwe2.runtime.workflow.Workflow.run(Workflow.java:19)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:102)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:62)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:52)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.run(Mwe2Launcher.java:74)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.main(Mwe2Launcher.java:35)
        at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:254)
        at java.lang.Thread.run(Thread.java:748)

        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:104)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:62)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:52)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.run(Mwe2Launcher.java:74)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.main(Mwe2Launcher.java:35)
        at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:254)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.RuntimeException:
[ERROR]: GeneratorException: (Element: -UNKNOWN-; Reported by: Generator)
         org.eclipse.internal.xtend.xtend.parser.ParseException: extraneous input '-' expecting TEXT on line 289
        at org.eclipse.internal.xpand2.parser.XpandParseFacade$3.handleError(XpandParseFacade.java:74)
        at org.eclipse.internal.xpand2.parser.XpandParseFacade$2.reportError(XpandParseFacade.java:63)
        at org.antlr.runtime.BaseRecognizer.recoverFromMismatchedToken(BaseRecognizer.java:596)
        at org.antlr.runtime.BaseRecognizer.match(BaseRecognizer.java:115)
        at org.eclipse.internal.xpand2.parser.XpandParser.template(XpandParser.java:489)
        at org.eclipse.internal.xpand2.parser.XpandParseFacade.file(XpandParseFacade.java:40)
        at org.eclipse.internal.xpand2.parser.XpandParseFacade.file(XpandParseFacade.java:27)
        at org.eclipse.xpand2.XpandExecutionContextImpl$1.parse(XpandExecutionContextImpl.java:174)
        at org.eclipse.xtend.expression.ResourceManagerDefaultImpl.loadResource(ResourceManagerDefaultImpl.java:70)
        at org.eclipse.xpand2.XpandExecutionContextImpl.findTemplate(XpandExecutionContextImpl.java:286)
        at org.eclipse.xpand2.XpandExecutionContextImpl.findTemplate(XpandExecutionContextImpl.java:281)
        at org.eclipse.xpand2.XpandExecutionContextImpl.findDefinition(XpandExecutionContextImpl.java:233)
        at org.eclipse.internal.xpand2.ast.ExpandStatement.invokeDefinition(ExpandStatement.java:236)
        at org.eclipse.internal.xpand2.ast.ExpandStatement.evaluateInternal(ExpandStatement.java:228)
        at org.eclipse.internal.xpand2.ast.Statement.evaluate(Statement.java:41)
        at org.eclipse.internal.xpand2.ast.AbstractDefinition.evaluate(AbstractDefinition.java:176)
        at org.eclipse.xpand2.XpandFacade.evaluate2(XpandFacade.java:62)
        at org.eclipse.xtext.generator.AbstractGeneratorFragment.generate(AbstractGeneratorFragment.java:42)
        at org.eclipse.xtext.generator.parser.antlr.AbstractAntlrGeneratorFragment.generate(AbstractAntlrGeneratorFragment.java:98)
        at org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment.generate(XtextAntlrGeneratorFragment.java:41)
        at org.eclipse.xtext.generator.DefaultGeneratorFragment.generate(DefaultGeneratorFragment.java:122)
        at org.eclipse.xtext.generator.CompositeGeneratorFragment.generate(CompositeGeneratorFragment.java:154)
        at org.eclipse.xtext.generator.Generator.generate(Generator.java:396)
        at org.eclipse.xtext.generator.Generator.invokeInternal(Generator.java:138)
        at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:126)
        at org.eclipse.emf.mwe.core.lib.Mwe2Bridge.invoke(Mwe2Bridge.java:34)
        at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:201)
        at org.eclipse.emf.mwe2.runtime.workflow.AbstractCompositeWorkflowComponent.invoke(AbstractCompositeWorkflowComponent.java:35)
        at org.eclipse.emf.mwe2.runtime.workflow.Workflow.run(Workflow.java:19)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:102)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:62)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:52)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.run(Mwe2Launcher.java:74)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.main(Mwe2Launcher.java:35)
        at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:254)
        at java.lang.Thread.run(Thread.java:748)

        at org.eclipse.emf.mwe.core.lib.Mwe2Bridge.handleIssues(Mwe2Bridge.java:56)
        at org.eclipse.emf.mwe.core.lib.Mwe2Bridge.invoke(Mwe2Bridge.java:48)
        at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:201)
        at org.eclipse.emf.mwe2.runtime.workflow.AbstractCompositeWorkflowComponent.invoke(AbstractCompositeWorkflowComponent.java:35)
        at org.eclipse.emf.mwe2.runtime.workflow.Workflow.run(Workflow.java:19)
        at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:102)
        ... 6 more

I've searched around a bit and tried to find a way to make the Generator more verbose, but couldn't find anything. Unfortunately I can't really find the source of the error from the error message, since it says the element causing the issue is unknown.

I also manually checked the .xtext file with the language for any loose '-' symbols, but couldn't find any. Any leads on how I could debug this issue? I'm not even really sure where to start digging.

Radioo
  • 422
  • 5
  • 18
  • Without more information, specifically an [mre] for the grammar, this will be nearly impossible to solve. – Polygnome Dec 23 '20 at 08:27
  • Unfortunately I'm unable to provide that much, because of an NDA, and due to the complexity of the project. – Radioo Dec 23 '20 at 08:41
  • An NDA doesn't preclude you from creating an [mre]. You don't need to post any actual code - just code that reproduces the error. – Polygnome Dec 23 '20 at 08:43
  • Part of the issue is, that I'm unable to pinpoint the issue due to the vagueness of the exception. I'd have to provide quite a big amount of files to even make the example runnable - like multiple poms and dependencies. The language itself, which may or may not be the fault, is most likely also required to reproduce the example, which would be actual code. I'm aware, that with that little information it's almost impossible to solve the problem. Rather I'm looking for advice on ways to further investigate the issue myself. – Radioo Dec 23 '20 at 08:50
  • you should also consider to migrate to the new Generator/Workflow that no longer uses Xpand – Christian Dietrich Dec 23 '20 at 10:58
  • please also specify which xtext version you are using – Christian Dietrich Dec 23 '20 at 11:01
  • It's a relatively big legacy project that is being migrated to Maven. Since the transition itself is challenging enough, we would not like to change any dependency versions until the new build is functional. The xtext version is 2.7.3. I'm also a bit stuck, because `org.eclipse.xtext.generator:2.7.3` seems to require `org.eclipse.xtend:1.1.0` which is nowhere to be found in any Maven repos. Under the p2 repo `http://download.eclipse.org/modeling/tmf/xtext/updates/composite/archive` the dependency can be found, but it also automatically downgrades the xtext version to 2.6.1. – Radioo Dec 23 '20 at 12:00

1 Answers1

1

As per your comment further information about the project cannot be given. Instead you are looking for a possibility to investigate further what the root cause is.

I suggest using mvnDebug. This command ships with Maven and allows you to debug the execution of a maven plugin. To set it up properly, you need an eclipse (or whatever IDE) with the source code of the plugin. I'm guessing, you are using the xtext-maven-plugin as shown in the link. To get the source code, the easiest way I find is to set up a new Maven project using the plugin as a dependency. Make sure the version is identical, otherwise debugging can yield funny results.

<dependency>
    <groupId>org.eclipse.xtext</groupId>
    <artifactId>xtext-maven-plugin</artifactId>
    <version>${xtext-version}</version>
</dependency>

Set a breakpoint in one of the classes you want to investigate (e. g. org.eclipse.internal.xpand2.parser.XpandParser.template(XpandParser.java:489)) Then you execute Maven using

mvnDebug verify

(or whatever goal you use) instead of

mvn verify

Maven will then wait for a remote debugger to attach to its process. In Eclipse you create a new Debug Configuration of type Remote Java Application and start it via Debug button.

Debug configuration

From there you can use standard debugging techniques to see where the error happens.

SilverNak
  • 3,283
  • 4
  • 28
  • 44
  • Will this also work if I execute the build using the MWE2Launcher as in the procedure linked in the original question? If I understand correctly the exec-maven-plugin executes the code of the given main class in the same VM that is used to run Maven, but I'm not sure if mvnDebug would be able to debug what is executed by that plugin. I will give it a try. – Radioo Dec 23 '20 at 12:04
  • @Radioo I didn't try it (as I never worked with Xtext). But [this answer](https://stackoverflow.com/a/50294983/7677308) looks like VM Options from Maven are used. As debugging is realized via a VM Option this _might_ work. If it doesn't, you could try to configure the maven-exec-plugin like [here](https://stackoverflow.com/a/15208671/7677308) to include the necessary VM flags. Not very pretty...but for debugging purposes, it might suffice – SilverNak Dec 23 '20 at 15:15