package org.eclipse.emf.mwe2.language.serializer;
import com.google.inject.Inject;
import com.google.inject.Provider;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.mwe2.language.mwe2.Assignment;
import org.eclipse.emf.mwe2.language.mwe2.BooleanLiteral;
import org.eclipse.emf.mwe2.language.mwe2.Component;
import org.eclipse.emf.mwe2.language.mwe2.DeclaredProperty;
import org.eclipse.emf.mwe2.language.mwe2.Import;
import org.eclipse.emf.mwe2.language.mwe2.Module;
import org.eclipse.emf.mwe2.language.mwe2.Mwe2Package;
import org.eclipse.emf.mwe2.language.mwe2.PlainString;
import org.eclipse.emf.mwe2.language.mwe2.PropertyReference;
import org.eclipse.emf.mwe2.language.mwe2.Reference;
import org.eclipse.emf.mwe2.language.mwe2.StringLiteral;
import org.eclipse.emf.mwe2.language.services.Mwe2GrammarAccess;
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;
@SuppressWarnings("all")
public abstract class AbstractMwe2SemanticSequencer extends AbstractDelegatingSemanticSequencer {
@Inject
private Mwe2GrammarAccess grammarAccess;
public void createSequence(EObject context, EObject semanticObject) {
if(semanticObject.eClass().getEPackage() == Mwe2Package.eINSTANCE) switch(semanticObject.eClass().getClassifierID()) {
case Mwe2Package.ASSIGNMENT:
if(context == grammarAccess.getAssignmentRule()) {
sequence_Assignment(context, (Assignment) semanticObject);
return;
}
else break;
case Mwe2Package.BOOLEAN_LITERAL:
if(context == grammarAccess.getBooleanLiteralRule() ||
context == grammarAccess.getValueRule()) {
sequence_BooleanLiteral(context, (BooleanLiteral) semanticObject);
return;
}
else break;
case Mwe2Package.COMPONENT:
if(context == grammarAccess.getComponentRule() ||
context == grammarAccess.getValueRule()) {
sequence_Component(context, (Component) semanticObject);
return;
}
else if(context == grammarAccess.getRootComponentRule()) {
sequence_RootComponent(context, (Component) semanticObject);
return;
}
else break;
case Mwe2Package.DECLARED_PROPERTY:
if(context == grammarAccess.getDeclaredPropertyRule()) {
sequence_DeclaredProperty(context, (DeclaredProperty) semanticObject);
return;
}
else break;
case Mwe2Package.IMPORT:
if(context == grammarAccess.getImportRule()) {
sequence_Import(context, (Import) semanticObject);
return;
}
else break;
case Mwe2Package.MODULE:
if(context == grammarAccess.getModuleRule()) {
sequence_Module(context, (Module) semanticObject);
return;
}
else break;
case Mwe2Package.PLAIN_STRING:
if(context == grammarAccess.getPlainStringRule()) {
sequence_PlainString(context, (PlainString) semanticObject);
return;
}
else break;
case Mwe2Package.PROPERTY_REFERENCE:
if(context == grammarAccess.getPropertyReferenceRule() ||
context == grammarAccess.getPropertyReferenceImplRule()) {
sequence_PropertyReferenceImpl(context, (PropertyReference) semanticObject);
return;
}
else break;
case Mwe2Package.REFERENCE:
if(context == grammarAccess.getReferenceRule() ||
context == grammarAccess.getValueRule()) {
sequence_Reference(context, (Reference) semanticObject);
return;
}
else break;
case Mwe2Package.STRING_LITERAL:
if(context == grammarAccess.getStringLiteralRule() ||
context == grammarAccess.getValueRule()) {
sequence_StringLiteral(context, (StringLiteral) semanticObject);
return;
}
else break;
}
if (errorAcceptor != null) errorAcceptor.accept(diagnosticProvider.createInvalidContextOrTypeDiagnostic(semanticObject, context));
}
/**
* Constraint:
* (feature=[JvmIdentifiableElement|FQN] value=Value)
*/
protected void sequence_Assignment(EObject context, Assignment semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* (isTrue?='true'?)
*/
protected void sequence_BooleanLiteral(EObject context, BooleanLiteral semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* ((type=[JvmType|FQN] | module=[Module|FQN])? name=FQN? autoInject?='auto-inject'? assignment+=Assignment*)
*/
protected void sequence_Component(EObject context, Component semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* (type=[JvmType|FQN]? name=FQN default=Value?)
*/
protected void sequence_DeclaredProperty(EObject context, DeclaredProperty semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* importedNamespace=ImportedFQN
*/
protected void sequence_Import(EObject context, Import semanticObject) {
if(errorAcceptor != null) {
if(transientValues.isValueTransient(semanticObject, Mwe2Package.Literals.IMPORT__IMPORTED_NAMESPACE) == ValueTransient.YES)
errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, Mwe2Package.Literals.IMPORT__IMPORTED_NAMESPACE));
}
INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
feeder.accept(grammarAccess.getImportAccess().getImportedNamespaceImportedFQNParserRuleCall_1_0(), semanticObject.getImportedNamespace());
feeder.finish();
}
/**
* Constraint:
* (canonicalName=FQN imports+=Import* declaredProperties+=DeclaredProperty* root=RootComponent)
*/
protected void sequence_Module(EObject context, Module semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* value=ConstantValue
*/
protected void sequence_PlainString(EObject context, PlainString semanticObject) {
if(errorAcceptor != null) {
if(transientValues.isValueTransient(semanticObject, Mwe2Package.Literals.PLAIN_STRING__VALUE) == ValueTransient.YES)
errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, Mwe2Package.Literals.PLAIN_STRING__VALUE));
}
INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
feeder.accept(grammarAccess.getPlainStringAccess().getValueConstantValueParserRuleCall_0(), semanticObject.getValue());
feeder.finish();
}
/**
* Constraint:
* referable=[DeclaredProperty|FQN]
*/
protected void sequence_PropertyReferenceImpl(EObject context, PropertyReference semanticObject) {
if(errorAcceptor != null) {
if(transientValues.isValueTransient(semanticObject, Mwe2Package.Literals.ABSTRACT_REFERENCE__REFERABLE) == ValueTransient.YES)
errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, Mwe2Package.Literals.ABSTRACT_REFERENCE__REFERABLE));
}
INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
feeder.accept(grammarAccess.getPropertyReferenceImplAccess().getReferableDeclaredPropertyFQNParserRuleCall_0_1(), semanticObject.getReferable());
feeder.finish();
}
/**
* Constraint:
* referable=[Referrable|FQN]
*/
protected void sequence_Reference(EObject context, Reference semanticObject) {
if(errorAcceptor != null) {
if(transientValues.isValueTransient(semanticObject, Mwe2Package.Literals.ABSTRACT_REFERENCE__REFERABLE) == ValueTransient.YES)
errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, Mwe2Package.Literals.ABSTRACT_REFERENCE__REFERABLE));
}
INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
feeder.accept(grammarAccess.getReferenceAccess().getReferableReferrableFQNParserRuleCall_0_1(), semanticObject.getReferable());
feeder.finish();
}
/**
* Constraint:
* ((type=[JvmType|FQN] | module=[Module|FQN]) name=FQN? autoInject?='auto-inject'? assignment+=Assignment*)
*/
protected void sequence_RootComponent(EObject context, Component semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
/**
* Constraint:
* (
* (begin=''' parts+=PlainString? (parts+=PropertyReference parts+=PlainString?)* end=''') |
* (begin='"' parts+=PlainString? (parts+=PropertyReference parts+=PlainString?)* end='"')
* )
*/
protected void sequence_StringLiteral(EObject context, StringLiteral semanticObject) {
genericSequencer.createSequence(context, semanticObject);
}
}