/*
* generated by Xtext
*/
package xtext.parseTreeConstruction;

import org.eclipse.emf.ecore.*;
import org.eclipse.xtext.*;
import org.eclipse.xtext.parsetree.reconstr.IEObjectConsumer;

import xtext.services.XModifGrammarAccess;

import com.google.inject.Inject;

@SuppressWarnings("all")
public class XModifParsetreeConstructor extends org.eclipse.xtext.parsetree.reconstr.impl.AbstractParseTreeConstructor {
		
	@Inject
	private XModifGrammarAccess grammarAccess;
	
	@Override
	protected AbstractToken getRootToken(IEObjectConsumer inst) {
		return new ThisRootNode(inst);	
	}
	
protected class ThisRootNode extends RootToken {
	public ThisRootNode(IEObjectConsumer inst) {
		super(inst);
	}
	
	@Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Modifications_Group(this, this, 0, inst);
			case 1: return new AddDerived_Alternatives(this, this, 1, inst);
			case 2: return new PackageModification_Group(this, this, 2, inst);
			case 3: return new AddRootClass_Group(this, this, 3, inst);
			case 4: return new AddNameClass_Group(this, this, 4, inst);
			case 5: return new AnnotationModification_Group(this, this, 5, inst);
			case 6: return new ClassModification_Group(this, this, 6, inst);
			case 7: return new DataTypeModification_Group(this, this, 7, inst);
			case 8: return new EnumModification_Group(this, this, 8, inst);
			case 9: return new EnumLiteralModification_Group(this, this, 9, inst);
			case 10: return new DetailsEntryModification_Group(this, this, 10, inst);
			case 11: return new AddFeature_Alternatives(this, this, 11, inst);
			case 12: return new AddAttribute_Group(this, this, 12, inst);
			case 13: return new AddReference_Group(this, this, 13, inst);
			case 14: return new StructuralFeatureModification_Alternatives(this, this, 14, inst);
			case 15: return new ChangeBounds_Group(this, this, 15, inst);
			case 16: return new AttributeModification_Group(this, this, 16, inst);
			case 17: return new ReferenceModification_Group(this, this, 17, inst);
			case 18: return new AddOpposite_Group(this, this, 18, inst);
			case 19: return new ReferenceReification_Group(this, this, 19, inst);
			case 20: return new AddDerivedReference_Group(this, this, 20, inst);
			case 21: return new AddDerivedAttribute_Group(this, this, 21, inst);
			case 22: return new Enumerate_Group(this, this, 22, inst);
			default: return null;
		}	
	}	
}
	

/************ begin Rule Modifications ****************
 *
 * Modifications:
 * 	(removeAllAnnotations?="removeAllAnnotations"? & removeAllOperations?="removeAllOperations"? &
 * 	removeAllEStringAttributes?="removeAllEStringAttributes"? & removeAllOpposites?="removeAllOpposites"? &
 * 	addAllOpposite?="addAllOpposite"? & ("addRootClass" addRootClass=AddRootClass)? & ("addNameClass"
 * 	addNameClass=AddNameClass)?) //	{Modifications}	
 * 	"root" rootPackageModification=PackageModification;
 *
 **/

// (removeAllAnnotations?="removeAllAnnotations"? & removeAllOperations?="removeAllOperations"? &
// removeAllEStringAttributes?="removeAllEStringAttributes"? & removeAllOpposites?="removeAllOpposites"? &
// addAllOpposite?="addAllOpposite"? & ("addRootClass" addRootClass=AddRootClass)? & ("addNameClass"
// addNameClass=AddNameClass)?) //	{Modifications}	
// "root" rootPackageModification=PackageModification
protected class Modifications_Group extends GroupToken {
	
	public Modifications_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getModificationsAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Modifications_RootPackageModificationAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getModificationsRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// removeAllAnnotations?="removeAllAnnotations"? & removeAllOperations?="removeAllOperations"? &
// removeAllEStringAttributes?="removeAllEStringAttributes"? & removeAllOpposites?="removeAllOpposites"? &
// addAllOpposite?="addAllOpposite"? & ("addRootClass" addRootClass=AddRootClass)? & ("addNameClass"
// addNameClass=AddNameClass)?
protected class Modifications_UnorderedGroup_0 extends UnorderedGroupToken {
	
	public Modifications_UnorderedGroup_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public UnorderedGroup getGrammarElement() {
		return grammarAccess.getModificationsAccess().getUnorderedGroup_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Modifications_Group_0_6(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Modifications_Group_0_5(lastRuleCallOrigin, this, 1, inst);
			case 2: return new Modifications_AddAllOppositeAssignment_0_4(lastRuleCallOrigin, this, 2, inst);
			case 3: return new Modifications_RemoveAllOppositesAssignment_0_3(lastRuleCallOrigin, this, 3, inst);
			case 4: return new Modifications_RemoveAllEStringAttributesAssignment_0_2(lastRuleCallOrigin, this, 4, inst);
			case 5: return new Modifications_RemoveAllOperationsAssignment_0_1(lastRuleCallOrigin, this, 5, inst);
			case 6: return new Modifications_RemoveAllAnnotationsAssignment_0_0(lastRuleCallOrigin, this, 6, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 7, inst);
		}	
	}

}

// removeAllAnnotations?="removeAllAnnotations"?
protected class Modifications_RemoveAllAnnotationsAssignment_0_0 extends AssignmentToken  {
	
	public Modifications_RemoveAllAnnotationsAssignment_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getModificationsAccess().getRemoveAllAnnotationsAssignment_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("removeAllAnnotations",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("removeAllAnnotations");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getModificationsAccess().getRemoveAllAnnotationsRemoveAllAnnotationsKeyword_0_0_0();
			return obj;
		}
		return null;
	}

}

// removeAllOperations?="removeAllOperations"?
protected class Modifications_RemoveAllOperationsAssignment_0_1 extends AssignmentToken  {
	
	public Modifications_RemoveAllOperationsAssignment_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getModificationsAccess().getRemoveAllOperationsAssignment_0_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Modifications_RemoveAllAnnotationsAssignment_0_0(lastRuleCallOrigin, this, 0, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("removeAllOperations",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("removeAllOperations");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getModificationsAccess().getRemoveAllOperationsRemoveAllOperationsKeyword_0_1_0();
			return obj;
		}
		return null;
	}

}

// removeAllEStringAttributes?="removeAllEStringAttributes"?
protected class Modifications_RemoveAllEStringAttributesAssignment_0_2 extends AssignmentToken  {
	
	public Modifications_RemoveAllEStringAttributesAssignment_0_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getModificationsAccess().getRemoveAllEStringAttributesAssignment_0_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Modifications_RemoveAllOperationsAssignment_0_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Modifications_RemoveAllAnnotationsAssignment_0_0(lastRuleCallOrigin, this, 1, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 2, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("removeAllEStringAttributes",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("removeAllEStringAttributes");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getModificationsAccess().getRemoveAllEStringAttributesRemoveAllEStringAttributesKeyword_0_2_0();
			return obj;
		}
		return null;
	}

}

// removeAllOpposites?="removeAllOpposites"?
protected class Modifications_RemoveAllOppositesAssignment_0_3 extends AssignmentToken  {
	
	public Modifications_RemoveAllOppositesAssignment_0_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getModificationsAccess().getRemoveAllOppositesAssignment_0_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Modifications_RemoveAllEStringAttributesAssignment_0_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Modifications_RemoveAllOperationsAssignment_0_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new Modifications_RemoveAllAnnotationsAssignment_0_0(lastRuleCallOrigin, this, 2, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 3, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("removeAllOpposites",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("removeAllOpposites");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getModificationsAccess().getRemoveAllOppositesRemoveAllOppositesKeyword_0_3_0();
			return obj;
		}
		return null;
	}

}

// addAllOpposite?="addAllOpposite"?
protected class Modifications_AddAllOppositeAssignment_0_4 extends AssignmentToken  {
	
	public Modifications_AddAllOppositeAssignment_0_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getModificationsAccess().getAddAllOppositeAssignment_0_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Modifications_RemoveAllOppositesAssignment_0_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Modifications_RemoveAllEStringAttributesAssignment_0_2(lastRuleCallOrigin, this, 1, inst);
			case 2: return new Modifications_RemoveAllOperationsAssignment_0_1(lastRuleCallOrigin, this, 2, inst);
			case 3: return new Modifications_RemoveAllAnnotationsAssignment_0_0(lastRuleCallOrigin, this, 3, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 4, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("addAllOpposite",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("addAllOpposite");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getModificationsAccess().getAddAllOppositeAddAllOppositeKeyword_0_4_0();
			return obj;
		}
		return null;
	}

}

// ("addRootClass" addRootClass=AddRootClass)?
protected class Modifications_Group_0_5 extends GroupToken {
	
	public Modifications_Group_0_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getModificationsAccess().getGroup_0_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Modifications_AddRootClassAssignment_0_5_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "addRootClass"
protected class Modifications_AddRootClassKeyword_0_5_0 extends KeywordToken  {
	
	public Modifications_AddRootClassKeyword_0_5_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getModificationsAccess().getAddRootClassKeyword_0_5_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Modifications_AddAllOppositeAssignment_0_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Modifications_RemoveAllOppositesAssignment_0_3(lastRuleCallOrigin, this, 1, inst);
			case 2: return new Modifications_RemoveAllEStringAttributesAssignment_0_2(lastRuleCallOrigin, this, 2, inst);
			case 3: return new Modifications_RemoveAllOperationsAssignment_0_1(lastRuleCallOrigin, this, 3, inst);
			case 4: return new Modifications_RemoveAllAnnotationsAssignment_0_0(lastRuleCallOrigin, this, 4, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 5, inst);
		}	
	}

}

// addRootClass=AddRootClass
protected class Modifications_AddRootClassAssignment_0_5_1 extends AssignmentToken  {
	
	public Modifications_AddRootClassAssignment_0_5_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getModificationsAccess().getAddRootClassAssignment_0_5_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddRootClass_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("addRootClass",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("addRootClass");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAddRootClassRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getModificationsAccess().getAddRootClassAddRootClassParserRuleCall_0_5_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Modifications_AddRootClassKeyword_0_5_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// ("addNameClass" addNameClass=AddNameClass)?
protected class Modifications_Group_0_6 extends GroupToken {
	
	public Modifications_Group_0_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getModificationsAccess().getGroup_0_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Modifications_AddNameClassAssignment_0_6_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "addNameClass"
protected class Modifications_AddNameClassKeyword_0_6_0 extends KeywordToken  {
	
	public Modifications_AddNameClassKeyword_0_6_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getModificationsAccess().getAddNameClassKeyword_0_6_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Modifications_Group_0_5(lastRuleCallOrigin, this, 0, inst);
			case 1: return new Modifications_AddAllOppositeAssignment_0_4(lastRuleCallOrigin, this, 1, inst);
			case 2: return new Modifications_RemoveAllOppositesAssignment_0_3(lastRuleCallOrigin, this, 2, inst);
			case 3: return new Modifications_RemoveAllEStringAttributesAssignment_0_2(lastRuleCallOrigin, this, 3, inst);
			case 4: return new Modifications_RemoveAllOperationsAssignment_0_1(lastRuleCallOrigin, this, 4, inst);
			case 5: return new Modifications_RemoveAllAnnotationsAssignment_0_0(lastRuleCallOrigin, this, 5, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 6, inst);
		}	
	}

}

// addNameClass=AddNameClass
protected class Modifications_AddNameClassAssignment_0_6_1 extends AssignmentToken  {
	
	public Modifications_AddNameClassAssignment_0_6_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getModificationsAccess().getAddNameClassAssignment_0_6_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddNameClass_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("addNameClass",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("addNameClass");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAddNameClassRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getModificationsAccess().getAddNameClassAddNameClassParserRuleCall_0_6_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Modifications_AddNameClassKeyword_0_6_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}



// "root"
protected class Modifications_RootKeyword_1 extends KeywordToken  {
	
	public Modifications_RootKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getModificationsAccess().getRootKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Modifications_UnorderedGroup_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// rootPackageModification=PackageModification
protected class Modifications_RootPackageModificationAssignment_2 extends AssignmentToken  {
	
