Package org.xtext.example.mydsl.serializer

Source Code of org.xtext.example.mydsl.serializer.MyDslSemanticSequencer

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.Attribute;
import org.xtext.example.mydsl.myDsl.Entity;
import org.xtext.example.mydsl.myDsl.Model;
import org.xtext.example.mydsl.myDsl.MyDslPackage;
import org.xtext.example.mydsl.myDsl.Reference;
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.ATTRIBUTE:
        if(context == grammarAccess.getAttributeRule() ||
           context == grammarAccess.getFeatureRule()) {
          sequence_Attribute(context, (Attribute) semanticObject);
          return;
        }
        else break;
      case MyDslPackage.ENTITY:
        if(context == grammarAccess.getEntityRule()) {
          sequence_Entity(context, (Entity) semanticObject);
          return;
        }
        else break;
      case MyDslPackage.MODEL:
        if(context == grammarAccess.getModelRule()) {
          sequence_Model(context, (Model) semanticObject);
          return;
        }
        else break;
      case MyDslPackage.REFERENCE:
        if(context == grammarAccess.getFeatureRule() ||
           context == grammarAccess.getReferenceRule()) {
          sequence_Reference(context, (Reference) semanticObject);
          return;
        }
        else break;
      }
    if (errorAcceptor != null) errorAcceptor.accept(diagnosticProvider.createInvalidContextOrTypeDiagnostic(semanticObject, context));
  }
 
  /**
   * Constraint:
   *     (name=ID type=Type)
   */
  protected void sequence_Attribute(EObject context, Attribute semanticObject) {
    if(errorAcceptor != null) {
      if(transientValues.isValueTransient(semanticObject, MyDslPackage.Literals.FEATURE__NAME) == ValueTransient.YES)
        errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MyDslPackage.Literals.FEATURE__NAME));
      if(transientValues.isValueTransient(semanticObject, MyDslPackage.Literals.ATTRIBUTE__TYPE) == ValueTransient.YES)
        errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MyDslPackage.Literals.ATTRIBUTE__TYPE));
    }
    INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
    SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
    feeder.accept(grammarAccess.getAttributeAccess().getNameIDTerminalRuleCall_1_0(), semanticObject.getName());
    feeder.accept(grammarAccess.getAttributeAccess().getTypeTypeEnumRuleCall_3_0(), semanticObject.getType());
    feeder.finish();
  }
 
 
  /**
   * Constraint:
   *     (name=ID features+=Feature*)
   */
  protected void sequence_Entity(EObject context, Entity semanticObject) {
    genericSequencer.createSequence(context, semanticObject);
  }
 
 
  /**
   * Constraint:
   *     entities+=Entity*
   */
  protected void sequence_Model(EObject context, Model semanticObject) {
    genericSequencer.createSequence(context, semanticObject);
  }
 
 
  /**
   * Constraint:
   *     (name=ID type=[Entity|ID])
   */
  protected void sequence_Reference(EObject context, Reference semanticObject) {
    if(errorAcceptor != null) {
      if(transientValues.isValueTransient(semanticObject, MyDslPackage.Literals.FEATURE__NAME) == ValueTransient.YES)
        errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MyDslPackage.Literals.FEATURE__NAME));
      if(transientValues.isValueTransient(semanticObject, MyDslPackage.Literals.REFERENCE__TYPE) == ValueTransient.YES)
        errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MyDslPackage.Literals.REFERENCE__TYPE));
    }
    INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
    SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
    feeder.accept(grammarAccess.getReferenceAccess().getNameIDTerminalRuleCall_1_0(), semanticObject.getName());
    feeder.accept(grammarAccess.getReferenceAccess().getTypeEntityIDTerminalRuleCall_3_0_1(), semanticObject.getType());
    feeder.finish();
  }
}
TOP

Related Classes of org.xtext.example.mydsl.serializer.MyDslSemanticSequencer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.