Issue 13453: ExecutionFactory::instantiateVisitor should not use Java reflection (fuml-ftf) Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com) Nature: Uncategorized Issue Severity: Summary: Specification: Semantics of a Foundation Subset for Executable UML Models, FTF – Beta 1 (ptc/08-11-03) Section: 8.2.2.2 ExecutionFactory Summary: The ExecutionFactory::instantiateVisitor operation currently uses Java reflection to instantiate an appropriate visitor class. However, there is no Annex A mapping for this. Proposed Resolution: Remove the “suffix” parameter from the signature for instantiateVisitor and update the calls in ExecutionFactory::createExecution, ExecutionFactory::createEvaluation and ActivityNodeActivationGroup::createNodeActivation to remove the corresponding second argument. Replace the body of instantiateVistor with: // Instantiate a visitor object for the given element. SemanticVisitor visitor = null; if (element instanceof fUML.Syntax.Classes.Kernel.LiteralBoolean) { visitor = new fUML.Semantics.Classes.Kernel.LiteralBooleanEvaluation(); } if (element instanceof fUML.Syntax.Classes.Kernel.LiteralString) { visitor = new fUML.Semantics.Classes.Kernel.LiteralStringEvaluation(); } if (element instanceof fUML.Syntax.Classes.Kernel.LiteralNull) { visitor = new fUML.Semantics.Classes.Kernel.LiteralNullEvaluation(); } if (element instanceof fUML.Syntax.Classes.Kernel.InstanceValue) { visitor = new fUML.Semantics.Classes.Kernel.InstanceValueEvaluation(); } if (element instanceof fUML.Syntax.Classes.Kernel.LiteralUnlimitedNatural) { visitor = new fUML.Semantics.Classes.Kernel.LiteralUnlimitedNaturalEvaluation(); } if (element instanceof fUML.Syntax.Classes.Kernel.LiteralInteger) { visitor = new fUML.Semantics.Classes.Kernel.LiteralIntegerEvaluation(); } if (element instanceof fUML.Syntax.Activities.IntermediateActivities.Activity) { visitor = new fUML.Semantics.Activities.IntermediateActivities.ActivityExecution(); } if (element instanceof fUML.Syntax.Actions.BasicActions.OutputPin) { visitor = new fUML.Semantics.Actions.BasicActions.OutputPinActivation(); } if (element instanceof fUML.Syntax.Actions.BasicActions.InputPin) { visitor = new fUML.Semantics.Actions.BasicActions.InputPinActivation(); } if (element instanceof fUML.Syntax.Actions.CompleteActions.StartClassifierBehaviorAction) { visitor = new fUML.Semantics.Actions.CompleteActions.StartClassifierBehaviorActionActivation(); } if (element instanceof fUML.Syntax.Actions.IntermediateActions.ReadStructuralFeatureAction) { visitor = new fUML.Semantics.Actions.IntermediateActions.ReadStructuralFeatureActionActivation(); } if (element instanceof fUML.Syntax.Activities.CompleteStructuredActivities.ConditionalNode) { visitor = new fUML.Semantics.Activities.CompleteStructuredActivities.ConditionalNodeActivation(); } if (element instanceof fUML.Syntax.Actions.IntermediateActions.ReadSelfAction) { visitor = new fUML.Semantics.Actions.IntermediateActions.ReadSelfActionActivation(); } if (element instanceof fUML.Syntax.Actions.IntermediateActions.DestroyLinkAction) { visitor = new fUML.Semantics.Actions.IntermediateActions.DestroyLinkActionActivation(); } if (element instanceof fUML.Syntax.Activities.CompleteStructuredActivities.StructuredActivityNode) { visitor = new fUML.Semantics.Activities.CompleteStructuredActivities.StructuredActivityNodeActivation(); } if (element instanceof fUML.Syntax.Actions.BasicActions.SendSignalAction) { visitor = new fUML.Semantics.Actions.BasicActions.SendSignalActionActivation(); } if (element instanceof fUML.Syntax.Activities.ExtraStructuredActivities.ExpansionNode) { visitor = new fUML.Semantics.Activities.ExtraStructuredActivities.ExpansionNodeActivation(); } if (element instanceof fUML.Syntax.Actions.IntermediateActions.CreateObjectAction) { visitor = new fUML.Semantics.Actions.IntermediateActions.CreateObjectActionActivation(); } if (element instanceof fUML.Syntax.Actions.IntermediateActions.ReadLinkAction) { visitor = new fUML.Semantics.Actions.IntermediateActions.ReadLinkActionActivation(); } if (element instanceof fUML.Syntax.Actions.IntermediateActions.ClearAssociationAction) { visitor = new fUML.Semantics.Actions.IntermediateActions.ClearAssociationActionActivation(); } if (element instanceof fUML.Syntax.Activities.IntermediateActivities.JoinNode) { visitor = new fUML.Semantics.Activities.IntermediateActivities.JoinNodeActivation(); } if (element instanceof fUML.Syntax.Actions.CompleteActions.ReclassifyObjectAction) { visitor = new fUML.Semantics.Actions.CompleteActions.ReclassifyObjectActionActivation(); } if (element instanceof fUML.Syntax.Activities.IntermediateActivities.InitialNode) { visitor = new fUML.Semantics.Activities.IntermediateActivities.InitialNodeActivation(); } if (element instanceof fUML.Syntax.Actions.CompleteActions.StartObjectBehaviorAction) { visitor = new fUML.Semantics.Actions.CompleteActions.StartObjectBehaviorActionActivation(); } if (element instanceof fUML.Syntax.Actions.CompleteActions.ReadIsClassifiedObjectAction) { visitor = new fUML.Semantics.Actions.CompleteActions.ReadIsClassifiedObjectActionActivation(); } if (element instanceof fUML.Syntax.Actions.BasicActions.CallOperationAction) { visitor = new fUML.Semantics.Actions.BasicActions.CallOperationActionActivation(); } if (element instanceof fUML.Syntax.Actions.BasicActions.CallBehaviorAction) { visitor = new fUML.Semantics.Actions.BasicActions.CallBehaviorActionActivation(); } if (element instanceof fUML.Syntax.Activities.ExtraStructuredActivities.ExpansionRegion) { visitor = new fUML.Semantics.Activities.ExtraStructuredActivities.ExpansionRegionActivation(); } if (element instanceof fUML.Syntax.Actions.IntermediateActions.AddStructuralFeatureValueAction) { visitor = new fUML.Semantics.Actions.IntermediateActions.AddStructuralFeatureValueActionActivation(); } if (element instanceof fUML.Syntax.Activities.IntermediateActivities.ActivityParameterNode) { visitor = new fUML.Semantics.Activities.IntermediateActivities.ActivityParameterNodeActivation(); } if (element instanceof fUML.Syntax.Actions.IntermediateActions.ValueSpecificationAction) { visitor = new fUML.Semantics.Actions.IntermediateActions.ValueSpecificationActionActivation(); } if (element instanceof fUML.Syntax.Activities.IntermediateActivities.ActivityFinalNode) { visitor = new fUML.Semantics.Activities.IntermediateActivities.ActivityFinalNodeActivation(); } if (element instanceof fUML.Syntax.Activities.IntermediateActivities.ForkNode) { visitor = new fUML.Semantics.Activities.IntermediateActivities.ForkNodeActivation(); } if (element instanceof fUML.Syntax.Actions.CompleteActions.AcceptEventAction) { visitor = new fUML.Semantics.Actions.CompleteActions.AcceptEventActionActivation(); } if (element instanceof fUML.Syntax.Activities.CompleteStructuredActivities.LoopNode) { visitor = new fUML.Semantics.Activities.CompleteStructuredActivities.LoopNodeActivation(); } if (element instanceof fUML.Syntax.Activities.IntermediateActivities.DecisionNode) { visitor = new fUML.Semantics.Activities.IntermediateActivities.DecisionNodeActivation(); } if (element instanceof fUML.Syntax.Actions.CompleteActions.ReduceAction) { visitor = new fUML.Semantics.Actions.CompleteActions.ReduceActionActivation(); } if (element instanceof fUML.Syntax.Actions.IntermediateActions.DestroyObjectAction) { visitor = new fUML.Semantics.Actions.IntermediateActions.DestroyObjectActionActivation(); } if (element instanceof fUML.Syntax.Actions.IntermediateActions.ClearStructuralFeatureAction) { visitor = new fUML.Semantics.Actions.IntermediateActions.ClearStructuralFeatureActionActivation(); } if (element instanceof fUML.Syntax.Actions.IntermediateActions.TestIdentityAction) { visitor = new fUML.Semantics.Actions.IntermediateActions.TestIdentityActionActivation(); } if (element instanceof fUML.Syntax.Actions.IntermediateActions.CreateLinkAction) { visitor = new fUML.Semantics.Actions.IntermediateActions.CreateLinkActionActivation(); } if (element instanceof fUML.Syntax.Actions.IntermediateActions.RemoveStructuralFeatureValueAction) { visitor = new fUML.Semantics.Actions.IntermediateActions.RemoveStructuralFeatureValueActionActivation(); } if (element instanceof fUML.Syntax.Activities.IntermediateActivities.MergeNode) { visitor = new fUML.Semantics.Activities.IntermediateActivities.MergeNodeActivation(); } if (element instanceof fUML.Syntax.Actions.CompleteActions.ReadExtentAction) { visitor = new fUML.Semantics.Actions.CompleteActions.ReadExtentActionActivation(); } return visitor; Resolution: The proposed resolution will only work at conformance level 3 (L3). That is because it references classes that are not available at lower conformance levels. Accommodating all three conformance levels requires having a different instantiateVistor implementation for each level. This can be achieved by making ExecutionFactory abstract and added three concrete subclasses, one for each conformance level, each of which appropriately overrides instantiateVisitor. Then an execution environment can be set up for the appropriate conformance level by using an instance of the correct ExecutionFactory subclass for that level. Revised Text: In Subclause 2.1 Conformance Levels: · In the last bullet on page 2 and in the following paragraph, replace "Loci" with "Loci::LociL1". · At the end of the list of bullets on page 3, add a bullet "Loci::LociL2 (semantics only)". · At the end of the list of bullets on page 4, add a bullet "Loci::LociL3 (semantics only)". · Replace the figures with the diagrams given below: Figure 2 - fUML Semantics Level 1 Package Merges Figure 4 - fUML Semantics Level 2 Package Merges Figure 6 - fUML Semantics Level 3 Package Merges In Subclause 8.2.1 Overview: · Replace the first paragraph with: The Loci package includes the model of the key concepts of an execution locus and of the executor that provides the abstract external interface of the execution model. The package has three subpackages corresponding to the three fUML conformance levels (see Subclause 2.1). The subpackage LociL1 contains the majority of the classes. The subpackages LociL2 and LociL3 each contain only a single class, specialized execution factories that are used to instantiate semantic visitor classes corresponding to executable syntactic elements at the corresponding conformance levels (the concept of semantic visitors is discussed in Subclause 8.2.2.1 below). Figure 51 shows the dependencies of the Loci packages on other packages. · Replace the figure with: Figure 51 - Loci Semantics Packages · After Figure 51, before the heading "The Executor and the Execution Locus", add: 8.2.2 LociL1 8.2.2.1 Overview The LociL1 package contains the majority of the model related to execution loci (see Figure 52). It also includes an execution factory for instantiating semantic visitors for executable syntactic elements at fUML conformance level 1. The execution factory is extended for conformance levels 2 and 3 in the packages LociL2 and LociL3 (see Subclauses 8.2.3 and 8.2.4). · At the end of the section on "Visitor Classes and the Execution Factory", before the heading "Strategy Classes and Semantic Variation Points", add the paragraph: All three types of visitor classes are ultimately instantiated using the instantiateVisitor operation of the ExecutionFactory class. This operation is actually abstract in the ExecutionFactory base class, with concrete methods for it provided in subclasses of ExecutionFactory. The LociL1 package includes the concrete ExecutionFactoryL1 class, which provides a method for instantiateVisitor that only handles the instantiation of visitors for the relevant syntactic elements found at fUML Conformance Level 1. Further extensions for higher conformance levels are provided in packages LociL2 and LociL3 (see Subclauses 8.2.3 and 8.2.4). In Figure 52, show the class ExecutionFactory and its operation instantiateVistor as being abstract (italicized). Add the following figure: Figure 53 Execution Factory for L1 Renumber Subclause 8.2.2 Class Descriptions as 8.2.2.2, and renumber its subclauses correspondingly. In (renumbered) Subclause 8.2.2.2.2 ExecutionFactory: · In the operation createEvaluation, replace the first statement with: Evaluation evaluation = (Evaluation)this.instantiateVisitor(specification); · In the operation createExecution, replace the statement: execution = (Execution)(this.instantiateVisitor(behavior, "Execution")); with: execution = (Execution)this.instantiateVisitor(behavior); · Replace the operation instantiateVistor(in element: Element, in suffix: String): SemanticVisitor with: [9] instantiateVisitor(in element: Element): SemanticVisitor Instantiate a visitor object for the given element. Add the following subclause: 8.2.2.2.3 ExecutionFactoryL1 An execution factory is used to create objects that represent the execution of a behavior, the evaluation of a value specification or the activation of an activity node. This class only handles elements available at Conformance Level 1. Generalizations ExecutionFactory Attributes None Associations None Operations [1] instantiateVisitor(in element: Element): SemanticVisitor // Instantiate a visitor object for the given element (at Conformance Level 1) SemanticVisitor visitor = null; if (element instanceof LiteralBoolean) { visitor = new LiteralBooleanEvaluation(); } else if (element instanceof fUML.Syntax.Classes.Kernel.LiteralString) { visitor = new LiteralStringEvaluation(); } else if (element instanceof fUML.Syntax.Classes.Kernel.LiteralNull) { visitor = new LiteralNullEvaluation(); } else if (element instanceof fUML.Syntax.Classes.Kernel.InstanceValue) { visitor = new InstanceValueEvaluation(); } else if (element instanceof fUML.Syntax.Classes.Kernel.LiteralUnlimitedNatural) { visitor = new LiteralUnlimitedNaturalEvaluation(); } else if (element instanceof fUML.Syntax.Classes.Kernel.LiteralInteger) { visitor = new LiteralIntegerEvaluation(); } return visitor; After the (renumbered) Subclause 8.2.2.2, add the following subclauses: 8.2.3 LociL2 8.2.3.1 Overview As shown in Figure 54, the LociL2 package contains the class ExecutionFactoryL2, which provides for the instantiation of semantic visitors for all appropriate syntactic elements at Conformance Level 2. Figure 54 - Execution Factory for L2 8.2.3.2 Class Descriptions 8.2.3.2.1 ExecutionFactoryL2 An execution factory is used to create objects that represent the execution of a behavior, the evaluation of a value specification or the activation of an activity node. This class only handles elements available at Conformance Level 2. Generalizations ExecutionFactoryL1 Attributes None Associations None Operations [1] instantiateVisitor(in element: Element): SemanticVisitor // Instantiate a visitor object for the given element (at Conformance Level 2) SemanticVisitor visitor = null; if (element instanceof Activity) { visitor = new ActivityExecution(); } else if (element instanceof ActivityParameterNode) { visitor = new ActivityParameterNodeActivation(); } else if (element instanceof InitialNode) { visitor = new InitialNodeActivation(); } else if (element instanceof ActivityFinalNode) { visitor = new ActivityFinalNodeActivation(); } else if (element instanceof JoinNode) { visitor = new JoinNodeActivation(); } else if (element instanceof MergeNode) { visitor = new MergeNodeActivation(); } else if (element instanceof ForkNode) { visitor = new ForkNodeActivation(); } else if (element instanceof DecisionNode) { visitor = new DecisionNodeActivation(); } else if (element instanceof InputPin) { visitor = new InputPinActivation(); } else if (element instanceof OutputPin) { visitor = new OutputPinActivation(); } else if (element instanceof CallBehaviorAction) { visitor = new CallBehaviorActionActivation(); } else if (element instanceof CallOperationAction) { visitor = new CallOperationActionActivation(); } else if (element instanceof SendSignalAction) { visitor = new SendSignalActionActivation(); } else if (element instanceof ReadSelfAction) { visitor = new ReadSelfActionActivation(); } else if (element instanceof TestIdentityAction) { visitor = new TestIdentityActionActivation(); } else if (element instanceof ValueSpecificationAction) { visitor = new ValueSpecificationActionActivation(); } else if (element instanceof CreateObjectAction) { visitor = new CreateObjectActionActivation(); } else if (element instanceof DestroyObjectAction) { visitor = new DestroyObjectActionActivation(); } else if (element instanceof ReadStructuralFeatureAction) { visitor = new ReadStructuralFeatureActionActivation(); } else if (element instanceof ClearStructuralFeatureAction) { visitor = new ClearStructuralFeatureActionActivation(); } else if (element instanceof AddStructuralFeatureValueAction) { visitor = new AddStructuralFeatureValueActionActivation(); } else if (element instanceof RemoveStructuralFeatureValueAction) { visitor = new RemoveStructuralFeatureValueActionActivation(); } else if (element instanceof ReadLinkAction) { visitor = new ReadLinkActionActivation(); } else if (element instanceof ClearAssociationAction) { visitor = new ClearAssociationActionActivation(); } else if (element instanceof CreateLinkAction) { visitor = new CreateLinkActionActivation(); } else if (element instanceof DestroyLinkAction) { visitor = new DestroyLinkActionActivation(); } else { visitor = super.instantiateVisitor(element); } return visitor; 8.2.4 LociL3 8.2.4.1 Overview As shown in Figure 55, the LociL3 package contains the class ExecutionFactoryL3, which provides for the instantiation of semantic visitors for all appropriate syntactic elements at Conformance Level 3. Figure 55 - Execution Factory for L3 8.2.4.2 Class Descriptions 8.2.4.2.1 ExecutionFactoryL3 An execution factory is used to create objects that represent the execution of a behavior, the evaluation of a value specification or the activation of an activity node. This class only handles elements available at Conformance Level 3. Generalizations ExecutionFactoryL2 Attributes None Associations None Operations [1] instantiateVisitor(in element: Element): SemanticVisitor // Instantiate a visitor object for the given element (at Conformance Level 3) SemanticVisitor visitor = null; if (element instanceof ConditionalNode) { visitor = new ConditionalNodeActivation(); } else if (element instanceof LoopNode) { visitor = new LoopNodeActivation(); } else if (element instanceof ExpansionRegion) { visitor = new ExpansionRegionActivation(); } // Note: Since ConditionalNode, LoopNode and ExpansionRegion are subclasses of // StructuredActivityNode, element must be tested against the three subclasses before // the superclass else if (element instanceof StructuredActivityNode) { visitor = new StructuredActivityNodeActivation(); } else if (element instanceof ExpansionNode) { visitor = new ExpansionNodeActivation(); } else if (element instanceof ReadExtentAction) { visitor = new ReadExtentActionActivation(); } else if (element instanceof ReadIsClassifiedObjectAction) { visitor = new ReadIsClassifiedObjectActionActivation(); } else if (element instanceof ReclassifyObjectAction) { visitor = new ReclassifyObjectActionActivation(); } else if (element instanceof StartObjectBehaviorAction) { visitor = new StartObjectBehaviorActionActivation(); } else if (element instanceof StartClassifierBehaviorAction) { visitor = new StartClassifierBehaviorActionActivation(); } else if (element instanceof AcceptEventAction) { visitor = new AcceptEventActionActivation(); } else if (element instanceof ReduceAction) { visitor = new ReduceActionActivation(); } else { visitor = super.instantiateVisitor(element); } return visitor; Actions taken: February 6, 2009: received issue July 23, 2010: closed issue Discussion: End of Annotations:===== ubject: ExecutionFactory::instantiateVisitor should not use Java reflection Date: Fri, 6 Feb 2009 15:40:23 -0500 X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: ExecutionFactory::instantiateVisitor should not use Java reflection thread-index: AcmImyJOhWHwyc8jTsOQPbdP4wV7Ag== From: "Ed Seidewitz" To: Specification: Semantics of a Foundation Subset for Executable UML Models, FTF . Beta 1 (ptc/08-11-03) Section: 8.2.2.2 ExecutionFactory Summary: The ExecutionFactory::instantiateVisitor operation currently uses Java reflection to instantiate an appropriate visitor class. However, there is no Annex A mapping for this. Proposed Resolution: Remove the .suffix. parameter from the signature for instantiateVisitor and update the calls in ExecutionFactory::createExecution, ExecutionFactory::createEvaluation and ActivityNodeActivationGroup::createNodeActivation to remove the corresponding second argument. Replace the body of instantiateVistor with: // Instantiate a visitor object for the given element. SemanticVisitor visitor = null; if (element instanceof fUML.Syntax.Classes.Kernel.LiteralBoolean) { visitor = new fUML.Semantics.Classes.Kernel.LiteralBooleanEvaluation(); } if (element instanceof fUML.Syntax.Classes.Kernel.LiteralString) { visitor = new fUML.Semantics.Classes.Kernel.LiteralStringEvaluation(); } if (element instanceof fUML.Syntax.Classes.Kernel.LiteralNull) { visitor = new fUML.Semantics.Classes.Kernel.LiteralNullEvaluation(); } if (element instanceof fUML.Syntax.Classes.Kernel.InstanceValue) { visitor = new fUML.Semantics.Classes.Kernel.InstanceValueEvaluation(); } if (element instanceof fUML.Syntax.Classes.Kernel.LiteralUnlimitedNatural) { visitor = new fUML.Semantics.Classes.Kernel.LiteralUnlimitedNaturalEvaluation(); } if (element instanceof fUML.Syntax.Classes.Kernel.LiteralInteger) { visitor = new fUML.Semantics.Classes.Kernel.LiteralIntegerEvaluation(); } if (element instanceof fUML.Syntax.Activities.IntermediateActivities.Activity) { visitor = new fUML.Semantics.Activities.IntermediateActivities.ActivityExecution(); } if (element instanceof fUML.Syntax.Actions.BasicActions.OutputPin) { visitor = new fUML.Semantics.Actions.BasicActions.OutputPinActivation(); } if (element instanceof fUML.Syntax.Actions.BasicActions.InputPin) { visitor = new fUML.Semantics.Actions.BasicActions.InputPinActivation(); } if (element instanceof fUML.Syntax.Actions.CompleteActions.StartClassifierBehaviorAction) { visitor = new fUML.Semantics.Actions.CompleteActions.StartClassifierBehaviorActionActivation(); } if (element instanceof fUML.Syntax.Actions.IntermediateActions.ReadStructuralFeatureAction) { visitor = new fUML.Semantics.Actions.IntermediateActions.ReadStructuralFeatureActionActivation(); } if (element instanceof fUML.Syntax.Activities.CompleteStructuredActivities.ConditionalNode) { visitor = new fUML.Semantics.Activities.CompleteStructuredActivities.ConditionalNodeActivation(); } if (element instanceof fUML.Syntax.Actions.IntermediateActions.ReadSelfAction) { visitor = new fUML.Semantics.Actions.IntermediateActions.ReadSelfActionActivation(); } if (element instanceof fUML.Syntax.Actions.IntermediateActions.DestroyLinkAction) { visitor = new fUML.Semantics.Actions.IntermediateActions.DestroyLinkActionActivation(); } if (element instanceof fUML.Syntax.Activities.CompleteStructuredActivities.StructuredActivityNode) { visitor = new fUML.Semantics.Activities.CompleteStructuredActivities.StructuredActivityNodeActivation(); } if (element instanceof fUML.Syntax.Actions.BasicActions.SendSignalAction) { visitor = new fUML.Semantics.Actions.BasicActions.SendSignalActionActivation(); } if (element instanceof fUML.Syntax.Activities.ExtraStructuredActivities.ExpansionNode) { visitor = new fUML.Semantics.Activities.ExtraStructuredActivities.ExpansionNodeActivation(); } if (element instanceof fUML.Syntax.Actions.IntermediateActions.CreateObjectAction) { visitor = new fUML.Semantics.Actions.IntermediateActions.CreateObjectActionActivation(); } if (element instanceof fUML.Syntax.Actions.IntermediateActions.ReadLinkAction) { visitor = new fUML.Semantics.Actions.IntermediateActions.ReadLinkActionActivation(); } if (element instanceof fUML.Syntax.Actions.IntermediateActions.ClearAssociationAction) { visitor = new fUML.Semantics.Actions.IntermediateActions.ClearAssociationActionActivation(); } if (element instanceof fUML.Syntax.Activities.IntermediateActivities.JoinNode) { visitor = new fUML.Semantics.Activities.IntermediateActivities.JoinNodeActivation(); } if (element instanceof fUML.Syntax.Actions.CompleteActions.ReclassifyObjectAction) { visitor = new fUML.Semantics.Actions.CompleteActions.ReclassifyObjectActionActivation(); } if (element instanceof fUML.Syntax.Activities.IntermediateActivities.InitialNode) { visitor = new fUML.Semantics.Activities.IntermediateActivities.InitialNodeActivation(); } if (element instanceof fUML.Syntax.Actions.CompleteActions.StartObjectBehaviorAction) { visitor = new fUML.Semantics.Actions.CompleteActions.StartObjectBehaviorActionActivation(); } if (element instanceof fUML.Syntax.Actions.CompleteActions.ReadIsClassifiedObjectAction) { visitor = new fUML.Semantics.Actions.CompleteActions.ReadIsClassifiedObjectActionActivation(); } if (element instanceof fUML.Syntax.Actions.BasicActions.CallOperationAction) { visitor = new fUML.Semantics.Actions.BasicActions.CallOperationActionActivation(); } if (element instanceof fUML.Syntax.Actions.BasicActions.CallBehaviorAction) { visitor = new fUML.Semantics.Actions.BasicActions.CallBehaviorActionActivation(); } if (element instanceof fUML.Syntax.Activities.ExtraStructuredActivities.ExpansionRegion) { visitor = new fUML.Semantics.Activities.ExtraStructuredActivities.ExpansionRegionActivation(); } if (element instanceof fUML.Syntax.Actions.IntermediateActions.AddStructuralFeatureValueAction) { visitor = new fUML.Semantics.Actions.IntermediateActions.AddStructuralFeatureValueActionActivation(); } if (element instanceof fUML.Syntax.Activities.IntermediateActivities.ActivityParameterNode) { visitor = new fUML.Semantics.Activities.IntermediateActivities.ActivityParameterNodeActivation(); } if (element instanceof fUML.Syntax.Actions.IntermediateActions.ValueSpecificationAction) { visitor = new fUML.Semantics.Actions.IntermediateActions.ValueSpecificationActionActivation(); } if (element instanceof fUML.Syntax.Activities.IntermediateActivities.ActivityFinalNode) { visitor = new fUML.Semantics.Activities.IntermediateActivities.ActivityFinalNodeActivation(); } if (element instanceof fUML.Syntax.Activities.IntermediateActivities.ForkNode) { visitor = new fUML.Semantics.Activities.IntermediateActivities.ForkNodeActivation(); } if (element instanceof fUML.Syntax.Actions.CompleteActions.AcceptEventAction) { visitor = new fUML.Semantics.Actions.CompleteActions.AcceptEventActionActivation(); } if (element instanceof fUML.Syntax.Activities.CompleteStructuredActivities.LoopNode) { visitor = new fUML.Semantics.Activities.CompleteStructuredActivities.LoopNodeActivation(); } if (element instanceof fUML.Syntax.Activities.IntermediateActivities.DecisionNode) { visitor = new fUML.Semantics.Activities.IntermediateActivities.DecisionNodeActivation(); } if (element instanceof fUML.Syntax.Actions.CompleteActions.ReduceAction) { visitor = new fUML.Semantics.Actions.CompleteActions.ReduceActionActivation(); } if (element instanceof fUML.Syntax.Actions.IntermediateActions.DestroyObjectAction) { visitor = new fUML.Semantics.Actions.IntermediateActions.DestroyObjectActionActivation(); } if (element instanceof fUML.Syntax.Actions.IntermediateActions.ClearStructuralFeatureAction) { visitor = new fUML.Semantics.Actions.IntermediateActions.ClearStructuralFeatureActionActivation(); } if (element instanceof fUML.Syntax.Actions.IntermediateActions.TestIdentityAction) { visitor = new fUML.Semantics.Actions.IntermediateActions.TestIdentityActionActivation(); } if (element instanceof fUML.Syntax.Actions.IntermediateActions.CreateLinkAction) { visitor = new fUML.Semantics.Actions.IntermediateActions.CreateLinkActionActivation(); } if (element instanceof fUML.Syntax.Actions.IntermediateActions.RemoveStructuralFeatureValueAction) { visitor = new fUML.Semantics.Actions.IntermediateActions.RemoveStructuralFeatureValueActionActivation(); } if (element instanceof fUML.Syntax.Activities.IntermediateActivities.MergeNode) { visitor = new fUML.Semantics.Activities.IntermediateActivities.MergeNodeActivation(); } if (element instanceof fUML.Syntax.Actions.CompleteActions.ReadExtentAction) { visitor = new fUML.Semantics.Actions.CompleteActions.ReadExtentActionActivation(); } return visitor;