I get the following NPE when using the new serializer to serialize a model constructed by a M2M transformation. The model seems to be correct, i.e. no feature assignment is missing.
java.lang.NullPointerException
at org.eclipse.xtext.serializer.sequencer.AbstractSyntacticSequencer.accept(AbstractSyntacticSequencer.java:104)
at org.eclipse.xtext.serializer.sequencer.AbstractSyntacticSequencer.navigateToAbsorber(AbstractSyntacticSequencer.java:426)
at org.eclipse.xtext.serializer.sequencer.AbstractSyntacticSequencer.navigateToAbsorber(AbstractSyntacticSequencer.java:414)
at org.eclipse.xtext.serializer.sequencer.AbstractSyntacticSequencer.finish(AbstractSyntacticSequencer.java:346)
at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.finish(SequenceFeeder.java:369)
at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.createSequence(BacktrackingSemanticSequencer.java:442)
at xxx.cml.serializer.AbstractCmlSemanticSequencer.sequence_WhenUnlessExpression(AbstractCmlSemanticSequencer.java:2308)
at xxx.cml.serializer.AbstractCmlSemanticSequencer.createSequence(AbstractCmlSemanticSequencer.java:1084)
at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptAction(SequenceFeeder.java:292)
at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.accept(SequenceFeeder.java:95)
at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.accept(BacktrackingSemanticSequencer.java:403)
at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.createSequence(BacktrackingSemanticSequencer.java:439)
at xxx.cml.serializer.AbstractCmlSemanticSequencer.sequence_WhenUnlessExpression(AbstractCmlSemanticSequencer.java:2308)
at xxx.cml.serializer.AbstractCmlSemanticSequencer.createSequence(AbstractCmlSemanticSequencer.java:1084)
at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptEObjectRuleCall(SequenceFeeder.java:299)
at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptRuleCall(SequenceFeeder.java:325)
at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.accept(SequenceFeeder.java:215)
at xxx.cml.serializer.AbstractCmlSemanticSequencer.sequence_ConditionalExpression(AbstractCmlSemanticSequencer.java:1174)
at xxx.cml.serializer.AbstractCmlSemanticSequencer.createSequence(AbstractCmlSemanticSequencer.java:257)
at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptAction(SequenceFeeder.java:292)
at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.accept(SequenceFeeder.java:95)
at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.accept(BacktrackingSemanticSequencer.java:403)
at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.createSequence(BacktrackingSemanticSequencer.java:439)
at xxx.cml.serializer.AbstractCmlSemanticSequencer.sequence_AdditiveExpression(AbstractCmlSemanticSequencer.java:1097)
at xxx.cml.serializer.AbstractCmlSemanticSequencer.createSequence(AbstractCmlSemanticSequencer.java:125)
at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptEObjectRuleCall(SequenceFeeder.java:299)
at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptRuleCall(SequenceFeeder.java:325)
at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.accept(SequenceFeeder.java:222)
at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.accept(BacktrackingSemanticSequencer.java:401)
at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.createSequence(BacktrackingSemanticSequencer.java:439)
The relevant part of the grammar is the following:
On 2012-27-09 9:42, Tim Geisler wrote:
> Hi all,
>
> unfortunately, I was today encountered with another instance of my still
> unsolved problem.
>
> Are there any Xtext serializer 2.0 experts who could give me some hint?
>
> Best regards,
>
> Tim
It is quite complicated - you could try overriding:
AbstractCmlSemanticSequencer.sequence_WhenUnlessExpression
And then return what you want returned instead of what is automatically
generated. But that is as much help as I can give you (I am not an expert).
Be prepared to hone your debugging skills and figure out what it is
doing wrong (and what it is supposed to do). Not easy though to debug
backtracking.
One option is to fix the grammar so it does not need backtracking, but
that can be complicated (or close to impossible depending on the language).
BTW, I should have enough experience in debugging backtracking from a former live with Prolog and Haskell programming some time ago.
The problem for me is really to find out "what it is supposed to do" - there really should be (some more | any) documentation.
The parser for the grammar does not need backtracking. With the unparser / serializer, I am not sure whether backtracking is required. It is difficult to change the grammar since the language is in productive use - so a change in the grammar rules must not change the language itself.