docs: @Override
  	protected T doSwitch(int classifierID, EObject theEObject) {
  		switch (classifierID) {
  			case XtextPackage.GRAMMAR: {
  				Grammar grammar = (Grammar)theEObject;
  				T result = caseGrammar(grammar);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.ABSTRACT_RULE: {
  				AbstractRule abstractRule = (AbstractRule)theEObject;
  				T result = caseAbstractRule(abstractRule);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.ABSTRACT_METAMODEL_DECLARATION: {
  				AbstractMetamodelDeclaration abstractMetamodelDeclaration = (AbstractMetamodelDeclaration)theEObject;
  				T result = caseAbstractMetamodelDeclaration(abstractMetamodelDeclaration);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.GENERATED_METAMODEL: {
  				GeneratedMetamodel generatedMetamodel = (GeneratedMetamodel)theEObject;
  				T result = caseGeneratedMetamodel(generatedMetamodel);
  				if (result == null) result = caseAbstractMetamodelDeclaration(generatedMetamodel);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.REFERENCED_METAMODEL: {
  				ReferencedMetamodel referencedMetamodel = (ReferencedMetamodel)theEObject;
  				T result = caseReferencedMetamodel(referencedMetamodel);
  				if (result == null) result = caseAbstractMetamodelDeclaration(referencedMetamodel);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.PARSER_RULE: {
  				ParserRule parserRule = (ParserRule)theEObject;
  				T result = caseParserRule(parserRule);
  				if (result == null) result = caseAbstractRule(parserRule);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.TYPE_REF: {
  				TypeRef typeRef = (TypeRef)theEObject;
  				T result = caseTypeRef(typeRef);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.ABSTRACT_ELEMENT: {
  				AbstractElement abstractElement = (AbstractElement)theEObject;
  				T result = caseAbstractElement(abstractElement);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.ACTION: {
  				Action action = (Action)theEObject;
  				T result = caseAction(action);
  				if (result == null) result = caseAbstractElement(action);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.KEYWORD: {
  				Keyword keyword = (Keyword)theEObject;
  				T result = caseKeyword(keyword);
  				if (result == null) result = caseAbstractElement(keyword);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.RULE_CALL: {
  				RuleCall ruleCall = (RuleCall)theEObject;
  				T result = caseRuleCall(ruleCall);
  				if (result == null) result = caseAbstractElement(ruleCall);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.ASSIGNMENT: {
  				Assignment assignment = (Assignment)theEObject;
  				T result = caseAssignment(assignment);
  				if (result == null) result = caseAbstractElement(assignment);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.CROSS_REFERENCE: {
  				CrossReference crossReference = (CrossReference)theEObject;
  				T result = caseCrossReference(crossReference);
  				if (result == null) result = caseAbstractElement(crossReference);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.TERMINAL_RULE: {
  				TerminalRule terminalRule = (TerminalRule)theEObject;
  				T result = caseTerminalRule(terminalRule);
  				if (result == null) result = caseAbstractRule(terminalRule);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.ABSTRACT_NEGATED_TOKEN: {
  				AbstractNegatedToken abstractNegatedToken = (AbstractNegatedToken)theEObject;
  				T result = caseAbstractNegatedToken(abstractNegatedToken);
  				if (result == null) result = caseAbstractElement(abstractNegatedToken);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.NEGATED_TOKEN: {
  				NegatedToken negatedToken = (NegatedToken)theEObject;
  				T result = caseNegatedToken(negatedToken);
  				if (result == null) result = caseAbstractNegatedToken(negatedToken);
  				if (result == null) result = caseAbstractElement(negatedToken);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.UNTIL_TOKEN: {
  				UntilToken untilToken = (UntilToken)theEObject;
  				T result = caseUntilToken(untilToken);
  				if (result == null) result = caseAbstractNegatedToken(untilToken);
  				if (result == null) result = caseAbstractElement(untilToken);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.WILDCARD: {
  				Wildcard wildcard = (Wildcard)theEObject;
  				T result = caseWildcard(wildcard);
  				if (result == null) result = caseAbstractElement(wildcard);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.ENUM_RULE: {
  				EnumRule enumRule = (EnumRule)theEObject;
  				T result = caseEnumRule(enumRule);
  				if (result == null) result = caseAbstractRule(enumRule);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.ENUM_LITERAL_DECLARATION: {
  				EnumLiteralDeclaration enumLiteralDeclaration = (EnumLiteralDeclaration)theEObject;
  				T result = caseEnumLiteralDeclaration(enumLiteralDeclaration);
  				if (result == null) result = caseAbstractElement(enumLiteralDeclaration);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.ALTERNATIVES: {
  				Alternatives alternatives = (Alternatives)theEObject;
  				T result = caseAlternatives(alternatives);
  				if (result == null) result = caseCompoundElement(alternatives);
  				if (result == null) result = caseAbstractElement(alternatives);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.UNORDERED_GROUP: {
  				UnorderedGroup unorderedGroup = (UnorderedGroup)theEObject;
  				T result = caseUnorderedGroup(unorderedGroup);
  				if (result == null) result = caseCompoundElement(unorderedGroup);
  				if (result == null) result = caseAbstractElement(unorderedGroup);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.GROUP: {
  				Group group = (Group)theEObject;
  				T result = caseGroup(group);
  				if (result == null) result = caseCompoundElement(group);
  				if (result == null) result = caseAbstractElement(group);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.CHARACTER_RANGE: {
  				CharacterRange characterRange = (CharacterRange)theEObject;
  				T result = caseCharacterRange(characterRange);
  				if (result == null) result = caseAbstractElement(characterRange);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.COMPOUND_ELEMENT: {
  				CompoundElement compoundElement = (CompoundElement)theEObject;
  				T result = caseCompoundElement(compoundElement);
  				if (result == null) result = caseAbstractElement(compoundElement);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.EOF: {
  				EOF eof = (EOF)theEObject;
  				T result = caseEOF(eof);
  				if (result == null) result = caseAbstractElement(eof);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.PARAMETER: {
  				Parameter parameter = (Parameter)theEObject;
  				T result = caseParameter(parameter);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.NAMED_ARGUMENT: {
  				NamedArgument namedArgument = (NamedArgument)theEObject;
  				T result = caseNamedArgument(namedArgument);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.CONDITION: {
  				Condition condition = (Condition)theEObject;
  				T result = caseCondition(condition);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.CONJUNCTION: {
  				Conjunction conjunction = (Conjunction)theEObject;
  				T result = caseConjunction(conjunction);
  				if (result == null) result = caseCompositeCondition(conjunction);
  				if (result == null) result = caseCondition(conjunction);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.NEGATION: {
  				Negation negation = (Negation)theEObject;
  				T result = caseNegation(negation);
  				if (result == null) result = caseCondition(negation);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.DISJUNCTION: {
  				Disjunction disjunction = (Disjunction)theEObject;
  				T result = caseDisjunction(disjunction);
  				if (result == null) result = caseCompositeCondition(disjunction);
  				if (result == null) result = caseCondition(disjunction);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.COMPOSITE_CONDITION: {
  				CompositeCondition compositeCondition = (CompositeCondition)theEObject;
  				T result = caseCompositeCondition(compositeCondition);
  				if (result == null) result = caseCondition(compositeCondition);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.PARAMETER_REFERENCE: {
  				ParameterReference parameterReference = (ParameterReference)theEObject;
  				T result = caseParameterReference(parameterReference);
  				if (result == null) result = caseCondition(parameterReference);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.LITERAL_CONDITION: {
  				LiteralCondition literalCondition = (LiteralCondition)theEObject;
  				T result = caseLiteralCondition(literalCondition);
  				if (result == null) result = caseCondition(literalCondition);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			case XtextPackage.ANNOTATION: {
  				Annotation annotation = (Annotation)theEObject;
  				T result = caseAnnotation(annotation);
  				if (result == null) result = defaultCase(theEObject);
  				return result;
  			}
  			default: return defaultCase(theEObject);
  		}
  	}