/*
* generated by Xtext
*/
package org.sonatype.maven.parseTreeConstruction;

import org.eclipse.emf.ecore.*;
import org.eclipse.xtext.*;
import org.eclipse.xtext.parsetree.reconstr.IInstanceDescription;
import org.eclipse.xtext.parsetree.reconstr.impl.AbstractParseTreeConstructor;

import org.sonatype.maven.services.DependencyDslGrammarAccess;

import com.google.inject.Inject;

public class DependencyDslParsetreeConstructor extends AbstractParseTreeConstructor {
		
	@Inject
	private DependencyDslGrammarAccess grammarAccess;
		
	public DependencyDslGrammarAccess getGrammarAccess() {
		return grammarAccess;
	}

	protected AbstractToken getRootToken(IInstanceDescription inst) {
		return new ThisRootNode(inst);	
	}
	
protected class ThisRootNode extends RootToken {
	public ThisRootNode(IInstanceDescription inst) {
		super(inst);
	}
	
	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Project_Group(this, this, 0, inst);
			case 1: return new GA_Group(this, this, 1, inst);
			case 2: return new Dependency_Group(this, this, 2, inst);
			case 3: return new MappedDependency_Group(this, this, 3, inst);
			case 4: return new Plugin_Group(this, this, 4, inst);
			case 5: return new Extension_Group(this, this, 5, inst);
			case 6: return new Model_Group(this, this, 6, inst);
			case 7: return new Import_Group(this, this, 7, inst);
			case 8: return new Type_Alternatives(this, this, 8, inst);
			case 9: return new SimpleType_Group(this, this, 9, inst);
			case 10: return new Entity_Group(this, this, 10, inst);
			case 11: return new Property_Group(this, this, 11, inst);
			default: return null;
		}	
	}	
}
	

/************ begin Rule Project ****************
 *
 * Project:
 *   "project" "{" "groupId" ":" groupId=GroupId "artifactId" ":" artifactId=ArtifactId
 *   "version" ":" version=Version ("dependencies" "{" dependencies+=Dependency* "}")? (
 *   "mappedDependencies" "{" mappedDependencies+=MappedDependency* "}")? ("plugins" "{"
 *   plugins+=Plugin* "}")? ("extensions" "{" extensions+=Extension* "}")? "}";
 *
 **/

// "project" "{" "groupId" ":" groupId=GroupId "artifactId" ":" artifactId=ArtifactId
// "version" ":" version=Version ("dependencies" "{" dependencies+=Dependency* "}")? (
// "mappedDependencies" "{" mappedDependencies+=MappedDependency* "}")? ("plugins" "{"
// plugins+=Plugin* "}")? ("extensions" "{" extensions+=Extension* "}")? "}"
protected class Project_Group extends GroupToken {
	
	public Project_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Group getGrammarElement() {
		return grammarAccess.getProjectAccess().getGroup();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Project_RightCurlyBracketKeyword_15(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	public IInstanceDescription tryConsume() {
		if(!current.isInstanceOf(grammarAccess.getProjectRule().getType().getClassifier())) return null;
		return tryConsumeVal();
	}
}

// "project"
protected class Project_ProjectKeyword_0 extends KeywordToken  {
	
	public Project_ProjectKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getProjectAccess().getProjectKeyword_0();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			default: return parent.createParentFollower(this, index, index, inst);
		}	
	}	
		
}

// "{"
protected class Project_LeftCurlyBracketKeyword_1 extends KeywordToken  {
	