	public Modifications_RootPackageModificationAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getModificationsAccess().getRootPackageModificationAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("rootPackageModification",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("rootPackageModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getPackageModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getModificationsAccess().getRootPackageModificationPackageModificationParserRuleCall_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Modifications_RootKeyword_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


/************ end Rule Modifications ****************/


/************ begin Rule AddDerived ****************
 *
 * AddDerived:
 * 	AddDerivedReference | AddDerivedAttribute;
 *
 **/

// AddDerivedReference | AddDerivedAttribute
protected class AddDerived_Alternatives extends AlternativesToken {

	public AddDerived_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getAddDerivedAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddDerived_AddDerivedReferenceParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AddDerived_AddDerivedAttributeParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAddDerivedAttributeRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getAddDerivedReferenceRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// AddDerivedReference
protected class AddDerived_AddDerivedReferenceParserRuleCall_0 extends RuleCallToken {
	
	public AddDerived_AddDerivedReferenceParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getAddDerivedAccess().getAddDerivedReferenceParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddDerivedReference_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAddDerivedReferenceRule().getType().getClassifier())
			return null;
		if(checkForRecursion(AddDerivedReference_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// AddDerivedAttribute
protected class AddDerived_AddDerivedAttributeParserRuleCall_1 extends RuleCallToken {
	
	public AddDerived_AddDerivedAttributeParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getAddDerivedAccess().getAddDerivedAttributeParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddDerivedAttribute_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAddDerivedAttributeRule().getType().getClassifier())
			return null;
		if(checkForRecursion(AddDerivedAttribute_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule AddDerived ****************/


/************ begin Rule PackageModification ****************
 *
 * PackageModification:
 * 	remove?="remove"? hide?="hide"? oldName=EString ("to" newName=EString)? ("Prefix" oldPrefixName=EString? "to"
 * 	newPrefixName=EString)? ("URI" oldURIName=EString? "to" newURIName=EString)?
 * 	removeEAnnotations?="removeEAnnotations"? ("package" "{" packageModification+=PackageModification (";"
 * 	packageModification+=PackageModification)* "}")? ("class" "{" classModification+=ClassModification (";"
 * 	classModification+=ClassModification)* "}")? ("dataType" "{" dataTypeModification+=DataTypeModification (";"
 * 	dataTypeModification+=DataTypeModification)* "}")? ("enumModification" "{" enumModification+=EnumModification (";"
 * 	enumModification+=EnumModification)* "}")? ("annotation" "{" annotationModification+=AnnotationModification (";"
 * 	annotationModification+=AnnotationModification)* "}")?;
 *
 **/

// remove?="remove"? hide?="hide"? oldName=EString ("to" newName=EString)? ("Prefix" oldPrefixName=EString? "to"
// newPrefixName=EString)? ("URI" oldURIName=EString? "to" newURIName=EString)? removeEAnnotations?="removeEAnnotations"?
// ("package" "{" packageModification+=PackageModification (";" packageModification+=PackageModification)* "}")? ("class"
// "{" classModification+=ClassModification (";" classModification+=ClassModification)* "}")? ("dataType" "{"
// dataTypeModification+=DataTypeModification (";" dataTypeModification+=DataTypeModification)* "}")? ("enumModification"
// "{" enumModification+=EnumModification (";" enumModification+=EnumModification)* "}")? ("annotation" "{"
// annotationModification+=AnnotationModification (";" annotationModification+=AnnotationModification)* "}")?
protected class PackageModification_Group extends GroupToken {
	
	public PackageModification_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_Group_11(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PackageModification_Group_10(lastRuleCallOrigin, this, 1, inst);
			case 2: return new PackageModification_Group_9(lastRuleCallOrigin, this, 2, inst);
			case 3: return new PackageModification_Group_8(lastRuleCallOrigin, this, 3, inst);
			case 4: return new PackageModification_Group_7(lastRuleCallOrigin, this, 4, inst);
			case 5: return new PackageModification_RemoveEAnnotationsAssignment_6(lastRuleCallOrigin, this, 5, inst);
			case 6: return new PackageModification_Group_5(lastRuleCallOrigin, this, 6, inst);
			case 7: return new PackageModification_Group_4(lastRuleCallOrigin, this, 7, inst);
			case 8: return new PackageModification_Group_3(lastRuleCallOrigin, this, 8, inst);
			case 9: return new PackageModification_OldNameAssignment_2(lastRuleCallOrigin, this, 9, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getPackageModificationRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// remove?="remove"?
protected class PackageModification_RemoveAssignment_0 extends AssignmentToken  {
	
	public PackageModification_RemoveAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getRemoveAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("remove",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("remove");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getPackageModificationAccess().getRemoveRemoveKeyword_0_0();
			return obj;
		}
		return null;
	}

}

// hide?="hide"?
protected class PackageModification_HideAssignment_1 extends AssignmentToken  {
	
	public PackageModification_HideAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getHideAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_RemoveAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("hide",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("hide");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getPackageModificationAccess().getHideHideKeyword_1_0();
			return obj;
		}
		return null;
	}

}

// oldName=EString
protected class PackageModification_OldNameAssignment_2 extends AssignmentToken  {
	
	public PackageModification_OldNameAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getOldNameAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_HideAssignment_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PackageModification_RemoveAssignment_0(lastRuleCallOrigin, this, 1, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 2, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("oldName",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("oldName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getPackageModificationAccess().getOldNameEStringParserRuleCall_2_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getPackageModificationAccess().getOldNameEStringParserRuleCall_2_0();
			return obj;
		}
		return null;
	}

}

// ("to" newName=EString)?
protected class PackageModification_Group_3 extends GroupToken {
	
	public PackageModification_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getGroup_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_NewNameAssignment_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "to"
protected class PackageModification_ToKeyword_3_0 extends KeywordToken  {
	
	public PackageModification_ToKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getToKeyword_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_OldNameAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// newName=EString
protected class PackageModification_NewNameAssignment_3_1 extends AssignmentToken  {
	
	public PackageModification_NewNameAssignment_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getNewNameAssignment_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_ToKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("newName",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("newName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getPackageModificationAccess().getNewNameEStringParserRuleCall_3_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getPackageModificationAccess().getNewNameEStringParserRuleCall_3_1_0();
			return obj;
		}
		return null;
	}

}


// ("Prefix" oldPrefixName=EString? "to" newPrefixName=EString)?
protected class PackageModification_Group_4 extends GroupToken {
	
	public PackageModification_Group_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getGroup_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_NewPrefixNameAssignment_4_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "Prefix"
protected class PackageModification_PrefixKeyword_4_0 extends KeywordToken  {
	
	public PackageModification_PrefixKeyword_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getPrefixKeyword_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_Group_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PackageModification_OldNameAssignment_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// oldPrefixName=EString?
protected class PackageModification_OldPrefixNameAssignment_4_1 extends AssignmentToken  {
	
	public PackageModification_OldPrefixNameAssignment_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getOldPrefixNameAssignment_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_PrefixKeyword_4_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("oldPrefixName",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("oldPrefixName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getPackageModificationAccess().getOldPrefixNameEStringParserRuleCall_4_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getPackageModificationAccess().getOldPrefixNameEStringParserRuleCall_4_1_0();
			return obj;
		}
		return null;
	}

}

// "to"
protected class PackageModification_ToKeyword_4_2 extends KeywordToken  {
	
	public PackageModification_ToKeyword_4_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getToKeyword_4_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_OldPrefixNameAssignment_4_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PackageModification_PrefixKeyword_4_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// newPrefixName=EString
protected class PackageModification_NewPrefixNameAssignment_4_3 extends AssignmentToken  {
	
	public PackageModification_NewPrefixNameAssignment_4_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getNewPrefixNameAssignment_4_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_ToKeyword_4_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("newPrefixName",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("newPrefixName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getPackageModificationAccess().getNewPrefixNameEStringParserRuleCall_4_3_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getPackageModificationAccess().getNewPrefixNameEStringParserRuleCall_4_3_0();
			return obj;
		}
		return null;
	}

}


// ("URI" oldURIName=EString? "to" newURIName=EString)?
protected class PackageModification_Group_5 extends GroupToken {
	
	public PackageModification_Group_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getGroup_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_NewURINameAssignment_5_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "URI"
protected class PackageModification_URIKeyword_5_0 extends KeywordToken  {
	
	public PackageModification_URIKeyword_5_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getURIKeyword_5_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_Group_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PackageModification_Group_3(lastRuleCallOrigin, this, 1, inst);
			case 2: return new PackageModification_OldNameAssignment_2(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

}

// oldURIName=EString?
protected class PackageModification_OldURINameAssignment_5_1 extends AssignmentToken  {
	
	public PackageModification_OldURINameAssignment_5_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getOldURINameAssignment_5_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_URIKeyword_5_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("oldURIName",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("oldURIName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getPackageModificationAccess().getOldURINameEStringParserRuleCall_5_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getPackageModificationAccess().getOldURINameEStringParserRuleCall_5_1_0();
			return obj;
		}
		return null;
	}

}

// "to"
protected class PackageModification_ToKeyword_5_2 extends KeywordToken  {
	
	public PackageModification_ToKeyword_5_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getToKeyword_5_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_OldURINameAssignment_5_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PackageModification_URIKeyword_5_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// newURIName=EString
protected class PackageModification_NewURINameAssignment_5_3 extends AssignmentToken  {
	
	public PackageModification_NewURINameAssignment_5_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getNewURINameAssignment_5_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_ToKeyword_5_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("newURIName",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("newURIName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getPackageModificationAccess().getNewURINameEStringParserRuleCall_5_3_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getPackageModificationAccess().getNewURINameEStringParserRuleCall_5_3_0();
			return obj;
		}
		return null;
	}

}


// removeEAnnotations?="removeEAnnotations"?
protected class PackageModification_RemoveEAnnotationsAssignment_6 extends AssignmentToken  {
	
	public PackageModification_RemoveEAnnotationsAssignment_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getRemoveEAnnotationsAssignment_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_Group_5(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PackageModification_Group_4(lastRuleCallOrigin, this, 1, inst);
			case 2: return new PackageModification_Group_3(lastRuleCallOrigin, this, 2, inst);
			case 3: return new PackageModification_OldNameAssignment_2(lastRuleCallOrigin, this, 3, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("removeEAnnotations",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("removeEAnnotations");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getPackageModificationAccess().getRemoveEAnnotationsRemoveEAnnotationsKeyword_6_0();
			return obj;
		}
		return null;
	}

}

// ("package" "{" packageModification+=PackageModification (";" packageModification+=PackageModification)* "}")?
protected class PackageModification_Group_7 extends GroupToken {
	
	public PackageModification_Group_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getGroup_7();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_RightCurlyBracketKeyword_7_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "package"
protected class PackageModification_PackageKeyword_7_0 extends KeywordToken  {
	
	public PackageModification_PackageKeyword_7_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getPackageKeyword_7_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_RemoveEAnnotationsAssignment_6(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PackageModification_Group_5(lastRuleCallOrigin, this, 1, inst);
			case 2: return new PackageModification_Group_4(lastRuleCallOrigin, this, 2, inst);
			case 3: return new PackageModification_Group_3(lastRuleCallOrigin, this, 3, inst);
			case 4: return new PackageModification_OldNameAssignment_2(lastRuleCallOrigin, this, 4, inst);
			default: return null;
		}	
	}

}

// "{"
protected class PackageModification_LeftCurlyBracketKeyword_7_1 extends KeywordToken  {
	
	public PackageModification_LeftCurlyBracketKeyword_7_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getLeftCurlyBracketKeyword_7_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_PackageKeyword_7_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// packageModification+=PackageModification
protected class PackageModification_PackageModificationAssignment_7_2 extends AssignmentToken  {
	
	public PackageModification_PackageModificationAssignment_7_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getPackageModificationAssignment_7_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("packageModification",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("packageModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getPackageModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getPackageModificationAccess().getPackageModificationPackageModificationParserRuleCall_7_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new PackageModification_LeftCurlyBracketKeyword_7_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// (";" packageModification+=PackageModification)*
protected class PackageModification_Group_7_3 extends GroupToken {
	
	public PackageModification_Group_7_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getGroup_7_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_PackageModificationAssignment_7_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ";"
protected class PackageModification_SemicolonKeyword_7_3_0 extends KeywordToken  {
	
	public PackageModification_SemicolonKeyword_7_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getSemicolonKeyword_7_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_Group_7_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PackageModification_PackageModificationAssignment_7_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// packageModification+=PackageModification
protected class PackageModification_PackageModificationAssignment_7_3_1 extends AssignmentToken  {
	
	public PackageModification_PackageModificationAssignment_7_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getPackageModificationAssignment_7_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("packageModification",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("packageModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getPackageModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getPackageModificationAccess().getPackageModificationPackageModificationParserRuleCall_7_3_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new PackageModification_SemicolonKeyword_7_3_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// "}"
protected class PackageModification_RightCurlyBracketKeyword_7_4 extends KeywordToken  {
	
	public PackageModification_RightCurlyBracketKeyword_7_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getRightCurlyBracketKeyword_7_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_Group_7_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PackageModification_PackageModificationAssignment_7_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}


// ("class" "{" classModification+=ClassModification (";" classModification+=ClassModification)* "}")?
protected class PackageModification_Group_8 extends GroupToken {
	
	public PackageModification_Group_8(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getGroup_8();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_RightCurlyBracketKeyword_8_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "class"
protected class PackageModification_ClassKeyword_8_0 extends KeywordToken  {
	
	public PackageModification_ClassKeyword_8_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getClassKeyword_8_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_Group_7(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PackageModification_RemoveEAnnotationsAssignment_6(lastRuleCallOrigin, this, 1, inst);
			case 2: return new PackageModification_Group_5(lastRuleCallOrigin, this, 2, inst);
			case 3: return new PackageModification_Group_4(lastRuleCallOrigin, this, 3, inst);
			case 4: return new PackageModification_Group_3(lastRuleCallOrigin, this, 4, inst);
			case 5: return new PackageModification_OldNameAssignment_2(lastRuleCallOrigin, this, 5, inst);
			default: return null;
		}	
	}

}

// "{"
protected class PackageModification_LeftCurlyBracketKeyword_8_1 extends KeywordToken  {
	
	public PackageModification_LeftCurlyBracketKeyword_8_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getLeftCurlyBracketKeyword_8_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_ClassKeyword_8_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// classModification+=ClassModification
protected class PackageModification_ClassModificationAssignment_8_2 extends AssignmentToken  {
	
	public PackageModification_ClassModificationAssignment_8_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getClassModificationAssignment_8_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ClassModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("classModification",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("classModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getClassModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getPackageModificationAccess().getClassModificationClassModificationParserRuleCall_8_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new PackageModification_LeftCurlyBracketKeyword_8_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// (";" classModification+=ClassModification)*
protected class PackageModification_Group_8_3 extends GroupToken {
	
	public PackageModification_Group_8_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getGroup_8_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_ClassModificationAssignment_8_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ";"
protected class PackageModification_SemicolonKeyword_8_3_0 extends KeywordToken  {
	
	public PackageModification_SemicolonKeyword_8_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getSemicolonKeyword_8_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_Group_8_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PackageModification_ClassModificationAssignment_8_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// classModification+=ClassModification
protected class PackageModification_ClassModificationAssignment_8_3_1 extends AssignmentToken  {
	
	public PackageModification_ClassModificationAssignment_8_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getClassModificationAssignment_8_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ClassModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("classModification",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("classModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getClassModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getPackageModificationAccess().getClassModificationClassModificationParserRuleCall_8_3_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new PackageModification_SemicolonKeyword_8_3_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// "}"
protected class PackageModification_RightCurlyBracketKeyword_8_4 extends KeywordToken  {
	
	public PackageModification_RightCurlyBracketKeyword_8_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getRightCurlyBracketKeyword_8_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_Group_8_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PackageModification_ClassModificationAssignment_8_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}


// ("dataType" "{" dataTypeModification+=DataTypeModification (";" dataTypeModification+=DataTypeModification)* "}")?
protected class PackageModification_Group_9 extends GroupToken {
	
	public PackageModification_Group_9(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getGroup_9();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_RightCurlyBracketKeyword_9_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "dataType"
protected class PackageModification_DataTypeKeyword_9_0 extends KeywordToken  {
	
	public PackageModification_DataTypeKeyword_9_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getDataTypeKeyword_9_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_Group_8(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PackageModification_Group_7(lastRuleCallOrigin, this, 1, inst);
			case 2: return new PackageModification_RemoveEAnnotationsAssignment_6(lastRuleCallOrigin, this, 2, inst);
			case 3: return new PackageModification_Group_5(lastRuleCallOrigin, this, 3, inst);
			case 4: return new PackageModification_Group_4(lastRuleCallOrigin, this, 4, inst);
			case 5: return new PackageModification_Group_3(lastRuleCallOrigin, this, 5, inst);
			case 6: return new PackageModification_OldNameAssignment_2(lastRuleCallOrigin, this, 6, inst);
			default: return null;
		}	
	}

}

// "{"
protected class PackageModification_LeftCurlyBracketKeyword_9_1 extends KeywordToken  {
	
	public PackageModification_LeftCurlyBracketKeyword_9_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getLeftCurlyBracketKeyword_9_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_DataTypeKeyword_9_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// dataTypeModification+=DataTypeModification
protected class PackageModification_DataTypeModificationAssignment_9_2 extends AssignmentToken  {
	
	public PackageModification_DataTypeModificationAssignment_9_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getDataTypeModificationAssignment_9_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("dataTypeModification",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("dataTypeModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDataTypeModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getPackageModificationAccess().getDataTypeModificationDataTypeModificationParserRuleCall_9_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new PackageModification_LeftCurlyBracketKeyword_9_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// (";" dataTypeModification+=DataTypeModification)*
protected class PackageModification_Group_9_3 extends GroupToken {
	
	public PackageModification_Group_9_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getGroup_9_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_DataTypeModificationAssignment_9_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ";"
protected class PackageModification_SemicolonKeyword_9_3_0 extends KeywordToken  {
	
	public PackageModification_SemicolonKeyword_9_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getSemicolonKeyword_9_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_Group_9_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PackageModification_DataTypeModificationAssignment_9_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// dataTypeModification+=DataTypeModification
protected class PackageModification_DataTypeModificationAssignment_9_3_1 extends AssignmentToken  {
	
	public PackageModification_DataTypeModificationAssignment_9_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getDataTypeModificationAssignment_9_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("dataTypeModification",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("dataTypeModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDataTypeModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getPackageModificationAccess().getDataTypeModificationDataTypeModificationParserRuleCall_9_3_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new PackageModification_SemicolonKeyword_9_3_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// "}"
protected class PackageModification_RightCurlyBracketKeyword_9_4 extends KeywordToken  {
	
	public PackageModification_RightCurlyBracketKeyword_9_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getRightCurlyBracketKeyword_9_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_Group_9_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PackageModification_DataTypeModificationAssignment_9_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}


// ("enumModification" "{" enumModification+=EnumModification (";" enumModification+=EnumModification)* "}")?
protected class PackageModification_Group_10 extends GroupToken {
	
	public PackageModification_Group_10(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getGroup_10();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_RightCurlyBracketKeyword_10_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "enumModification"
protected class PackageModification_EnumModificationKeyword_10_0 extends KeywordToken  {
	
	public PackageModification_EnumModificationKeyword_10_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getEnumModificationKeyword_10_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_Group_9(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PackageModification_Group_8(lastRuleCallOrigin, this, 1, inst);
			case 2: return new PackageModification_Group_7(lastRuleCallOrigin, this, 2, inst);
			case 3: return new PackageModification_RemoveEAnnotationsAssignment_6(lastRuleCallOrigin, this, 3, inst);
			case 4: return new PackageModification_Group_5(lastRuleCallOrigin, this, 4, inst);
			case 5: return new PackageModification_Group_4(lastRuleCallOrigin, this, 5, inst);
			case 6: return new PackageModification_Group_3(lastRuleCallOrigin, this, 6, inst);
			case 7: return new PackageModification_OldNameAssignment_2(lastRuleCallOrigin, this, 7, inst);
			default: return null;
		}	
	}

}

// "{"
protected class PackageModification_LeftCurlyBracketKeyword_10_1 extends KeywordToken  {
	
	public PackageModification_LeftCurlyBracketKeyword_10_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getLeftCurlyBracketKeyword_10_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_EnumModificationKeyword_10_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// enumModification+=EnumModification
protected class PackageModification_EnumModificationAssignment_10_2 extends AssignmentToken  {
	
	public PackageModification_EnumModificationAssignment_10_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getEnumModificationAssignment_10_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("enumModification",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("enumModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getEnumModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getPackageModificationAccess().getEnumModificationEnumModificationParserRuleCall_10_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new PackageModification_LeftCurlyBracketKeyword_10_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// (";" enumModification+=EnumModification)*
protected class PackageModification_Group_10_3 extends GroupToken {
	
	public PackageModification_Group_10_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getGroup_10_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_EnumModificationAssignment_10_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ";"
protected class PackageModification_SemicolonKeyword_10_3_0 extends KeywordToken  {
	
	public PackageModification_SemicolonKeyword_10_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getSemicolonKeyword_10_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_Group_10_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PackageModification_EnumModificationAssignment_10_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// enumModification+=EnumModification
protected class PackageModification_EnumModificationAssignment_10_3_1 extends AssignmentToken  {
	
	public PackageModification_EnumModificationAssignment_10_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getEnumModificationAssignment_10_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("enumModification",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("enumModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getEnumModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getPackageModificationAccess().getEnumModificationEnumModificationParserRuleCall_10_3_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new PackageModification_SemicolonKeyword_10_3_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// "}"
protected class PackageModification_RightCurlyBracketKeyword_10_4 extends KeywordToken  {
	
	public PackageModification_RightCurlyBracketKeyword_10_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getRightCurlyBracketKeyword_10_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_Group_10_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PackageModification_EnumModificationAssignment_10_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}


// ("annotation" "{" annotationModification+=AnnotationModification (";" annotationModification+=AnnotationModification)*
// "}")?
protected class PackageModification_Group_11 extends GroupToken {
	
	public PackageModification_Group_11(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getGroup_11();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_RightCurlyBracketKeyword_11_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "annotation"
protected class PackageModification_AnnotationKeyword_11_0 extends KeywordToken  {
	
	public PackageModification_AnnotationKeyword_11_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getAnnotationKeyword_11_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_Group_10(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PackageModification_Group_9(lastRuleCallOrigin, this, 1, inst);
			case 2: return new PackageModification_Group_8(lastRuleCallOrigin, this, 2, inst);
			case 3: return new PackageModification_Group_7(lastRuleCallOrigin, this, 3, inst);
			case 4: return new PackageModification_RemoveEAnnotationsAssignment_6(lastRuleCallOrigin, this, 4, inst);
			case 5: return new PackageModification_Group_5(lastRuleCallOrigin, this, 5, inst);
			case 6: return new PackageModification_Group_4(lastRuleCallOrigin, this, 6, inst);
			case 7: return new PackageModification_Group_3(lastRuleCallOrigin, this, 7, inst);
			case 8: return new PackageModification_OldNameAssignment_2(lastRuleCallOrigin, this, 8, inst);
			default: return null;
		}	
	}

}

// "{"
protected class PackageModification_LeftCurlyBracketKeyword_11_1 extends KeywordToken  {
	
	public PackageModification_LeftCurlyBracketKeyword_11_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getLeftCurlyBracketKeyword_11_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_AnnotationKeyword_11_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// annotationModification+=AnnotationModification
protected class PackageModification_AnnotationModificationAssignment_11_2 extends AssignmentToken  {
	
	public PackageModification_AnnotationModificationAssignment_11_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getAnnotationModificationAssignment_11_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("annotationModification",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("annotationModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAnnotationModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getPackageModificationAccess().getAnnotationModificationAnnotationModificationParserRuleCall_11_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new PackageModification_LeftCurlyBracketKeyword_11_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// (";" annotationModification+=AnnotationModification)*
protected class PackageModification_Group_11_3 extends GroupToken {
	
	public PackageModification_Group_11_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getGroup_11_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_AnnotationModificationAssignment_11_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ";"
protected class PackageModification_SemicolonKeyword_11_3_0 extends KeywordToken  {
	
	public PackageModification_SemicolonKeyword_11_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getSemicolonKeyword_11_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_Group_11_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PackageModification_AnnotationModificationAssignment_11_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// annotationModification+=AnnotationModification
protected class PackageModification_AnnotationModificationAssignment_11_3_1 extends AssignmentToken  {
	
	public PackageModification_AnnotationModificationAssignment_11_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getAnnotationModificationAssignment_11_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("annotationModification",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("annotationModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAnnotationModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getPackageModificationAccess().getAnnotationModificationAnnotationModificationParserRuleCall_11_3_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new PackageModification_SemicolonKeyword_11_3_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// "}"
protected class PackageModification_RightCurlyBracketKeyword_11_4 extends KeywordToken  {
	
	public PackageModification_RightCurlyBracketKeyword_11_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPackageModificationAccess().getRightCurlyBracketKeyword_11_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageModification_Group_11_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PackageModification_AnnotationModificationAssignment_11_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}



/************ end Rule PackageModification ****************/


/************ begin Rule AddRootClass ****************
 *
 * AddRootClass:
 * 	{AddRootClass} name=EString;
 *
 **/

// {AddRootClass} name=EString
protected class AddRootClass_Group extends GroupToken {
	
	public AddRootClass_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAddRootClassAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddRootClass_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAddRootClassAccess().getAddRootClassAction_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {AddRootClass}
protected class AddRootClass_AddRootClassAction_0 extends ActionToken  {

	public AddRootClass_AddRootClassAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getAddRootClassAccess().getAddRootClassAction_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// name=EString
protected class AddRootClass_NameAssignment_1 extends AssignmentToken  {
	
	public AddRootClass_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAddRootClassAccess().getNameAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddRootClass_AddRootClassAction_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAddRootClassAccess().getNameEStringParserRuleCall_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getAddRootClassAccess().getNameEStringParserRuleCall_1_0();
			return obj;
		}
		return null;
	}

}


/************ end Rule AddRootClass ****************/


/************ begin Rule AddNameClass ****************
 *
 * AddNameClass:
 * 	name=EString "(" nameName=EString ")";
 *
 **/

// name=EString "(" nameName=EString ")"
protected class AddNameClass_Group extends GroupToken {
	
	public AddNameClass_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAddNameClassAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddNameClass_RightParenthesisKeyword_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAddNameClassRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// name=EString
protected class AddNameClass_NameAssignment_0 extends AssignmentToken  {
	
	public AddNameClass_NameAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAddNameClassAccess().getNameAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAddNameClassAccess().getNameEStringParserRuleCall_0_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getAddNameClassAccess().getNameEStringParserRuleCall_0_0();
			return obj;
		}
		return null;
	}

}

// "("
protected class AddNameClass_LeftParenthesisKeyword_1 extends KeywordToken  {
	
	public AddNameClass_LeftParenthesisKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAddNameClassAccess().getLeftParenthesisKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddNameClass_NameAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// nameName=EString
protected class AddNameClass_NameNameAssignment_2 extends AssignmentToken  {
	
	public AddNameClass_NameNameAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAddNameClassAccess().getNameNameAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddNameClass_LeftParenthesisKeyword_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("nameName",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("nameName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAddNameClassAccess().getNameNameEStringParserRuleCall_2_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getAddNameClassAccess().getNameNameEStringParserRuleCall_2_0();
			return obj;
		}
		return null;
	}

}

// ")"
protected class AddNameClass_RightParenthesisKeyword_3 extends KeywordToken  {
	
	public AddNameClass_RightParenthesisKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAddNameClassAccess().getRightParenthesisKeyword_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddNameClass_NameNameAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


/************ end Rule AddNameClass ****************/


/************ begin Rule AnnotationModification ****************
 *
 * AnnotationModification:
 * 	remove?="remove"? oldSource=EString ("to" newSource=EString)? removeEAnnotations?="removeEAnnotations"?
 * 	("detailsEntry" "{" detailsEntryModification+=DetailsEntryModification (";"
 * 	detailsEntryModification+=DetailsEntryModification)* "}")? ("annotation" "{"
 * 	annotationModification+=AnnotationModification (";" annotationModification+=AnnotationModification)* "}")?;
 *
 **/

// remove?="remove"? oldSource=EString ("to" newSource=EString)? removeEAnnotations?="removeEAnnotations"? ("detailsEntry"
// "{" detailsEntryModification+=DetailsEntryModification (";" detailsEntryModification+=DetailsEntryModification)* "}")?
// ("annotation" "{" annotationModification+=AnnotationModification (";" annotationModification+=AnnotationModification)*
// "}")?
protected class AnnotationModification_Group extends GroupToken {
	
	public AnnotationModification_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAnnotationModificationAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_Group_5(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AnnotationModification_Group_4(lastRuleCallOrigin, this, 1, inst);
			case 2: return new AnnotationModification_RemoveEAnnotationsAssignment_3(lastRuleCallOrigin, this, 2, inst);
			case 3: return new AnnotationModification_Group_2(lastRuleCallOrigin, this, 3, inst);
			case 4: return new AnnotationModification_OldSourceAssignment_1(lastRuleCallOrigin, this, 4, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAnnotationModificationRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// remove?="remove"?
protected class AnnotationModification_RemoveAssignment_0 extends AssignmentToken  {
	
	public AnnotationModification_RemoveAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAnnotationModificationAccess().getRemoveAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("remove",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("remove");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getAnnotationModificationAccess().getRemoveRemoveKeyword_0_0();
			return obj;
		}
		return null;
	}

}

// oldSource=EString
protected class AnnotationModification_OldSourceAssignment_1 extends AssignmentToken  {
	
	public AnnotationModification_OldSourceAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAnnotationModificationAccess().getOldSourceAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_RemoveAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("oldSource",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("oldSource");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAnnotationModificationAccess().getOldSourceEStringParserRuleCall_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getAnnotationModificationAccess().getOldSourceEStringParserRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// ("to" newSource=EString)?
protected class AnnotationModification_Group_2 extends GroupToken {
	
	public AnnotationModification_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAnnotationModificationAccess().getGroup_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_NewSourceAssignment_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "to"
protected class AnnotationModification_ToKeyword_2_0 extends KeywordToken  {
	
	public AnnotationModification_ToKeyword_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAnnotationModificationAccess().getToKeyword_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_OldSourceAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// newSource=EString
protected class AnnotationModification_NewSourceAssignment_2_1 extends AssignmentToken  {
	
	public AnnotationModification_NewSourceAssignment_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAnnotationModificationAccess().getNewSourceAssignment_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_ToKeyword_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("newSource",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("newSource");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAnnotationModificationAccess().getNewSourceEStringParserRuleCall_2_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getAnnotationModificationAccess().getNewSourceEStringParserRuleCall_2_1_0();
			return obj;
		}
		return null;
	}

}


// removeEAnnotations?="removeEAnnotations"?
protected class AnnotationModification_RemoveEAnnotationsAssignment_3 extends AssignmentToken  {
	
	public AnnotationModification_RemoveEAnnotationsAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAnnotationModificationAccess().getRemoveEAnnotationsAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_Group_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AnnotationModification_OldSourceAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("removeEAnnotations",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("removeEAnnotations");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getAnnotationModificationAccess().getRemoveEAnnotationsRemoveEAnnotationsKeyword_3_0();
			return obj;
		}
		return null;
	}

}

// ("detailsEntry" "{" detailsEntryModification+=DetailsEntryModification (";"
// detailsEntryModification+=DetailsEntryModification)* "}")?
protected class AnnotationModification_Group_4 extends GroupToken {
	
	public AnnotationModification_Group_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAnnotationModificationAccess().getGroup_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_RightCurlyBracketKeyword_4_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "detailsEntry"
protected class AnnotationModification_DetailsEntryKeyword_4_0 extends KeywordToken  {
	
	public AnnotationModification_DetailsEntryKeyword_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAnnotationModificationAccess().getDetailsEntryKeyword_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_RemoveEAnnotationsAssignment_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AnnotationModification_Group_2(lastRuleCallOrigin, this, 1, inst);
			case 2: return new AnnotationModification_OldSourceAssignment_1(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

}

// "{"
protected class AnnotationModification_LeftCurlyBracketKeyword_4_1 extends KeywordToken  {
	
	public AnnotationModification_LeftCurlyBracketKeyword_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAnnotationModificationAccess().getLeftCurlyBracketKeyword_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_DetailsEntryKeyword_4_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// detailsEntryModification+=DetailsEntryModification
protected class AnnotationModification_DetailsEntryModificationAssignment_4_2 extends AssignmentToken  {
	
	public AnnotationModification_DetailsEntryModificationAssignment_4_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAnnotationModificationAccess().getDetailsEntryModificationAssignment_4_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DetailsEntryModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("detailsEntryModification",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("detailsEntryModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDetailsEntryModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getAnnotationModificationAccess().getDetailsEntryModificationDetailsEntryModificationParserRuleCall_4_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new AnnotationModification_LeftCurlyBracketKeyword_4_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// (";" detailsEntryModification+=DetailsEntryModification)*
protected class AnnotationModification_Group_4_3 extends GroupToken {
	
	public AnnotationModification_Group_4_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAnnotationModificationAccess().getGroup_4_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_DetailsEntryModificationAssignment_4_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ";"
protected class AnnotationModification_SemicolonKeyword_4_3_0 extends KeywordToken  {
	
	public AnnotationModification_SemicolonKeyword_4_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAnnotationModificationAccess().getSemicolonKeyword_4_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_Group_4_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AnnotationModification_DetailsEntryModificationAssignment_4_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// detailsEntryModification+=DetailsEntryModification
protected class AnnotationModification_DetailsEntryModificationAssignment_4_3_1 extends AssignmentToken  {
	
	public AnnotationModification_DetailsEntryModificationAssignment_4_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAnnotationModificationAccess().getDetailsEntryModificationAssignment_4_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DetailsEntryModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("detailsEntryModification",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("detailsEntryModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDetailsEntryModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getAnnotationModificationAccess().getDetailsEntryModificationDetailsEntryModificationParserRuleCall_4_3_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new AnnotationModification_SemicolonKeyword_4_3_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// "}"
protected class AnnotationModification_RightCurlyBracketKeyword_4_4 extends KeywordToken  {
	
	public AnnotationModification_RightCurlyBracketKeyword_4_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAnnotationModificationAccess().getRightCurlyBracketKeyword_4_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_Group_4_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AnnotationModification_DetailsEntryModificationAssignment_4_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}


// ("annotation" "{" annotationModification+=AnnotationModification (";" annotationModification+=AnnotationModification)*
// "}")?
protected class AnnotationModification_Group_5 extends GroupToken {
	
	public AnnotationModification_Group_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAnnotationModificationAccess().getGroup_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_RightCurlyBracketKeyword_5_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "annotation"
protected class AnnotationModification_AnnotationKeyword_5_0 extends KeywordToken  {
	
	public AnnotationModification_AnnotationKeyword_5_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAnnotationModificationAccess().getAnnotationKeyword_5_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_Group_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AnnotationModification_RemoveEAnnotationsAssignment_3(lastRuleCallOrigin, this, 1, inst);
			case 2: return new AnnotationModification_Group_2(lastRuleCallOrigin, this, 2, inst);
			case 3: return new AnnotationModification_OldSourceAssignment_1(lastRuleCallOrigin, this, 3, inst);
			default: return null;
		}	
	}

}

// "{"
protected class AnnotationModification_LeftCurlyBracketKeyword_5_1 extends KeywordToken  {
	
	public AnnotationModification_LeftCurlyBracketKeyword_5_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAnnotationModificationAccess().getLeftCurlyBracketKeyword_5_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_AnnotationKeyword_5_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// annotationModification+=AnnotationModification
protected class AnnotationModification_AnnotationModificationAssignment_5_2 extends AssignmentToken  {
	
	public AnnotationModification_AnnotationModificationAssignment_5_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAnnotationModificationAccess().getAnnotationModificationAssignment_5_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("annotationModification",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("annotationModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAnnotationModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getAnnotationModificationAccess().getAnnotationModificationAnnotationModificationParserRuleCall_5_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new AnnotationModification_LeftCurlyBracketKeyword_5_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// (";" annotationModification+=AnnotationModification)*
protected class AnnotationModification_Group_5_3 extends GroupToken {
	
	public AnnotationModification_Group_5_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAnnotationModificationAccess().getGroup_5_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_AnnotationModificationAssignment_5_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ";"
protected class AnnotationModification_SemicolonKeyword_5_3_0 extends KeywordToken  {
	
	public AnnotationModification_SemicolonKeyword_5_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAnnotationModificationAccess().getSemicolonKeyword_5_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_Group_5_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AnnotationModification_AnnotationModificationAssignment_5_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// annotationModification+=AnnotationModification
protected class AnnotationModification_AnnotationModificationAssignment_5_3_1 extends AssignmentToken  {
	
	public AnnotationModification_AnnotationModificationAssignment_5_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAnnotationModificationAccess().getAnnotationModificationAssignment_5_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("annotationModification",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("annotationModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAnnotationModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getAnnotationModificationAccess().getAnnotationModificationAnnotationModificationParserRuleCall_5_3_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new AnnotationModification_SemicolonKeyword_5_3_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// "}"
protected class AnnotationModification_RightCurlyBracketKeyword_5_4 extends KeywordToken  {
	
	public AnnotationModification_RightCurlyBracketKeyword_5_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAnnotationModificationAccess().getRightCurlyBracketKeyword_5_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_Group_5_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AnnotationModification_AnnotationModificationAssignment_5_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}



/************ end Rule AnnotationModification ****************/


/************ begin Rule ClassModification ****************
 *
 * ClassModification:
 * 	remove?="remove"? (hide?="hide"? & flatten?="flatten"? & flattenAll?="flattenAll"?) oldName=EString ("to"
 * 	newName=EString)? (changeAbstract?="changeAbstract"? & removeEAnnotations?="removeEAnnotations"? &
 * 	enumerate=Enumerate?) ("{" featureModification+=StructuralFeatureModification* addFeatures+=AddFeature*
 * 	addDeriveds+=AddDerived* "}")? ("annotation" "{" annotationModification+=AnnotationModification (";"
 * 	annotationModification+=AnnotationModification)* "}")?;
 *
 **/

// remove?="remove"? (hide?="hide"? & flatten?="flatten"? & flattenAll?="flattenAll"?) oldName=EString ("to"
// newName=EString)? (changeAbstract?="changeAbstract"? & removeEAnnotations?="removeEAnnotations"? &
// enumerate=Enumerate?) ("{" featureModification+=StructuralFeatureModification* addFeatures+=AddFeature*
// addDeriveds+=AddDerived* "}")? ("annotation" "{" annotationModification+=AnnotationModification (";"
// annotationModification+=AnnotationModification)* "}")?
protected class ClassModification_Group extends GroupToken {
	
	public ClassModification_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getClassModificationAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ClassModification_Group_6(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ClassModification_Group_5(lastRuleCallOrigin, this, 1, inst);
			case 2: return new ClassModification_UnorderedGroup_4(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getClassModificationRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// remove?="remove"?
protected class ClassModification_RemoveAssignment_0 extends AssignmentToken  {
	
	public ClassModification_RemoveAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getClassModificationAccess().getRemoveAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("remove",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("remove");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getClassModificationAccess().getRemoveRemoveKeyword_0_0();
			return obj;
		}
		return null;
	}

}

// hide?="hide"? & flatten?="flatten"? & flattenAll?="flattenAll"?
protected class ClassModification_UnorderedGroup_1 extends UnorderedGroupToken {
	
	public ClassModification_UnorderedGroup_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public UnorderedGroup getGrammarElement() {
		return grammarAccess.getClassModificationAccess().getUnorderedGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ClassModification_FlattenAllAssignment_1_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ClassModification_FlattenAssignment_1_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new ClassModification_HideAssignment_1_0(lastRuleCallOrigin, this, 2, inst);
			case 3: return new ClassModification_RemoveAssignment_0(lastRuleCallOrigin, this, 3, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 4, inst);
		}	
	}

}

// hide?="hide"?
protected class ClassModification_HideAssignment_1_0 extends AssignmentToken  {
	
	public ClassModification_HideAssignment_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getClassModificationAccess().getHideAssignment_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ClassModification_RemoveAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("hide",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("hide");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getClassModificationAccess().getHideHideKeyword_1_0_0();
			return obj;
		}
		return null;
	}

}

// flatten?="flatten"?
protected class ClassModification_FlattenAssignment_1_1 extends AssignmentToken  {
	
	public ClassModification_FlattenAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getClassModificationAccess().getFlattenAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ClassModification_HideAssignment_1_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ClassModification_RemoveAssignment_0(lastRuleCallOrigin, this, 1, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 2, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("flatten",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("flatten");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getClassModificationAccess().getFlattenFlattenKeyword_1_1_0();
			return obj;
		}
		return null;
	}

}

// flattenAll?="flattenAll"?
protected class ClassModification_FlattenAllAssignment_1_2 extends AssignmentToken  {
	
	public ClassModification_FlattenAllAssignment_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getClassModificationAccess().getFlattenAllAssignment_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ClassModification_FlattenAssignment_1_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ClassModification_HideAssignment_1_0(lastRuleCallOrigin, this, 1, inst);
			case 2: return new ClassModification_RemoveAssignment_0(lastRuleCallOrigin, this, 2, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 3, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("flattenAll",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("flattenAll");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getClassModificationAccess().getFlattenAllFlattenAllKeyword_1_2_0();
			return obj;
		}
		return null;
	}

}


// oldName=EString
protected class ClassModification_OldNameAssignment_2 extends AssignmentToken  {
	
	public ClassModification_OldNameAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getClassModificationAccess().getOldNameAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ClassModification_UnorderedGroup_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("oldName",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("oldName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getClassModificationAccess().getOldNameEStringParserRuleCall_2_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getClassModificationAccess().getOldNameEStringParserRuleCall_2_0();
			return obj;
		}
		return null;
	}

}

// ("to" newName=EString)?
protected class ClassModification_Group_3 extends GroupToken {
	
	public ClassModification_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getClassModificationAccess().getGroup_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ClassModification_NewNameAssignment_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "to"
protected class ClassModification_ToKeyword_3_0 extends KeywordToken  {
	
	public ClassModification_ToKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getClassModificationAccess().getToKeyword_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ClassModification_OldNameAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// newName=EString
protected class ClassModification_NewNameAssignment_3_1 extends AssignmentToken  {
	
	public ClassModification_NewNameAssignment_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getClassModificationAccess().getNewNameAssignment_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ClassModification_ToKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("newName",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("newName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getClassModificationAccess().getNewNameEStringParserRuleCall_3_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getClassModificationAccess().getNewNameEStringParserRuleCall_3_1_0();
			return obj;
		}
		return null;
	}

}


// changeAbstract?="changeAbstract"? & removeEAnnotations?="removeEAnnotations"? & enumerate=Enumerate?
protected class ClassModification_UnorderedGroup_4 extends UnorderedGroupToken {
	
	public ClassModification_UnorderedGroup_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public UnorderedGroup getGrammarElement() {
		return grammarAccess.getClassModificationAccess().getUnorderedGroup_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ClassModification_EnumerateAssignment_4_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ClassModification_RemoveEAnnotationsAssignment_4_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new ClassModification_ChangeAbstractAssignment_4_0(lastRuleCallOrigin, this, 2, inst);
			case 3: return new ClassModification_Group_3(lastRuleCallOrigin, this, 3, inst);
			case 4: return new ClassModification_OldNameAssignment_2(lastRuleCallOrigin, this, 4, inst);
			default: return null;
		}	
	}

}

// changeAbstract?="changeAbstract"?
protected class ClassModification_ChangeAbstractAssignment_4_0 extends AssignmentToken  {
	
	public ClassModification_ChangeAbstractAssignment_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getClassModificationAccess().getChangeAbstractAssignment_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ClassModification_Group_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ClassModification_OldNameAssignment_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("changeAbstract",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("changeAbstract");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getClassModificationAccess().getChangeAbstractChangeAbstractKeyword_4_0_0();
			return obj;
		}
		return null;
	}

}

// removeEAnnotations?="removeEAnnotations"?
protected class ClassModification_RemoveEAnnotationsAssignment_4_1 extends AssignmentToken  {
	
	public ClassModification_RemoveEAnnotationsAssignment_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getClassModificationAccess().getRemoveEAnnotationsAssignment_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ClassModification_ChangeAbstractAssignment_4_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ClassModification_Group_3(lastRuleCallOrigin, this, 1, inst);
			case 2: return new ClassModification_OldNameAssignment_2(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("removeEAnnotations",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("removeEAnnotations");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getClassModificationAccess().getRemoveEAnnotationsRemoveEAnnotationsKeyword_4_1_0();
			return obj;
		}
		return null;
	}

}

// enumerate=Enumerate?
protected class ClassModification_EnumerateAssignment_4_2 extends AssignmentToken  {
	
	public ClassModification_EnumerateAssignment_4_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getClassModificationAccess().getEnumerateAssignment_4_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Enumerate_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("enumerate",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("enumerate");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getEnumerateRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getClassModificationAccess().getEnumerateEnumerateParserRuleCall_4_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ClassModification_RemoveEAnnotationsAssignment_4_1(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new ClassModification_ChangeAbstractAssignment_4_0(lastRuleCallOrigin, next, actIndex, consumed);
			case 2: return new ClassModification_Group_3(lastRuleCallOrigin, next, actIndex, consumed);
			case 3: return new ClassModification_OldNameAssignment_2(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// ("{" featureModification+=StructuralFeatureModification* addFeatures+=AddFeature* addDeriveds+=AddDerived* "}")?
protected class ClassModification_Group_5 extends GroupToken {
	
	public ClassModification_Group_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getClassModificationAccess().getGroup_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ClassModification_RightCurlyBracketKeyword_5_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "{"
protected class ClassModification_LeftCurlyBracketKeyword_5_0 extends KeywordToken  {
	
	public ClassModification_LeftCurlyBracketKeyword_5_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getClassModificationAccess().getLeftCurlyBracketKeyword_5_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ClassModification_UnorderedGroup_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// featureModification+=StructuralFeatureModification*
protected class ClassModification_FeatureModificationAssignment_5_1 extends AssignmentToken  {
	
	public ClassModification_FeatureModificationAssignment_5_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getClassModificationAccess().getFeatureModificationAssignment_5_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new StructuralFeatureModification_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("featureModification",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("featureModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getStructuralFeatureModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getClassModificationAccess().getFeatureModificationStructuralFeatureModificationParserRuleCall_5_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ClassModification_FeatureModificationAssignment_5_1(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new ClassModification_LeftCurlyBracketKeyword_5_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// addFeatures+=AddFeature*
protected class ClassModification_AddFeaturesAssignment_5_2 extends AssignmentToken  {
	
	public ClassModification_AddFeaturesAssignment_5_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getClassModificationAccess().getAddFeaturesAssignment_5_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddFeature_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("addFeatures",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("addFeatures");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAddFeatureRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getClassModificationAccess().getAddFeaturesAddFeatureParserRuleCall_5_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ClassModification_AddFeaturesAssignment_5_2(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new ClassModification_FeatureModificationAssignment_5_1(lastRuleCallOrigin, next, actIndex, consumed);
			case 2: return new ClassModification_LeftCurlyBracketKeyword_5_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// addDeriveds+=AddDerived*
protected class ClassModification_AddDerivedsAssignment_5_3 extends AssignmentToken  {
	
	public ClassModification_AddDerivedsAssignment_5_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getClassModificationAccess().getAddDerivedsAssignment_5_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddDerived_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("addDeriveds",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("addDeriveds");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAddDerivedRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getClassModificationAccess().getAddDerivedsAddDerivedParserRuleCall_5_3_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ClassModification_AddDerivedsAssignment_5_3(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new ClassModification_AddFeaturesAssignment_5_2(lastRuleCallOrigin, next, actIndex, consumed);
			case 2: return new ClassModification_FeatureModificationAssignment_5_1(lastRuleCallOrigin, next, actIndex, consumed);
			case 3: return new ClassModification_LeftCurlyBracketKeyword_5_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// "}"
protected class ClassModification_RightCurlyBracketKeyword_5_4 extends KeywordToken  {
	
	public ClassModification_RightCurlyBracketKeyword_5_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getClassModificationAccess().getRightCurlyBracketKeyword_5_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ClassModification_AddDerivedsAssignment_5_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ClassModification_AddFeaturesAssignment_5_2(lastRuleCallOrigin, this, 1, inst);
			case 2: return new ClassModification_FeatureModificationAssignment_5_1(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

}


// ("annotation" "{" annotationModification+=AnnotationModification (";" annotationModification+=AnnotationModification)*
// "}")?
protected class ClassModification_Group_6 extends GroupToken {
	
	public ClassModification_Group_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getClassModificationAccess().getGroup_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ClassModification_RightCurlyBracketKeyword_6_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "annotation"
protected class ClassModification_AnnotationKeyword_6_0 extends KeywordToken  {
	
	public ClassModification_AnnotationKeyword_6_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getClassModificationAccess().getAnnotationKeyword_6_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ClassModification_Group_5(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ClassModification_UnorderedGroup_4(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// "{"
protected class ClassModification_LeftCurlyBracketKeyword_6_1 extends KeywordToken  {
	
	public ClassModification_LeftCurlyBracketKeyword_6_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getClassModificationAccess().getLeftCurlyBracketKeyword_6_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ClassModification_AnnotationKeyword_6_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// annotationModification+=AnnotationModification
protected class ClassModification_AnnotationModificationAssignment_6_2 extends AssignmentToken  {
	
	public ClassModification_AnnotationModificationAssignment_6_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getClassModificationAccess().getAnnotationModificationAssignment_6_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("annotationModification",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("annotationModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAnnotationModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getClassModificationAccess().getAnnotationModificationAnnotationModificationParserRuleCall_6_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ClassModification_LeftCurlyBracketKeyword_6_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// (";" annotationModification+=AnnotationModification)*
protected class ClassModification_Group_6_3 extends GroupToken {
	
	public ClassModification_Group_6_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getClassModificationAccess().getGroup_6_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ClassModification_AnnotationModificationAssignment_6_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ";"
protected class ClassModification_SemicolonKeyword_6_3_0 extends KeywordToken  {
	
	public ClassModification_SemicolonKeyword_6_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getClassModificationAccess().getSemicolonKeyword_6_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ClassModification_Group_6_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ClassModification_AnnotationModificationAssignment_6_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// annotationModification+=AnnotationModification
protected class ClassModification_AnnotationModificationAssignment_6_3_1 extends AssignmentToken  {
	
	public ClassModification_AnnotationModificationAssignment_6_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getClassModificationAccess().getAnnotationModificationAssignment_6_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("annotationModification",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("annotationModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAnnotationModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getClassModificationAccess().getAnnotationModificationAnnotationModificationParserRuleCall_6_3_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ClassModification_SemicolonKeyword_6_3_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// "}"
protected class ClassModification_RightCurlyBracketKeyword_6_4 extends KeywordToken  {
	
	public ClassModification_RightCurlyBracketKeyword_6_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getClassModificationAccess().getRightCurlyBracketKeyword_6_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ClassModification_Group_6_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ClassModification_AnnotationModificationAssignment_6_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}



/************ end Rule ClassModification ****************/


/************ begin Rule DataTypeModification ****************
 *
 * DataTypeModification:
 * 	remove?="remove"? oldName=EString ("to" newName=EString)? ("oldInstanceType" oldInstanceTypeName=EString)?
 * 	("newInstanceType" newInstanceTypeName=EString)? removeEAnnotations?="removeEAnnotations"? ("annotation" "{"
 * 	annotationModification+=AnnotationModification (";" annotationModification+=AnnotationModification)* "}")?;
 *
 **/

// remove?="remove"? oldName=EString ("to" newName=EString)? ("oldInstanceType" oldInstanceTypeName=EString)?
// ("newInstanceType" newInstanceTypeName=EString)? removeEAnnotations?="removeEAnnotations"? ("annotation" "{"
// annotationModification+=AnnotationModification (";" annotationModification+=AnnotationModification)* "}")?
protected class DataTypeModification_Group extends GroupToken {
	
	public DataTypeModification_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDataTypeModificationAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeModification_Group_6(lastRuleCallOrigin, this, 0, inst);
			case 1: return new DataTypeModification_RemoveEAnnotationsAssignment_5(lastRuleCallOrigin, this, 1, inst);
			case 2: return new DataTypeModification_Group_4(lastRuleCallOrigin, this, 2, inst);
			case 3: return new DataTypeModification_Group_3(lastRuleCallOrigin, this, 3, inst);
			case 4: return new DataTypeModification_Group_2(lastRuleCallOrigin, this, 4, inst);
			case 5: return new DataTypeModification_OldNameAssignment_1(lastRuleCallOrigin, this, 5, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getDataTypeModificationRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// remove?="remove"?
protected class DataTypeModification_RemoveAssignment_0 extends AssignmentToken  {
	
	public DataTypeModification_RemoveAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDataTypeModificationAccess().getRemoveAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("remove",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("remove");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getDataTypeModificationAccess().getRemoveRemoveKeyword_0_0();
			return obj;
		}
		return null;
	}

}

// oldName=EString
protected class DataTypeModification_OldNameAssignment_1 extends AssignmentToken  {
	
	public DataTypeModification_OldNameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDataTypeModificationAccess().getOldNameAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeModification_RemoveAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("oldName",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("oldName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getDataTypeModificationAccess().getOldNameEStringParserRuleCall_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getDataTypeModificationAccess().getOldNameEStringParserRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// ("to" newName=EString)?
protected class DataTypeModification_Group_2 extends GroupToken {
	
	public DataTypeModification_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDataTypeModificationAccess().getGroup_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeModification_NewNameAssignment_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "to"
protected class DataTypeModification_ToKeyword_2_0 extends KeywordToken  {
	
	public DataTypeModification_ToKeyword_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDataTypeModificationAccess().getToKeyword_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeModification_OldNameAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// newName=EString
protected class DataTypeModification_NewNameAssignment_2_1 extends AssignmentToken  {
	
	public DataTypeModification_NewNameAssignment_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDataTypeModificationAccess().getNewNameAssignment_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeModification_ToKeyword_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("newName",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("newName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getDataTypeModificationAccess().getNewNameEStringParserRuleCall_2_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getDataTypeModificationAccess().getNewNameEStringParserRuleCall_2_1_0();
			return obj;
		}
		return null;
	}

}


// ("oldInstanceType" oldInstanceTypeName=EString)?
protected class DataTypeModification_Group_3 extends GroupToken {
	
	public DataTypeModification_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDataTypeModificationAccess().getGroup_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeModification_OldInstanceTypeNameAssignment_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "oldInstanceType"
protected class DataTypeModification_OldInstanceTypeKeyword_3_0 extends KeywordToken  {
	
	public DataTypeModification_OldInstanceTypeKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDataTypeModificationAccess().getOldInstanceTypeKeyword_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeModification_Group_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new DataTypeModification_OldNameAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// oldInstanceTypeName=EString
protected class DataTypeModification_OldInstanceTypeNameAssignment_3_1 extends AssignmentToken  {
	
	public DataTypeModification_OldInstanceTypeNameAssignment_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDataTypeModificationAccess().getOldInstanceTypeNameAssignment_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeModification_OldInstanceTypeKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("oldInstanceTypeName",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("oldInstanceTypeName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getDataTypeModificationAccess().getOldInstanceTypeNameEStringParserRuleCall_3_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getDataTypeModificationAccess().getOldInstanceTypeNameEStringParserRuleCall_3_1_0();
			return obj;
		}
		return null;
	}

}


// ("newInstanceType" newInstanceTypeName=EString)?
protected class DataTypeModification_Group_4 extends GroupToken {
	
	public DataTypeModification_Group_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDataTypeModificationAccess().getGroup_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeModification_NewInstanceTypeNameAssignment_4_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "newInstanceType"
protected class DataTypeModification_NewInstanceTypeKeyword_4_0 extends KeywordToken  {
	
	public DataTypeModification_NewInstanceTypeKeyword_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDataTypeModificationAccess().getNewInstanceTypeKeyword_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeModification_Group_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new DataTypeModification_Group_2(lastRuleCallOrigin, this, 1, inst);
			case 2: return new DataTypeModification_OldNameAssignment_1(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

}

// newInstanceTypeName=EString
protected class DataTypeModification_NewInstanceTypeNameAssignment_4_1 extends AssignmentToken  {
	
	public DataTypeModification_NewInstanceTypeNameAssignment_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDataTypeModificationAccess().getNewInstanceTypeNameAssignment_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeModification_NewInstanceTypeKeyword_4_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("newInstanceTypeName",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("newInstanceTypeName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getDataTypeModificationAccess().getNewInstanceTypeNameEStringParserRuleCall_4_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getDataTypeModificationAccess().getNewInstanceTypeNameEStringParserRuleCall_4_1_0();
			return obj;
		}
		return null;
	}

}


// removeEAnnotations?="removeEAnnotations"?
protected class DataTypeModification_RemoveEAnnotationsAssignment_5 extends AssignmentToken  {
	
	public DataTypeModification_RemoveEAnnotationsAssignment_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDataTypeModificationAccess().getRemoveEAnnotationsAssignment_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeModification_Group_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new DataTypeModification_Group_3(lastRuleCallOrigin, this, 1, inst);
			case 2: return new DataTypeModification_Group_2(lastRuleCallOrigin, this, 2, inst);
			case 3: return new DataTypeModification_OldNameAssignment_1(lastRuleCallOrigin, this, 3, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("removeEAnnotations",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("removeEAnnotations");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getDataTypeModificationAccess().getRemoveEAnnotationsRemoveEAnnotationsKeyword_5_0();
			return obj;
		}
		return null;
	}

}

// ("annotation" "{" annotationModification+=AnnotationModification (";" annotationModification+=AnnotationModification)*
// "}")?
protected class DataTypeModification_Group_6 extends GroupToken {
	
	public DataTypeModification_Group_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDataTypeModificationAccess().getGroup_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeModification_RightCurlyBracketKeyword_6_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "annotation"
protected class DataTypeModification_AnnotationKeyword_6_0 extends KeywordToken  {
	
	public DataTypeModification_AnnotationKeyword_6_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDataTypeModificationAccess().getAnnotationKeyword_6_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeModification_RemoveEAnnotationsAssignment_5(lastRuleCallOrigin, this, 0, inst);
			case 1: return new DataTypeModification_Group_4(lastRuleCallOrigin, this, 1, inst);
			case 2: return new DataTypeModification_Group_3(lastRuleCallOrigin, this, 2, inst);
			case 3: return new DataTypeModification_Group_2(lastRuleCallOrigin, this, 3, inst);
			case 4: return new DataTypeModification_OldNameAssignment_1(lastRuleCallOrigin, this, 4, inst);
			default: return null;
		}	
	}

}

// "{"
protected class DataTypeModification_LeftCurlyBracketKeyword_6_1 extends KeywordToken  {
	
	public DataTypeModification_LeftCurlyBracketKeyword_6_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDataTypeModificationAccess().getLeftCurlyBracketKeyword_6_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeModification_AnnotationKeyword_6_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// annotationModification+=AnnotationModification
protected class DataTypeModification_AnnotationModificationAssignment_6_2 extends AssignmentToken  {
	
	public DataTypeModification_AnnotationModificationAssignment_6_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDataTypeModificationAccess().getAnnotationModificationAssignment_6_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("annotationModification",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("annotationModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAnnotationModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getDataTypeModificationAccess().getAnnotationModificationAnnotationModificationParserRuleCall_6_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new DataTypeModification_LeftCurlyBracketKeyword_6_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// (";" annotationModification+=AnnotationModification)*
protected class DataTypeModification_Group_6_3 extends GroupToken {
	
	public DataTypeModification_Group_6_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDataTypeModificationAccess().getGroup_6_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeModification_AnnotationModificationAssignment_6_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ";"
protected class DataTypeModification_SemicolonKeyword_6_3_0 extends KeywordToken  {
	
	public DataTypeModification_SemicolonKeyword_6_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDataTypeModificationAccess().getSemicolonKeyword_6_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeModification_Group_6_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new DataTypeModification_AnnotationModificationAssignment_6_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// annotationModification+=AnnotationModification
protected class DataTypeModification_AnnotationModificationAssignment_6_3_1 extends AssignmentToken  {
	
	public DataTypeModification_AnnotationModificationAssignment_6_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDataTypeModificationAccess().getAnnotationModificationAssignment_6_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("annotationModification",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("annotationModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAnnotationModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getDataTypeModificationAccess().getAnnotationModificationAnnotationModificationParserRuleCall_6_3_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new DataTypeModification_SemicolonKeyword_6_3_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// "}"
protected class DataTypeModification_RightCurlyBracketKeyword_6_4 extends KeywordToken  {
	
	public DataTypeModification_RightCurlyBracketKeyword_6_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDataTypeModificationAccess().getRightCurlyBracketKeyword_6_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DataTypeModification_Group_6_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new DataTypeModification_AnnotationModificationAssignment_6_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}



/************ end Rule DataTypeModification ****************/


/************ begin Rule EnumModification ****************
 *
 * EnumModification:
 * 	remove?="remove"? reify?="reify"? oldName=EString ("to" newName=EString)? ("oldInstanceType"
 * 	oldInstanceTypeName=EString)? ("newInstanceType" newInstanceTypeName=EString)?
 * 	removeEAnnotations?="removeEAnnotations"? ("{" enumLiteralModification+=EnumLiteralModification (";"
 * 	enumLiteralModification+=EnumLiteralModification)* "}")? ("annotation" "{"
 * 	annotationModification+=AnnotationModification (";" annotationModification+=AnnotationModification)* "}")?;
 *
 **/

// remove?="remove"? reify?="reify"? oldName=EString ("to" newName=EString)? ("oldInstanceType"
// oldInstanceTypeName=EString)? ("newInstanceType" newInstanceTypeName=EString)?
// removeEAnnotations?="removeEAnnotations"? ("{" enumLiteralModification+=EnumLiteralModification (";"
// enumLiteralModification+=EnumLiteralModification)* "}")? ("annotation" "{"
// annotationModification+=AnnotationModification (";" annotationModification+=AnnotationModification)* "}")?
protected class EnumModification_Group extends GroupToken {
	
	public EnumModification_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEnumModificationAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumModification_Group_8(lastRuleCallOrigin, this, 0, inst);
			case 1: return new EnumModification_Group_7(lastRuleCallOrigin, this, 1, inst);
			case 2: return new EnumModification_RemoveEAnnotationsAssignment_6(lastRuleCallOrigin, this, 2, inst);
			case 3: return new EnumModification_Group_5(lastRuleCallOrigin, this, 3, inst);
			case 4: return new EnumModification_Group_4(lastRuleCallOrigin, this, 4, inst);
			case 5: return new EnumModification_Group_3(lastRuleCallOrigin, this, 5, inst);
			case 6: return new EnumModification_OldNameAssignment_2(lastRuleCallOrigin, this, 6, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getEnumModificationRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// remove?="remove"?
protected class EnumModification_RemoveAssignment_0 extends AssignmentToken  {
	
	public EnumModification_RemoveAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumModificationAccess().getRemoveAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("remove",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("remove");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getEnumModificationAccess().getRemoveRemoveKeyword_0_0();
			return obj;
		}
		return null;
	}

}

// reify?="reify"?
protected class EnumModification_ReifyAssignment_1 extends AssignmentToken  {
	
	public EnumModification_ReifyAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumModificationAccess().getReifyAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumModification_RemoveAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("reify",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("reify");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getEnumModificationAccess().getReifyReifyKeyword_1_0();
			return obj;
		}
		return null;
	}

}

// oldName=EString
protected class EnumModification_OldNameAssignment_2 extends AssignmentToken  {
	
	public EnumModification_OldNameAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumModificationAccess().getOldNameAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumModification_ReifyAssignment_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new EnumModification_RemoveAssignment_0(lastRuleCallOrigin, this, 1, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 2, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("oldName",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("oldName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getEnumModificationAccess().getOldNameEStringParserRuleCall_2_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getEnumModificationAccess().getOldNameEStringParserRuleCall_2_0();
			return obj;
		}
		return null;
	}

}

// ("to" newName=EString)?
protected class EnumModification_Group_3 extends GroupToken {
	
	public EnumModification_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEnumModificationAccess().getGroup_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumModification_NewNameAssignment_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "to"
protected class EnumModification_ToKeyword_3_0 extends KeywordToken  {
	
	public EnumModification_ToKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumModificationAccess().getToKeyword_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumModification_OldNameAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// newName=EString
protected class EnumModification_NewNameAssignment_3_1 extends AssignmentToken  {
	
	public EnumModification_NewNameAssignment_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumModificationAccess().getNewNameAssignment_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumModification_ToKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("newName",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("newName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getEnumModificationAccess().getNewNameEStringParserRuleCall_3_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getEnumModificationAccess().getNewNameEStringParserRuleCall_3_1_0();
			return obj;
		}
		return null;
	}

}


// ("oldInstanceType" oldInstanceTypeName=EString)?
protected class EnumModification_Group_4 extends GroupToken {
	
	public EnumModification_Group_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEnumModificationAccess().getGroup_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumModification_OldInstanceTypeNameAssignment_4_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "oldInstanceType"
protected class EnumModification_OldInstanceTypeKeyword_4_0 extends KeywordToken  {
	
	public EnumModification_OldInstanceTypeKeyword_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumModificationAccess().getOldInstanceTypeKeyword_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumModification_Group_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new EnumModification_OldNameAssignment_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// oldInstanceTypeName=EString
protected class EnumModification_OldInstanceTypeNameAssignment_4_1 extends AssignmentToken  {
	
	public EnumModification_OldInstanceTypeNameAssignment_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumModificationAccess().getOldInstanceTypeNameAssignment_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumModification_OldInstanceTypeKeyword_4_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("oldInstanceTypeName",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("oldInstanceTypeName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getEnumModificationAccess().getOldInstanceTypeNameEStringParserRuleCall_4_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getEnumModificationAccess().getOldInstanceTypeNameEStringParserRuleCall_4_1_0();
			return obj;
		}
		return null;
	}

}


// ("newInstanceType" newInstanceTypeName=EString)?
protected class EnumModification_Group_5 extends GroupToken {
	
	public EnumModification_Group_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEnumModificationAccess().getGroup_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumModification_NewInstanceTypeNameAssignment_5_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "newInstanceType"
protected class EnumModification_NewInstanceTypeKeyword_5_0 extends KeywordToken  {
	
	public EnumModification_NewInstanceTypeKeyword_5_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumModificationAccess().getNewInstanceTypeKeyword_5_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumModification_Group_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new EnumModification_Group_3(lastRuleCallOrigin, this, 1, inst);
			case 2: return new EnumModification_OldNameAssignment_2(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

}

// newInstanceTypeName=EString
protected class EnumModification_NewInstanceTypeNameAssignment_5_1 extends AssignmentToken  {
	
	public EnumModification_NewInstanceTypeNameAssignment_5_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumModificationAccess().getNewInstanceTypeNameAssignment_5_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumModification_NewInstanceTypeKeyword_5_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("newInstanceTypeName",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("newInstanceTypeName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getEnumModificationAccess().getNewInstanceTypeNameEStringParserRuleCall_5_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getEnumModificationAccess().getNewInstanceTypeNameEStringParserRuleCall_5_1_0();
			return obj;
		}
		return null;
	}

}


// removeEAnnotations?="removeEAnnotations"?
protected class EnumModification_RemoveEAnnotationsAssignment_6 extends AssignmentToken  {
	
	public EnumModification_RemoveEAnnotationsAssignment_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumModificationAccess().getRemoveEAnnotationsAssignment_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumModification_Group_5(lastRuleCallOrigin, this, 0, inst);
			case 1: return new EnumModification_Group_4(lastRuleCallOrigin, this, 1, inst);
			case 2: return new EnumModification_Group_3(lastRuleCallOrigin, this, 2, inst);
			case 3: return new EnumModification_OldNameAssignment_2(lastRuleCallOrigin, this, 3, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("removeEAnnotations",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("removeEAnnotations");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getEnumModificationAccess().getRemoveEAnnotationsRemoveEAnnotationsKeyword_6_0();
			return obj;
		}
		return null;
	}

}

// ("{" enumLiteralModification+=EnumLiteralModification (";" enumLiteralModification+=EnumLiteralModification)* "}")?
protected class EnumModification_Group_7 extends GroupToken {
	
	public EnumModification_Group_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEnumModificationAccess().getGroup_7();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumModification_RightCurlyBracketKeyword_7_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "{"
protected class EnumModification_LeftCurlyBracketKeyword_7_0 extends KeywordToken  {
	
	public EnumModification_LeftCurlyBracketKeyword_7_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumModificationAccess().getLeftCurlyBracketKeyword_7_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumModification_RemoveEAnnotationsAssignment_6(lastRuleCallOrigin, this, 0, inst);
			case 1: return new EnumModification_Group_5(lastRuleCallOrigin, this, 1, inst);
			case 2: return new EnumModification_Group_4(lastRuleCallOrigin, this, 2, inst);
			case 3: return new EnumModification_Group_3(lastRuleCallOrigin, this, 3, inst);
			case 4: return new EnumModification_OldNameAssignment_2(lastRuleCallOrigin, this, 4, inst);
			default: return null;
		}	
	}

}

// enumLiteralModification+=EnumLiteralModification
protected class EnumModification_EnumLiteralModificationAssignment_7_1 extends AssignmentToken  {
	
	public EnumModification_EnumLiteralModificationAssignment_7_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumModificationAccess().getEnumLiteralModificationAssignment_7_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteralModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("enumLiteralModification",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("enumLiteralModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getEnumLiteralModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getEnumModificationAccess().getEnumLiteralModificationEnumLiteralModificationParserRuleCall_7_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new EnumModification_LeftCurlyBracketKeyword_7_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// (";" enumLiteralModification+=EnumLiteralModification)*
protected class EnumModification_Group_7_2 extends GroupToken {
	
	public EnumModification_Group_7_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEnumModificationAccess().getGroup_7_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumModification_EnumLiteralModificationAssignment_7_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ";"
protected class EnumModification_SemicolonKeyword_7_2_0 extends KeywordToken  {
	
	public EnumModification_SemicolonKeyword_7_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumModificationAccess().getSemicolonKeyword_7_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumModification_Group_7_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new EnumModification_EnumLiteralModificationAssignment_7_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// enumLiteralModification+=EnumLiteralModification
protected class EnumModification_EnumLiteralModificationAssignment_7_2_1 extends AssignmentToken  {
	
	public EnumModification_EnumLiteralModificationAssignment_7_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumModificationAccess().getEnumLiteralModificationAssignment_7_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteralModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("enumLiteralModification",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("enumLiteralModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getEnumLiteralModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getEnumModificationAccess().getEnumLiteralModificationEnumLiteralModificationParserRuleCall_7_2_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new EnumModification_SemicolonKeyword_7_2_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// "}"
protected class EnumModification_RightCurlyBracketKeyword_7_3 extends KeywordToken  {
	
	public EnumModification_RightCurlyBracketKeyword_7_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumModificationAccess().getRightCurlyBracketKeyword_7_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumModification_Group_7_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new EnumModification_EnumLiteralModificationAssignment_7_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}


// ("annotation" "{" annotationModification+=AnnotationModification (";" annotationModification+=AnnotationModification)*
// "}")?
protected class EnumModification_Group_8 extends GroupToken {
	
	public EnumModification_Group_8(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEnumModificationAccess().getGroup_8();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumModification_RightCurlyBracketKeyword_8_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "annotation"
protected class EnumModification_AnnotationKeyword_8_0 extends KeywordToken  {
	
	public EnumModification_AnnotationKeyword_8_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumModificationAccess().getAnnotationKeyword_8_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumModification_Group_7(lastRuleCallOrigin, this, 0, inst);
			case 1: return new EnumModification_RemoveEAnnotationsAssignment_6(lastRuleCallOrigin, this, 1, inst);
			case 2: return new EnumModification_Group_5(lastRuleCallOrigin, this, 2, inst);
			case 3: return new EnumModification_Group_4(lastRuleCallOrigin, this, 3, inst);
			case 4: return new EnumModification_Group_3(lastRuleCallOrigin, this, 4, inst);
			case 5: return new EnumModification_OldNameAssignment_2(lastRuleCallOrigin, this, 5, inst);
			default: return null;
		}	
	}

}

// "{"
protected class EnumModification_LeftCurlyBracketKeyword_8_1 extends KeywordToken  {
	
	public EnumModification_LeftCurlyBracketKeyword_8_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumModificationAccess().getLeftCurlyBracketKeyword_8_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumModification_AnnotationKeyword_8_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// annotationModification+=AnnotationModification
protected class EnumModification_AnnotationModificationAssignment_8_2 extends AssignmentToken  {
	
	public EnumModification_AnnotationModificationAssignment_8_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumModificationAccess().getAnnotationModificationAssignment_8_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("annotationModification",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("annotationModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAnnotationModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getEnumModificationAccess().getAnnotationModificationAnnotationModificationParserRuleCall_8_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new EnumModification_LeftCurlyBracketKeyword_8_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// (";" annotationModification+=AnnotationModification)*
protected class EnumModification_Group_8_3 extends GroupToken {
	
	public EnumModification_Group_8_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEnumModificationAccess().getGroup_8_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumModification_AnnotationModificationAssignment_8_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ";"
protected class EnumModification_SemicolonKeyword_8_3_0 extends KeywordToken  {
	
	public EnumModification_SemicolonKeyword_8_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumModificationAccess().getSemicolonKeyword_8_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumModification_Group_8_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new EnumModification_AnnotationModificationAssignment_8_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// annotationModification+=AnnotationModification
protected class EnumModification_AnnotationModificationAssignment_8_3_1 extends AssignmentToken  {
	
	public EnumModification_AnnotationModificationAssignment_8_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumModificationAccess().getAnnotationModificationAssignment_8_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("annotationModification",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("annotationModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAnnotationModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getEnumModificationAccess().getAnnotationModificationAnnotationModificationParserRuleCall_8_3_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new EnumModification_SemicolonKeyword_8_3_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// "}"
protected class EnumModification_RightCurlyBracketKeyword_8_4 extends KeywordToken  {
	
	public EnumModification_RightCurlyBracketKeyword_8_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumModificationAccess().getRightCurlyBracketKeyword_8_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumModification_Group_8_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new EnumModification_AnnotationModificationAssignment_8_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}



/************ end Rule EnumModification ****************/


/************ begin Rule EnumLiteralModification ****************
 *
 * EnumLiteralModification:
 * 	remove?="remove"? oldName=EString ("to" newName=EString)? ("oldLiteral" oldLiteral=EString "to" newLiteral=EString)?
 * 	("oldValue" oldValue=EInt "to" newValue=EInt)? removeEAnnotations?="removeEAnnotations"? ("annotation" "{"
 * 	annotationModification+=AnnotationModification (";" annotationModification+=AnnotationModification)* "}")?;
 *
 **/

// remove?="remove"? oldName=EString ("to" newName=EString)? ("oldLiteral" oldLiteral=EString "to" newLiteral=EString)?
// ("oldValue" oldValue=EInt "to" newValue=EInt)? removeEAnnotations?="removeEAnnotations"? ("annotation" "{"
// annotationModification+=AnnotationModification (";" annotationModification+=AnnotationModification)* "}")?
protected class EnumLiteralModification_Group extends GroupToken {
	
	public EnumLiteralModification_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEnumLiteralModificationAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteralModification_Group_6(lastRuleCallOrigin, this, 0, inst);
			case 1: return new EnumLiteralModification_RemoveEAnnotationsAssignment_5(lastRuleCallOrigin, this, 1, inst);
			case 2: return new EnumLiteralModification_Group_4(lastRuleCallOrigin, this, 2, inst);
			case 3: return new EnumLiteralModification_Group_3(lastRuleCallOrigin, this, 3, inst);
			case 4: return new EnumLiteralModification_Group_2(lastRuleCallOrigin, this, 4, inst);
			case 5: return new EnumLiteralModification_OldNameAssignment_1(lastRuleCallOrigin, this, 5, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getEnumLiteralModificationRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// remove?="remove"?
protected class EnumLiteralModification_RemoveAssignment_0 extends AssignmentToken  {
	
	public EnumLiteralModification_RemoveAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumLiteralModificationAccess().getRemoveAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("remove",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("remove");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getEnumLiteralModificationAccess().getRemoveRemoveKeyword_0_0();
			return obj;
		}
		return null;
	}

}

// oldName=EString
protected class EnumLiteralModification_OldNameAssignment_1 extends AssignmentToken  {
	
	public EnumLiteralModification_OldNameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumLiteralModificationAccess().getOldNameAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteralModification_RemoveAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("oldName",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("oldName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getEnumLiteralModificationAccess().getOldNameEStringParserRuleCall_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getEnumLiteralModificationAccess().getOldNameEStringParserRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// ("to" newName=EString)?
protected class EnumLiteralModification_Group_2 extends GroupToken {
	
	public EnumLiteralModification_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEnumLiteralModificationAccess().getGroup_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteralModification_NewNameAssignment_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "to"
protected class EnumLiteralModification_ToKeyword_2_0 extends KeywordToken  {
	
	public EnumLiteralModification_ToKeyword_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumLiteralModificationAccess().getToKeyword_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteralModification_OldNameAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// newName=EString
protected class EnumLiteralModification_NewNameAssignment_2_1 extends AssignmentToken  {
	
	public EnumLiteralModification_NewNameAssignment_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumLiteralModificationAccess().getNewNameAssignment_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteralModification_ToKeyword_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("newName",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("newName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getEnumLiteralModificationAccess().getNewNameEStringParserRuleCall_2_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getEnumLiteralModificationAccess().getNewNameEStringParserRuleCall_2_1_0();
			return obj;
		}
		return null;
	}

}


// ("oldLiteral" oldLiteral=EString "to" newLiteral=EString)?
protected class EnumLiteralModification_Group_3 extends GroupToken {
	
	public EnumLiteralModification_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEnumLiteralModificationAccess().getGroup_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteralModification_NewLiteralAssignment_3_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "oldLiteral"
protected class EnumLiteralModification_OldLiteralKeyword_3_0 extends KeywordToken  {
	
	public EnumLiteralModification_OldLiteralKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumLiteralModificationAccess().getOldLiteralKeyword_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteralModification_Group_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new EnumLiteralModification_OldNameAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// oldLiteral=EString
protected class EnumLiteralModification_OldLiteralAssignment_3_1 extends AssignmentToken  {
	
	public EnumLiteralModification_OldLiteralAssignment_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumLiteralModificationAccess().getOldLiteralAssignment_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteralModification_OldLiteralKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("oldLiteral",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("oldLiteral");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getEnumLiteralModificationAccess().getOldLiteralEStringParserRuleCall_3_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getEnumLiteralModificationAccess().getOldLiteralEStringParserRuleCall_3_1_0();
			return obj;
		}
		return null;
	}

}

// "to"
protected class EnumLiteralModification_ToKeyword_3_2 extends KeywordToken  {
	
	public EnumLiteralModification_ToKeyword_3_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumLiteralModificationAccess().getToKeyword_3_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteralModification_OldLiteralAssignment_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// newLiteral=EString
protected class EnumLiteralModification_NewLiteralAssignment_3_3 extends AssignmentToken  {
	
	public EnumLiteralModification_NewLiteralAssignment_3_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumLiteralModificationAccess().getNewLiteralAssignment_3_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteralModification_ToKeyword_3_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("newLiteral",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("newLiteral");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getEnumLiteralModificationAccess().getNewLiteralEStringParserRuleCall_3_3_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getEnumLiteralModificationAccess().getNewLiteralEStringParserRuleCall_3_3_0();
			return obj;
		}
		return null;
	}

}


// ("oldValue" oldValue=EInt "to" newValue=EInt)?
protected class EnumLiteralModification_Group_4 extends GroupToken {
	
	public EnumLiteralModification_Group_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEnumLiteralModificationAccess().getGroup_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteralModification_NewValueAssignment_4_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "oldValue"
protected class EnumLiteralModification_OldValueKeyword_4_0 extends KeywordToken  {
	
	public EnumLiteralModification_OldValueKeyword_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumLiteralModificationAccess().getOldValueKeyword_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteralModification_Group_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new EnumLiteralModification_Group_2(lastRuleCallOrigin, this, 1, inst);
			case 2: return new EnumLiteralModification_OldNameAssignment_1(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

}

// oldValue=EInt
protected class EnumLiteralModification_OldValueAssignment_4_1 extends AssignmentToken  {
	
	public EnumLiteralModification_OldValueAssignment_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumLiteralModificationAccess().getOldValueAssignment_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteralModification_OldValueKeyword_4_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("oldValue",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("oldValue");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getEnumLiteralModificationAccess().getOldValueEIntParserRuleCall_4_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getEnumLiteralModificationAccess().getOldValueEIntParserRuleCall_4_1_0();
			return obj;
		}
		return null;
	}

}

// "to"
protected class EnumLiteralModification_ToKeyword_4_2 extends KeywordToken  {
	
	public EnumLiteralModification_ToKeyword_4_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumLiteralModificationAccess().getToKeyword_4_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteralModification_OldValueAssignment_4_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// newValue=EInt
protected class EnumLiteralModification_NewValueAssignment_4_3 extends AssignmentToken  {
	
	public EnumLiteralModification_NewValueAssignment_4_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumLiteralModificationAccess().getNewValueAssignment_4_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteralModification_ToKeyword_4_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("newValue",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("newValue");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getEnumLiteralModificationAccess().getNewValueEIntParserRuleCall_4_3_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getEnumLiteralModificationAccess().getNewValueEIntParserRuleCall_4_3_0();
			return obj;
		}
		return null;
	}

}


// removeEAnnotations?="removeEAnnotations"?
protected class EnumLiteralModification_RemoveEAnnotationsAssignment_5 extends AssignmentToken  {
	
	public EnumLiteralModification_RemoveEAnnotationsAssignment_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumLiteralModificationAccess().getRemoveEAnnotationsAssignment_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteralModification_Group_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new EnumLiteralModification_Group_3(lastRuleCallOrigin, this, 1, inst);
			case 2: return new EnumLiteralModification_Group_2(lastRuleCallOrigin, this, 2, inst);
			case 3: return new EnumLiteralModification_OldNameAssignment_1(lastRuleCallOrigin, this, 3, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("removeEAnnotations",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("removeEAnnotations");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getEnumLiteralModificationAccess().getRemoveEAnnotationsRemoveEAnnotationsKeyword_5_0();
			return obj;
		}
		return null;
	}

}

// ("annotation" "{" annotationModification+=AnnotationModification (";" annotationModification+=AnnotationModification)*
// "}")?
protected class EnumLiteralModification_Group_6 extends GroupToken {
	
	public EnumLiteralModification_Group_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEnumLiteralModificationAccess().getGroup_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteralModification_RightCurlyBracketKeyword_6_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "annotation"
protected class EnumLiteralModification_AnnotationKeyword_6_0 extends KeywordToken  {
	
	public EnumLiteralModification_AnnotationKeyword_6_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumLiteralModificationAccess().getAnnotationKeyword_6_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteralModification_RemoveEAnnotationsAssignment_5(lastRuleCallOrigin, this, 0, inst);
			case 1: return new EnumLiteralModification_Group_4(lastRuleCallOrigin, this, 1, inst);
			case 2: return new EnumLiteralModification_Group_3(lastRuleCallOrigin, this, 2, inst);
			case 3: return new EnumLiteralModification_Group_2(lastRuleCallOrigin, this, 3, inst);
			case 4: return new EnumLiteralModification_OldNameAssignment_1(lastRuleCallOrigin, this, 4, inst);
			default: return null;
		}	
	}

}

// "{"
protected class EnumLiteralModification_LeftCurlyBracketKeyword_6_1 extends KeywordToken  {
	
	public EnumLiteralModification_LeftCurlyBracketKeyword_6_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumLiteralModificationAccess().getLeftCurlyBracketKeyword_6_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteralModification_AnnotationKeyword_6_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// annotationModification+=AnnotationModification
protected class EnumLiteralModification_AnnotationModificationAssignment_6_2 extends AssignmentToken  {
	
	public EnumLiteralModification_AnnotationModificationAssignment_6_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumLiteralModificationAccess().getAnnotationModificationAssignment_6_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("annotationModification",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("annotationModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAnnotationModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getEnumLiteralModificationAccess().getAnnotationModificationAnnotationModificationParserRuleCall_6_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new EnumLiteralModification_LeftCurlyBracketKeyword_6_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// (";" annotationModification+=AnnotationModification)*
protected class EnumLiteralModification_Group_6_3 extends GroupToken {
	
	public EnumLiteralModification_Group_6_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEnumLiteralModificationAccess().getGroup_6_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteralModification_AnnotationModificationAssignment_6_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ";"
protected class EnumLiteralModification_SemicolonKeyword_6_3_0 extends KeywordToken  {
	
	public EnumLiteralModification_SemicolonKeyword_6_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumLiteralModificationAccess().getSemicolonKeyword_6_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteralModification_Group_6_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new EnumLiteralModification_AnnotationModificationAssignment_6_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// annotationModification+=AnnotationModification
protected class EnumLiteralModification_AnnotationModificationAssignment_6_3_1 extends AssignmentToken  {
	
	public EnumLiteralModification_AnnotationModificationAssignment_6_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumLiteralModificationAccess().getAnnotationModificationAssignment_6_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("annotationModification",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("annotationModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAnnotationModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getEnumLiteralModificationAccess().getAnnotationModificationAnnotationModificationParserRuleCall_6_3_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new EnumLiteralModification_SemicolonKeyword_6_3_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// "}"
protected class EnumLiteralModification_RightCurlyBracketKeyword_6_4 extends KeywordToken  {
	
	public EnumLiteralModification_RightCurlyBracketKeyword_6_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumLiteralModificationAccess().getRightCurlyBracketKeyword_6_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new EnumLiteralModification_Group_6_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new EnumLiteralModification_AnnotationModificationAssignment_6_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}



/************ end Rule EnumLiteralModification ****************/


/************ begin Rule DetailsEntryModification ****************
 *
 * DetailsEntryModification:
 * 	remove?="remove"? oldKey=EString ("to" newKey=EString)? ("oldValue" oldValue=EString "to" newValue=EString)? "}";
 *
 **/

// remove?="remove"? oldKey=EString ("to" newKey=EString)? ("oldValue" oldValue=EString "to" newValue=EString)? "}"
protected class DetailsEntryModification_Group extends GroupToken {
	
	public DetailsEntryModification_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDetailsEntryModificationAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DetailsEntryModification_RightCurlyBracketKeyword_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getDetailsEntryModificationRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// remove?="remove"?
protected class DetailsEntryModification_RemoveAssignment_0 extends AssignmentToken  {
	
	public DetailsEntryModification_RemoveAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDetailsEntryModificationAccess().getRemoveAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("remove",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("remove");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getDetailsEntryModificationAccess().getRemoveRemoveKeyword_0_0();
			return obj;
		}
		return null;
	}

}

// oldKey=EString
protected class DetailsEntryModification_OldKeyAssignment_1 extends AssignmentToken  {
	
	public DetailsEntryModification_OldKeyAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDetailsEntryModificationAccess().getOldKeyAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DetailsEntryModification_RemoveAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("oldKey",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("oldKey");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getDetailsEntryModificationAccess().getOldKeyEStringParserRuleCall_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getDetailsEntryModificationAccess().getOldKeyEStringParserRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// ("to" newKey=EString)?
protected class DetailsEntryModification_Group_2 extends GroupToken {
	
	public DetailsEntryModification_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDetailsEntryModificationAccess().getGroup_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DetailsEntryModification_NewKeyAssignment_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "to"
protected class DetailsEntryModification_ToKeyword_2_0 extends KeywordToken  {
	
	public DetailsEntryModification_ToKeyword_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDetailsEntryModificationAccess().getToKeyword_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DetailsEntryModification_OldKeyAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// newKey=EString
protected class DetailsEntryModification_NewKeyAssignment_2_1 extends AssignmentToken  {
	
	public DetailsEntryModification_NewKeyAssignment_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDetailsEntryModificationAccess().getNewKeyAssignment_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DetailsEntryModification_ToKeyword_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("newKey",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("newKey");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getDetailsEntryModificationAccess().getNewKeyEStringParserRuleCall_2_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getDetailsEntryModificationAccess().getNewKeyEStringParserRuleCall_2_1_0();
			return obj;
		}
		return null;
	}

}


// ("oldValue" oldValue=EString "to" newValue=EString)?
protected class DetailsEntryModification_Group_3 extends GroupToken {
	
	public DetailsEntryModification_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getDetailsEntryModificationAccess().getGroup_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DetailsEntryModification_NewValueAssignment_3_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "oldValue"
protected class DetailsEntryModification_OldValueKeyword_3_0 extends KeywordToken  {
	
	public DetailsEntryModification_OldValueKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDetailsEntryModificationAccess().getOldValueKeyword_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DetailsEntryModification_Group_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new DetailsEntryModification_OldKeyAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// oldValue=EString
protected class DetailsEntryModification_OldValueAssignment_3_1 extends AssignmentToken  {
	
	public DetailsEntryModification_OldValueAssignment_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDetailsEntryModificationAccess().getOldValueAssignment_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DetailsEntryModification_OldValueKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("oldValue",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("oldValue");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getDetailsEntryModificationAccess().getOldValueEStringParserRuleCall_3_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getDetailsEntryModificationAccess().getOldValueEStringParserRuleCall_3_1_0();
			return obj;
		}
		return null;
	}

}

// "to"
protected class DetailsEntryModification_ToKeyword_3_2 extends KeywordToken  {
	
	public DetailsEntryModification_ToKeyword_3_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDetailsEntryModificationAccess().getToKeyword_3_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DetailsEntryModification_OldValueAssignment_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// newValue=EString
protected class DetailsEntryModification_NewValueAssignment_3_3 extends AssignmentToken  {
	
	public DetailsEntryModification_NewValueAssignment_3_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDetailsEntryModificationAccess().getNewValueAssignment_3_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DetailsEntryModification_ToKeyword_3_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("newValue",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("newValue");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getDetailsEntryModificationAccess().getNewValueEStringParserRuleCall_3_3_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getDetailsEntryModificationAccess().getNewValueEStringParserRuleCall_3_3_0();
			return obj;
		}
		return null;
	}

}


// "}"
protected class DetailsEntryModification_RightCurlyBracketKeyword_4 extends KeywordToken  {
	
	public DetailsEntryModification_RightCurlyBracketKeyword_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getDetailsEntryModificationAccess().getRightCurlyBracketKeyword_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new DetailsEntryModification_Group_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new DetailsEntryModification_Group_2(lastRuleCallOrigin, this, 1, inst);
			case 2: return new DetailsEntryModification_OldKeyAssignment_1(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

}


/************ end Rule DetailsEntryModification ****************/


/************ begin Rule AddFeature ****************
 *
 * AddFeature:
 * 	AddAttribute | AddReference;
 *
 **/

// AddAttribute | AddReference
protected class AddFeature_Alternatives extends AlternativesToken {

	public AddFeature_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getAddFeatureAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddFeature_AddAttributeParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AddFeature_AddReferenceParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAddAttributeRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getAddReferenceRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// AddAttribute
protected class AddFeature_AddAttributeParserRuleCall_0 extends RuleCallToken {
	
	public AddFeature_AddAttributeParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getAddFeatureAccess().getAddAttributeParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddAttribute_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAddAttributeRule().getType().getClassifier())
			return null;
		if(checkForRecursion(AddAttribute_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// AddReference
protected class AddFeature_AddReferenceParserRuleCall_1 extends RuleCallToken {
	
	public AddFeature_AddReferenceParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getAddFeatureAccess().getAddReferenceParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddReference_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAddReferenceRule().getType().getClassifier())
			return null;
		if(checkForRecursion(AddReference_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule AddFeature ****************/


/************ begin Rule AddAttribute ****************
 *
 * AddAttribute:
 * 	"addAttribute" "(" name=EString "," type=PrimitiveType "," lower=EInt "," upper=EInt "," defaultValue=EString ")";
 *
 **/

// "addAttribute" "(" name=EString "," type=PrimitiveType "," lower=EInt "," upper=EInt "," defaultValue=EString ")"
protected class AddAttribute_Group extends GroupToken {
	
	public AddAttribute_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAddAttributeAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddAttribute_RightParenthesisKeyword_11(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAddAttributeRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "addAttribute"
protected class AddAttribute_AddAttributeKeyword_0 extends KeywordToken  {
	
	public AddAttribute_AddAttributeKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAddAttributeAccess().getAddAttributeKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// "("
protected class AddAttribute_LeftParenthesisKeyword_1 extends KeywordToken  {
	
	public AddAttribute_LeftParenthesisKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAddAttributeAccess().getLeftParenthesisKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddAttribute_AddAttributeKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// name=EString
protected class AddAttribute_NameAssignment_2 extends AssignmentToken  {
	
	public AddAttribute_NameAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAddAttributeAccess().getNameAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddAttribute_LeftParenthesisKeyword_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAddAttributeAccess().getNameEStringParserRuleCall_2_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getAddAttributeAccess().getNameEStringParserRuleCall_2_0();
			return obj;
		}
		return null;
	}

}

// ","
protected class AddAttribute_CommaKeyword_3 extends KeywordToken  {
	
	public AddAttribute_CommaKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAddAttributeAccess().getCommaKeyword_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddAttribute_NameAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// type=PrimitiveType
protected class AddAttribute_TypeAssignment_4 extends AssignmentToken  {
	
	public AddAttribute_TypeAssignment_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAddAttributeAccess().getTypeAssignment_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddAttribute_CommaKeyword_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("type",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("type");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAddAttributeAccess().getTypePrimitiveTypeParserRuleCall_4_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getAddAttributeAccess().getTypePrimitiveTypeParserRuleCall_4_0();
			return obj;
		}
		return null;
	}

}

// ","
protected class AddAttribute_CommaKeyword_5 extends KeywordToken  {
	
	public AddAttribute_CommaKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAddAttributeAccess().getCommaKeyword_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddAttribute_TypeAssignment_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// lower=EInt
protected class AddAttribute_LowerAssignment_6 extends AssignmentToken  {
	
	public AddAttribute_LowerAssignment_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAddAttributeAccess().getLowerAssignment_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddAttribute_CommaKeyword_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("lower",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("lower");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAddAttributeAccess().getLowerEIntParserRuleCall_6_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getAddAttributeAccess().getLowerEIntParserRuleCall_6_0();
			return obj;
		}
		return null;
	}

}

// ","
protected class AddAttribute_CommaKeyword_7 extends KeywordToken  {
	
	public AddAttribute_CommaKeyword_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAddAttributeAccess().getCommaKeyword_7();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddAttribute_LowerAssignment_6(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// upper=EInt
protected class AddAttribute_UpperAssignment_8 extends AssignmentToken  {
	
	public AddAttribute_UpperAssignment_8(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAddAttributeAccess().getUpperAssignment_8();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddAttribute_CommaKeyword_7(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("upper",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("upper");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAddAttributeAccess().getUpperEIntParserRuleCall_8_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getAddAttributeAccess().getUpperEIntParserRuleCall_8_0();
			return obj;
		}
		return null;
	}

}

// ","
protected class AddAttribute_CommaKeyword_9 extends KeywordToken  {
	
	public AddAttribute_CommaKeyword_9(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAddAttributeAccess().getCommaKeyword_9();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddAttribute_UpperAssignment_8(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// defaultValue=EString
protected class AddAttribute_DefaultValueAssignment_10 extends AssignmentToken  {
	
	public AddAttribute_DefaultValueAssignment_10(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAddAttributeAccess().getDefaultValueAssignment_10();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddAttribute_CommaKeyword_9(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("defaultValue",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("defaultValue");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAddAttributeAccess().getDefaultValueEStringParserRuleCall_10_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getAddAttributeAccess().getDefaultValueEStringParserRuleCall_10_0();
			return obj;
		}
		return null;
	}

}

// ")"
protected class AddAttribute_RightParenthesisKeyword_11 extends KeywordToken  {
	
	public AddAttribute_RightParenthesisKeyword_11(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAddAttributeAccess().getRightParenthesisKeyword_11();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddAttribute_DefaultValueAssignment_10(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


/************ end Rule AddAttribute ****************/


/************ begin Rule AddReference ****************
 *
 * AddReference:
 * 	"addReference" "(" name=EString "," type=EString "," lower=EInt "," upper=EInt ")";
 *
 **/

// "addReference" "(" name=EString "," type=EString "," lower=EInt "," upper=EInt ")"
protected class AddReference_Group extends GroupToken {
	
	public AddReference_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAddReferenceAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddReference_RightParenthesisKeyword_9(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAddReferenceRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "addReference"
protected class AddReference_AddReferenceKeyword_0 extends KeywordToken  {
	
	public AddReference_AddReferenceKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAddReferenceAccess().getAddReferenceKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// "("
protected class AddReference_LeftParenthesisKeyword_1 extends KeywordToken  {
	
	public AddReference_LeftParenthesisKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAddReferenceAccess().getLeftParenthesisKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddReference_AddReferenceKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// name=EString
protected class AddReference_NameAssignment_2 extends AssignmentToken  {
	
	public AddReference_NameAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAddReferenceAccess().getNameAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddReference_LeftParenthesisKeyword_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAddReferenceAccess().getNameEStringParserRuleCall_2_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getAddReferenceAccess().getNameEStringParserRuleCall_2_0();
			return obj;
		}
		return null;
	}

}

// ","
protected class AddReference_CommaKeyword_3 extends KeywordToken  {
	
	public AddReference_CommaKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAddReferenceAccess().getCommaKeyword_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddReference_NameAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// type=EString
protected class AddReference_TypeAssignment_4 extends AssignmentToken  {
	
	public AddReference_TypeAssignment_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAddReferenceAccess().getTypeAssignment_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddReference_CommaKeyword_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("type",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("type");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAddReferenceAccess().getTypeEStringParserRuleCall_4_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getAddReferenceAccess().getTypeEStringParserRuleCall_4_0();
			return obj;
		}
		return null;
	}

}

// ","
protected class AddReference_CommaKeyword_5 extends KeywordToken  {
	
	public AddReference_CommaKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAddReferenceAccess().getCommaKeyword_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddReference_TypeAssignment_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// lower=EInt
protected class AddReference_LowerAssignment_6 extends AssignmentToken  {
	
	public AddReference_LowerAssignment_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAddReferenceAccess().getLowerAssignment_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddReference_CommaKeyword_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("lower",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("lower");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAddReferenceAccess().getLowerEIntParserRuleCall_6_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getAddReferenceAccess().getLowerEIntParserRuleCall_6_0();
			return obj;
		}
		return null;
	}

}

// ","
protected class AddReference_CommaKeyword_7 extends KeywordToken  {
	
	public AddReference_CommaKeyword_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAddReferenceAccess().getCommaKeyword_7();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddReference_LowerAssignment_6(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// upper=EInt
protected class AddReference_UpperAssignment_8 extends AssignmentToken  {
	
	public AddReference_UpperAssignment_8(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAddReferenceAccess().getUpperAssignment_8();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddReference_CommaKeyword_7(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("upper",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("upper");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAddReferenceAccess().getUpperEIntParserRuleCall_8_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getAddReferenceAccess().getUpperEIntParserRuleCall_8_0();
			return obj;
		}
		return null;
	}

}

// ")"
protected class AddReference_RightParenthesisKeyword_9 extends KeywordToken  {
	
	public AddReference_RightParenthesisKeyword_9(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAddReferenceAccess().getRightParenthesisKeyword_9();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddReference_UpperAssignment_8(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


/************ end Rule AddReference ****************/


/************ begin Rule StructuralFeatureModification ****************
 *
 * StructuralFeatureModification:
 * 	AttributeModification | ReferenceModification;
 *
 **/

// AttributeModification | ReferenceModification
protected class StructuralFeatureModification_Alternatives extends AlternativesToken {

	public StructuralFeatureModification_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getStructuralFeatureModificationAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new StructuralFeatureModification_AttributeModificationParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new StructuralFeatureModification_ReferenceModificationParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAttributeModificationRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getReferenceModificationRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// AttributeModification
protected class StructuralFeatureModification_AttributeModificationParserRuleCall_0 extends RuleCallToken {
	
	public StructuralFeatureModification_AttributeModificationParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getStructuralFeatureModificationAccess().getAttributeModificationParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAttributeModificationRule().getType().getClassifier())
			return null;
		if(checkForRecursion(AttributeModification_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// ReferenceModification
protected class StructuralFeatureModification_ReferenceModificationParserRuleCall_1 extends RuleCallToken {
	
	public StructuralFeatureModification_ReferenceModificationParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getStructuralFeatureModificationAccess().getReferenceModificationParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getReferenceModificationRule().getType().getClassifier())
			return null;
		if(checkForRecursion(ReferenceModification_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule StructuralFeatureModification ****************/


/************ begin Rule ChangeBounds ****************
 *
 * ChangeBounds:
 * 	{ChangeBounds} "bounds" "(" oldLower=EInt "," oldUpper=EInt ")" "to" "(" newLower=EInt "," newUpper=EInt ")";
 *
 **/

// {ChangeBounds} "bounds" "(" oldLower=EInt "," oldUpper=EInt ")" "to" "(" newLower=EInt "," newUpper=EInt ")"
protected class ChangeBounds_Group extends GroupToken {
	
	public ChangeBounds_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getChangeBoundsAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ChangeBounds_RightParenthesisKeyword_12(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getChangeBoundsAccess().getChangeBoundsAction_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {ChangeBounds}
protected class ChangeBounds_ChangeBoundsAction_0 extends ActionToken  {

	public ChangeBounds_ChangeBoundsAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getChangeBoundsAccess().getChangeBoundsAction_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// "bounds"
protected class ChangeBounds_BoundsKeyword_1 extends KeywordToken  {
	
	public ChangeBounds_BoundsKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getChangeBoundsAccess().getBoundsKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ChangeBounds_ChangeBoundsAction_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "("
protected class ChangeBounds_LeftParenthesisKeyword_2 extends KeywordToken  {
	
	public ChangeBounds_LeftParenthesisKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getChangeBoundsAccess().getLeftParenthesisKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ChangeBounds_BoundsKeyword_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// oldLower=EInt
protected class ChangeBounds_OldLowerAssignment_3 extends AssignmentToken  {
	
	public ChangeBounds_OldLowerAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getChangeBoundsAccess().getOldLowerAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ChangeBounds_LeftParenthesisKeyword_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("oldLower",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("oldLower");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getChangeBoundsAccess().getOldLowerEIntParserRuleCall_3_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getChangeBoundsAccess().getOldLowerEIntParserRuleCall_3_0();
			return obj;
		}
		return null;
	}

}

// ","
protected class ChangeBounds_CommaKeyword_4 extends KeywordToken  {
	
	public ChangeBounds_CommaKeyword_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getChangeBoundsAccess().getCommaKeyword_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ChangeBounds_OldLowerAssignment_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// oldUpper=EInt
protected class ChangeBounds_OldUpperAssignment_5 extends AssignmentToken  {
	
	public ChangeBounds_OldUpperAssignment_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getChangeBoundsAccess().getOldUpperAssignment_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ChangeBounds_CommaKeyword_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("oldUpper",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("oldUpper");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getChangeBoundsAccess().getOldUpperEIntParserRuleCall_5_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getChangeBoundsAccess().getOldUpperEIntParserRuleCall_5_0();
			return obj;
		}
		return null;
	}

}

// ")"
protected class ChangeBounds_RightParenthesisKeyword_6 extends KeywordToken  {
	
	public ChangeBounds_RightParenthesisKeyword_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getChangeBoundsAccess().getRightParenthesisKeyword_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ChangeBounds_OldUpperAssignment_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "to"
protected class ChangeBounds_ToKeyword_7 extends KeywordToken  {
	
	public ChangeBounds_ToKeyword_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getChangeBoundsAccess().getToKeyword_7();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ChangeBounds_RightParenthesisKeyword_6(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "("
protected class ChangeBounds_LeftParenthesisKeyword_8 extends KeywordToken  {
	
	public ChangeBounds_LeftParenthesisKeyword_8(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getChangeBoundsAccess().getLeftParenthesisKeyword_8();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ChangeBounds_ToKeyword_7(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// newLower=EInt
protected class ChangeBounds_NewLowerAssignment_9 extends AssignmentToken  {
	
	public ChangeBounds_NewLowerAssignment_9(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getChangeBoundsAccess().getNewLowerAssignment_9();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ChangeBounds_LeftParenthesisKeyword_8(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("newLower",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("newLower");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getChangeBoundsAccess().getNewLowerEIntParserRuleCall_9_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getChangeBoundsAccess().getNewLowerEIntParserRuleCall_9_0();
			return obj;
		}
		return null;
	}

}

// ","
protected class ChangeBounds_CommaKeyword_10 extends KeywordToken  {
	
	public ChangeBounds_CommaKeyword_10(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getChangeBoundsAccess().getCommaKeyword_10();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ChangeBounds_NewLowerAssignment_9(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// newUpper=EInt
protected class ChangeBounds_NewUpperAssignment_11 extends AssignmentToken  {
	
	public ChangeBounds_NewUpperAssignment_11(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getChangeBoundsAccess().getNewUpperAssignment_11();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ChangeBounds_CommaKeyword_10(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("newUpper",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("newUpper");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getChangeBoundsAccess().getNewUpperEIntParserRuleCall_11_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getChangeBoundsAccess().getNewUpperEIntParserRuleCall_11_0();
			return obj;
		}
		return null;
	}

}

// ")"
protected class ChangeBounds_RightParenthesisKeyword_12 extends KeywordToken  {
	
	public ChangeBounds_RightParenthesisKeyword_12(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getChangeBoundsAccess().getRightParenthesisKeyword_12();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ChangeBounds_NewUpperAssignment_11(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


/************ end Rule ChangeBounds ****************/


/************ begin Rule AttributeModification ****************
 *
 * AttributeModification:
 * 	remove?="remove"? "att" oldName=EString ("to" newName=EString)? changeBounds=ChangeBounds? (changeType?="changeType"
 * 	"to" newType=PrimitiveType)? removeEAnnotations?="removeEAnnotations"? ("annotation" "{"
 * 	annotationModification+=AnnotationModification (";" annotationModification+=AnnotationModification)* "}")?;
 *
 **/

// remove?="remove"? "att" oldName=EString ("to" newName=EString)? changeBounds=ChangeBounds? (changeType?="changeType"
// "to" newType=PrimitiveType)? removeEAnnotations?="removeEAnnotations"? ("annotation" "{"
// annotationModification+=AnnotationModification (";" annotationModification+=AnnotationModification)* "}")?
protected class AttributeModification_Group extends GroupToken {
	
	public AttributeModification_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAttributeModificationAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeModification_Group_7(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AttributeModification_RemoveEAnnotationsAssignment_6(lastRuleCallOrigin, this, 1, inst);
			case 2: return new AttributeModification_Group_5(lastRuleCallOrigin, this, 2, inst);
			case 3: return new AttributeModification_ChangeBoundsAssignment_4(lastRuleCallOrigin, this, 3, inst);
			case 4: return new AttributeModification_Group_3(lastRuleCallOrigin, this, 4, inst);
			case 5: return new AttributeModification_OldNameAssignment_2(lastRuleCallOrigin, this, 5, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAttributeModificationRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// remove?="remove"?
protected class AttributeModification_RemoveAssignment_0 extends AssignmentToken  {
	
	public AttributeModification_RemoveAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeModificationAccess().getRemoveAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("remove",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("remove");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getAttributeModificationAccess().getRemoveRemoveKeyword_0_0();
			return obj;
		}
		return null;
	}

}

// "att"
protected class AttributeModification_AttKeyword_1 extends KeywordToken  {
	
	public AttributeModification_AttKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAttributeModificationAccess().getAttKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeModification_RemoveAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
		}	
	}

}

// oldName=EString
protected class AttributeModification_OldNameAssignment_2 extends AssignmentToken  {
	
	public AttributeModification_OldNameAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeModificationAccess().getOldNameAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeModification_AttKeyword_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("oldName",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("oldName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAttributeModificationAccess().getOldNameEStringParserRuleCall_2_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getAttributeModificationAccess().getOldNameEStringParserRuleCall_2_0();
			return obj;
		}
		return null;
	}

}

// ("to" newName=EString)?
protected class AttributeModification_Group_3 extends GroupToken {
	
	public AttributeModification_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAttributeModificationAccess().getGroup_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeModification_NewNameAssignment_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "to"
protected class AttributeModification_ToKeyword_3_0 extends KeywordToken  {
	
	public AttributeModification_ToKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAttributeModificationAccess().getToKeyword_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeModification_OldNameAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// newName=EString
protected class AttributeModification_NewNameAssignment_3_1 extends AssignmentToken  {
	
	public AttributeModification_NewNameAssignment_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeModificationAccess().getNewNameAssignment_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeModification_ToKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("newName",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("newName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAttributeModificationAccess().getNewNameEStringParserRuleCall_3_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getAttributeModificationAccess().getNewNameEStringParserRuleCall_3_1_0();
			return obj;
		}
		return null;
	}

}


// changeBounds=ChangeBounds?
protected class AttributeModification_ChangeBoundsAssignment_4 extends AssignmentToken  {
	
	public AttributeModification_ChangeBoundsAssignment_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeModificationAccess().getChangeBoundsAssignment_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ChangeBounds_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("changeBounds",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("changeBounds");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getChangeBoundsRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getAttributeModificationAccess().getChangeBoundsChangeBoundsParserRuleCall_4_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new AttributeModification_Group_3(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new AttributeModification_OldNameAssignment_2(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// (changeType?="changeType" "to" newType=PrimitiveType)?
protected class AttributeModification_Group_5 extends GroupToken {
	
	public AttributeModification_Group_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAttributeModificationAccess().getGroup_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeModification_NewTypeAssignment_5_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// changeType?="changeType"
protected class AttributeModification_ChangeTypeAssignment_5_0 extends AssignmentToken  {
	
	public AttributeModification_ChangeTypeAssignment_5_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeModificationAccess().getChangeTypeAssignment_5_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeModification_ChangeBoundsAssignment_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AttributeModification_Group_3(lastRuleCallOrigin, this, 1, inst);
			case 2: return new AttributeModification_OldNameAssignment_2(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("changeType",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("changeType");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getAttributeModificationAccess().getChangeTypeChangeTypeKeyword_5_0_0();
			return obj;
		}
		return null;
	}

}

// "to"
protected class AttributeModification_ToKeyword_5_1 extends KeywordToken  {
	
	public AttributeModification_ToKeyword_5_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAttributeModificationAccess().getToKeyword_5_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeModification_ChangeTypeAssignment_5_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// newType=PrimitiveType
protected class AttributeModification_NewTypeAssignment_5_2 extends AssignmentToken  {
	
	public AttributeModification_NewTypeAssignment_5_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeModificationAccess().getNewTypeAssignment_5_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeModification_ToKeyword_5_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("newType",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("newType");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAttributeModificationAccess().getNewTypePrimitiveTypeParserRuleCall_5_2_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getAttributeModificationAccess().getNewTypePrimitiveTypeParserRuleCall_5_2_0();
			return obj;
		}
		return null;
	}

}


// removeEAnnotations?="removeEAnnotations"?
protected class AttributeModification_RemoveEAnnotationsAssignment_6 extends AssignmentToken  {
	
	public AttributeModification_RemoveEAnnotationsAssignment_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeModificationAccess().getRemoveEAnnotationsAssignment_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeModification_Group_5(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AttributeModification_ChangeBoundsAssignment_4(lastRuleCallOrigin, this, 1, inst);
			case 2: return new AttributeModification_Group_3(lastRuleCallOrigin, this, 2, inst);
			case 3: return new AttributeModification_OldNameAssignment_2(lastRuleCallOrigin, this, 3, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("removeEAnnotations",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("removeEAnnotations");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getAttributeModificationAccess().getRemoveEAnnotationsRemoveEAnnotationsKeyword_6_0();
			return obj;
		}
		return null;
	}

}

// ("annotation" "{" annotationModification+=AnnotationModification (";" annotationModification+=AnnotationModification)*
// "}")?
protected class AttributeModification_Group_7 extends GroupToken {
	
	public AttributeModification_Group_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAttributeModificationAccess().getGroup_7();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeModification_RightCurlyBracketKeyword_7_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "annotation"
protected class AttributeModification_AnnotationKeyword_7_0 extends KeywordToken  {
	
	public AttributeModification_AnnotationKeyword_7_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAttributeModificationAccess().getAnnotationKeyword_7_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeModification_RemoveEAnnotationsAssignment_6(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AttributeModification_Group_5(lastRuleCallOrigin, this, 1, inst);
			case 2: return new AttributeModification_ChangeBoundsAssignment_4(lastRuleCallOrigin, this, 2, inst);
			case 3: return new AttributeModification_Group_3(lastRuleCallOrigin, this, 3, inst);
			case 4: return new AttributeModification_OldNameAssignment_2(lastRuleCallOrigin, this, 4, inst);
			default: return null;
		}	
	}

}

// "{"
protected class AttributeModification_LeftCurlyBracketKeyword_7_1 extends KeywordToken  {
	
	public AttributeModification_LeftCurlyBracketKeyword_7_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAttributeModificationAccess().getLeftCurlyBracketKeyword_7_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeModification_AnnotationKeyword_7_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// annotationModification+=AnnotationModification
protected class AttributeModification_AnnotationModificationAssignment_7_2 extends AssignmentToken  {
	
	public AttributeModification_AnnotationModificationAssignment_7_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeModificationAccess().getAnnotationModificationAssignment_7_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("annotationModification",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("annotationModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAnnotationModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getAttributeModificationAccess().getAnnotationModificationAnnotationModificationParserRuleCall_7_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new AttributeModification_LeftCurlyBracketKeyword_7_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// (";" annotationModification+=AnnotationModification)*
protected class AttributeModification_Group_7_3 extends GroupToken {
	
	public AttributeModification_Group_7_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAttributeModificationAccess().getGroup_7_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeModification_AnnotationModificationAssignment_7_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ";"
protected class AttributeModification_SemicolonKeyword_7_3_0 extends KeywordToken  {
	
	public AttributeModification_SemicolonKeyword_7_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAttributeModificationAccess().getSemicolonKeyword_7_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeModification_Group_7_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AttributeModification_AnnotationModificationAssignment_7_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// annotationModification+=AnnotationModification
protected class AttributeModification_AnnotationModificationAssignment_7_3_1 extends AssignmentToken  {
	
	public AttributeModification_AnnotationModificationAssignment_7_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAttributeModificationAccess().getAnnotationModificationAssignment_7_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("annotationModification",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("annotationModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAnnotationModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getAttributeModificationAccess().getAnnotationModificationAnnotationModificationParserRuleCall_7_3_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new AttributeModification_SemicolonKeyword_7_3_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// "}"
protected class AttributeModification_RightCurlyBracketKeyword_7_4 extends KeywordToken  {
	
	public AttributeModification_RightCurlyBracketKeyword_7_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAttributeModificationAccess().getRightCurlyBracketKeyword_7_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AttributeModification_Group_7_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AttributeModification_AnnotationModificationAssignment_7_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}



/************ end Rule AttributeModification ****************/


/************ begin Rule ReferenceModification ****************
 *
 * ReferenceModification:
 * 	remove?="remove"? "ref" oldName=EString ("to" newName=EString)? changeBounds=ChangeBounds?
 * 	changeContainement?="changeContainement"? removeOpposite?="removeOpposite"? ("addOpposite" addOpposite=AddOpposite)?
 * 	("reify" reify=ReferenceReification)? removeEAnnotations?="removeEAnnotations"? ("annotation" "{"
 * 	annotationModification+=AnnotationModification (";" annotationModification+=AnnotationModification)* "}")?;
 *
 **/

// remove?="remove"? "ref" oldName=EString ("to" newName=EString)? changeBounds=ChangeBounds?
// changeContainement?="changeContainement"? removeOpposite?="removeOpposite"? ("addOpposite" addOpposite=AddOpposite)?
// ("reify" reify=ReferenceReification)? removeEAnnotations?="removeEAnnotations"? ("annotation" "{"
// annotationModification+=AnnotationModification (";" annotationModification+=AnnotationModification)* "}")?
protected class ReferenceModification_Group extends GroupToken {
	
	public ReferenceModification_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getReferenceModificationAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceModification_Group_10(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ReferenceModification_RemoveEAnnotationsAssignment_9(lastRuleCallOrigin, this, 1, inst);
			case 2: return new ReferenceModification_Group_8(lastRuleCallOrigin, this, 2, inst);
			case 3: return new ReferenceModification_Group_7(lastRuleCallOrigin, this, 3, inst);
			case 4: return new ReferenceModification_RemoveOppositeAssignment_6(lastRuleCallOrigin, this, 4, inst);
			case 5: return new ReferenceModification_ChangeContainementAssignment_5(lastRuleCallOrigin, this, 5, inst);
			case 6: return new ReferenceModification_ChangeBoundsAssignment_4(lastRuleCallOrigin, this, 6, inst);
			case 7: return new ReferenceModification_Group_3(lastRuleCallOrigin, this, 7, inst);
			case 8: return new ReferenceModification_OldNameAssignment_2(lastRuleCallOrigin, this, 8, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getReferenceModificationRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// remove?="remove"?
protected class ReferenceModification_RemoveAssignment_0 extends AssignmentToken  {
	
	public ReferenceModification_RemoveAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getReferenceModificationAccess().getRemoveAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("remove",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("remove");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getReferenceModificationAccess().getRemoveRemoveKeyword_0_0();
			return obj;
		}
		return null;
	}

}

// "ref"
protected class ReferenceModification_RefKeyword_1 extends KeywordToken  {
	
	public ReferenceModification_RefKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getReferenceModificationAccess().getRefKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceModification_RemoveAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
		}	
	}

}

// oldName=EString
protected class ReferenceModification_OldNameAssignment_2 extends AssignmentToken  {
	
	public ReferenceModification_OldNameAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getReferenceModificationAccess().getOldNameAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceModification_RefKeyword_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("oldName",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("oldName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getReferenceModificationAccess().getOldNameEStringParserRuleCall_2_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getReferenceModificationAccess().getOldNameEStringParserRuleCall_2_0();
			return obj;
		}
		return null;
	}

}

// ("to" newName=EString)?
protected class ReferenceModification_Group_3 extends GroupToken {
	
	public ReferenceModification_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getReferenceModificationAccess().getGroup_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceModification_NewNameAssignment_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "to"
protected class ReferenceModification_ToKeyword_3_0 extends KeywordToken  {
	
	public ReferenceModification_ToKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getReferenceModificationAccess().getToKeyword_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceModification_OldNameAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// newName=EString
protected class ReferenceModification_NewNameAssignment_3_1 extends AssignmentToken  {
	
	public ReferenceModification_NewNameAssignment_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getReferenceModificationAccess().getNewNameAssignment_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceModification_ToKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("newName",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("newName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getReferenceModificationAccess().getNewNameEStringParserRuleCall_3_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getReferenceModificationAccess().getNewNameEStringParserRuleCall_3_1_0();
			return obj;
		}
		return null;
	}

}


// changeBounds=ChangeBounds?
protected class ReferenceModification_ChangeBoundsAssignment_4 extends AssignmentToken  {
	
	public ReferenceModification_ChangeBoundsAssignment_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getReferenceModificationAccess().getChangeBoundsAssignment_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ChangeBounds_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("changeBounds",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("changeBounds");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getChangeBoundsRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getReferenceModificationAccess().getChangeBoundsChangeBoundsParserRuleCall_4_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ReferenceModification_Group_3(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new ReferenceModification_OldNameAssignment_2(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// changeContainement?="changeContainement"?
protected class ReferenceModification_ChangeContainementAssignment_5 extends AssignmentToken  {
	
	public ReferenceModification_ChangeContainementAssignment_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getReferenceModificationAccess().getChangeContainementAssignment_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceModification_ChangeBoundsAssignment_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ReferenceModification_Group_3(lastRuleCallOrigin, this, 1, inst);
			case 2: return new ReferenceModification_OldNameAssignment_2(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("changeContainement",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("changeContainement");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getReferenceModificationAccess().getChangeContainementChangeContainementKeyword_5_0();
			return obj;
		}
		return null;
	}

}

// removeOpposite?="removeOpposite"?
protected class ReferenceModification_RemoveOppositeAssignment_6 extends AssignmentToken  {
	
	public ReferenceModification_RemoveOppositeAssignment_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getReferenceModificationAccess().getRemoveOppositeAssignment_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceModification_ChangeContainementAssignment_5(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ReferenceModification_ChangeBoundsAssignment_4(lastRuleCallOrigin, this, 1, inst);
			case 2: return new ReferenceModification_Group_3(lastRuleCallOrigin, this, 2, inst);
			case 3: return new ReferenceModification_OldNameAssignment_2(lastRuleCallOrigin, this, 3, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("removeOpposite",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("removeOpposite");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getReferenceModificationAccess().getRemoveOppositeRemoveOppositeKeyword_6_0();
			return obj;
		}
		return null;
	}

}

// ("addOpposite" addOpposite=AddOpposite)?
protected class ReferenceModification_Group_7 extends GroupToken {
	
	public ReferenceModification_Group_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getReferenceModificationAccess().getGroup_7();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceModification_AddOppositeAssignment_7_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "addOpposite"
protected class ReferenceModification_AddOppositeKeyword_7_0 extends KeywordToken  {
	
	public ReferenceModification_AddOppositeKeyword_7_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getReferenceModificationAccess().getAddOppositeKeyword_7_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceModification_RemoveOppositeAssignment_6(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ReferenceModification_ChangeContainementAssignment_5(lastRuleCallOrigin, this, 1, inst);
			case 2: return new ReferenceModification_ChangeBoundsAssignment_4(lastRuleCallOrigin, this, 2, inst);
			case 3: return new ReferenceModification_Group_3(lastRuleCallOrigin, this, 3, inst);
			case 4: return new ReferenceModification_OldNameAssignment_2(lastRuleCallOrigin, this, 4, inst);
			default: return null;
		}	
	}

}

// addOpposite=AddOpposite
protected class ReferenceModification_AddOppositeAssignment_7_1 extends AssignmentToken  {
	
	public ReferenceModification_AddOppositeAssignment_7_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getReferenceModificationAccess().getAddOppositeAssignment_7_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddOpposite_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("addOpposite",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("addOpposite");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAddOppositeRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getReferenceModificationAccess().getAddOppositeAddOppositeParserRuleCall_7_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ReferenceModification_AddOppositeKeyword_7_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// ("reify" reify=ReferenceReification)?
protected class ReferenceModification_Group_8 extends GroupToken {
	
	public ReferenceModification_Group_8(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getReferenceModificationAccess().getGroup_8();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceModification_ReifyAssignment_8_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "reify"
protected class ReferenceModification_ReifyKeyword_8_0 extends KeywordToken  {
	
	public ReferenceModification_ReifyKeyword_8_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getReferenceModificationAccess().getReifyKeyword_8_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceModification_Group_7(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ReferenceModification_RemoveOppositeAssignment_6(lastRuleCallOrigin, this, 1, inst);
			case 2: return new ReferenceModification_ChangeContainementAssignment_5(lastRuleCallOrigin, this, 2, inst);
			case 3: return new ReferenceModification_ChangeBoundsAssignment_4(lastRuleCallOrigin, this, 3, inst);
			case 4: return new ReferenceModification_Group_3(lastRuleCallOrigin, this, 4, inst);
			case 5: return new ReferenceModification_OldNameAssignment_2(lastRuleCallOrigin, this, 5, inst);
			default: return null;
		}	
	}

}

// reify=ReferenceReification
protected class ReferenceModification_ReifyAssignment_8_1 extends AssignmentToken  {
	
	public ReferenceModification_ReifyAssignment_8_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getReferenceModificationAccess().getReifyAssignment_8_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceReification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("reify",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("reify");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getReferenceReificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getReferenceModificationAccess().getReifyReferenceReificationParserRuleCall_8_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ReferenceModification_ReifyKeyword_8_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// removeEAnnotations?="removeEAnnotations"?
protected class ReferenceModification_RemoveEAnnotationsAssignment_9 extends AssignmentToken  {
	
	public ReferenceModification_RemoveEAnnotationsAssignment_9(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getReferenceModificationAccess().getRemoveEAnnotationsAssignment_9();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceModification_Group_8(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ReferenceModification_Group_7(lastRuleCallOrigin, this, 1, inst);
			case 2: return new ReferenceModification_RemoveOppositeAssignment_6(lastRuleCallOrigin, this, 2, inst);
			case 3: return new ReferenceModification_ChangeContainementAssignment_5(lastRuleCallOrigin, this, 3, inst);
			case 4: return new ReferenceModification_ChangeBoundsAssignment_4(lastRuleCallOrigin, this, 4, inst);
			case 5: return new ReferenceModification_Group_3(lastRuleCallOrigin, this, 5, inst);
			case 6: return new ReferenceModification_OldNameAssignment_2(lastRuleCallOrigin, this, 6, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("removeEAnnotations",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("removeEAnnotations");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getReferenceModificationAccess().getRemoveEAnnotationsRemoveEAnnotationsKeyword_9_0();
			return obj;
		}
		return null;
	}

}

// ("annotation" "{" annotationModification+=AnnotationModification (";" annotationModification+=AnnotationModification)*
// "}")?
protected class ReferenceModification_Group_10 extends GroupToken {
	
	public ReferenceModification_Group_10(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getReferenceModificationAccess().getGroup_10();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceModification_RightCurlyBracketKeyword_10_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "annotation"
protected class ReferenceModification_AnnotationKeyword_10_0 extends KeywordToken  {
	
	public ReferenceModification_AnnotationKeyword_10_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getReferenceModificationAccess().getAnnotationKeyword_10_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceModification_RemoveEAnnotationsAssignment_9(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ReferenceModification_Group_8(lastRuleCallOrigin, this, 1, inst);
			case 2: return new ReferenceModification_Group_7(lastRuleCallOrigin, this, 2, inst);
			case 3: return new ReferenceModification_RemoveOppositeAssignment_6(lastRuleCallOrigin, this, 3, inst);
			case 4: return new ReferenceModification_ChangeContainementAssignment_5(lastRuleCallOrigin, this, 4, inst);
			case 5: return new ReferenceModification_ChangeBoundsAssignment_4(lastRuleCallOrigin, this, 5, inst);
			case 6: return new ReferenceModification_Group_3(lastRuleCallOrigin, this, 6, inst);
			case 7: return new ReferenceModification_OldNameAssignment_2(lastRuleCallOrigin, this, 7, inst);
			default: return null;
		}	
	}

}

// "{"
protected class ReferenceModification_LeftCurlyBracketKeyword_10_1 extends KeywordToken  {
	
	public ReferenceModification_LeftCurlyBracketKeyword_10_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getReferenceModificationAccess().getLeftCurlyBracketKeyword_10_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceModification_AnnotationKeyword_10_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// annotationModification+=AnnotationModification
protected class ReferenceModification_AnnotationModificationAssignment_10_2 extends AssignmentToken  {
	
	public ReferenceModification_AnnotationModificationAssignment_10_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getReferenceModificationAccess().getAnnotationModificationAssignment_10_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("annotationModification",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("annotationModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAnnotationModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getReferenceModificationAccess().getAnnotationModificationAnnotationModificationParserRuleCall_10_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ReferenceModification_LeftCurlyBracketKeyword_10_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// (";" annotationModification+=AnnotationModification)*
protected class ReferenceModification_Group_10_3 extends GroupToken {
	
	public ReferenceModification_Group_10_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getReferenceModificationAccess().getGroup_10_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceModification_AnnotationModificationAssignment_10_3_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ";"
protected class ReferenceModification_SemicolonKeyword_10_3_0 extends KeywordToken  {
	
	public ReferenceModification_SemicolonKeyword_10_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getReferenceModificationAccess().getSemicolonKeyword_10_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceModification_Group_10_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ReferenceModification_AnnotationModificationAssignment_10_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// annotationModification+=AnnotationModification
protected class ReferenceModification_AnnotationModificationAssignment_10_3_1 extends AssignmentToken  {
	
	public ReferenceModification_AnnotationModificationAssignment_10_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getReferenceModificationAccess().getAnnotationModificationAssignment_10_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AnnotationModification_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("annotationModification",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("annotationModification");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getAnnotationModificationRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getReferenceModificationAccess().getAnnotationModificationAnnotationModificationParserRuleCall_10_3_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ReferenceModification_SemicolonKeyword_10_3_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// "}"
protected class ReferenceModification_RightCurlyBracketKeyword_10_4 extends KeywordToken  {
	
	public ReferenceModification_RightCurlyBracketKeyword_10_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getReferenceModificationAccess().getRightCurlyBracketKeyword_10_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceModification_Group_10_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ReferenceModification_AnnotationModificationAssignment_10_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}



/************ end Rule ReferenceModification ****************/



/************ begin Rule AddOpposite ****************
 *
 * AddOpposite:
 * 	"(" oppositeName=EString "," oppositeLower=EInt "," oppositeUpper=EInt ")";
 *
 **/

// "(" oppositeName=EString "," oppositeLower=EInt "," oppositeUpper=EInt ")"
protected class AddOpposite_Group extends GroupToken {
	
	public AddOpposite_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAddOppositeAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddOpposite_RightParenthesisKeyword_6(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAddOppositeRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "("
protected class AddOpposite_LeftParenthesisKeyword_0 extends KeywordToken  {
	
	public AddOpposite_LeftParenthesisKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAddOppositeAccess().getLeftParenthesisKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// oppositeName=EString
protected class AddOpposite_OppositeNameAssignment_1 extends AssignmentToken  {
	
	public AddOpposite_OppositeNameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAddOppositeAccess().getOppositeNameAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddOpposite_LeftParenthesisKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("oppositeName",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("oppositeName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAddOppositeAccess().getOppositeNameEStringParserRuleCall_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getAddOppositeAccess().getOppositeNameEStringParserRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// ","
protected class AddOpposite_CommaKeyword_2 extends KeywordToken  {
	
	public AddOpposite_CommaKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAddOppositeAccess().getCommaKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddOpposite_OppositeNameAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// oppositeLower=EInt
protected class AddOpposite_OppositeLowerAssignment_3 extends AssignmentToken  {
	
	public AddOpposite_OppositeLowerAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAddOppositeAccess().getOppositeLowerAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddOpposite_CommaKeyword_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("oppositeLower",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("oppositeLower");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAddOppositeAccess().getOppositeLowerEIntParserRuleCall_3_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getAddOppositeAccess().getOppositeLowerEIntParserRuleCall_3_0();
			return obj;
		}
		return null;
	}

}

// ","
protected class AddOpposite_CommaKeyword_4 extends KeywordToken  {
	
	public AddOpposite_CommaKeyword_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAddOppositeAccess().getCommaKeyword_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddOpposite_OppositeLowerAssignment_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// oppositeUpper=EInt
protected class AddOpposite_OppositeUpperAssignment_5 extends AssignmentToken  {
	
	public AddOpposite_OppositeUpperAssignment_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAddOppositeAccess().getOppositeUpperAssignment_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddOpposite_CommaKeyword_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("oppositeUpper",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("oppositeUpper");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAddOppositeAccess().getOppositeUpperEIntParserRuleCall_5_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getAddOppositeAccess().getOppositeUpperEIntParserRuleCall_5_0();
			return obj;
		}
		return null;
	}

}

// ")"
protected class AddOpposite_RightParenthesisKeyword_6 extends KeywordToken  {
	
	public AddOpposite_RightParenthesisKeyword_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAddOppositeAccess().getRightParenthesisKeyword_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddOpposite_OppositeUpperAssignment_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


/************ end Rule AddOpposite ****************/


/************ begin Rule ReferenceReification ****************
 *
 * ReferenceReification:
 * 	"(" nameClass=EString "," nameFirstReference=EString "," nameSecondReference=EString ")";
 *
 **/

// "(" nameClass=EString "," nameFirstReference=EString "," nameSecondReference=EString ")"
protected class ReferenceReification_Group extends GroupToken {
	
	public ReferenceReification_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getReferenceReificationAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceReification_RightParenthesisKeyword_6(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getReferenceReificationRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "("
protected class ReferenceReification_LeftParenthesisKeyword_0 extends KeywordToken  {
	
	public ReferenceReification_LeftParenthesisKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getReferenceReificationAccess().getLeftParenthesisKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// nameClass=EString
protected class ReferenceReification_NameClassAssignment_1 extends AssignmentToken  {
	
	public ReferenceReification_NameClassAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getReferenceReificationAccess().getNameClassAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceReification_LeftParenthesisKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("nameClass",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("nameClass");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getReferenceReificationAccess().getNameClassEStringParserRuleCall_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getReferenceReificationAccess().getNameClassEStringParserRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// ","
protected class ReferenceReification_CommaKeyword_2 extends KeywordToken  {
	
	public ReferenceReification_CommaKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getReferenceReificationAccess().getCommaKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceReification_NameClassAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// nameFirstReference=EString
protected class ReferenceReification_NameFirstReferenceAssignment_3 extends AssignmentToken  {
	
	public ReferenceReification_NameFirstReferenceAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getReferenceReificationAccess().getNameFirstReferenceAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceReification_CommaKeyword_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("nameFirstReference",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("nameFirstReference");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getReferenceReificationAccess().getNameFirstReferenceEStringParserRuleCall_3_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getReferenceReificationAccess().getNameFirstReferenceEStringParserRuleCall_3_0();
			return obj;
		}
		return null;
	}

}

// ","
protected class ReferenceReification_CommaKeyword_4 extends KeywordToken  {
	
	public ReferenceReification_CommaKeyword_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getReferenceReificationAccess().getCommaKeyword_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceReification_NameFirstReferenceAssignment_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// nameSecondReference=EString
protected class ReferenceReification_NameSecondReferenceAssignment_5 extends AssignmentToken  {
	
	public ReferenceReification_NameSecondReferenceAssignment_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getReferenceReificationAccess().getNameSecondReferenceAssignment_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceReification_CommaKeyword_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("nameSecondReference",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("nameSecondReference");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getReferenceReificationAccess().getNameSecondReferenceEStringParserRuleCall_5_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getReferenceReificationAccess().getNameSecondReferenceEStringParserRuleCall_5_0();
			return obj;
		}
		return null;
	}

}

// ")"
protected class ReferenceReification_RightParenthesisKeyword_6 extends KeywordToken  {
	
	public ReferenceReification_RightParenthesisKeyword_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getReferenceReificationAccess().getRightParenthesisKeyword_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ReferenceReification_NameSecondReferenceAssignment_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


/************ end Rule ReferenceReification ****************/


/************ begin Rule AddDerivedReference ****************
 *
 * AddDerivedReference:
 * 	"addDerivedRef" newName=EString ":" referenceName+=EString ("," referenceName+=EString)*;
 *
 **/

// "addDerivedRef" newName=EString ":" referenceName+=EString ("," referenceName+=EString)*
protected class AddDerivedReference_Group extends GroupToken {
	
	public AddDerivedReference_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAddDerivedReferenceAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddDerivedReference_Group_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AddDerivedReference_ReferenceNameAssignment_3(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAddDerivedReferenceRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "addDerivedRef"
protected class AddDerivedReference_AddDerivedRefKeyword_0 extends KeywordToken  {
	
	public AddDerivedReference_AddDerivedRefKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAddDerivedReferenceAccess().getAddDerivedRefKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// newName=EString
protected class AddDerivedReference_NewNameAssignment_1 extends AssignmentToken  {
	
	public AddDerivedReference_NewNameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAddDerivedReferenceAccess().getNewNameAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddDerivedReference_AddDerivedRefKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("newName",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("newName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAddDerivedReferenceAccess().getNewNameEStringParserRuleCall_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getAddDerivedReferenceAccess().getNewNameEStringParserRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// ":"
protected class AddDerivedReference_ColonKeyword_2 extends KeywordToken  {
	
	public AddDerivedReference_ColonKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAddDerivedReferenceAccess().getColonKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddDerivedReference_NewNameAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// referenceName+=EString
protected class AddDerivedReference_ReferenceNameAssignment_3 extends AssignmentToken  {
	
	public AddDerivedReference_ReferenceNameAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAddDerivedReferenceAccess().getReferenceNameAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddDerivedReference_ColonKeyword_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("referenceName",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("referenceName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAddDerivedReferenceAccess().getReferenceNameEStringParserRuleCall_3_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getAddDerivedReferenceAccess().getReferenceNameEStringParserRuleCall_3_0();
			return obj;
		}
		return null;
	}

}

// ("," referenceName+=EString)*
protected class AddDerivedReference_Group_4 extends GroupToken {
	
	public AddDerivedReference_Group_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAddDerivedReferenceAccess().getGroup_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddDerivedReference_ReferenceNameAssignment_4_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class AddDerivedReference_CommaKeyword_4_0 extends KeywordToken  {
	
	public AddDerivedReference_CommaKeyword_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAddDerivedReferenceAccess().getCommaKeyword_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddDerivedReference_Group_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AddDerivedReference_ReferenceNameAssignment_3(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// referenceName+=EString
protected class AddDerivedReference_ReferenceNameAssignment_4_1 extends AssignmentToken  {
	
	public AddDerivedReference_ReferenceNameAssignment_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAddDerivedReferenceAccess().getReferenceNameAssignment_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddDerivedReference_CommaKeyword_4_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("referenceName",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("referenceName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAddDerivedReferenceAccess().getReferenceNameEStringParserRuleCall_4_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getAddDerivedReferenceAccess().getReferenceNameEStringParserRuleCall_4_1_0();
			return obj;
		}
		return null;
	}

}



/************ end Rule AddDerivedReference ****************/


/************ begin Rule AddDerivedAttribute ****************
 *
 * AddDerivedAttribute:
 * 	"addDerivedAtt" newName=EString ":" referenceName+=EString ("," referenceName+=EString)* ":" attributeName=EString;
 *
 **/

// "addDerivedAtt" newName=EString ":" referenceName+=EString ("," referenceName+=EString)* ":" attributeName=EString
protected class AddDerivedAttribute_Group extends GroupToken {
	
	public AddDerivedAttribute_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAddDerivedAttributeAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddDerivedAttribute_AttributeNameAssignment_6(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getAddDerivedAttributeRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// "addDerivedAtt"
protected class AddDerivedAttribute_AddDerivedAttKeyword_0 extends KeywordToken  {
	
	public AddDerivedAttribute_AddDerivedAttKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAddDerivedAttributeAccess().getAddDerivedAttKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// newName=EString
protected class AddDerivedAttribute_NewNameAssignment_1 extends AssignmentToken  {
	
	public AddDerivedAttribute_NewNameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAddDerivedAttributeAccess().getNewNameAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddDerivedAttribute_AddDerivedAttKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("newName",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("newName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAddDerivedAttributeAccess().getNewNameEStringParserRuleCall_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getAddDerivedAttributeAccess().getNewNameEStringParserRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// ":"
protected class AddDerivedAttribute_ColonKeyword_2 extends KeywordToken  {
	
	public AddDerivedAttribute_ColonKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAddDerivedAttributeAccess().getColonKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddDerivedAttribute_NewNameAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// referenceName+=EString
protected class AddDerivedAttribute_ReferenceNameAssignment_3 extends AssignmentToken  {
	
	public AddDerivedAttribute_ReferenceNameAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAddDerivedAttributeAccess().getReferenceNameAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddDerivedAttribute_ColonKeyword_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("referenceName",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("referenceName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAddDerivedAttributeAccess().getReferenceNameEStringParserRuleCall_3_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getAddDerivedAttributeAccess().getReferenceNameEStringParserRuleCall_3_0();
			return obj;
		}
		return null;
	}

}

// ("," referenceName+=EString)*
protected class AddDerivedAttribute_Group_4 extends GroupToken {
	
	public AddDerivedAttribute_Group_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getAddDerivedAttributeAccess().getGroup_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddDerivedAttribute_ReferenceNameAssignment_4_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ","
protected class AddDerivedAttribute_CommaKeyword_4_0 extends KeywordToken  {
	
	public AddDerivedAttribute_CommaKeyword_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAddDerivedAttributeAccess().getCommaKeyword_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddDerivedAttribute_Group_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AddDerivedAttribute_ReferenceNameAssignment_3(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// referenceName+=EString
protected class AddDerivedAttribute_ReferenceNameAssignment_4_1 extends AssignmentToken  {
	
	public AddDerivedAttribute_ReferenceNameAssignment_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAddDerivedAttributeAccess().getReferenceNameAssignment_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddDerivedAttribute_CommaKeyword_4_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("referenceName",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("referenceName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAddDerivedAttributeAccess().getReferenceNameEStringParserRuleCall_4_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getAddDerivedAttributeAccess().getReferenceNameEStringParserRuleCall_4_1_0();
			return obj;
		}
		return null;
	}

}


// ":"
protected class AddDerivedAttribute_ColonKeyword_5 extends KeywordToken  {
	
	public AddDerivedAttribute_ColonKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getAddDerivedAttributeAccess().getColonKeyword_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddDerivedAttribute_Group_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new AddDerivedAttribute_ReferenceNameAssignment_3(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// attributeName=EString
protected class AddDerivedAttribute_AttributeNameAssignment_6 extends AssignmentToken  {
	
	public AddDerivedAttribute_AttributeNameAssignment_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getAddDerivedAttributeAccess().getAttributeNameAssignment_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new AddDerivedAttribute_ColonKeyword_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("attributeName",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("attributeName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAddDerivedAttributeAccess().getAttributeNameEStringParserRuleCall_6_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getAddDerivedAttributeAccess().getAttributeNameEStringParserRuleCall_6_0();
			return obj;
		}
		return null;
	}

}


/************ end Rule AddDerivedAttribute ****************/


/************ begin Rule Enumerate ****************
 *
 * Enumerate:
 * 	{Enumerate} "enumerate" "(" enumName=EString "," attributeName=EString ")";
 *
 **/

// {Enumerate} "enumerate" "(" enumName=EString "," attributeName=EString ")"
protected class Enumerate_Group extends GroupToken {
	
	public Enumerate_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getEnumerateAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Enumerate_RightParenthesisKeyword_6(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getEnumerateAccess().getEnumerateAction_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {Enumerate}
protected class Enumerate_EnumerateAction_0 extends ActionToken  {

	public Enumerate_EnumerateAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getEnumerateAccess().getEnumerateAction_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// "enumerate"
protected class Enumerate_EnumerateKeyword_1 extends KeywordToken  {
	
	public Enumerate_EnumerateKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumerateAccess().getEnumerateKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Enumerate_EnumerateAction_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// "("
protected class Enumerate_LeftParenthesisKeyword_2 extends KeywordToken  {
	
	public Enumerate_LeftParenthesisKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumerateAccess().getLeftParenthesisKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Enumerate_EnumerateKeyword_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// enumName=EString
protected class Enumerate_EnumNameAssignment_3 extends AssignmentToken  {
	
	public Enumerate_EnumNameAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumerateAccess().getEnumNameAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Enumerate_LeftParenthesisKeyword_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("enumName",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("enumName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getEnumerateAccess().getEnumNameEStringParserRuleCall_3_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getEnumerateAccess().getEnumNameEStringParserRuleCall_3_0();
			return obj;
		}
		return null;
	}

}

// ","
protected class Enumerate_CommaKeyword_4 extends KeywordToken  {
	
	public Enumerate_CommaKeyword_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumerateAccess().getCommaKeyword_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Enumerate_EnumNameAssignment_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// attributeName=EString
protected class Enumerate_AttributeNameAssignment_5 extends AssignmentToken  {
	
	public Enumerate_AttributeNameAssignment_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getEnumerateAccess().getAttributeNameAssignment_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Enumerate_CommaKeyword_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("attributeName",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("attributeName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getEnumerateAccess().getAttributeNameEStringParserRuleCall_5_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getEnumerateAccess().getAttributeNameEStringParserRuleCall_5_0();
			return obj;
		}
		return null;
	}

}

// ")"
protected class Enumerate_RightParenthesisKeyword_6 extends KeywordToken  {
	
	public Enumerate_RightParenthesisKeyword_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getEnumerateAccess().getRightParenthesisKeyword_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Enumerate_AttributeNameAssignment_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


/************ end Rule Enumerate ****************/




}
