package org.xtext.example.mydsl.serializer; import com.google.inject.Inject; import com.google.inject.Provider; import org.eclipse.emf.ecore.EObject; import org.eclipse.xtext.serializer.acceptor.ISemanticSequenceAcceptor; import org.eclipse.xtext.serializer.acceptor.SequenceFeeder; import org.eclipse.xtext.serializer.diagnostic.ISemanticSequencerDiagnosticProvider; import org.eclipse.xtext.serializer.diagnostic.ISerializationDiagnostic.Acceptor; import org.eclipse.xtext.serializer.sequencer.AbstractDelegatingSemanticSequencer; import org.eclipse.xtext.serializer.sequencer.GenericSequencer; import org.eclipse.xtext.serializer.sequencer.ISemanticNodeProvider.INodesForEObjectProvider; import org.eclipse.xtext.serializer.sequencer.ISemanticSequencer; import org.eclipse.xtext.serializer.sequencer.ITransientValueService; import org.eclipse.xtext.serializer.sequencer.ITransientValueService.ValueTransient; import org.xtext.example.mydsl.myDsl.Greeting; import org.xtext.example.mydsl.myDsl.Model; import org.xtext.example.mydsl.myDsl.MyDslPackage; import org.xtext.example.mydsl.services.MyDslGrammarAccess; @SuppressWarnings("all") public class MyDslSemanticSequencer extends AbstractDelegatingSemanticSequencer { @Inject private MyDslGrammarAccess grammarAccess; public void createSequence(EObject context, EObject semanticObject) { if(semanticObject.eClass().getEPackage() == MyDslPackage.eINSTANCE) switch(semanticObject.eClass().getClassifierID()) { case MyDslPackage.GREETING: if(context == grammarAccess.getGreetingRule()) { sequence_Greeting(context, (Greeting) semanticObject); return; } else break; case MyDslPackage.MODEL: if(context == grammarAccess.getModelRule()) { sequence_Model(context, (Model) semanticObject); return; } else break; } if (errorAcceptor != null) errorAcceptor.accept(diagnosticProvider.createInvalidContextOrTypeDiagnostic(semanticObject, context)); } /** * Constraint: * name=ID */ protected void sequence_Greeting(EObject context, Greeting semanticObject) { if(errorAcceptor != null) { if(transientValues.isValueTransient(semanticObject, MyDslPackage.Literals.GREETING__NAME) == ValueTransient.YES) errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MyDslPackage.Literals.GREETING__NAME)); } INodesForEObjectProvider nodes = createNodeProvider(semanticObject); SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes); feeder.accept(grammarAccess.getGreetingAccess().getNameIDTerminalRuleCall_1_0(), semanticObject.getName()); feeder.finish(); } /** * Constraint: * greetings+=Greeting* */ protected void sequence_Model(EObject context, Model semanticObject) { genericSequencer.createSequence(context, semanticObject); } }