	public Project_LeftCurlyBracketKeyword_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getProjectAccess().getLeftCurlyBracketKeyword_1();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Project_ProjectKeyword_0(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// "groupId"
protected class Project_GroupIdKeyword_2 extends KeywordToken  {
	
	public Project_GroupIdKeyword_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getProjectAccess().getGroupIdKeyword_2();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Project_LeftCurlyBracketKeyword_1(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ":"
protected class Project_ColonKeyword_3 extends KeywordToken  {
	
	public Project_ColonKeyword_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getProjectAccess().getColonKeyword_3();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Project_GroupIdKeyword_2(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// groupId=GroupId
protected class Project_GroupIdAssignment_4 extends AssignmentToken  {
	
	public Project_GroupIdAssignment_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getProjectAccess().getGroupIdAssignment_4();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Project_ColonKeyword_3(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("groupId",true)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("groupId");
		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
			type = AssignmentType.DRC;
			element = grammarAccess.getProjectAccess().getGroupIdGroupIdParserRuleCall_4_0();
			return obj;
		}
		return null;
	}

}

// "artifactId"
protected class Project_ArtifactIdKeyword_5 extends KeywordToken  {
	
	public Project_ArtifactIdKeyword_5(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getProjectAccess().getArtifactIdKeyword_5();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Project_GroupIdAssignment_4(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ":"
protected class Project_ColonKeyword_6 extends KeywordToken  {
	
	public Project_ColonKeyword_6(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getProjectAccess().getColonKeyword_6();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Project_ArtifactIdKeyword_5(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// artifactId=ArtifactId
protected class Project_ArtifactIdAssignment_7 extends AssignmentToken  {
	
	public Project_ArtifactIdAssignment_7(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getProjectAccess().getArtifactIdAssignment_7();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Project_ColonKeyword_6(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("artifactId",true)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("artifactId");
		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
			type = AssignmentType.DRC;
			element = grammarAccess.getProjectAccess().getArtifactIdArtifactIdParserRuleCall_7_0();
			return obj;
		}
		return null;
	}

}

// "version"
protected class Project_VersionKeyword_8 extends KeywordToken  {
	
	public Project_VersionKeyword_8(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getProjectAccess().getVersionKeyword_8();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Project_ArtifactIdAssignment_7(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ":"
protected class Project_ColonKeyword_9 extends KeywordToken  {
	
	public Project_ColonKeyword_9(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getProjectAccess().getColonKeyword_9();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Project_VersionKeyword_8(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// version=Version
protected class Project_VersionAssignment_10 extends AssignmentToken  {
	
	public Project_VersionAssignment_10(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getProjectAccess().getVersionAssignment_10();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Project_ColonKeyword_9(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("version",true)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("version");
		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
			type = AssignmentType.DRC;
			element = grammarAccess.getProjectAccess().getVersionVersionParserRuleCall_10_0();
			return obj;
		}
		return null;
	}

}

// ("dependencies" "{" dependencies+=Dependency* "}")?
protected class Project_Group_11 extends GroupToken {
	
	public Project_Group_11(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Group getGrammarElement() {
		return grammarAccess.getProjectAccess().getGroup_11();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Project_RightCurlyBracketKeyword_11_3(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// "dependencies"
protected class Project_DependenciesKeyword_11_0 extends KeywordToken  {
	
	public Project_DependenciesKeyword_11_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getProjectAccess().getDependenciesKeyword_11_0();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Project_VersionAssignment_10(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// "{"
protected class Project_LeftCurlyBracketKeyword_11_1 extends KeywordToken  {
	
	public Project_LeftCurlyBracketKeyword_11_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getProjectAccess().getLeftCurlyBracketKeyword_11_1();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Project_DependenciesKeyword_11_0(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// dependencies+=Dependency*
protected class Project_DependenciesAssignment_11_2 extends AssignmentToken  {
	
	public Project_DependenciesAssignment_11_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getProjectAccess().getDependenciesAssignment_11_2();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Dependency_Group(this, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("dependencies",false)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("dependencies");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IInstanceDescription param = getDescr((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDependencyRule().getType().getClassifier())) {
				type = AssignmentType.PRC;
				element = grammarAccess.getProjectAccess().getDependenciesDependencyParserRuleCall_11_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Project_DependenciesAssignment_11_2(parent, next, actIndex, consumed);
			case 1: return new Project_LeftCurlyBracketKeyword_11_1(parent, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// "}"
protected class Project_RightCurlyBracketKeyword_11_3 extends KeywordToken  {
	
	public Project_RightCurlyBracketKeyword_11_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getProjectAccess().getRightCurlyBracketKeyword_11_3();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Project_DependenciesAssignment_11_2(parent, this, 0, inst);
			case 1: return new Project_LeftCurlyBracketKeyword_11_1(parent, this, 1, inst);
			default: return null;
		}	
	}	
		
}


// ("mappedDependencies" "{" mappedDependencies+=MappedDependency* "}")?
protected class Project_Group_12 extends GroupToken {
	
	public Project_Group_12(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Group getGrammarElement() {
		return grammarAccess.getProjectAccess().getGroup_12();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Project_RightCurlyBracketKeyword_12_3(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// "mappedDependencies"
protected class Project_MappedDependenciesKeyword_12_0 extends KeywordToken  {
	
	public Project_MappedDependenciesKeyword_12_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getProjectAccess().getMappedDependenciesKeyword_12_0();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Project_Group_11(parent, this, 0, inst);
			case 1: return new Project_VersionAssignment_10(parent, this, 1, inst);
			default: return null;
		}	
	}	
		
}

// "{"
protected class Project_LeftCurlyBracketKeyword_12_1 extends KeywordToken  {
	
	public Project_LeftCurlyBracketKeyword_12_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getProjectAccess().getLeftCurlyBracketKeyword_12_1();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Project_MappedDependenciesKeyword_12_0(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// mappedDependencies+=MappedDependency*
protected class Project_MappedDependenciesAssignment_12_2 extends AssignmentToken  {
	
	public Project_MappedDependenciesAssignment_12_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getProjectAccess().getMappedDependenciesAssignment_12_2();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new MappedDependency_Group(this, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("mappedDependencies",false)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("mappedDependencies");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IInstanceDescription param = getDescr((EObject)value);
			if(param.isInstanceOf(grammarAccess.getMappedDependencyRule().getType().getClassifier())) {
				type = AssignmentType.PRC;
				element = grammarAccess.getProjectAccess().getMappedDependenciesMappedDependencyParserRuleCall_12_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Project_MappedDependenciesAssignment_12_2(parent, next, actIndex, consumed);
			case 1: return new Project_LeftCurlyBracketKeyword_12_1(parent, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// "}"
protected class Project_RightCurlyBracketKeyword_12_3 extends KeywordToken  {
	
	public Project_RightCurlyBracketKeyword_12_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getProjectAccess().getRightCurlyBracketKeyword_12_3();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Project_MappedDependenciesAssignment_12_2(parent, this, 0, inst);
			case 1: return new Project_LeftCurlyBracketKeyword_12_1(parent, this, 1, inst);
			default: return null;
		}	
	}	
		
}


// ("plugins" "{" plugins+=Plugin* "}")?
protected class Project_Group_13 extends GroupToken {
	
	public Project_Group_13(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Group getGrammarElement() {
		return grammarAccess.getProjectAccess().getGroup_13();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Project_RightCurlyBracketKeyword_13_3(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// "plugins"
protected class Project_PluginsKeyword_13_0 extends KeywordToken  {
	
	public Project_PluginsKeyword_13_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getProjectAccess().getPluginsKeyword_13_0();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Project_Group_12(parent, this, 0, inst);
			case 1: return new Project_Group_11(parent, this, 1, inst);
			case 2: return new Project_VersionAssignment_10(parent, this, 2, inst);
			default: return null;
		}	
	}	
		
}

// "{"
protected class Project_LeftCurlyBracketKeyword_13_1 extends KeywordToken  {
	
	public Project_LeftCurlyBracketKeyword_13_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getProjectAccess().getLeftCurlyBracketKeyword_13_1();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Project_PluginsKeyword_13_0(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// plugins+=Plugin*
protected class Project_PluginsAssignment_13_2 extends AssignmentToken  {
	
	public Project_PluginsAssignment_13_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getProjectAccess().getPluginsAssignment_13_2();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Plugin_Group(this, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("plugins",false)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("plugins");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IInstanceDescription param = getDescr((EObject)value);
			if(param.isInstanceOf(grammarAccess.getPluginRule().getType().getClassifier())) {
				type = AssignmentType.PRC;
				element = grammarAccess.getProjectAccess().getPluginsPluginParserRuleCall_13_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Project_PluginsAssignment_13_2(parent, next, actIndex, consumed);
			case 1: return new Project_LeftCurlyBracketKeyword_13_1(parent, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// "}"
protected class Project_RightCurlyBracketKeyword_13_3 extends KeywordToken  {
	
	public Project_RightCurlyBracketKeyword_13_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getProjectAccess().getRightCurlyBracketKeyword_13_3();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Project_PluginsAssignment_13_2(parent, this, 0, inst);
			case 1: return new Project_LeftCurlyBracketKeyword_13_1(parent, this, 1, inst);
			default: return null;
		}	
	}	
		
}


// ("extensions" "{" extensions+=Extension* "}")?
protected class Project_Group_14 extends GroupToken {
	
	public Project_Group_14(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Group getGrammarElement() {
		return grammarAccess.getProjectAccess().getGroup_14();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Project_RightCurlyBracketKeyword_14_3(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// "extensions"
protected class Project_ExtensionsKeyword_14_0 extends KeywordToken  {
	
	public Project_ExtensionsKeyword_14_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getProjectAccess().getExtensionsKeyword_14_0();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Project_Group_13(parent, this, 0, inst);
			case 1: return new Project_Group_12(parent, this, 1, inst);
			case 2: return new Project_Group_11(parent, this, 2, inst);
			case 3: return new Project_VersionAssignment_10(parent, this, 3, inst);
			default: return null;
		}	
	}	
		
}

// "{"
protected class Project_LeftCurlyBracketKeyword_14_1 extends KeywordToken  {
	
	public Project_LeftCurlyBracketKeyword_14_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getProjectAccess().getLeftCurlyBracketKeyword_14_1();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Project_ExtensionsKeyword_14_0(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// extensions+=Extension*
protected class Project_ExtensionsAssignment_14_2 extends AssignmentToken  {
	
	public Project_ExtensionsAssignment_14_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getProjectAccess().getExtensionsAssignment_14_2();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Extension_Group(this, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("extensions",false)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("extensions");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IInstanceDescription param = getDescr((EObject)value);
			if(param.isInstanceOf(grammarAccess.getExtensionRule().getType().getClassifier())) {
				type = AssignmentType.PRC;
				element = grammarAccess.getProjectAccess().getExtensionsExtensionParserRuleCall_14_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Project_ExtensionsAssignment_14_2(parent, next, actIndex, consumed);
			case 1: return new Project_LeftCurlyBracketKeyword_14_1(parent, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// "}"
protected class Project_RightCurlyBracketKeyword_14_3 extends KeywordToken  {
	
	public Project_RightCurlyBracketKeyword_14_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getProjectAccess().getRightCurlyBracketKeyword_14_3();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Project_ExtensionsAssignment_14_2(parent, this, 0, inst);
			case 1: return new Project_LeftCurlyBracketKeyword_14_1(parent, this, 1, inst);
			default: return null;
		}	
	}	
		
}


// "}"
protected class Project_RightCurlyBracketKeyword_15 extends KeywordToken  {
	
	public Project_RightCurlyBracketKeyword_15(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getProjectAccess().getRightCurlyBracketKeyword_15();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Project_Group_14(parent, this, 0, inst);
			case 1: return new Project_Group_13(parent, this, 1, inst);
			case 2: return new Project_Group_12(parent, this, 2, inst);
			case 3: return new Project_Group_11(parent, this, 3, inst);
			case 4: return new Project_VersionAssignment_10(parent, this, 4, inst);
			default: return null;
		}	
	}	
		
}


/************ end Rule Project ****************/


/************ begin Rule GA ****************
 *
 * GA:
 *   "groupId" ":" groupId=GroupId "," "artifactId" ":" artifactId=ArtifactId;
 *
 **/

// "groupId" ":" groupId=GroupId "," "artifactId" ":" artifactId=ArtifactId
protected class GA_Group extends GroupToken {
	
	public GA_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Group getGrammarElement() {
		return grammarAccess.getGAAccess().getGroup();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new GA_ArtifactIdAssignment_6(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	public IInstanceDescription tryConsume() {
		if(!current.isInstanceOf(grammarAccess.getGARule().getType().getClassifier())) return null;
		return tryConsumeVal();
	}
}

// "groupId"
protected class GA_GroupIdKeyword_0 extends KeywordToken  {
	
	public GA_GroupIdKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getGAAccess().getGroupIdKeyword_0();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			default: return parent.createParentFollower(this, index, index, inst);
		}	
	}	
		
}

// ":"
protected class GA_ColonKeyword_1 extends KeywordToken  {
	
	public GA_ColonKeyword_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getGAAccess().getColonKeyword_1();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new GA_GroupIdKeyword_0(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// groupId=GroupId
protected class GA_GroupIdAssignment_2 extends AssignmentToken  {
	
	public GA_GroupIdAssignment_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getGAAccess().getGroupIdAssignment_2();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new GA_ColonKeyword_1(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("groupId",true)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("groupId");
		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
			type = AssignmentType.DRC;
			element = grammarAccess.getGAAccess().getGroupIdGroupIdParserRuleCall_2_0();
			return obj;
		}
		return null;
	}

}

// ","
protected class GA_CommaKeyword_3 extends KeywordToken  {
	
	public GA_CommaKeyword_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getGAAccess().getCommaKeyword_3();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new GA_GroupIdAssignment_2(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// "artifactId"
protected class GA_ArtifactIdKeyword_4 extends KeywordToken  {
	
	public GA_ArtifactIdKeyword_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getGAAccess().getArtifactIdKeyword_4();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new GA_CommaKeyword_3(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ":"
protected class GA_ColonKeyword_5 extends KeywordToken  {
	
	public GA_ColonKeyword_5(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getGAAccess().getColonKeyword_5();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new GA_ArtifactIdKeyword_4(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// artifactId=ArtifactId
protected class GA_ArtifactIdAssignment_6 extends AssignmentToken  {
	
	public GA_ArtifactIdAssignment_6(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getGAAccess().getArtifactIdAssignment_6();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new GA_ColonKeyword_5(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("artifactId",true)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("artifactId");
		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
			type = AssignmentType.DRC;
			element = grammarAccess.getGAAccess().getArtifactIdArtifactIdParserRuleCall_6_0();
			return obj;
		}
		return null;
	}

}


/************ end Rule GA ****************/


/************ begin Rule Dependency ****************
 *
 * Dependency:
 *   "groupId" ":" groupId=GroupId "," "artifactId" ":" artifactId=ArtifactId "," "version"
 *   ":" version=Version ("," "path"|"url")? ("," "scope")? ("," "classifier")? ("," "type")? (
 *   "," "exclusions" "{" exclusions+=GA* "}")?; 
 * 	
 *   
 *   //
 *    //
 *    //
 *             
 *         
 *          
 *   
 *   //
 *    //
 *    //
 *            
 *       
 *       
 *       
 *   
 *   //
 *    //
 *    //
 *
 **/

// "groupId" ":" groupId=GroupId "," "artifactId" ":" artifactId=ArtifactId "," "version"
// ":" version=Version ("," "path"|"url")? ("," "scope")? ("," "classifier")? ("," "type")? (
// "," "exclusions" "{" exclusions+=GA* "}")? 
//   //
//    //
//    //
//             
//         
//          
//   
//   //
//    //
//    //
//            
//       
//       
//       
//   
//   //
//    //
//    //
protected class Dependency_Group extends GroupToken {
	
	public Dependency_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Group getGrammarElement() {
		return grammarAccess.getDependencyAccess().getGroup();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Dependency_Group_15(parent, this, 0, inst);
			case 1: return new Dependency_VersionAssignment_10(parent, this, 1, inst);
			default: return null;
		}	
	}	
		
	public IInstanceDescription tryConsume() {
		if(!current.isInstanceOf(grammarAccess.getDependencyRule().getType().getClassifier())) return null;
		return tryConsumeVal();
	}
}

// "groupId" 
//   //
//    //
//    //
protected class Dependency_GroupIdKeyword_0 extends KeywordToken  {
	
	public Dependency_GroupIdKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getDependencyAccess().getGroupIdKeyword_0();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			default: return parent.createParentFollower(this, index, index, inst);
		}	
	}	
		
}

// ":"
protected class Dependency_ColonKeyword_1 extends KeywordToken  {
	
	public Dependency_ColonKeyword_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getDependencyAccess().getColonKeyword_1();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Dependency_GroupIdKeyword_0(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// groupId=GroupId
protected class Dependency_GroupIdAssignment_2 extends AssignmentToken  {
	
	public Dependency_GroupIdAssignment_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getDependencyAccess().getGroupIdAssignment_2();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Dependency_ColonKeyword_1(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("groupId",true)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("groupId");
		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
			type = AssignmentType.DRC;
			element = grammarAccess.getDependencyAccess().getGroupIdGroupIdParserRuleCall_2_0();
			return obj;
		}
		return null;
	}

}

// ","
protected class Dependency_CommaKeyword_3 extends KeywordToken  {
	
	public Dependency_CommaKeyword_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getDependencyAccess().getCommaKeyword_3();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Dependency_GroupIdAssignment_2(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// "artifactId"
protected class Dependency_ArtifactIdKeyword_4 extends KeywordToken  {
	
	public Dependency_ArtifactIdKeyword_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getDependencyAccess().getArtifactIdKeyword_4();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Dependency_CommaKeyword_3(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ":"
protected class Dependency_ColonKeyword_5 extends KeywordToken  {
	
	public Dependency_ColonKeyword_5(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getDependencyAccess().getColonKeyword_5();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Dependency_ArtifactIdKeyword_4(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// artifactId=ArtifactId
protected class Dependency_ArtifactIdAssignment_6 extends AssignmentToken  {
	
	public Dependency_ArtifactIdAssignment_6(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getDependencyAccess().getArtifactIdAssignment_6();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Dependency_ColonKeyword_5(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("artifactId",true)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("artifactId");
		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
			type = AssignmentType.DRC;
			element = grammarAccess.getDependencyAccess().getArtifactIdArtifactIdParserRuleCall_6_0();
			return obj;
		}
		return null;
	}

}

// ","
protected class Dependency_CommaKeyword_7 extends KeywordToken  {
	
	public Dependency_CommaKeyword_7(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getDependencyAccess().getCommaKeyword_7();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Dependency_ArtifactIdAssignment_6(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// "version"
protected class Dependency_VersionKeyword_8 extends KeywordToken  {
	
	public Dependency_VersionKeyword_8(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getDependencyAccess().getVersionKeyword_8();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Dependency_CommaKeyword_7(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ":"
protected class Dependency_ColonKeyword_9 extends KeywordToken  {
	
	public Dependency_ColonKeyword_9(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getDependencyAccess().getColonKeyword_9();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Dependency_VersionKeyword_8(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// version=Version   
//   
//   //
//    //
//    //
protected class Dependency_VersionAssignment_10 extends AssignmentToken  {
	
	public Dependency_VersionAssignment_10(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getDependencyAccess().getVersionAssignment_10();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Dependency_ColonKeyword_9(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("version",true)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("version");
		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
			type = AssignmentType.DRC;
			element = grammarAccess.getDependencyAccess().getVersionVersionParserRuleCall_10_0();
			return obj;
		}
		return null;
	}

}

// ("," "exclusions" "{" exclusions+=GA* "}")?
protected class Dependency_Group_15 extends GroupToken {
	
	public Dependency_Group_15(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Group getGrammarElement() {
		return grammarAccess.getDependencyAccess().getGroup_15();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Dependency_RightCurlyBracketKeyword_15_4(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ","
protected class Dependency_CommaKeyword_15_0 extends KeywordToken  {
	
	public Dependency_CommaKeyword_15_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getDependencyAccess().getCommaKeyword_15_0();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Dependency_VersionAssignment_10(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// "exclusions"
protected class Dependency_ExclusionsKeyword_15_1 extends KeywordToken  {
	
	public Dependency_ExclusionsKeyword_15_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getDependencyAccess().getExclusionsKeyword_15_1();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Dependency_CommaKeyword_15_0(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// "{"
protected class Dependency_LeftCurlyBracketKeyword_15_2 extends KeywordToken  {
	
	public Dependency_LeftCurlyBracketKeyword_15_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getDependencyAccess().getLeftCurlyBracketKeyword_15_2();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Dependency_ExclusionsKeyword_15_1(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// exclusions+=GA*
protected class Dependency_ExclusionsAssignment_15_3 extends AssignmentToken  {
	
	public Dependency_ExclusionsAssignment_15_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getDependencyAccess().getExclusionsAssignment_15_3();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new GA_Group(this, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("exclusions",false)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("exclusions");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IInstanceDescription param = getDescr((EObject)value);
			if(param.isInstanceOf(grammarAccess.getGARule().getType().getClassifier())) {
				type = AssignmentType.PRC;
				element = grammarAccess.getDependencyAccess().getExclusionsGAParserRuleCall_15_3_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Dependency_ExclusionsAssignment_15_3(parent, next, actIndex, consumed);
			case 1: return new Dependency_LeftCurlyBracketKeyword_15_2(parent, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// "}"
protected class Dependency_RightCurlyBracketKeyword_15_4 extends KeywordToken  {
	
	public Dependency_RightCurlyBracketKeyword_15_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getDependencyAccess().getRightCurlyBracketKeyword_15_4();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Dependency_ExclusionsAssignment_15_3(parent, this, 0, inst);
			case 1: return new Dependency_LeftCurlyBracketKeyword_15_2(parent, this, 1, inst);
			default: return null;
		}	
	}	
		
}



/************ end Rule Dependency ****************/


/************ begin Rule MappedDependency ****************
 *
 * MappedDependency:
 *   ("path"|"url") ":" STRING ("," "exclude" ":" STRING)? ("," "groupId" ":" groupId=GroupId)?
 *   ("," "artifactId" ":" artifactId=ArtifactId)? ("," "version" ":" version=Version)?; 	
 * 
 *   
 *   //
 *    //
 *    //
 *
 **/

// ("path"|"url") ":" STRING ("," "exclude" ":" STRING)? ("," "groupId" ":" groupId=GroupId)?
// ("," "artifactId" ":" artifactId=ArtifactId)? ("," "version" ":" version=Version)? 
//   //
//    //
//    //
protected class MappedDependency_Group extends GroupToken {
	
	public MappedDependency_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Group getGrammarElement() {
		return grammarAccess.getMappedDependencyAccess().getGroup();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new MappedDependency_Group_6(parent, this, 0, inst);
			case 1: return new MappedDependency_Group_5(parent, this, 1, inst);
			case 2: return new MappedDependency_Group_4(parent, this, 2, inst);
			case 3: return new MappedDependency_Group_3(parent, this, 3, inst);
			case 4: return new MappedDependency_STRINGTerminalRuleCall_2(parent, this, 4, inst);
			default: return null;
		}	
	}	
		
	public IInstanceDescription tryConsume() {
		if(!current.isInstanceOf(grammarAccess.getMappedDependencyRule().getType().getClassifier())) return null;
		return tryConsumeVal();
	}
}

// "path"|"url" 
//   //
//    //
//    //
protected class MappedDependency_Alternatives_0 extends AlternativesToken {

	public MappedDependency_Alternatives_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Alternatives getGrammarElement() {
		return grammarAccess.getMappedDependencyAccess().getAlternatives_0();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new MappedDependency_PathKeyword_0_0(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// "path"
protected class MappedDependency_PathKeyword_0_0 extends KeywordToken  {
	
	public MappedDependency_PathKeyword_0_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getMappedDependencyAccess().getPathKeyword_0_0();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			default: return parent.createParentFollower(this, index, index, inst);
		}	
	}	
		
}


// ":"
protected class MappedDependency_ColonKeyword_1 extends KeywordToken  {
	
	public MappedDependency_ColonKeyword_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getMappedDependencyAccess().getColonKeyword_1();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new MappedDependency_Alternatives_0(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// STRING
protected class MappedDependency_STRINGTerminalRuleCall_2 extends UnassignedTextToken {

	public MappedDependency_STRINGTerminalRuleCall_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public RuleCall getGrammarElement() {
		return grammarAccess.getMappedDependencyAccess().getSTRINGTerminalRuleCall_2();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new MappedDependency_ColonKeyword_1(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ("," "exclude" ":" STRING)?
protected class MappedDependency_Group_3 extends GroupToken {
	
	public MappedDependency_Group_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Group getGrammarElement() {
		return grammarAccess.getMappedDependencyAccess().getGroup_3();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new MappedDependency_STRINGTerminalRuleCall_3_3(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ","
protected class MappedDependency_CommaKeyword_3_0 extends KeywordToken  {
	
	public MappedDependency_CommaKeyword_3_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getMappedDependencyAccess().getCommaKeyword_3_0();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new MappedDependency_STRINGTerminalRuleCall_2(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// "exclude"
protected class MappedDependency_ExcludeKeyword_3_1 extends KeywordToken  {
	
	public MappedDependency_ExcludeKeyword_3_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getMappedDependencyAccess().getExcludeKeyword_3_1();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new MappedDependency_CommaKeyword_3_0(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ":"
protected class MappedDependency_ColonKeyword_3_2 extends KeywordToken  {
	
	public MappedDependency_ColonKeyword_3_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getMappedDependencyAccess().getColonKeyword_3_2();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new MappedDependency_ExcludeKeyword_3_1(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// STRING
protected class MappedDependency_STRINGTerminalRuleCall_3_3 extends UnassignedTextToken {

	public MappedDependency_STRINGTerminalRuleCall_3_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public RuleCall getGrammarElement() {
		return grammarAccess.getMappedDependencyAccess().getSTRINGTerminalRuleCall_3_3();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new MappedDependency_ColonKeyword_3_2(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}


// ("," "groupId" ":" groupId=GroupId)?
protected class MappedDependency_Group_4 extends GroupToken {
	
	public MappedDependency_Group_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Group getGrammarElement() {
		return grammarAccess.getMappedDependencyAccess().getGroup_4();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new MappedDependency_GroupIdAssignment_4_3(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ","
protected class MappedDependency_CommaKeyword_4_0 extends KeywordToken  {
	
	public MappedDependency_CommaKeyword_4_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getMappedDependencyAccess().getCommaKeyword_4_0();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new MappedDependency_Group_3(parent, this, 0, inst);
			case 1: return new MappedDependency_STRINGTerminalRuleCall_2(parent, this, 1, inst);
			default: return null;
		}	
	}	
		
}

// "groupId"
protected class MappedDependency_GroupIdKeyword_4_1 extends KeywordToken  {
	
	public MappedDependency_GroupIdKeyword_4_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getMappedDependencyAccess().getGroupIdKeyword_4_1();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new MappedDependency_CommaKeyword_4_0(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ":"
protected class MappedDependency_ColonKeyword_4_2 extends KeywordToken  {
	
	public MappedDependency_ColonKeyword_4_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getMappedDependencyAccess().getColonKeyword_4_2();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new MappedDependency_GroupIdKeyword_4_1(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// groupId=GroupId
protected class MappedDependency_GroupIdAssignment_4_3 extends AssignmentToken  {
	
	public MappedDependency_GroupIdAssignment_4_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getMappedDependencyAccess().getGroupIdAssignment_4_3();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new MappedDependency_ColonKeyword_4_2(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("groupId",false)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("groupId");
		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
			type = AssignmentType.DRC;
			element = grammarAccess.getMappedDependencyAccess().getGroupIdGroupIdParserRuleCall_4_3_0();
			return obj;
		}
		return null;
	}

}


// ("," "artifactId" ":" artifactId=ArtifactId)?
protected class MappedDependency_Group_5 extends GroupToken {
	
	public MappedDependency_Group_5(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Group getGrammarElement() {
		return grammarAccess.getMappedDependencyAccess().getGroup_5();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new MappedDependency_ArtifactIdAssignment_5_3(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ","
protected class MappedDependency_CommaKeyword_5_0 extends KeywordToken  {
	
	public MappedDependency_CommaKeyword_5_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getMappedDependencyAccess().getCommaKeyword_5_0();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new MappedDependency_Group_4(parent, this, 0, inst);
			case 1: return new MappedDependency_Group_3(parent, this, 1, inst);
			case 2: return new MappedDependency_STRINGTerminalRuleCall_2(parent, this, 2, inst);
			default: return null;
		}	
	}	
		
}

// "artifactId"
protected class MappedDependency_ArtifactIdKeyword_5_1 extends KeywordToken  {
	
	public MappedDependency_ArtifactIdKeyword_5_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getMappedDependencyAccess().getArtifactIdKeyword_5_1();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new MappedDependency_CommaKeyword_5_0(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ":"
protected class MappedDependency_ColonKeyword_5_2 extends KeywordToken  {
	
	public MappedDependency_ColonKeyword_5_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getMappedDependencyAccess().getColonKeyword_5_2();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new MappedDependency_ArtifactIdKeyword_5_1(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// artifactId=ArtifactId
protected class MappedDependency_ArtifactIdAssignment_5_3 extends AssignmentToken  {
	
	public MappedDependency_ArtifactIdAssignment_5_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getMappedDependencyAccess().getArtifactIdAssignment_5_3();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new MappedDependency_ColonKeyword_5_2(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("artifactId",false)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("artifactId");
		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
			type = AssignmentType.DRC;
			element = grammarAccess.getMappedDependencyAccess().getArtifactIdArtifactIdParserRuleCall_5_3_0();
			return obj;
		}
		return null;
	}

}


// ("," "version" ":" version=Version)?
protected class MappedDependency_Group_6 extends GroupToken {
	
	public MappedDependency_Group_6(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Group getGrammarElement() {
		return grammarAccess.getMappedDependencyAccess().getGroup_6();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new MappedDependency_VersionAssignment_6_3(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ","
protected class MappedDependency_CommaKeyword_6_0 extends KeywordToken  {
	
	public MappedDependency_CommaKeyword_6_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getMappedDependencyAccess().getCommaKeyword_6_0();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new MappedDependency_Group_5(parent, this, 0, inst);
			case 1: return new MappedDependency_Group_4(parent, this, 1, inst);
			case 2: return new MappedDependency_Group_3(parent, this, 2, inst);
			case 3: return new MappedDependency_STRINGTerminalRuleCall_2(parent, this, 3, inst);
			default: return null;
		}	
	}	
		
}

// "version"
protected class MappedDependency_VersionKeyword_6_1 extends KeywordToken  {
	
	public MappedDependency_VersionKeyword_6_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getMappedDependencyAccess().getVersionKeyword_6_1();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new MappedDependency_CommaKeyword_6_0(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ":"
protected class MappedDependency_ColonKeyword_6_2 extends KeywordToken  {
	
	public MappedDependency_ColonKeyword_6_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getMappedDependencyAccess().getColonKeyword_6_2();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new MappedDependency_VersionKeyword_6_1(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// version=Version
protected class MappedDependency_VersionAssignment_6_3 extends AssignmentToken  {
	
	public MappedDependency_VersionAssignment_6_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getMappedDependencyAccess().getVersionAssignment_6_3();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new MappedDependency_ColonKeyword_6_2(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("version",false)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("version");
		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
			type = AssignmentType.DRC;
			element = grammarAccess.getMappedDependencyAccess().getVersionVersionParserRuleCall_6_3_0();
			return obj;
		}
		return null;
	}

}



/************ end Rule MappedDependency ****************/


/************ begin Rule Plugin ****************
 *
 * Plugin:
 *   "groupId" ":" groupId=GroupId "," "artifactId" ":" artifactId=ArtifactId "," "version"
 *   ":" version=Version ("," "phase" ":" ID)? ("," "extensionId" ":" ID)? ("," "execute" "{"
 *   STRING* "}")?; 	
 * 
 * 	
 *   
 *   //
 *    //
 *    //
 *             
 *         
 *          
 *                    
 *           
 *   //
 *    //
 *
 **/

// "groupId" ":" groupId=GroupId "," "artifactId" ":" artifactId=ArtifactId "," "version"
// ":" version=Version ("," "phase" ":" ID)? ("," "extensionId" ":" ID)? ("," "execute" "{"
// STRING* "}")? 
//   //
//    //
//    //
//             
//         
//          
//                    
//           
//   //
//    //
protected class Plugin_Group extends GroupToken {
	
	public Plugin_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Group getGrammarElement() {
		return grammarAccess.getPluginAccess().getGroup();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Plugin_Group_13(parent, this, 0, inst);
			case 1: return new Plugin_Group_12(parent, this, 1, inst);
			case 2: return new Plugin_Group_11(parent, this, 2, inst);
			case 3: return new Plugin_VersionAssignment_10(parent, this, 3, inst);
			default: return null;
		}	
	}	
		
	public IInstanceDescription tryConsume() {
		if(!current.isInstanceOf(grammarAccess.getPluginRule().getType().getClassifier())) return null;
		return tryConsumeVal();
	}
}

// "groupId" 
//   //
//    //
//    //
protected class Plugin_GroupIdKeyword_0 extends KeywordToken  {
	
	public Plugin_GroupIdKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getPluginAccess().getGroupIdKeyword_0();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			default: return parent.createParentFollower(this, index, index, inst);
		}	
	}	
		
}

// ":"
protected class Plugin_ColonKeyword_1 extends KeywordToken  {
	
	public Plugin_ColonKeyword_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getPluginAccess().getColonKeyword_1();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Plugin_GroupIdKeyword_0(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// groupId=GroupId
protected class Plugin_GroupIdAssignment_2 extends AssignmentToken  {
	
	public Plugin_GroupIdAssignment_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getPluginAccess().getGroupIdAssignment_2();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Plugin_ColonKeyword_1(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("groupId",true)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("groupId");
		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
			type = AssignmentType.DRC;
			element = grammarAccess.getPluginAccess().getGroupIdGroupIdParserRuleCall_2_0();
			return obj;
		}
		return null;
	}

}

// ","
protected class Plugin_CommaKeyword_3 extends KeywordToken  {
	
	public Plugin_CommaKeyword_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getPluginAccess().getCommaKeyword_3();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Plugin_GroupIdAssignment_2(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// "artifactId"
protected class Plugin_ArtifactIdKeyword_4 extends KeywordToken  {
	
	public Plugin_ArtifactIdKeyword_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getPluginAccess().getArtifactIdKeyword_4();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Plugin_CommaKeyword_3(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ":"
protected class Plugin_ColonKeyword_5 extends KeywordToken  {
	
	public Plugin_ColonKeyword_5(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getPluginAccess().getColonKeyword_5();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Plugin_ArtifactIdKeyword_4(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// artifactId=ArtifactId
protected class Plugin_ArtifactIdAssignment_6 extends AssignmentToken  {
	
	public Plugin_ArtifactIdAssignment_6(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getPluginAccess().getArtifactIdAssignment_6();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Plugin_ColonKeyword_5(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("artifactId",true)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("artifactId");
		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
			type = AssignmentType.DRC;
			element = grammarAccess.getPluginAccess().getArtifactIdArtifactIdParserRuleCall_6_0();
			return obj;
		}
		return null;
	}

}

// ","
protected class Plugin_CommaKeyword_7 extends KeywordToken  {
	
	public Plugin_CommaKeyword_7(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getPluginAccess().getCommaKeyword_7();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Plugin_ArtifactIdAssignment_6(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// "version"
protected class Plugin_VersionKeyword_8 extends KeywordToken  {
	
	public Plugin_VersionKeyword_8(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getPluginAccess().getVersionKeyword_8();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Plugin_CommaKeyword_7(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ":"
protected class Plugin_ColonKeyword_9 extends KeywordToken  {
	
	public Plugin_ColonKeyword_9(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getPluginAccess().getColonKeyword_9();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Plugin_VersionKeyword_8(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// version=Version
protected class Plugin_VersionAssignment_10 extends AssignmentToken  {
	
	public Plugin_VersionAssignment_10(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getPluginAccess().getVersionAssignment_10();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Plugin_ColonKeyword_9(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("version",true)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("version");
		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
			type = AssignmentType.DRC;
			element = grammarAccess.getPluginAccess().getVersionVersionParserRuleCall_10_0();
			return obj;
		}
		return null;
	}

}

// ("," "phase" ":" ID)?
protected class Plugin_Group_11 extends GroupToken {
	
	public Plugin_Group_11(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Group getGrammarElement() {
		return grammarAccess.getPluginAccess().getGroup_11();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Plugin_IDTerminalRuleCall_11_3(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ","
protected class Plugin_CommaKeyword_11_0 extends KeywordToken  {
	
	public Plugin_CommaKeyword_11_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getPluginAccess().getCommaKeyword_11_0();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Plugin_VersionAssignment_10(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// "phase"
protected class Plugin_PhaseKeyword_11_1 extends KeywordToken  {
	
	public Plugin_PhaseKeyword_11_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getPluginAccess().getPhaseKeyword_11_1();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Plugin_CommaKeyword_11_0(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ":"
protected class Plugin_ColonKeyword_11_2 extends KeywordToken  {
	
	public Plugin_ColonKeyword_11_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getPluginAccess().getColonKeyword_11_2();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Plugin_PhaseKeyword_11_1(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ID
protected class Plugin_IDTerminalRuleCall_11_3 extends UnassignedTextToken {

	public Plugin_IDTerminalRuleCall_11_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public RuleCall getGrammarElement() {
		return grammarAccess.getPluginAccess().getIDTerminalRuleCall_11_3();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Plugin_ColonKeyword_11_2(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}


// ("," "extensionId" ":" ID)?
protected class Plugin_Group_12 extends GroupToken {
	
	public Plugin_Group_12(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Group getGrammarElement() {
		return grammarAccess.getPluginAccess().getGroup_12();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Plugin_IDTerminalRuleCall_12_3(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ","
protected class Plugin_CommaKeyword_12_0 extends KeywordToken  {
	
	public Plugin_CommaKeyword_12_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getPluginAccess().getCommaKeyword_12_0();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Plugin_Group_11(parent, this, 0, inst);
			case 1: return new Plugin_VersionAssignment_10(parent, this, 1, inst);
			default: return null;
		}	
	}	
		
}

// "extensionId"
protected class Plugin_ExtensionIdKeyword_12_1 extends KeywordToken  {
	
	public Plugin_ExtensionIdKeyword_12_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getPluginAccess().getExtensionIdKeyword_12_1();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Plugin_CommaKeyword_12_0(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ":"
protected class Plugin_ColonKeyword_12_2 extends KeywordToken  {
	
	public Plugin_ColonKeyword_12_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getPluginAccess().getColonKeyword_12_2();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Plugin_ExtensionIdKeyword_12_1(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ID
protected class Plugin_IDTerminalRuleCall_12_3 extends UnassignedTextToken {

	public Plugin_IDTerminalRuleCall_12_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public RuleCall getGrammarElement() {
		return grammarAccess.getPluginAccess().getIDTerminalRuleCall_12_3();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Plugin_ColonKeyword_12_2(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}


// ("," "execute" "{" STRING* "}")?
protected class Plugin_Group_13 extends GroupToken {
	
	public Plugin_Group_13(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Group getGrammarElement() {
		return grammarAccess.getPluginAccess().getGroup_13();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Plugin_RightCurlyBracketKeyword_13_4(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ","
protected class Plugin_CommaKeyword_13_0 extends KeywordToken  {
	
	public Plugin_CommaKeyword_13_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getPluginAccess().getCommaKeyword_13_0();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Plugin_Group_12(parent, this, 0, inst);
			case 1: return new Plugin_Group_11(parent, this, 1, inst);
			case 2: return new Plugin_VersionAssignment_10(parent, this, 2, inst);
			default: return null;
		}	
	}	
		
}

// "execute"
protected class Plugin_ExecuteKeyword_13_1 extends KeywordToken  {
	
	public Plugin_ExecuteKeyword_13_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getPluginAccess().getExecuteKeyword_13_1();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Plugin_CommaKeyword_13_0(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// "{"
protected class Plugin_LeftCurlyBracketKeyword_13_2 extends KeywordToken  {
	
	public Plugin_LeftCurlyBracketKeyword_13_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getPluginAccess().getLeftCurlyBracketKeyword_13_2();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Plugin_ExecuteKeyword_13_1(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// STRING*
protected class Plugin_STRINGTerminalRuleCall_13_3 extends UnassignedTextToken {

	public Plugin_STRINGTerminalRuleCall_13_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public RuleCall getGrammarElement() {
		return grammarAccess.getPluginAccess().getSTRINGTerminalRuleCall_13_3();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Plugin_STRINGTerminalRuleCall_13_3(parent, this, 0, inst);
			case 1: return new Plugin_LeftCurlyBracketKeyword_13_2(parent, this, 1, inst);
			default: return null;
		}	
	}	
		
}

// "}"
protected class Plugin_RightCurlyBracketKeyword_13_4 extends KeywordToken  {
	
	public Plugin_RightCurlyBracketKeyword_13_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getPluginAccess().getRightCurlyBracketKeyword_13_4();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Plugin_STRINGTerminalRuleCall_13_3(parent, this, 0, inst);
			case 1: return new Plugin_LeftCurlyBracketKeyword_13_2(parent, this, 1, inst);
			default: return null;
		}	
	}	
		
}



/************ end Rule Plugin ****************/


/************ begin Rule Extension ****************
 *
 * Extension:
 *   "groupId" ":" groupId=GroupId "," "artifactId" ":" artifactId=ArtifactId "," "version"
 *   ":" version=Version "," "extensionId" ":" ID "," "execute" "{" STRING* "}";
 *
 **/

// "groupId" ":" groupId=GroupId "," "artifactId" ":" artifactId=ArtifactId "," "version"
// ":" version=Version "," "extensionId" ":" ID "," "execute" "{" STRING* "}"
protected class Extension_Group extends GroupToken {
	
	public Extension_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Group getGrammarElement() {
		return grammarAccess.getExtensionAccess().getGroup();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Extension_RightCurlyBracketKeyword_19(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	public IInstanceDescription tryConsume() {
		if(!current.isInstanceOf(grammarAccess.getExtensionRule().getType().getClassifier())) return null;
		return tryConsumeVal();
	}
}

// "groupId"
protected class Extension_GroupIdKeyword_0 extends KeywordToken  {
	
	public Extension_GroupIdKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getExtensionAccess().getGroupIdKeyword_0();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			default: return parent.createParentFollower(this, index, index, inst);
		}	
	}	
		
}

// ":"
protected class Extension_ColonKeyword_1 extends KeywordToken  {
	
	public Extension_ColonKeyword_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getExtensionAccess().getColonKeyword_1();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Extension_GroupIdKeyword_0(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// groupId=GroupId
protected class Extension_GroupIdAssignment_2 extends AssignmentToken  {
	
	public Extension_GroupIdAssignment_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getExtensionAccess().getGroupIdAssignment_2();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Extension_ColonKeyword_1(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("groupId",true)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("groupId");
		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
			type = AssignmentType.DRC;
			element = grammarAccess.getExtensionAccess().getGroupIdGroupIdParserRuleCall_2_0();
			return obj;
		}
		return null;
	}

}

// ","
protected class Extension_CommaKeyword_3 extends KeywordToken  {
	
	public Extension_CommaKeyword_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getExtensionAccess().getCommaKeyword_3();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Extension_GroupIdAssignment_2(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// "artifactId"
protected class Extension_ArtifactIdKeyword_4 extends KeywordToken  {
	
	public Extension_ArtifactIdKeyword_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getExtensionAccess().getArtifactIdKeyword_4();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Extension_CommaKeyword_3(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ":"
protected class Extension_ColonKeyword_5 extends KeywordToken  {
	
	public Extension_ColonKeyword_5(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getExtensionAccess().getColonKeyword_5();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Extension_ArtifactIdKeyword_4(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// artifactId=ArtifactId
protected class Extension_ArtifactIdAssignment_6 extends AssignmentToken  {
	
	public Extension_ArtifactIdAssignment_6(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getExtensionAccess().getArtifactIdAssignment_6();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Extension_ColonKeyword_5(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("artifactId",true)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("artifactId");
		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
			type = AssignmentType.DRC;
			element = grammarAccess.getExtensionAccess().getArtifactIdArtifactIdParserRuleCall_6_0();
			return obj;
		}
		return null;
	}

}

// ","
protected class Extension_CommaKeyword_7 extends KeywordToken  {
	
	public Extension_CommaKeyword_7(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getExtensionAccess().getCommaKeyword_7();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Extension_ArtifactIdAssignment_6(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// "version"
protected class Extension_VersionKeyword_8 extends KeywordToken  {
	
	public Extension_VersionKeyword_8(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getExtensionAccess().getVersionKeyword_8();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Extension_CommaKeyword_7(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ":"
protected class Extension_ColonKeyword_9 extends KeywordToken  {
	
	public Extension_ColonKeyword_9(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getExtensionAccess().getColonKeyword_9();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Extension_VersionKeyword_8(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// version=Version
protected class Extension_VersionAssignment_10 extends AssignmentToken  {
	
	public Extension_VersionAssignment_10(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getExtensionAccess().getVersionAssignment_10();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Extension_ColonKeyword_9(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("version",true)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("version");
		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for datatype rule
			type = AssignmentType.DRC;
			element = grammarAccess.getExtensionAccess().getVersionVersionParserRuleCall_10_0();
			return obj;
		}
		return null;
	}

}

// ","
protected class Extension_CommaKeyword_11 extends KeywordToken  {
	
	public Extension_CommaKeyword_11(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getExtensionAccess().getCommaKeyword_11();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Extension_VersionAssignment_10(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// "extensionId"
protected class Extension_ExtensionIdKeyword_12 extends KeywordToken  {
	
	public Extension_ExtensionIdKeyword_12(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getExtensionAccess().getExtensionIdKeyword_12();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Extension_CommaKeyword_11(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ":"
protected class Extension_ColonKeyword_13 extends KeywordToken  {
	
	public Extension_ColonKeyword_13(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getExtensionAccess().getColonKeyword_13();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Extension_ExtensionIdKeyword_12(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ID
protected class Extension_IDTerminalRuleCall_14 extends UnassignedTextToken {

	public Extension_IDTerminalRuleCall_14(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public RuleCall getGrammarElement() {
		return grammarAccess.getExtensionAccess().getIDTerminalRuleCall_14();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Extension_ColonKeyword_13(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// ","
protected class Extension_CommaKeyword_15 extends KeywordToken  {
	
	public Extension_CommaKeyword_15(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getExtensionAccess().getCommaKeyword_15();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Extension_IDTerminalRuleCall_14(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// "execute"
protected class Extension_ExecuteKeyword_16 extends KeywordToken  {
	
	public Extension_ExecuteKeyword_16(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getExtensionAccess().getExecuteKeyword_16();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Extension_CommaKeyword_15(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// "{"
protected class Extension_LeftCurlyBracketKeyword_17 extends KeywordToken  {
	
	public Extension_LeftCurlyBracketKeyword_17(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getExtensionAccess().getLeftCurlyBracketKeyword_17();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Extension_ExecuteKeyword_16(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// STRING*
protected class Extension_STRINGTerminalRuleCall_18 extends UnassignedTextToken {

	public Extension_STRINGTerminalRuleCall_18(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public RuleCall getGrammarElement() {
		return grammarAccess.getExtensionAccess().getSTRINGTerminalRuleCall_18();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Extension_STRINGTerminalRuleCall_18(parent, this, 0, inst);
			case 1: return new Extension_LeftCurlyBracketKeyword_17(parent, this, 1, inst);
			default: return null;
		}	
	}	
		
}

// "}"
protected class Extension_RightCurlyBracketKeyword_19 extends KeywordToken  {
	
	public Extension_RightCurlyBracketKeyword_19(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getExtensionAccess().getRightCurlyBracketKeyword_19();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Extension_STRINGTerminalRuleCall_18(parent, this, 0, inst);
			case 1: return new Extension_LeftCurlyBracketKeyword_17(parent, this, 1, inst);
			default: return null;
		}	
	}	
		
}


/************ end Rule Extension ****************/






/************ begin Rule Model ****************
 *
 * Model:
 *   imports+=Import* elements+=Type*;
 *
 **/

// imports+=Import* elements+=Type*
protected class Model_Group extends GroupToken {
	
	public Model_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Group getGrammarElement() {
		return grammarAccess.getModelAccess().getGroup();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Model_ElementsAssignment_1(parent, this, 0, inst);
			case 1: return new Model_ImportsAssignment_0(parent, this, 1, inst);
			default: return null;
		}	
	}	
		
	public IInstanceDescription tryConsume() {
		if(!current.isInstanceOf(grammarAccess.getModelRule().getType().getClassifier())) return null;
		return tryConsumeVal();
	}
}

// imports+=Import*
protected class Model_ImportsAssignment_0 extends AssignmentToken  {
	
	public Model_ImportsAssignment_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getModelAccess().getImportsAssignment_0();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Import_Group(this, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("imports",false)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("imports");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IInstanceDescription param = getDescr((EObject)value);
			if(param.isInstanceOf(grammarAccess.getImportRule().getType().getClassifier())) {
				type = AssignmentType.PRC;
				element = grammarAccess.getModelAccess().getImportsImportParserRuleCall_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Model_ImportsAssignment_0(parent, next, actIndex, consumed);
			default: return parent.createParentFollower(next, actIndex , index - 1, consumed);
		}	
	}	
}

// elements+=Type*
protected class Model_ElementsAssignment_1 extends AssignmentToken  {
	
	public Model_ElementsAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getModelAccess().getElementsAssignment_1();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Type_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("elements",false)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("elements");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IInstanceDescription param = getDescr((EObject)value);
			if(param.isInstanceOf(grammarAccess.getTypeRule().getType().getClassifier())) {
				type = AssignmentType.PRC;
				element = grammarAccess.getModelAccess().getElementsTypeParserRuleCall_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Model_ElementsAssignment_1(parent, next, actIndex, consumed);
			case 1: return new Model_ImportsAssignment_0(parent, next, actIndex, consumed);
			default: return parent.createParentFollower(next, actIndex , index - 2, consumed);
		}	
	}	
}


/************ end Rule Model ****************/


/************ begin Rule Import ****************
 *
 * Import:
 *   "import" importURI=STRING;
 *
 **/

// "import" importURI=STRING
protected class Import_Group extends GroupToken {
	
	public Import_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Group getGrammarElement() {
		return grammarAccess.getImportAccess().getGroup();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Import_ImportURIAssignment_1(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	public IInstanceDescription tryConsume() {
		if(!current.isInstanceOf(grammarAccess.getImportRule().getType().getClassifier())) return null;
		return tryConsumeVal();
	}
}

// "import"
protected class Import_ImportKeyword_0 extends KeywordToken  {
	
	public Import_ImportKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getImportAccess().getImportKeyword_0();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			default: return parent.createParentFollower(this, index, index, inst);
		}	
	}	
		
}

// importURI=STRING
protected class Import_ImportURIAssignment_1 extends AssignmentToken  {
	
	public Import_ImportURIAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getImportAccess().getImportURIAssignment_1();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Import_ImportKeyword_0(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("importURI",true)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("importURI");
		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for lexer rule
			type = AssignmentType.LRC;
			element = grammarAccess.getImportAccess().getImportURISTRINGTerminalRuleCall_1_0();
			return obj;
		}
		return null;
	}

}


/************ end Rule Import ****************/


/************ begin Rule Type ****************
 *
 * Type:
 *   SimpleType|Entity;
 *
 **/

// SimpleType|Entity
protected class Type_Alternatives extends AlternativesToken {

	public Type_Alternatives(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Alternatives getGrammarElement() {
		return grammarAccess.getTypeAccess().getAlternatives();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Type_SimpleTypeParserRuleCall_0(parent, this, 0, inst);
			case 1: return new Type_EntityParserRuleCall_1(parent, this, 1, inst);
			default: return null;
		}	
	}	
		
	public IInstanceDescription tryConsume() {
		if(!current.isInstanceOf(grammarAccess.getTypeRule().getType().getClassifier())) return null;
		return tryConsumeVal();
	}
}

// SimpleType
protected class Type_SimpleTypeParserRuleCall_0 extends RuleCallToken {
	
	public Type_SimpleTypeParserRuleCall_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public RuleCall getGrammarElement() {
		return grammarAccess.getTypeAccess().getSimpleTypeParserRuleCall_0();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new SimpleType_Group(this, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if(checkForRecursion(SimpleType_Group.class, current)) return null;
		if(!current.isInstanceOf(grammarAccess.getSimpleTypeRule().getType().getClassifier())) return null;
		return current;
	}
	
	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
		switch(index) {
			default: return parent.createParentFollower(next, actIndex , index, inst);
		}	
	}	
}

// Entity
protected class Type_EntityParserRuleCall_1 extends RuleCallToken {
	
	public Type_EntityParserRuleCall_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public RuleCall getGrammarElement() {
		return grammarAccess.getTypeAccess().getEntityParserRuleCall_1();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Entity_Group(this, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if(checkForRecursion(Entity_Group.class, current)) return null;
		if(!current.isInstanceOf(grammarAccess.getEntityRule().getType().getClassifier())) return null;
		return current;
	}
	
	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
		switch(index) {
			default: return parent.createParentFollower(next, actIndex , index, inst);
		}	
	}	
}


/************ end Rule Type ****************/


/************ begin Rule SimpleType ****************
 *
 * SimpleType:
 *   "type" name=ID;
 *
 **/

// "type" name=ID
protected class SimpleType_Group extends GroupToken {
	
	public SimpleType_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Group getGrammarElement() {
		return grammarAccess.getSimpleTypeAccess().getGroup();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new SimpleType_NameAssignment_1(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	public IInstanceDescription tryConsume() {
		if(!current.isInstanceOf(grammarAccess.getSimpleTypeRule().getType().getClassifier())) return null;
		return tryConsumeVal();
	}
}

// "type"
protected class SimpleType_TypeKeyword_0 extends KeywordToken  {
	
	public SimpleType_TypeKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getSimpleTypeAccess().getTypeKeyword_0();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			default: return parent.createParentFollower(this, index, index, inst);
		}	
	}	
		
}

// name=ID
protected class SimpleType_NameAssignment_1 extends AssignmentToken  {
	
	public SimpleType_NameAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getSimpleTypeAccess().getNameAssignment_1();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new SimpleType_TypeKeyword_0(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("name",true)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("name");
		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for lexer rule
			type = AssignmentType.LRC;
			element = grammarAccess.getSimpleTypeAccess().getNameIDTerminalRuleCall_1_0();
			return obj;
		}
		return null;
	}

}


/************ end Rule SimpleType ****************/


/************ begin Rule Entity ****************
 *
 * Entity:
 *   "entity" name=ID ("extends" extends=[Entity])? "{" properties+=Property* "}";
 *
 **/

// "entity" name=ID ("extends" extends=[Entity])? "{" properties+=Property* "}"
protected class Entity_Group extends GroupToken {
	
	public Entity_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Group getGrammarElement() {
		return grammarAccess.getEntityAccess().getGroup();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Entity_RightCurlyBracketKeyword_5(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	public IInstanceDescription tryConsume() {
		if(!current.isInstanceOf(grammarAccess.getEntityRule().getType().getClassifier())) return null;
		return tryConsumeVal();
	}
}

// "entity"
protected class Entity_EntityKeyword_0 extends KeywordToken  {
	
	public Entity_EntityKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getEntityAccess().getEntityKeyword_0();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			default: return parent.createParentFollower(this, index, index, inst);
		}	
	}	
		
}

// name=ID
protected class Entity_NameAssignment_1 extends AssignmentToken  {
	
	public Entity_NameAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getEntityAccess().getNameAssignment_1();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Entity_EntityKeyword_0(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("name",true)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("name");
		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for lexer rule
			type = AssignmentType.LRC;
			element = grammarAccess.getEntityAccess().getNameIDTerminalRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// ("extends" extends=[Entity])?
protected class Entity_Group_2 extends GroupToken {
	
	public Entity_Group_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Group getGrammarElement() {
		return grammarAccess.getEntityAccess().getGroup_2();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Entity_ExtendsAssignment_2_1(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// "extends"
protected class Entity_ExtendsKeyword_2_0 extends KeywordToken  {
	
	public Entity_ExtendsKeyword_2_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getEntityAccess().getExtendsKeyword_2_0();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Entity_NameAssignment_1(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// extends=[Entity]
protected class Entity_ExtendsAssignment_2_1 extends AssignmentToken  {
	
	public Entity_ExtendsAssignment_2_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getEntityAccess().getExtendsAssignment_2_1();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Entity_ExtendsKeyword_2_0(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("extends",false)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("extends");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IInstanceDescription param = getDescr((EObject)value);
			if(param.isInstanceOf(grammarAccess.getEntityAccess().getExtendsEntityCrossReference_2_1_0().getType().getClassifier())) {
				type = AssignmentType.CR;
				element = grammarAccess.getEntityAccess().getExtendsEntityCrossReference_2_1_0(); 
				return obj;
			}
		}
		return null;
	}

}


// "{"
protected class Entity_LeftCurlyBracketKeyword_3 extends KeywordToken  {
	
	public Entity_LeftCurlyBracketKeyword_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getEntityAccess().getLeftCurlyBracketKeyword_3();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Entity_Group_2(parent, this, 0, inst);
			case 1: return new Entity_NameAssignment_1(parent, this, 1, inst);
			default: return null;
		}	
	}	
		
}

// properties+=Property*
protected class Entity_PropertiesAssignment_4 extends AssignmentToken  {
	
	public Entity_PropertiesAssignment_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getEntityAccess().getPropertiesAssignment_4();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Property_Group(this, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("properties",false)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("properties");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IInstanceDescription param = getDescr((EObject)value);
			if(param.isInstanceOf(grammarAccess.getPropertyRule().getType().getClassifier())) {
				type = AssignmentType.PRC;
				element = grammarAccess.getEntityAccess().getPropertiesPropertyParserRuleCall_4_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

	public AbstractToken createParentFollower(AbstractToken next,	int actIndex, int index, IInstanceDescription inst) {
		if(value == inst.getDelegate() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Entity_PropertiesAssignment_4(parent, next, actIndex, consumed);
			case 1: return new Entity_LeftCurlyBracketKeyword_3(parent, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// "}"
protected class Entity_RightCurlyBracketKeyword_5 extends KeywordToken  {
	
	public Entity_RightCurlyBracketKeyword_5(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getEntityAccess().getRightCurlyBracketKeyword_5();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Entity_PropertiesAssignment_4(parent, this, 0, inst);
			case 1: return new Entity_LeftCurlyBracketKeyword_3(parent, this, 1, inst);
			default: return null;
		}	
	}	
		
}


/************ end Rule Entity ****************/


/************ begin Rule Property ****************
 *
 * Property:
 *   "property" name=ID ":" type=[Type] many?="[]"?;
 *
 **/

// "property" name=ID ":" type=[Type] many?="[]"?
protected class Property_Group extends GroupToken {
	
	public Property_Group(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Group getGrammarElement() {
		return grammarAccess.getPropertyAccess().getGroup();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Property_ManyAssignment_4(parent, this, 0, inst);
			case 1: return new Property_TypeAssignment_3(parent, this, 1, inst);
			default: return null;
		}	
	}	
		
	public IInstanceDescription tryConsume() {
		if(!current.isInstanceOf(grammarAccess.getPropertyRule().getType().getClassifier())) return null;
		return tryConsumeVal();
	}
}

// "property"
protected class Property_PropertyKeyword_0 extends KeywordToken  {
	
	public Property_PropertyKeyword_0(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getPropertyAccess().getPropertyKeyword_0();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			default: return parent.createParentFollower(this, index, index, inst);
		}	
	}	
		
}

// name=ID
protected class Property_NameAssignment_1 extends AssignmentToken  {
	
	public Property_NameAssignment_1(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getPropertyAccess().getNameAssignment_1();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Property_PropertyKeyword_0(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("name",true)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("name");
		if(Boolean.TRUE.booleanValue()) { // org::eclipse::xtext::impl::RuleCallImpl FIXME: check if value is valid for lexer rule
			type = AssignmentType.LRC;
			element = grammarAccess.getPropertyAccess().getNameIDTerminalRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// ":"
protected class Property_ColonKeyword_2 extends KeywordToken  {
	
	public Property_ColonKeyword_2(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Keyword getGrammarElement() {
		return grammarAccess.getPropertyAccess().getColonKeyword_2();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Property_NameAssignment_1(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
}

// type=[Type]
protected class Property_TypeAssignment_3 extends AssignmentToken  {
	
	public Property_TypeAssignment_3(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getPropertyAccess().getTypeAssignment_3();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Property_ColonKeyword_2(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("type",true)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("type");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IInstanceDescription param = getDescr((EObject)value);
			if(param.isInstanceOf(grammarAccess.getPropertyAccess().getTypeTypeCrossReference_3_0().getType().getClassifier())) {
				type = AssignmentType.CR;
				element = grammarAccess.getPropertyAccess().getTypeTypeCrossReference_3_0(); 
				return obj;
			}
		}
		return null;
	}

}

// many?="[]"?
protected class Property_ManyAssignment_4 extends AssignmentToken  {
	
	public Property_ManyAssignment_4(AbstractToken parent, AbstractToken next, int no, IInstanceDescription current) {
		super(parent, next, no, current);
	}
	
	public Assignment getGrammarElement() {
		return grammarAccess.getPropertyAccess().getManyAssignment_4();
	}

	public AbstractToken createFollower(int index, IInstanceDescription inst) {
		switch(index) {
			case 0: return new Property_TypeAssignment_3(parent, this, 0, inst);
			default: return null;
		}	
	}	
		
	protected IInstanceDescription tryConsumeVal() {
		if((value = current.getConsumable("many",false)) == null) return null;
		IInstanceDescription obj = current.cloneAndConsume("many");
		if(Boolean.TRUE.equals(value)) { // org::eclipse::xtext::impl::KeywordImpl
			type = AssignmentType.KW;
			element = grammarAccess.getPropertyAccess().getManyLeftSquareBracketRightSquareBracketKeyword_4_0();
			return obj;
		}
		return null;
	}

}


/************ end Rule Property ****************/

}
