From be99aecdd88b8a098c4b6ef78415e69243043be4 Mon Sep 17 00:00:00 2001
From: Dennis Hendriks
+ * Generates:
+ *
+ *
+ *
* The following Ecore features are currently not supported, and may lead to invalid code: *
The composite walker works as follows:"); + box.add(" *
A composite walking does not perform any pre-processing or post-processing"); + box.add(" * by itself. It can be configured with any number of other (composite or"); + box.add(" * non-composite) model walkers. As pre-processing and post-processing the"); + box.add(" * composite model walker invokes pre-processing and post-processing on each"); + box.add(" * 'other' model walker, in the order they are supplied. The walking and"); + box.add(" * crawling methods of the non-composite of the 'other' model walkers are not"); + box.add(" * used.
"); + box.add(" *"); + box.add(" *This abstract walker class has no public methods. It is up to the derived"); + box.add(" * classes to add a public method as entry method. They can decide which"); + box.add(" * classes are to be used as starting point, and they can give the public"); + box.add(" * method a proper name, parameters, etc. They may even allow multiple public"); + box.add(" * methods to allow starting from multiple classes.
"); + box.add(" */"); + box.add("public abstract class %s extends %s {", genClassNameComposite, genClassNameWalker); + + box.indent(); + box.add("/** The walkers to be composed by this composite walker. */"); + box.add("private %s[] walkers;", genClassNameWalker); + box.dedent(); + box.add(); + + box.indent(); + box.add("/**"); + box.add(" * Constructor of the {@link %s} class.", genClassNameComposite); + box.add(" *"); + box.add(" * @param walkers The walkers to be composed by this composite walker."); + box.add(" */"); + box.add("public %s(%s[] walkers) {", genClassNameComposite, genClassNameWalker); + box.add(" this.walkers = walkers;"); + box.add("}"); + box.dedent(); + + for (EClass cls: classes) { + generateCompositeWalkerMethods(cls, genClassNameWalker, box); + } + box.add("}"); return box; } /** - * Generate model walker class code for an {@link EClass}. + * Generate model walker methods code for an {@link EClass}. * * @param cls The {@link EClass} to generate the code for. * @param classes The candidate derived classes for the given 'cls'. * @param box The generated code (appended in-place). */ - private static void genModelWalkerClass(EClass cls, ListThe composite walker works as follows: + *
A composite walking does not perform any pre-processing or post-processing + * by itself. It can be configured with any number of other (composite or + * non-composite) model walkers. As pre-processing and post-processing the + * composite model walker invokes pre-processing and post-processing on each + * 'other' model walker, in the order they are supplied. The walking and + * crawling methods of the non-composite of the 'other' model walkers are not + * used.
+ * + *This abstract walker class has no public methods. It is up to the derived + * classes to add a public method as entry method. They can decide which + * classes are to be used as starting point, and they can give the public + * method a proper name, parameters, etc. They may even allow multiple public + * methods to allow starting from multiple classes.
+ */ +public abstract class CompositeCifWalker extends CifWalker { + /** The walkers to be composed by this composite walker. */ + private CifWalker[] walkers; + + /** + * Constructor of the {@link CompositeCifWalker} class. + * + * @param walkers The walkers to be composed by this composite walker. + */ + public CompositeCifWalker(CifWalker[] walkers) { + this.walkers = walkers; + } + + @Override + protected void preprocessAlgParameter(AlgParameter obj) { + for (CifWalker walker: walkers) { + walker.preprocessAlgParameter(obj); + } + } + + @Override + protected void postprocessAlgParameter(AlgParameter obj) { + for (CifWalker walker: walkers) { + walker.postprocessAlgParameter(obj); + } + } + + @Override + protected void preprocessAlgVariable(AlgVariable obj) { + for (CifWalker walker: walkers) { + walker.preprocessAlgVariable(obj); + } + } + + @Override + protected void postprocessAlgVariable(AlgVariable obj) { + for (CifWalker walker: walkers) { + walker.postprocessAlgVariable(obj); + } + } + + @Override + protected void preprocessAlgVariableExpression(AlgVariableExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessAlgVariableExpression(obj); + } + } + + @Override + protected void postprocessAlgVariableExpression(AlgVariableExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessAlgVariableExpression(obj); + } + } + + @Override + protected void preprocessAlphabet(Alphabet obj) { + for (CifWalker walker: walkers) { + walker.preprocessAlphabet(obj); + } + } + + @Override + protected void postprocessAlphabet(Alphabet obj) { + for (CifWalker walker: walkers) { + walker.postprocessAlphabet(obj); + } + } + + @Override + protected void preprocessAssignment(Assignment obj) { + for (CifWalker walker: walkers) { + walker.preprocessAssignment(obj); + } + } + + @Override + protected void postprocessAssignment(Assignment obj) { + for (CifWalker walker: walkers) { + walker.postprocessAssignment(obj); + } + } + + @Override + protected void preprocessAssignmentFuncStatement(AssignmentFuncStatement obj) { + for (CifWalker walker: walkers) { + walker.preprocessAssignmentFuncStatement(obj); + } + } + + @Override + protected void postprocessAssignmentFuncStatement(AssignmentFuncStatement obj) { + for (CifWalker walker: walkers) { + walker.postprocessAssignmentFuncStatement(obj); + } + } + + @Override + protected void preprocessAutomaton(Automaton obj) { + for (CifWalker walker: walkers) { + walker.preprocessAutomaton(obj); + } + } + + @Override + protected void postprocessAutomaton(Automaton obj) { + for (CifWalker walker: walkers) { + walker.postprocessAutomaton(obj); + } + } + + @Override + protected void preprocessBaseFunctionExpression(BaseFunctionExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessBaseFunctionExpression(obj); + } + } + + @Override + protected void postprocessBaseFunctionExpression(BaseFunctionExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessBaseFunctionExpression(obj); + } + } + + @Override + protected void preprocessBinaryExpression(BinaryExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessBinaryExpression(obj); + } + } + + @Override + protected void postprocessBinaryExpression(BinaryExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessBinaryExpression(obj); + } + } + + @Override + protected void preprocessBoolExpression(BoolExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessBoolExpression(obj); + } + } + + @Override + protected void postprocessBoolExpression(BoolExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessBoolExpression(obj); + } + } + + @Override + protected void preprocessBoolType(BoolType obj) { + for (CifWalker walker: walkers) { + walker.preprocessBoolType(obj); + } + } + + @Override + protected void postprocessBoolType(BoolType obj) { + for (CifWalker walker: walkers) { + walker.postprocessBoolType(obj); + } + } + + @Override + protected void preprocessBreakFuncStatement(BreakFuncStatement obj) { + for (CifWalker walker: walkers) { + walker.preprocessBreakFuncStatement(obj); + } + } + + @Override + protected void postprocessBreakFuncStatement(BreakFuncStatement obj) { + for (CifWalker walker: walkers) { + walker.postprocessBreakFuncStatement(obj); + } + } + + @Override + protected void preprocessCastExpression(CastExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessCastExpression(obj); + } + } + + @Override + protected void postprocessCastExpression(CastExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessCastExpression(obj); + } + } + + @Override + protected void preprocessCifType(CifType obj) { + for (CifWalker walker: walkers) { + walker.preprocessCifType(obj); + } + } + + @Override + protected void postprocessCifType(CifType obj) { + for (CifWalker walker: walkers) { + walker.postprocessCifType(obj); + } + } + + @Override + protected void preprocessCompInstWrapExpression(CompInstWrapExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessCompInstWrapExpression(obj); + } + } + + @Override + protected void postprocessCompInstWrapExpression(CompInstWrapExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessCompInstWrapExpression(obj); + } + } + + @Override + protected void preprocessCompInstWrapType(CompInstWrapType obj) { + for (CifWalker walker: walkers) { + walker.preprocessCompInstWrapType(obj); + } + } + + @Override + protected void postprocessCompInstWrapType(CompInstWrapType obj) { + for (CifWalker walker: walkers) { + walker.postprocessCompInstWrapType(obj); + } + } + + @Override + protected void preprocessCompParamExpression(CompParamExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessCompParamExpression(obj); + } + } + + @Override + protected void postprocessCompParamExpression(CompParamExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessCompParamExpression(obj); + } + } + + @Override + protected void preprocessCompParamWrapExpression(CompParamWrapExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessCompParamWrapExpression(obj); + } + } + + @Override + protected void postprocessCompParamWrapExpression(CompParamWrapExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessCompParamWrapExpression(obj); + } + } + + @Override + protected void preprocessCompParamWrapType(CompParamWrapType obj) { + for (CifWalker walker: walkers) { + walker.preprocessCompParamWrapType(obj); + } + } + + @Override + protected void postprocessCompParamWrapType(CompParamWrapType obj) { + for (CifWalker walker: walkers) { + walker.postprocessCompParamWrapType(obj); + } + } + + @Override + protected void preprocessComplexComponent(ComplexComponent obj) { + for (CifWalker walker: walkers) { + walker.preprocessComplexComponent(obj); + } + } + + @Override + protected void postprocessComplexComponent(ComplexComponent obj) { + for (CifWalker walker: walkers) { + walker.postprocessComplexComponent(obj); + } + } + + @Override + protected void preprocessComponent(Component obj) { + for (CifWalker walker: walkers) { + walker.preprocessComponent(obj); + } + } + + @Override + protected void postprocessComponent(Component obj) { + for (CifWalker walker: walkers) { + walker.postprocessComponent(obj); + } + } + + @Override + protected void preprocessComponentDef(ComponentDef obj) { + for (CifWalker walker: walkers) { + walker.preprocessComponentDef(obj); + } + } + + @Override + protected void postprocessComponentDef(ComponentDef obj) { + for (CifWalker walker: walkers) { + walker.postprocessComponentDef(obj); + } + } + + @Override + protected void preprocessComponentDefType(ComponentDefType obj) { + for (CifWalker walker: walkers) { + walker.preprocessComponentDefType(obj); + } + } + + @Override + protected void postprocessComponentDefType(ComponentDefType obj) { + for (CifWalker walker: walkers) { + walker.postprocessComponentDefType(obj); + } + } + + @Override + protected void preprocessComponentExpression(ComponentExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessComponentExpression(obj); + } + } + + @Override + protected void postprocessComponentExpression(ComponentExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessComponentExpression(obj); + } + } + + @Override + protected void preprocessComponentInst(ComponentInst obj) { + for (CifWalker walker: walkers) { + walker.preprocessComponentInst(obj); + } + } + + @Override + protected void postprocessComponentInst(ComponentInst obj) { + for (CifWalker walker: walkers) { + walker.postprocessComponentInst(obj); + } + } + + @Override + protected void preprocessComponentParameter(ComponentParameter obj) { + for (CifWalker walker: walkers) { + walker.preprocessComponentParameter(obj); + } + } + + @Override + protected void postprocessComponentParameter(ComponentParameter obj) { + for (CifWalker walker: walkers) { + walker.postprocessComponentParameter(obj); + } + } + + @Override + protected void preprocessComponentType(ComponentType obj) { + for (CifWalker walker: walkers) { + walker.preprocessComponentType(obj); + } + } + + @Override + protected void postprocessComponentType(ComponentType obj) { + for (CifWalker walker: walkers) { + walker.postprocessComponentType(obj); + } + } + + @Override + protected void preprocessConstant(Constant obj) { + for (CifWalker walker: walkers) { + walker.preprocessConstant(obj); + } + } + + @Override + protected void postprocessConstant(Constant obj) { + for (CifWalker walker: walkers) { + walker.postprocessConstant(obj); + } + } + + @Override + protected void preprocessConstantExpression(ConstantExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessConstantExpression(obj); + } + } + + @Override + protected void postprocessConstantExpression(ConstantExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessConstantExpression(obj); + } + } + + @Override + protected void preprocessContVariable(ContVariable obj) { + for (CifWalker walker: walkers) { + walker.preprocessContVariable(obj); + } + } + + @Override + protected void postprocessContVariable(ContVariable obj) { + for (CifWalker walker: walkers) { + walker.postprocessContVariable(obj); + } + } + + @Override + protected void preprocessContVariableExpression(ContVariableExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessContVariableExpression(obj); + } + } + + @Override + protected void postprocessContVariableExpression(ContVariableExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessContVariableExpression(obj); + } + } + + @Override + protected void preprocessContinueFuncStatement(ContinueFuncStatement obj) { + for (CifWalker walker: walkers) { + walker.preprocessContinueFuncStatement(obj); + } + } + + @Override + protected void postprocessContinueFuncStatement(ContinueFuncStatement obj) { + for (CifWalker walker: walkers) { + walker.postprocessContinueFuncStatement(obj); + } + } + + @Override + protected void preprocessDeclaration(Declaration obj) { + for (CifWalker walker: walkers) { + walker.preprocessDeclaration(obj); + } + } + + @Override + protected void postprocessDeclaration(Declaration obj) { + for (CifWalker walker: walkers) { + walker.postprocessDeclaration(obj); + } + } + + @Override + protected void preprocessDictExpression(DictExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessDictExpression(obj); + } + } + + @Override + protected void postprocessDictExpression(DictExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessDictExpression(obj); + } + } + + @Override + protected void preprocessDictPair(DictPair obj) { + for (CifWalker walker: walkers) { + walker.preprocessDictPair(obj); + } + } + + @Override + protected void postprocessDictPair(DictPair obj) { + for (CifWalker walker: walkers) { + walker.postprocessDictPair(obj); + } + } + + @Override + protected void preprocessDictType(DictType obj) { + for (CifWalker walker: walkers) { + walker.preprocessDictType(obj); + } + } + + @Override + protected void postprocessDictType(DictType obj) { + for (CifWalker walker: walkers) { + walker.postprocessDictType(obj); + } + } + + @Override + protected void preprocessDiscVariable(DiscVariable obj) { + for (CifWalker walker: walkers) { + walker.preprocessDiscVariable(obj); + } + } + + @Override + protected void postprocessDiscVariable(DiscVariable obj) { + for (CifWalker walker: walkers) { + walker.postprocessDiscVariable(obj); + } + } + + @Override + protected void preprocessDiscVariableExpression(DiscVariableExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessDiscVariableExpression(obj); + } + } + + @Override + protected void postprocessDiscVariableExpression(DiscVariableExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessDiscVariableExpression(obj); + } + } + + @Override + protected void preprocessDistType(DistType obj) { + for (CifWalker walker: walkers) { + walker.preprocessDistType(obj); + } + } + + @Override + protected void postprocessDistType(DistType obj) { + for (CifWalker walker: walkers) { + walker.postprocessDistType(obj); + } + } + + @Override + protected void preprocessEdge(Edge obj) { + for (CifWalker walker: walkers) { + walker.preprocessEdge(obj); + } + } + + @Override + protected void postprocessEdge(Edge obj) { + for (CifWalker walker: walkers) { + walker.postprocessEdge(obj); + } + } + + @Override + protected void preprocessEdgeEvent(EdgeEvent obj) { + for (CifWalker walker: walkers) { + walker.preprocessEdgeEvent(obj); + } + } + + @Override + protected void postprocessEdgeEvent(EdgeEvent obj) { + for (CifWalker walker: walkers) { + walker.postprocessEdgeEvent(obj); + } + } + + @Override + protected void preprocessEdgeReceive(EdgeReceive obj) { + for (CifWalker walker: walkers) { + walker.preprocessEdgeReceive(obj); + } + } + + @Override + protected void postprocessEdgeReceive(EdgeReceive obj) { + for (CifWalker walker: walkers) { + walker.postprocessEdgeReceive(obj); + } + } + + @Override + protected void preprocessEdgeSend(EdgeSend obj) { + for (CifWalker walker: walkers) { + walker.preprocessEdgeSend(obj); + } + } + + @Override + protected void postprocessEdgeSend(EdgeSend obj) { + for (CifWalker walker: walkers) { + walker.postprocessEdgeSend(obj); + } + } + + @Override + protected void preprocessElifExpression(ElifExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessElifExpression(obj); + } + } + + @Override + protected void postprocessElifExpression(ElifExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessElifExpression(obj); + } + } + + @Override + protected void preprocessElifFuncStatement(ElifFuncStatement obj) { + for (CifWalker walker: walkers) { + walker.preprocessElifFuncStatement(obj); + } + } + + @Override + protected void postprocessElifFuncStatement(ElifFuncStatement obj) { + for (CifWalker walker: walkers) { + walker.postprocessElifFuncStatement(obj); + } + } + + @Override + protected void preprocessElifUpdate(ElifUpdate obj) { + for (CifWalker walker: walkers) { + walker.preprocessElifUpdate(obj); + } + } + + @Override + protected void postprocessElifUpdate(ElifUpdate obj) { + for (CifWalker walker: walkers) { + walker.postprocessElifUpdate(obj); + } + } + + @Override + protected void preprocessEnumDecl(EnumDecl obj) { + for (CifWalker walker: walkers) { + walker.preprocessEnumDecl(obj); + } + } + + @Override + protected void postprocessEnumDecl(EnumDecl obj) { + for (CifWalker walker: walkers) { + walker.postprocessEnumDecl(obj); + } + } + + @Override + protected void preprocessEnumLiteral(EnumLiteral obj) { + for (CifWalker walker: walkers) { + walker.preprocessEnumLiteral(obj); + } + } + + @Override + protected void postprocessEnumLiteral(EnumLiteral obj) { + for (CifWalker walker: walkers) { + walker.postprocessEnumLiteral(obj); + } + } + + @Override + protected void preprocessEnumLiteralExpression(EnumLiteralExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessEnumLiteralExpression(obj); + } + } + + @Override + protected void postprocessEnumLiteralExpression(EnumLiteralExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessEnumLiteralExpression(obj); + } + } + + @Override + protected void preprocessEnumType(EnumType obj) { + for (CifWalker walker: walkers) { + walker.preprocessEnumType(obj); + } + } + + @Override + protected void postprocessEnumType(EnumType obj) { + for (CifWalker walker: walkers) { + walker.postprocessEnumType(obj); + } + } + + @Override + protected void preprocessEquation(Equation obj) { + for (CifWalker walker: walkers) { + walker.preprocessEquation(obj); + } + } + + @Override + protected void postprocessEquation(Equation obj) { + for (CifWalker walker: walkers) { + walker.postprocessEquation(obj); + } + } + + @Override + protected void preprocessEvent(Event obj) { + for (CifWalker walker: walkers) { + walker.preprocessEvent(obj); + } + } + + @Override + protected void postprocessEvent(Event obj) { + for (CifWalker walker: walkers) { + walker.postprocessEvent(obj); + } + } + + @Override + protected void preprocessEventExpression(EventExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessEventExpression(obj); + } + } + + @Override + protected void postprocessEventExpression(EventExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessEventExpression(obj); + } + } + + @Override + protected void preprocessEventParameter(EventParameter obj) { + for (CifWalker walker: walkers) { + walker.preprocessEventParameter(obj); + } + } + + @Override + protected void postprocessEventParameter(EventParameter obj) { + for (CifWalker walker: walkers) { + walker.postprocessEventParameter(obj); + } + } + + @Override + protected void preprocessExpression(Expression obj) { + for (CifWalker walker: walkers) { + walker.preprocessExpression(obj); + } + } + + @Override + protected void postprocessExpression(Expression obj) { + for (CifWalker walker: walkers) { + walker.postprocessExpression(obj); + } + } + + @Override + protected void preprocessExternalFunction(ExternalFunction obj) { + for (CifWalker walker: walkers) { + walker.preprocessExternalFunction(obj); + } + } + + @Override + protected void postprocessExternalFunction(ExternalFunction obj) { + for (CifWalker walker: walkers) { + walker.postprocessExternalFunction(obj); + } + } + + @Override + protected void preprocessField(Field obj) { + for (CifWalker walker: walkers) { + walker.preprocessField(obj); + } + } + + @Override + protected void postprocessField(Field obj) { + for (CifWalker walker: walkers) { + walker.postprocessField(obj); + } + } + + @Override + protected void preprocessFieldExpression(FieldExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessFieldExpression(obj); + } + } + + @Override + protected void postprocessFieldExpression(FieldExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessFieldExpression(obj); + } + } + + @Override + protected void preprocessFuncType(FuncType obj) { + for (CifWalker walker: walkers) { + walker.preprocessFuncType(obj); + } + } + + @Override + protected void postprocessFuncType(FuncType obj) { + for (CifWalker walker: walkers) { + walker.postprocessFuncType(obj); + } + } + + @Override + protected void preprocessFunction(Function obj) { + for (CifWalker walker: walkers) { + walker.preprocessFunction(obj); + } + } + + @Override + protected void postprocessFunction(Function obj) { + for (CifWalker walker: walkers) { + walker.postprocessFunction(obj); + } + } + + @Override + protected void preprocessFunctionCallExpression(FunctionCallExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessFunctionCallExpression(obj); + } + } + + @Override + protected void postprocessFunctionCallExpression(FunctionCallExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessFunctionCallExpression(obj); + } + } + + @Override + protected void preprocessFunctionExpression(FunctionExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessFunctionExpression(obj); + } + } + + @Override + protected void postprocessFunctionExpression(FunctionExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessFunctionExpression(obj); + } + } + + @Override + protected void preprocessFunctionParameter(FunctionParameter obj) { + for (CifWalker walker: walkers) { + walker.preprocessFunctionParameter(obj); + } + } + + @Override + protected void postprocessFunctionParameter(FunctionParameter obj) { + for (CifWalker walker: walkers) { + walker.postprocessFunctionParameter(obj); + } + } + + @Override + protected void preprocessFunctionStatement(FunctionStatement obj) { + for (CifWalker walker: walkers) { + walker.preprocessFunctionStatement(obj); + } + } + + @Override + protected void postprocessFunctionStatement(FunctionStatement obj) { + for (CifWalker walker: walkers) { + walker.postprocessFunctionStatement(obj); + } + } + + @Override + protected void preprocessGroup(Group obj) { + for (CifWalker walker: walkers) { + walker.preprocessGroup(obj); + } + } + + @Override + protected void postprocessGroup(Group obj) { + for (CifWalker walker: walkers) { + walker.postprocessGroup(obj); + } + } + + @Override + protected void preprocessIfExpression(IfExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessIfExpression(obj); + } + } + + @Override + protected void postprocessIfExpression(IfExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessIfExpression(obj); + } + } + + @Override + protected void preprocessIfFuncStatement(IfFuncStatement obj) { + for (CifWalker walker: walkers) { + walker.preprocessIfFuncStatement(obj); + } + } + + @Override + protected void postprocessIfFuncStatement(IfFuncStatement obj) { + for (CifWalker walker: walkers) { + walker.postprocessIfFuncStatement(obj); + } + } + + @Override + protected void preprocessIfUpdate(IfUpdate obj) { + for (CifWalker walker: walkers) { + walker.preprocessIfUpdate(obj); + } + } + + @Override + protected void postprocessIfUpdate(IfUpdate obj) { + for (CifWalker walker: walkers) { + walker.postprocessIfUpdate(obj); + } + } + + @Override + protected void preprocessInputVariable(InputVariable obj) { + for (CifWalker walker: walkers) { + walker.preprocessInputVariable(obj); + } + } + + @Override + protected void postprocessInputVariable(InputVariable obj) { + for (CifWalker walker: walkers) { + walker.postprocessInputVariable(obj); + } + } + + @Override + protected void preprocessInputVariableExpression(InputVariableExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessInputVariableExpression(obj); + } + } + + @Override + protected void postprocessInputVariableExpression(InputVariableExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessInputVariableExpression(obj); + } + } + + @Override + protected void preprocessIntExpression(IntExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessIntExpression(obj); + } + } + + @Override + protected void postprocessIntExpression(IntExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessIntExpression(obj); + } + } + + @Override + protected void preprocessIntType(IntType obj) { + for (CifWalker walker: walkers) { + walker.preprocessIntType(obj); + } + } + + @Override + protected void postprocessIntType(IntType obj) { + for (CifWalker walker: walkers) { + walker.postprocessIntType(obj); + } + } + + @Override + protected void preprocessInternalFunction(InternalFunction obj) { + for (CifWalker walker: walkers) { + walker.preprocessInternalFunction(obj); + } + } + + @Override + protected void postprocessInternalFunction(InternalFunction obj) { + for (CifWalker walker: walkers) { + walker.postprocessInternalFunction(obj); + } + } + + @Override + protected void preprocessInvariant(Invariant obj) { + for (CifWalker walker: walkers) { + walker.preprocessInvariant(obj); + } + } + + @Override + protected void postprocessInvariant(Invariant obj) { + for (CifWalker walker: walkers) { + walker.postprocessInvariant(obj); + } + } + + @Override + protected void preprocessIoDecl(IoDecl obj) { + for (CifWalker walker: walkers) { + walker.preprocessIoDecl(obj); + } + } + + @Override + protected void postprocessIoDecl(IoDecl obj) { + for (CifWalker walker: walkers) { + walker.postprocessIoDecl(obj); + } + } + + @Override + protected void preprocessListExpression(ListExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessListExpression(obj); + } + } + + @Override + protected void postprocessListExpression(ListExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessListExpression(obj); + } + } + + @Override + protected void preprocessListType(ListType obj) { + for (CifWalker walker: walkers) { + walker.preprocessListType(obj); + } + } + + @Override + protected void postprocessListType(ListType obj) { + for (CifWalker walker: walkers) { + walker.postprocessListType(obj); + } + } + + @Override + protected void preprocessLocation(Location obj) { + for (CifWalker walker: walkers) { + walker.preprocessLocation(obj); + } + } + + @Override + protected void postprocessLocation(Location obj) { + for (CifWalker walker: walkers) { + walker.postprocessLocation(obj); + } + } + + @Override + protected void preprocessLocationExpression(LocationExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessLocationExpression(obj); + } + } + + @Override + protected void postprocessLocationExpression(LocationExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessLocationExpression(obj); + } + } + + @Override + protected void preprocessLocationParameter(LocationParameter obj) { + for (CifWalker walker: walkers) { + walker.preprocessLocationParameter(obj); + } + } + + @Override + protected void postprocessLocationParameter(LocationParameter obj) { + for (CifWalker walker: walkers) { + walker.postprocessLocationParameter(obj); + } + } + + @Override + protected void preprocessMonitors(Monitors obj) { + for (CifWalker walker: walkers) { + walker.preprocessMonitors(obj); + } + } + + @Override + protected void postprocessMonitors(Monitors obj) { + for (CifWalker walker: walkers) { + walker.postprocessMonitors(obj); + } + } + + @Override + protected void preprocessParameter(Parameter obj) { + for (CifWalker walker: walkers) { + walker.preprocessParameter(obj); + } + } + + @Override + protected void postprocessParameter(Parameter obj) { + for (CifWalker walker: walkers) { + walker.postprocessParameter(obj); + } + } + + @Override + protected void preprocessPosition(Position obj) { + for (CifWalker walker: walkers) { + walker.preprocessPosition(obj); + } + } + + @Override + protected void postprocessPosition(Position obj) { + for (CifWalker walker: walkers) { + walker.postprocessPosition(obj); + } + } + + @Override + protected void preprocessPositionObject(PositionObject obj) { + for (CifWalker walker: walkers) { + walker.preprocessPositionObject(obj); + } + } + + @Override + protected void postprocessPositionObject(PositionObject obj) { + for (CifWalker walker: walkers) { + walker.postprocessPositionObject(obj); + } + } + + @Override + protected void preprocessPrint(Print obj) { + for (CifWalker walker: walkers) { + walker.preprocessPrint(obj); + } + } + + @Override + protected void postprocessPrint(Print obj) { + for (CifWalker walker: walkers) { + walker.postprocessPrint(obj); + } + } + + @Override + protected void preprocessPrintFile(PrintFile obj) { + for (CifWalker walker: walkers) { + walker.preprocessPrintFile(obj); + } + } + + @Override + protected void postprocessPrintFile(PrintFile obj) { + for (CifWalker walker: walkers) { + walker.postprocessPrintFile(obj); + } + } + + @Override + protected void preprocessPrintFor(PrintFor obj) { + for (CifWalker walker: walkers) { + walker.preprocessPrintFor(obj); + } + } + + @Override + protected void postprocessPrintFor(PrintFor obj) { + for (CifWalker walker: walkers) { + walker.postprocessPrintFor(obj); + } + } + + @Override + protected void preprocessProjectionExpression(ProjectionExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessProjectionExpression(obj); + } + } + + @Override + protected void postprocessProjectionExpression(ProjectionExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessProjectionExpression(obj); + } + } + + @Override + protected void preprocessRealExpression(RealExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessRealExpression(obj); + } + } + + @Override + protected void postprocessRealExpression(RealExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessRealExpression(obj); + } + } + + @Override + protected void preprocessRealType(RealType obj) { + for (CifWalker walker: walkers) { + walker.preprocessRealType(obj); + } + } + + @Override + protected void postprocessRealType(RealType obj) { + for (CifWalker walker: walkers) { + walker.postprocessRealType(obj); + } + } + + @Override + protected void preprocessReceivedExpression(ReceivedExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessReceivedExpression(obj); + } + } + + @Override + protected void postprocessReceivedExpression(ReceivedExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessReceivedExpression(obj); + } + } + + @Override + protected void preprocessReturnFuncStatement(ReturnFuncStatement obj) { + for (CifWalker walker: walkers) { + walker.preprocessReturnFuncStatement(obj); + } + } + + @Override + protected void postprocessReturnFuncStatement(ReturnFuncStatement obj) { + for (CifWalker walker: walkers) { + walker.postprocessReturnFuncStatement(obj); + } + } + + @Override + protected void preprocessSelfExpression(SelfExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessSelfExpression(obj); + } + } + + @Override + protected void postprocessSelfExpression(SelfExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessSelfExpression(obj); + } + } + + @Override + protected void preprocessSetExpression(SetExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessSetExpression(obj); + } + } + + @Override + protected void postprocessSetExpression(SetExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessSetExpression(obj); + } + } + + @Override + protected void preprocessSetType(SetType obj) { + for (CifWalker walker: walkers) { + walker.preprocessSetType(obj); + } + } + + @Override + protected void postprocessSetType(SetType obj) { + for (CifWalker walker: walkers) { + walker.postprocessSetType(obj); + } + } + + @Override + protected void preprocessSliceExpression(SliceExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessSliceExpression(obj); + } + } + + @Override + protected void postprocessSliceExpression(SliceExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessSliceExpression(obj); + } + } + + @Override + protected void preprocessSpecification(Specification obj) { + for (CifWalker walker: walkers) { + walker.preprocessSpecification(obj); + } + } + + @Override + protected void postprocessSpecification(Specification obj) { + for (CifWalker walker: walkers) { + walker.postprocessSpecification(obj); + } + } + + @Override + protected void preprocessStdLibFunctionExpression(StdLibFunctionExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessStdLibFunctionExpression(obj); + } + } + + @Override + protected void postprocessStdLibFunctionExpression(StdLibFunctionExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessStdLibFunctionExpression(obj); + } + } + + @Override + protected void preprocessStringExpression(StringExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessStringExpression(obj); + } + } + + @Override + protected void postprocessStringExpression(StringExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessStringExpression(obj); + } + } + + @Override + protected void preprocessStringType(StringType obj) { + for (CifWalker walker: walkers) { + walker.preprocessStringType(obj); + } + } + + @Override + protected void postprocessStringType(StringType obj) { + for (CifWalker walker: walkers) { + walker.postprocessStringType(obj); + } + } + + @Override + protected void preprocessSvgCopy(SvgCopy obj) { + for (CifWalker walker: walkers) { + walker.preprocessSvgCopy(obj); + } + } + + @Override + protected void postprocessSvgCopy(SvgCopy obj) { + for (CifWalker walker: walkers) { + walker.postprocessSvgCopy(obj); + } + } + + @Override + protected void preprocessSvgFile(SvgFile obj) { + for (CifWalker walker: walkers) { + walker.preprocessSvgFile(obj); + } + } + + @Override + protected void postprocessSvgFile(SvgFile obj) { + for (CifWalker walker: walkers) { + walker.postprocessSvgFile(obj); + } + } + + @Override + protected void preprocessSvgIn(SvgIn obj) { + for (CifWalker walker: walkers) { + walker.preprocessSvgIn(obj); + } + } + + @Override + protected void postprocessSvgIn(SvgIn obj) { + for (CifWalker walker: walkers) { + walker.postprocessSvgIn(obj); + } + } + + @Override + protected void preprocessSvgInEvent(SvgInEvent obj) { + for (CifWalker walker: walkers) { + walker.preprocessSvgInEvent(obj); + } + } + + @Override + protected void postprocessSvgInEvent(SvgInEvent obj) { + for (CifWalker walker: walkers) { + walker.postprocessSvgInEvent(obj); + } + } + + @Override + protected void preprocessSvgInEventIf(SvgInEventIf obj) { + for (CifWalker walker: walkers) { + walker.preprocessSvgInEventIf(obj); + } + } + + @Override + protected void postprocessSvgInEventIf(SvgInEventIf obj) { + for (CifWalker walker: walkers) { + walker.postprocessSvgInEventIf(obj); + } + } + + @Override + protected void preprocessSvgInEventIfEntry(SvgInEventIfEntry obj) { + for (CifWalker walker: walkers) { + walker.preprocessSvgInEventIfEntry(obj); + } + } + + @Override + protected void postprocessSvgInEventIfEntry(SvgInEventIfEntry obj) { + for (CifWalker walker: walkers) { + walker.postprocessSvgInEventIfEntry(obj); + } + } + + @Override + protected void preprocessSvgInEventSingle(SvgInEventSingle obj) { + for (CifWalker walker: walkers) { + walker.preprocessSvgInEventSingle(obj); + } + } + + @Override + protected void postprocessSvgInEventSingle(SvgInEventSingle obj) { + for (CifWalker walker: walkers) { + walker.postprocessSvgInEventSingle(obj); + } + } + + @Override + protected void preprocessSvgMove(SvgMove obj) { + for (CifWalker walker: walkers) { + walker.preprocessSvgMove(obj); + } + } + + @Override + protected void postprocessSvgMove(SvgMove obj) { + for (CifWalker walker: walkers) { + walker.postprocessSvgMove(obj); + } + } + + @Override + protected void preprocessSvgOut(SvgOut obj) { + for (CifWalker walker: walkers) { + walker.preprocessSvgOut(obj); + } + } + + @Override + protected void postprocessSvgOut(SvgOut obj) { + for (CifWalker walker: walkers) { + walker.postprocessSvgOut(obj); + } + } + + @Override + protected void preprocessSwitchCase(SwitchCase obj) { + for (CifWalker walker: walkers) { + walker.preprocessSwitchCase(obj); + } + } + + @Override + protected void postprocessSwitchCase(SwitchCase obj) { + for (CifWalker walker: walkers) { + walker.postprocessSwitchCase(obj); + } + } + + @Override + protected void preprocessSwitchExpression(SwitchExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessSwitchExpression(obj); + } + } + + @Override + protected void postprocessSwitchExpression(SwitchExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessSwitchExpression(obj); + } + } + + @Override + protected void preprocessTauExpression(TauExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessTauExpression(obj); + } + } + + @Override + protected void postprocessTauExpression(TauExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessTauExpression(obj); + } + } + + @Override + protected void preprocessTimeExpression(TimeExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessTimeExpression(obj); + } + } + + @Override + protected void postprocessTimeExpression(TimeExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessTimeExpression(obj); + } + } + + @Override + protected void preprocessTupleExpression(TupleExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessTupleExpression(obj); + } + } + + @Override + protected void postprocessTupleExpression(TupleExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessTupleExpression(obj); + } + } + + @Override + protected void preprocessTupleType(TupleType obj) { + for (CifWalker walker: walkers) { + walker.preprocessTupleType(obj); + } + } + + @Override + protected void postprocessTupleType(TupleType obj) { + for (CifWalker walker: walkers) { + walker.postprocessTupleType(obj); + } + } + + @Override + protected void preprocessTypeDecl(TypeDecl obj) { + for (CifWalker walker: walkers) { + walker.preprocessTypeDecl(obj); + } + } + + @Override + protected void postprocessTypeDecl(TypeDecl obj) { + for (CifWalker walker: walkers) { + walker.postprocessTypeDecl(obj); + } + } + + @Override + protected void preprocessTypeRef(TypeRef obj) { + for (CifWalker walker: walkers) { + walker.preprocessTypeRef(obj); + } + } + + @Override + protected void postprocessTypeRef(TypeRef obj) { + for (CifWalker walker: walkers) { + walker.postprocessTypeRef(obj); + } + } + + @Override + protected void preprocessUnaryExpression(UnaryExpression obj) { + for (CifWalker walker: walkers) { + walker.preprocessUnaryExpression(obj); + } + } + + @Override + protected void postprocessUnaryExpression(UnaryExpression obj) { + for (CifWalker walker: walkers) { + walker.postprocessUnaryExpression(obj); + } + } + + @Override + protected void preprocessUpdate(Update obj) { + for (CifWalker walker: walkers) { + walker.preprocessUpdate(obj); + } + } + + @Override + protected void postprocessUpdate(Update obj) { + for (CifWalker walker: walkers) { + walker.postprocessUpdate(obj); + } + } + + @Override + protected void preprocessVariableValue(VariableValue obj) { + for (CifWalker walker: walkers) { + walker.preprocessVariableValue(obj); + } + } + + @Override + protected void postprocessVariableValue(VariableValue obj) { + for (CifWalker walker: walkers) { + walker.postprocessVariableValue(obj); + } + } + + @Override + protected void preprocessVoidType(VoidType obj) { + for (CifWalker walker: walkers) { + walker.preprocessVoidType(obj); + } + } + + @Override + protected void postprocessVoidType(VoidType obj) { + for (CifWalker walker: walkers) { + walker.postprocessVoidType(obj); + } + } + + @Override + protected void preprocessWhileFuncStatement(WhileFuncStatement obj) { + for (CifWalker walker: walkers) { + walker.preprocessWhileFuncStatement(obj); + } + } + + @Override + protected void postprocessWhileFuncStatement(WhileFuncStatement obj) { + for (CifWalker walker: walkers) { + walker.postprocessWhileFuncStatement(obj); + } + } +} -- GitLab From 13a2cb7873155c863b0d7e79b7b0158c380b5dff Mon Sep 17 00:00:00 2001 From: Dennis HendriksThe walker works as follows:"); + box.add(" *
The %swalker works as follows:", genComposite ? "composite " : ""); box.add(" *
By default, the pre-processing and post-processing methods do nothing"); - box.add(" * (they have an empty implementation). It is up to derived classes to"); - box.add(" * override methods and provide actual implementations. They may also override"); - box.add(" * walk and crawl methods, if desired.
"); + if (genComposite) { + box.add(" *A composite walking does not perform any pre-processing or post-processing"); + box.add(" * by itself. It can be configured with any number of other (composite or"); + box.add(" * non-composite) model walkers. As pre-processing and post-processing the"); + box.add(" * composite model walker invokes pre-processing and post-processing on each"); + box.add(" * 'other' model walker, in the order they are supplied. The walking and"); + box.add(" * crawling methods of the non-composite of the 'other' model walkers are not"); + box.add(" * used.
"); + } else { + box.add(" *By default, the pre-processing and post-processing methods do nothing"); + box.add(" * (they have an empty implementation). It is up to derived classes to"); + box.add(" * override methods and provide actual implementations. They may also override"); + box.add(" * walk and crawl methods, if desired.
"); + } box.add(" *"); box.add(" *This abstract walker class has no public methods. It is up to the derived"); box.add(" * classes to add a public method as entry method. They can decide which"); @@ -236,167 +259,52 @@ public class ModelWalkerGenerator extends EmfJavaCodeGenerator { box.add(" * method a proper name, parameters, etc. They may even allow multiple public"); box.add(" * methods to allow starting from multiple classes.
"); box.add(" */"); - box.add("public abstract class %s {", genClassNameWalker); - boolean first = true; - for (EClass cls: classes) { - if (!first) { - box.add(); - } - generateWalkerMethods(cls, classes, box); - first = false; + // Add the class header. + if (genComposite) { + box.add("public abstract class %s extends %s {", genClassNameComposite, genClassNameWalker); + } else { + box.add("public abstract class %s {", genClassNameWalker); } - box.add("}"); - return box; - } - - /** - * Generate composite model walker class code for an {@link EPackage}. - * - * @param startPackage The {@link EPackage} to generate the code for. - * @param genClassNameWalker The name of the model walker Java class to generate. - * @param genClassNameComposite The name of the composite model walker Java class to generate. - * @param genPackageName The name of the package that the generated Java class will be a part of. - * @return The generated code. - */ - private static CodeBox generateCompositeWalker(EPackage startPackage, String genClassNameWalker, - String genClassNameComposite, String genPackageName) - { - CodeBox box = new MemoryCodeBox(); - - ListThe composite walker works as follows:"); - box.add(" *
A composite walking does not perform any pre-processing or post-processing"); - box.add(" * by itself. It can be configured with any number of other (composite or"); - box.add(" * non-composite) model walkers. As pre-processing and post-processing the"); - box.add(" * composite model walker invokes pre-processing and post-processing on each"); - box.add(" * 'other' model walker, in the order they are supplied. The walking and"); - box.add(" * crawling methods of the non-composite of the 'other' model walkers are not"); - box.add(" * used.
"); - box.add(" *"); - box.add(" *This abstract walker class has no public methods. It is up to the derived"); - box.add(" * classes to add a public method as entry method. They can decide which"); - box.add(" * classes are to be used as starting point, and they can give the public"); - box.add(" * method a proper name, parameters, etc. They may even allow multiple public"); - box.add(" * methods to allow starting from multiple classes.
"); - box.add(" */"); - box.add("public abstract class %s extends %s {", genClassNameComposite, genClassNameWalker); - - box.indent(); - box.add("/** The walkers to be composed by this composite walker. */"); - box.add("private %s[] walkers;", genClassNameWalker); - box.dedent(); - box.add(); - - box.indent(); - box.add("/**"); - box.add(" * Constructor of the {@link %s} class.", genClassNameComposite); - box.add(" *"); - box.add(" * @param walkers The walkers to be composed by this composite walker."); - box.add(" */"); - box.add("public %s(%s[] walkers) {", genClassNameComposite, genClassNameWalker); - box.add(" this.walkers = walkers;"); - box.add("}"); - box.dedent(); - - for (EClass cls: classes) { - generateCompositeWalkerMethods(cls, genClassNameWalker, box); } + // Close the class. box.add("}"); return box; } -- GitLab From 72659d6b7a591616a95dd5db588e089ce9751bd9 Mon Sep 17 00:00:00 2001 From: Dennis Hendriks+ * Note that {@link Specification}s are considered not to have a name, as the name can't be specified in the textual + * syntax, and is fixed in the metamodel. + *
+ * + *+ * Note that {@link Field}s are considered not to have a name, even when they do have one, for compatibility with + * {@link #getName}. The caller should handle fields as a special case, if relevant. + *
+ * + * @param obj The CIF object for which to determine whether it has a name. + * @return Whether the CIF object has a name ({@code true}) or not ({@code false}). + * @see #getName + * @see #getAbsName + */ + public static boolean hasName(PositionObject obj) { + if (obj instanceof Specification) { + return false; // Explicitly 'false'. See method JavaDoc. + } else if (obj instanceof Component) { + return true; // Non-specification component. + } else if (obj instanceof ComponentDef) { + return true; + } else if (obj instanceof Parameter) { + return true; + } else if (obj instanceof Declaration) { + return true; + } else if (obj instanceof EnumLiteral) { + return true; + } else if (obj instanceof Location) { + return ((Location)obj).getName() != null; + } else if (obj instanceof Invariant) { + return ((Invariant)obj).getName() != null; + } else if (obj instanceof FunctionParameter) { + return true; + } else if (obj instanceof Field) { + return false; // Explicitly 'false'. See method JavaDoc. + } else { + return false; // Not a CIF object with a name. + } + } + /** * Returns the name of the given CIF object. Names that are keywords are not escaped. For specifications, {@code ""} * is returned. @@ -1228,6 +1272,7 @@ public class CifTextUtils { * * @param obj The CIF object for which to return the name. Must be a named object. * @return The name of the CIF object. + * @see #hasName */ public static String getName(PositionObject obj) { if (obj instanceof Component) { @@ -1283,6 +1328,21 @@ public class CifTextUtils { return getName(obj); } + /** + * Returns the object itself if it is itself a named object, the closest named ancestor of the given object if one + * exists, or {@code null} if the given object is itself not a named object, and also has no named ancestor. + * + * @param obj The given object. + * @return The given object itself (if named), its closest named ancestor (if any), or {@code null} (otherwise). + */ + public static PositionObject getNamedAncestorOrSelf(PositionObject obj) { + PositionObject cur = obj; + while (cur != null && !hasName(cur)) { + cur = (PositionObject)cur.eContainer(); + } + return cur; + } + /** * Returns an end-user readable textual (reference) representation of a location, mostly for use in error messages. * -- GitLab From c5edd347d35602259132f21f6fb124da452d1ee5 Mon Sep 17 00:00:00 2001 From: Dennis HendriksThe walker works as follows: + *
By default, the pre-processing and post-processing methods do nothing + * (they have an empty implementation). It is up to derived classes to + * override methods and provide actual implementations. They may also override + * walk and crawl methods, if desired.
+ * + *This abstract walker class has no public methods. It is up to the derived + * classes to add a public method as entry method. They can decide which + * classes are to be used as starting point, and they can give the public + * method a proper name, parameters, etc. They may even allow multiple public + * methods to allow starting from multiple classes.
+ * + * @paramThe composite walker works as follows: + *
A composite walking does not perform any pre-processing or post-processing + * by itself. It can be configured with any number of other (composite or + * non-composite) model walkers. As pre-processing and post-processing the + * composite model walker invokes pre-processing and post-processing on each + * 'other' model walker, in the order they are supplied. The walking and + * crawling methods of the non-composite of the 'other' model walkers are not + * used.
+ * + *This abstract walker class has no public methods. It is up to the derived + * classes to add a public method as entry method. They can decide which + * classes are to be used as starting point, and they can give the public + * method a proper name, parameters, etc. They may even allow multiple public + * methods to allow starting from multiple classes.
+ * + * @param