diff options
Diffstat (limited to 'plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel')
9 files changed, 273 insertions, 212 deletions
diff --git a/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/RoomGenmodelValidator.java b/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/RoomGenmodelValidator.java index 142917c15..e8492bc73 100644 --- a/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/RoomGenmodelValidator.java +++ b/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/RoomGenmodelValidator.java @@ -24,8 +24,8 @@ import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.etrice.core.common.validation.ICustomValidator; import org.eclipse.etrice.core.genmodel.builder.GeneratorModelBuilder; -import org.eclipse.etrice.core.genmodel.fsm.base.NullLogger; -import org.eclipse.etrice.core.genmodel.fsm.fsmgen.IDiagnostician; +import org.eclipse.etrice.core.genmodel.fsm.IDiagnostician; +import org.eclipse.etrice.core.genmodel.fsm.NullLogger; import org.eclipse.etrice.core.room.RoomModel; import org.eclipse.etrice.core.room.RoomPackage; import org.eclipse.xtext.validation.CheckMode; diff --git a/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/builder/BindingUtil.java b/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/builder/BindingUtil.java index 6d3330305..bbf1d9050 100644 --- a/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/builder/BindingUtil.java +++ b/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/builder/BindingUtil.java @@ -26,7 +26,7 @@ import org.eclipse.etrice.core.genmodel.etricegen.PortInstance; import org.eclipse.etrice.core.genmodel.etricegen.PortKind; import org.eclipse.etrice.core.genmodel.etricegen.StructureInstance; import org.eclipse.etrice.core.genmodel.etricegen.SubSystemInstance; -import org.eclipse.etrice.core.genmodel.fsm.fsmgen.IDiagnostician; +import org.eclipse.etrice.core.genmodel.fsm.IDiagnostician; import org.eclipse.etrice.core.room.ActorClass; import org.eclipse.etrice.core.room.ActorContainerRef; import org.eclipse.etrice.core.room.ActorRef; diff --git a/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/builder/GeneratorModelBuilder.java b/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/builder/GeneratorModelBuilder.java index 19c1002d7..aa84d3e58 100644 --- a/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/builder/GeneratorModelBuilder.java +++ b/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/builder/GeneratorModelBuilder.java @@ -26,6 +26,7 @@ import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.TreeIterator; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.etrice.core.RoomStandaloneSetup; import org.eclipse.etrice.core.genmodel.etricegen.AbstractInstance; import org.eclipse.etrice.core.genmodel.etricegen.ActorInstance; import org.eclipse.etrice.core.genmodel.etricegen.ActorInterfaceInstance; @@ -47,8 +48,10 @@ import org.eclipse.etrice.core.genmodel.etricegen.SubSystemInstance; import org.eclipse.etrice.core.genmodel.etricegen.SystemInstance; import org.eclipse.etrice.core.genmodel.etricegen.impl.AbstractInstanceImpl; import org.eclipse.etrice.core.genmodel.etricegen.impl.StructureInstanceImpl; -import org.eclipse.etrice.core.genmodel.fsm.base.ILogger; -import org.eclipse.etrice.core.genmodel.fsm.fsmgen.IDiagnostician; +import org.eclipse.etrice.core.genmodel.fsm.ExtendedFsmGenBuilder; +import org.eclipse.etrice.core.genmodel.fsm.IDiagnostician; +import org.eclipse.etrice.core.genmodel.fsm.ILogger; +import org.eclipse.etrice.core.genmodel.fsm.fsmgen.GraphContainer; import org.eclipse.etrice.core.room.ActorClass; import org.eclipse.etrice.core.room.ActorContainerClass; import org.eclipse.etrice.core.room.ActorContainerRef; @@ -74,6 +77,8 @@ import org.eclipse.etrice.core.room.SubSystemClass; import org.eclipse.etrice.core.room.SubSystemRef; import org.eclipse.etrice.core.room.util.RoomHelpers; +import com.google.inject.Injector; + /** * A class for the creation of an intermediate model combining all information needed by * the code generator. @@ -1256,9 +1261,13 @@ public class GeneratorModelBuilder { +" of "+((RoomModel)ac.eContainer()).getName()); ExpandedActorClass xpac = ETriceGenFactory.eINSTANCE.createExpandedActorClass(); - xpac.setModelComponent(ac); - - xpac.prepare(diagnostician); + Injector injector = new RoomStandaloneSetup().createInjectorAndDoEMFRegistration(); + ExtendedFsmGenBuilder builder = new ExtendedFsmGenBuilder(injector, diagnostician); + GraphContainer gc = builder.createTransformedModel(ac); + builder.withChainHeads(gc); + builder.withCommonData(gc); + builder.withTriggersInStates(gc); + xpac.setGraphContainer(gc); return xpac; } diff --git a/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/etricegen/ETriceGenPackage.java b/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/etricegen/ETriceGenPackage.java index b43db7179..b1d782965 100644 --- a/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/etricegen/ETriceGenPackage.java +++ b/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/etricegen/ETriceGenPackage.java @@ -16,7 +16,6 @@ import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EEnum; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.EReference; -import org.eclipse.etrice.core.genmodel.fsm.fsmgen.FsmGenPackage; /** * <!-- begin-user-doc --> @@ -2061,40 +2060,22 @@ public interface ETriceGenPackage extends EPackage { int WIRED_SUB_SYSTEM_CLASS_FEATURE_COUNT = WIRED_STRUCTURE_CLASS_FEATURE_COUNT + 1; /** - * The feature id for the '<em><b>Model Component</b></em>' reference. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - * @ordered - */ - int EXPANDED_ACTOR_CLASS__MODEL_COMPONENT = FsmGenPackage.EXPANDED_MODEL_COMPONENT__MODEL_COMPONENT; - - /** - * The feature id for the '<em><b>State Machine</b></em>' containment reference. + * The feature id for the '<em><b>Actor Class</b></em>' reference. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated * @ordered */ - int EXPANDED_ACTOR_CLASS__STATE_MACHINE = FsmGenPackage.EXPANDED_MODEL_COMPONENT__STATE_MACHINE; + int EXPANDED_ACTOR_CLASS__ACTOR_CLASS = 0; /** - * The feature id for the '<em><b>Transition Chains</b></em>' containment reference list. + * The feature id for the '<em><b>Graph Container</b></em>' containment reference. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated * @ordered */ - int EXPANDED_ACTOR_CLASS__TRANSITION_CHAINS = FsmGenPackage.EXPANDED_MODEL_COMPONENT__TRANSITION_CHAINS; - - /** - * The feature id for the '<em><b>Actor Class</b></em>' reference. - * <!-- begin-user-doc --> - * <!-- end-user-doc --> - * @generated - * @ordered - */ - int EXPANDED_ACTOR_CLASS__ACTOR_CLASS = FsmGenPackage.EXPANDED_MODEL_COMPONENT_FEATURE_COUNT + 0; + int EXPANDED_ACTOR_CLASS__GRAPH_CONTAINER = 1; /** * The number of structural features of the '<em>Expanded Actor Class</em>' class. @@ -2103,7 +2084,7 @@ public interface ETriceGenPackage extends EPackage { * @generated * @ordered */ - int EXPANDED_ACTOR_CLASS_FEATURE_COUNT = FsmGenPackage.EXPANDED_MODEL_COMPONENT_FEATURE_COUNT + 1; + int EXPANDED_ACTOR_CLASS_FEATURE_COUNT = 2; /** * The meta object id for the '{@link org.eclipse.etrice.core.genmodel.etricegen.PortKind <em>Port Kind</em>}' enum. @@ -2936,6 +2917,17 @@ public interface ETriceGenPackage extends EPackage { EReference getExpandedActorClass_ActorClass(); /** + * Returns the meta object for the containment reference '{@link org.eclipse.etrice.core.genmodel.etricegen.ExpandedActorClass#getGraphContainer <em>Graph Container</em>}'. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @return the meta object for the containment reference '<em>Graph Container</em>'. + * @see org.eclipse.etrice.core.genmodel.etricegen.ExpandedActorClass#getGraphContainer() + * @see #getExpandedActorClass() + * @generated + */ + EReference getExpandedActorClass_GraphContainer(); + + /** * Returns the meta object for class '{@link org.eclipse.etrice.core.genmodel.etricegen.WiredStructureClass <em>Wired Structure Class</em>}'. * <!-- begin-user-doc --> * <!-- end-user-doc --> @@ -3813,6 +3805,14 @@ public interface ETriceGenPackage extends EPackage { EReference EXPANDED_ACTOR_CLASS__ACTOR_CLASS = eINSTANCE.getExpandedActorClass_ActorClass(); /** + * The meta object literal for the '<em><b>Graph Container</b></em>' containment reference feature. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + EReference EXPANDED_ACTOR_CLASS__GRAPH_CONTAINER = eINSTANCE.getExpandedActorClass_GraphContainer(); + + /** * The meta object literal for the '{@link org.eclipse.etrice.core.genmodel.etricegen.impl.WiredStructureClassImpl <em>Wired Structure Class</em>}' class. * <!-- begin-user-doc --> * <!-- end-user-doc --> diff --git a/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/etricegen/ExpandedActorClass.java b/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/etricegen/ExpandedActorClass.java index 980dfc04c..92082868d 100644 --- a/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/etricegen/ExpandedActorClass.java +++ b/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/etricegen/ExpandedActorClass.java @@ -12,10 +12,10 @@ package org.eclipse.etrice.core.genmodel.etricegen; -import org.eclipse.etrice.core.fsm.fSM.Transition; -import org.eclipse.etrice.core.genmodel.fsm.fsmgen.ExpandedModelComponent; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.etrice.core.fsm.fSM.AbstractInterfaceItem; +import org.eclipse.etrice.core.genmodel.fsm.fsmgen.GraphContainer; import org.eclipse.etrice.core.room.ActorClass; -import org.eclipse.etrice.core.room.VarDecl; /** * <!-- begin-user-doc --> @@ -29,13 +29,14 @@ import org.eclipse.etrice.core.room.VarDecl; * </p> * <ul> * <li>{@link org.eclipse.etrice.core.genmodel.etricegen.ExpandedActorClass#getActorClass <em>Actor Class</em>}</li> + * <li>{@link org.eclipse.etrice.core.genmodel.etricegen.ExpandedActorClass#getGraphContainer <em>Graph Container</em>}</li> * </ul> * * @see org.eclipse.etrice.core.genmodel.etricegen.ETriceGenPackage#getExpandedActorClass() * @model * @generated */ -public interface ExpandedActorClass extends ExpandedModelComponent { +public interface ExpandedActorClass extends EObject { /** * Returns the value of the '<em><b>Actor Class</b></em>' reference. * <!-- begin-user-doc --> @@ -51,11 +52,37 @@ public interface ExpandedActorClass extends ExpandedModelComponent { ActorClass getActorClass(); /** + * Returns the value of the '<em><b>Graph Container</b></em>' containment reference. + * <!-- begin-user-doc --> + * <p> + * If the meaning of the '<em>Graph Container</em>' containment reference isn't clear, + * there really should be more of a description here... + * </p> + * <!-- end-user-doc --> + * @return the value of the '<em>Graph Container</em>' containment reference. + * @see #setGraphContainer(GraphContainer) + * @see org.eclipse.etrice.core.genmodel.etricegen.ETriceGenPackage#getExpandedActorClass_GraphContainer() + * @model containment="true" + * @generated + */ + GraphContainer getGraphContainer(); + + /** + * Sets the value of the '{@link org.eclipse.etrice.core.genmodel.etricegen.ExpandedActorClass#getGraphContainer <em>Graph Container</em>}' containment reference. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @param value the new value of the '<em>Graph Container</em>' containment reference. + * @see #getGraphContainer() + * @generated + */ + void setGraphContainer(GraphContainer value); + + /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @model * @generated */ - VarDecl getVarDeclData(Transition trans); + int getInterfaceItemLocalId(AbstractInterfaceItem ifitem); } // ExpandedActorClass diff --git a/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/etricegen/impl/ETriceGenPackageImpl.java b/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/etricegen/impl/ETriceGenPackageImpl.java index ff18bb954..a9497b38b 100644 --- a/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/etricegen/impl/ETriceGenPackageImpl.java +++ b/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/etricegen/impl/ETriceGenPackageImpl.java @@ -978,6 +978,15 @@ public class ETriceGenPackageImpl extends EPackageImpl implements ETriceGenPacka * <!-- end-user-doc --> * @generated */ + public EReference getExpandedActorClass_GraphContainer() { + return (EReference)expandedActorClassEClass.getEStructuralFeatures().get(1); + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ public EClass getWiredStructureClass() { return wiredStructureClassEClass; } @@ -1298,6 +1307,7 @@ public class ETriceGenPackageImpl extends EPackageImpl implements ETriceGenPacka expandedActorClassEClass = createEClass(EXPANDED_ACTOR_CLASS); createEReference(expandedActorClassEClass, EXPANDED_ACTOR_CLASS__ACTOR_CLASS); + createEReference(expandedActorClassEClass, EXPANDED_ACTOR_CLASS__GRAPH_CONTAINER); // Create enums portKindEEnum = createEEnum(PORT_KIND); @@ -1350,7 +1360,6 @@ public class ETriceGenPackageImpl extends EPackageImpl implements ETriceGenPacka serviceImplInstanceEClass.getESuperTypes().add(this.getInterfaceItemInstance()); wiredActorClassEClass.getESuperTypes().add(this.getWiredStructureClass()); wiredSubSystemClassEClass.getESuperTypes().add(this.getWiredStructureClass()); - expandedActorClassEClass.getESuperTypes().add(theFsmGenPackage.getExpandedModelComponent()); // Initialize classes and features; add operations and parameters initEClass(rootEClass, Root.class, "Root", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); @@ -1512,9 +1521,10 @@ public class ETriceGenPackageImpl extends EPackageImpl implements ETriceGenPacka initEClass(expandedActorClassEClass, ExpandedActorClass.class, "ExpandedActorClass", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEReference(getExpandedActorClass_ActorClass(), theRoomPackage.getActorClass(), null, "actorClass", null, 0, 1, ExpandedActorClass.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED); + initEReference(getExpandedActorClass_GraphContainer(), theFsmGenPackage.getGraphContainer(), null, "graphContainer", null, 0, 1, ExpandedActorClass.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); - op = addEOperation(expandedActorClassEClass, theRoomPackage.getVarDecl(), "getVarDeclData", 0, 1, IS_UNIQUE, IS_ORDERED); - addEParameter(op, theFSMPackage.getTransition(), "trans", 0, 1, IS_UNIQUE, IS_ORDERED); + op = addEOperation(expandedActorClassEClass, ecorePackage.getEInt(), "getInterfaceItemLocalId", 0, 1, IS_UNIQUE, IS_ORDERED); + addEParameter(op, theFSMPackage.getAbstractInterfaceItem(), "ifitem", 0, 1, IS_UNIQUE, IS_ORDERED); // Initialize enums and add enum literals initEEnum(portKindEEnum, PortKind.class, "PortKind"); diff --git a/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/etricegen/impl/ExpandedActorClassImpl.java b/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/etricegen/impl/ExpandedActorClassImpl.java index dd5a909b0..838a0eb99 100644 --- a/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/etricegen/impl/ExpandedActorClassImpl.java +++ b/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/etricegen/impl/ExpandedActorClassImpl.java @@ -11,33 +11,21 @@ */ package org.eclipse.etrice.core.genmodel.etricegen.impl; -import java.util.ArrayList; +import java.util.HashMap; -import org.eclipse.emf.common.util.BasicEList; +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.common.notify.NotificationChain; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EClass; -import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.InternalEObject; +import org.eclipse.emf.ecore.impl.ENotificationImpl; +import org.eclipse.emf.ecore.impl.EObjectImpl; import org.eclipse.etrice.core.fsm.fSM.AbstractInterfaceItem; -import org.eclipse.etrice.core.fsm.fSM.FSMPackage; -import org.eclipse.etrice.core.fsm.fSM.MessageFromIf; -import org.eclipse.etrice.core.fsm.fSM.Transition; -import org.eclipse.etrice.core.fsm.fSM.Trigger; -import org.eclipse.etrice.core.fsm.fSM.TriggeredTransition; +import org.eclipse.etrice.core.fsm.fSM.ModelComponent; import org.eclipse.etrice.core.genmodel.etricegen.ETriceGenPackage; import org.eclipse.etrice.core.genmodel.etricegen.ExpandedActorClass; -import org.eclipse.etrice.core.genmodel.fsm.fsmgen.TransitionChain; -import org.eclipse.etrice.core.genmodel.fsm.fsmgen.impl.ExpandedModelComponentImpl; +import org.eclipse.etrice.core.genmodel.fsm.fsmgen.GraphContainer; import org.eclipse.etrice.core.room.ActorClass; -import org.eclipse.etrice.core.room.InterfaceItem; -import org.eclipse.etrice.core.room.Message; -import org.eclipse.etrice.core.room.Port; -import org.eclipse.etrice.core.room.RefableType; -import org.eclipse.etrice.core.room.RoomFactory; -import org.eclipse.etrice.core.room.SAP; -import org.eclipse.etrice.core.room.SPP; -import org.eclipse.etrice.core.room.VarDecl; -import org.eclipse.etrice.core.room.util.RoomHelpers; /** * <!-- begin-user-doc --> @@ -48,15 +36,24 @@ import org.eclipse.etrice.core.room.util.RoomHelpers; * </p> * <ul> * <li>{@link org.eclipse.etrice.core.genmodel.etricegen.impl.ExpandedActorClassImpl#getActorClass <em>Actor Class</em>}</li> + * <li>{@link org.eclipse.etrice.core.genmodel.etricegen.impl.ExpandedActorClassImpl#getGraphContainer <em>Graph Container</em>}</li> * </ul> * * @generated */ -public class ExpandedActorClassImpl extends ExpandedModelComponentImpl implements ExpandedActorClass { - - private RoomHelpers roomHelpers = new RoomHelpers(); +public class ExpandedActorClassImpl extends EObjectImpl implements ExpandedActorClass { /** + * The cached value of the '{@link #getGraphContainer() <em>Graph Container</em>}' containment reference. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @see #getGraphContainer() + * @generated + * @ordered + */ + protected GraphContainer graphContainer; + + /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated @@ -91,16 +88,16 @@ public class ExpandedActorClassImpl extends ExpandedModelComponentImpl implement * @generated NOT */ public ActorClass basicGetActorClass() { - return (ActorClass) getModelComponent(); + return (ActorClass) getGraphContainer().getComponent(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> - * @generated NOT + * @generated */ - public VarDecl getVarDeclData(Transition trans) { - return (VarDecl) getData(trans); + public GraphContainer getGraphContainer() { + return graphContainer; } /** @@ -108,14 +105,37 @@ public class ExpandedActorClassImpl extends ExpandedModelComponentImpl implement * <!-- end-user-doc --> * @generated */ - @Override - public Object eGet(int featureID, boolean resolve, boolean coreType) { - switch (featureID) { - case ETriceGenPackage.EXPANDED_ACTOR_CLASS__ACTOR_CLASS: - if (resolve) return getActorClass(); - return basicGetActorClass(); + public NotificationChain basicSetGraphContainer(GraphContainer newGraphContainer, NotificationChain msgs) { + GraphContainer oldGraphContainer = graphContainer; + graphContainer = newGraphContainer; + if (eNotificationRequired()) { + ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ETriceGenPackage.EXPANDED_ACTOR_CLASS__GRAPH_CONTAINER, oldGraphContainer, newGraphContainer); + if (msgs == null) msgs = notification; else msgs.add(notification); } - return super.eGet(featureID, resolve, coreType); + return msgs; + } + + /** + * we maintain a map of local IDs for interface items + */ + private HashMap<AbstractInterfaceItem, Integer> ifitem2localId; + + /** + * the recursive computation of the local IDs of interface items + */ + private int computeInterfaceItemLocalIds(ModelComponent mc, int offset) { + if (mc.getBase()!=null) { + // first recurse into base class + offset = computeInterfaceItemLocalIds(mc.getBase(), offset); + } + + EList<AbstractInterfaceItem> items = mc.getAbstractInterfaceItems(); + for (AbstractInterfaceItem item : items) { + ifitem2localId.put(item, offset); + ++offset; + } + + return offset; } /** @@ -123,128 +143,113 @@ public class ExpandedActorClassImpl extends ExpandedModelComponentImpl implement * <!-- end-user-doc --> * @generated */ - @Override - public boolean eIsSet(int featureID) { - switch (featureID) { - case ETriceGenPackage.EXPANDED_ACTOR_CLASS__ACTOR_CLASS: - return basicGetActorClass() != null; + public void setGraphContainer(GraphContainer newGraphContainer) { + if (newGraphContainer != graphContainer) { + NotificationChain msgs = null; + if (graphContainer != null) + msgs = ((InternalEObject)graphContainer).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ETriceGenPackage.EXPANDED_ACTOR_CLASS__GRAPH_CONTAINER, null, msgs); + if (newGraphContainer != null) + msgs = ((InternalEObject)newGraphContainer).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ETriceGenPackage.EXPANDED_ACTOR_CLASS__GRAPH_CONTAINER, null, msgs); + msgs = basicSetGraphContainer(newGraphContainer, msgs); + if (msgs != null) msgs.dispatch(); } - return super.eIsSet(featureID); + else if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, ETriceGenPackage.EXPANDED_ACTOR_CLASS__GRAPH_CONTAINER, newGraphContainer, newGraphContainer)); } - - /* (non-Javadoc) - * @see org.eclipse.etrice.core.genmodel.fsm.fsmgen.impl.ExpandedModelComponentImpl#addTransitionChain(org.eclipse.etrice.core.fsm.fSM.Transition) + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated NOT */ - @Override - public TransitionChain addTransitionChain(Transition t) { - TransitionChain tc = super.addTransitionChain(t); - - if (t instanceof TriggeredTransition) { - VarDecl data = null; - - // TODO: after introduction of VarDecl after 'action' leave this to validation - - boolean first = true; - for (Trigger tr : ((TriggeredTransition)t).getTriggers()) { - for (MessageFromIf mif : tr.getMsgFromIfPairs()) { - VarDecl msgData = ((Message)mif.getMessage()).getData(); - if (first) { - first = false; - data = msgData; - } - else { - if (data!=null) { - if (msgData==null) { - validationError("If one MessageFromIf has data all have to have data for a given transition!", t, FSMPackage.eINSTANCE.getTriggeredTransition_Triggers()); - } - else { - VarDecl a = msgData; - if (data.getRefType().getType()!=a.getRefType().getType()) - validationError("The data types of all MessageFromIf have to be the same!", t, FSMPackage.eINSTANCE.getTriggeredTransition_Triggers()); - if (data.getRefType().isRef() !=a.getRefType().isRef()) - validationError("The data types of all MessageFromIf have to be the same ref type!", t, FSMPackage.eINSTANCE.getTriggeredTransition_Triggers()); - } - } - else { - if (msgData!=null) - validationError("If one MessageFromIf has no data all have to have no data for a given transition!", t, FSMPackage.eINSTANCE.getTriggeredTransition_Triggers()); - } - } - } - } - - if (first) - validationError("Triggered transition has to have a message from interface!", t, FSMPackage.eINSTANCE.getTriggeredTransition_Triggers()); - - tc.setData(data); + public int getInterfaceItemLocalId(AbstractInterfaceItem ifitem) { + if (ifitem2localId==null) { + ifitem2localId = new HashMap<AbstractInterfaceItem, Integer>(); + computeInterfaceItemLocalIds(getActorClass(), 0); } - return tc; + Integer localId = ifitem2localId.get(ifitem); + if (localId!=null) + return localId.intValue(); + else + return -1; } - - /* (non-Javadoc) - * @see org.eclipse.etrice.core.genmodel.fsm.fsmgen.impl.ExpandedModelComponentImpl#getIncomingMessages(org.eclipse.etrice.core.fsm.fSM.AbstractInterfaceItem) + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated */ @Override - public EList<EObject> getIncomingMessages(AbstractInterfaceItem ifitem) { - return new BasicEList<EObject>(roomHelpers.getMessageListDeep((InterfaceItem) ifitem, false)); + public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { + switch (featureID) { + case ETriceGenPackage.EXPANDED_ACTOR_CLASS__GRAPH_CONTAINER: + return basicSetGraphContainer(null, msgs); + } + return super.eInverseRemove(otherEnd, featureID, msgs); } - /* (non-Javadoc) - * @see org.eclipse.etrice.core.genmodel.fsm.fsmgen.impl.ExpandedModelComponentImpl#getMessageID(org.eclipse.etrice.core.fsm.fSM.MessageFromIf) + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated */ @Override - public String getMessageID(MessageFromIf mif) { - if (mif.getFrom() instanceof Port) { - Port p = (Port) mif.getFrom(); - return p.getProtocol().getName()+(p.isConjugated()?".OUT_":".IN_")+fsmNameProvider.getMessageName(mif.getMessage()); - } - else if (mif.getFrom() instanceof SAP) { - SAP sap = (SAP) mif.getFrom(); - return sap.getProtocol().getName()+".OUT_"+fsmNameProvider.getMessageName(mif.getMessage()); - } - else if (mif.getFrom() instanceof SPP) { - SPP spp = (SPP) mif.getFrom(); - return spp.getProtocol().getName()+".IN_"+fsmNameProvider.getMessageName(mif.getMessage()); + public Object eGet(int featureID, boolean resolve, boolean coreType) { + switch (featureID) { + case ETriceGenPackage.EXPANDED_ACTOR_CLASS__ACTOR_CLASS: + if (resolve) return getActorClass(); + return basicGetActorClass(); + case ETriceGenPackage.EXPANDED_ACTOR_CLASS__GRAPH_CONTAINER: + return getGraphContainer(); } + return super.eGet(featureID, resolve, coreType); + } - return "unknown interface item"; + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override + public void eSet(int featureID, Object newValue) { + switch (featureID) { + case ETriceGenPackage.EXPANDED_ACTOR_CLASS__GRAPH_CONTAINER: + setGraphContainer((GraphContainer)newValue); + return; + } + super.eSet(featureID, newValue); } - - /* (non-Javadoc) - * @see org.eclipse.etrice.core.genmodel.fsm.fsmgen.impl.ExpandedModelComponentImpl#computeCommonChainData(org.eclipse.emf.common.util.EList) + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated */ @Override - public EObject computeCommonChainData(EList<TransitionChain> chains) { - if (chains.size()==1) - return chains.get(0).getData(); - else { - ArrayList<RefableType> types = new ArrayList<RefableType>(); - for (TransitionChain chain : chains) { - if (chain.getData()!=null) - types.add(((VarDecl) chain.getData()).getRefType()); - else - types.add(null); - } - RefableType rt = roomHelpers.getLastCommonSuperType(types); - if (rt!=null) { - VarDecl vd = RoomFactory.eINSTANCE.createVarDecl(); - vd.setName("data"); - vd.setRefType(rt); - return vd; - } - else { - return null; - } + public void eUnset(int featureID) { + switch (featureID) { + case ETriceGenPackage.EXPANDED_ACTOR_CLASS__GRAPH_CONTAINER: + setGraphContainer((GraphContainer)null); + return; } + super.eUnset(featureID); } - - /* (non-Javadoc) - * @see org.eclipse.etrice.core.genmodel.fsm.fsmgen.impl.ExpandedModelComponentImpl#getModelComponentName() + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated */ @Override - public String getModelComponentName() { - return getActorClass().getName(); + public boolean eIsSet(int featureID) { + switch (featureID) { + case ETriceGenPackage.EXPANDED_ACTOR_CLASS__ACTOR_CLASS: + return basicGetActorClass() != null; + case ETriceGenPackage.EXPANDED_ACTOR_CLASS__GRAPH_CONTAINER: + return graphContainer != null; + } + return super.eIsSet(featureID); } } //ExpandedActorClassImpl diff --git a/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/etricegen/util/ETriceGenAdapterFactory.java b/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/etricegen/util/ETriceGenAdapterFactory.java index de1b193b4..ff4eebb8b 100644 --- a/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/etricegen/util/ETriceGenAdapterFactory.java +++ b/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/etricegen/util/ETriceGenAdapterFactory.java @@ -16,8 +16,30 @@ import org.eclipse.emf.common.notify.Adapter; import org.eclipse.emf.common.notify.Notifier; import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl; import org.eclipse.emf.ecore.EObject; -import org.eclipse.etrice.core.genmodel.etricegen.*; -import org.eclipse.etrice.core.genmodel.fsm.fsmgen.ExpandedModelComponent; +import org.eclipse.etrice.core.genmodel.etricegen.AbstractInstance; +import org.eclipse.etrice.core.genmodel.etricegen.ActorInstance; +import org.eclipse.etrice.core.genmodel.etricegen.ActorInterfaceInstance; +import org.eclipse.etrice.core.genmodel.etricegen.BindingInstance; +import org.eclipse.etrice.core.genmodel.etricegen.ConnectionInstance; +import org.eclipse.etrice.core.genmodel.etricegen.ETriceGenPackage; +import org.eclipse.etrice.core.genmodel.etricegen.ExpandedActorClass; +import org.eclipse.etrice.core.genmodel.etricegen.InstanceBase; +import org.eclipse.etrice.core.genmodel.etricegen.InterfaceItemInstance; +import org.eclipse.etrice.core.genmodel.etricegen.OpenBinding; +import org.eclipse.etrice.core.genmodel.etricegen.OpenServiceConnection; +import org.eclipse.etrice.core.genmodel.etricegen.OptionalActorInstance; +import org.eclipse.etrice.core.genmodel.etricegen.PortInstance; +import org.eclipse.etrice.core.genmodel.etricegen.Root; +import org.eclipse.etrice.core.genmodel.etricegen.SAPInstance; +import org.eclipse.etrice.core.genmodel.etricegen.SPPInstance; +import org.eclipse.etrice.core.genmodel.etricegen.ServiceImplInstance; +import org.eclipse.etrice.core.genmodel.etricegen.StructureInstance; +import org.eclipse.etrice.core.genmodel.etricegen.SubSystemInstance; +import org.eclipse.etrice.core.genmodel.etricegen.SystemInstance; +import org.eclipse.etrice.core.genmodel.etricegen.Wire; +import org.eclipse.etrice.core.genmodel.etricegen.WiredActorClass; +import org.eclipse.etrice.core.genmodel.etricegen.WiredStructureClass; +import org.eclipse.etrice.core.genmodel.etricegen.WiredSubSystemClass; /** * <!-- begin-user-doc --> @@ -168,10 +190,6 @@ public class ETriceGenAdapterFactory extends AdapterFactoryImpl { return createExpandedActorClassAdapter(); } @Override - public Adapter caseExpandedModelComponent(ExpandedModelComponent object) { - return createExpandedModelComponentAdapter(); - } - @Override public Adapter defaultCase(EObject object) { return createEObjectAdapter(); } @@ -416,20 +434,6 @@ public class ETriceGenAdapterFactory extends AdapterFactoryImpl { } /** - * Creates a new adapter for an object of class '{@link org.eclipse.etrice.core.genmodel.fsm.fsmgen.ExpandedModelComponent <em>Expanded Model Component</em>}'. - * <!-- begin-user-doc --> - * This default implementation returns null so that we can easily ignore cases; - * it's useful to ignore a case when inheritance will catch all the cases anyway. - * <!-- end-user-doc --> - * @return the new adapter. - * @see org.eclipse.etrice.core.genmodel.fsm.fsmgen.ExpandedModelComponent - * @generated - */ - public Adapter createExpandedModelComponentAdapter() { - return null; - } - - /** * Creates a new adapter for an object of class '{@link org.eclipse.etrice.core.genmodel.etricegen.ExpandedActorClass <em>Expanded Actor Class</em>}'. * <!-- begin-user-doc --> * This default implementation returns null so that we can easily ignore cases; diff --git a/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/etricegen/util/ETriceGenSwitch.java b/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/etricegen/util/ETriceGenSwitch.java index b9de6a85f..1a3fdfdbf 100644 --- a/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/etricegen/util/ETriceGenSwitch.java +++ b/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/etricegen/util/ETriceGenSwitch.java @@ -15,8 +15,30 @@ package org.eclipse.etrice.core.genmodel.etricegen.util; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.util.Switch; -import org.eclipse.etrice.core.genmodel.etricegen.*; -import org.eclipse.etrice.core.genmodel.fsm.fsmgen.ExpandedModelComponent; +import org.eclipse.etrice.core.genmodel.etricegen.AbstractInstance; +import org.eclipse.etrice.core.genmodel.etricegen.ActorInstance; +import org.eclipse.etrice.core.genmodel.etricegen.ActorInterfaceInstance; +import org.eclipse.etrice.core.genmodel.etricegen.BindingInstance; +import org.eclipse.etrice.core.genmodel.etricegen.ConnectionInstance; +import org.eclipse.etrice.core.genmodel.etricegen.ETriceGenPackage; +import org.eclipse.etrice.core.genmodel.etricegen.ExpandedActorClass; +import org.eclipse.etrice.core.genmodel.etricegen.InstanceBase; +import org.eclipse.etrice.core.genmodel.etricegen.InterfaceItemInstance; +import org.eclipse.etrice.core.genmodel.etricegen.OpenBinding; +import org.eclipse.etrice.core.genmodel.etricegen.OpenServiceConnection; +import org.eclipse.etrice.core.genmodel.etricegen.OptionalActorInstance; +import org.eclipse.etrice.core.genmodel.etricegen.PortInstance; +import org.eclipse.etrice.core.genmodel.etricegen.Root; +import org.eclipse.etrice.core.genmodel.etricegen.SAPInstance; +import org.eclipse.etrice.core.genmodel.etricegen.SPPInstance; +import org.eclipse.etrice.core.genmodel.etricegen.ServiceImplInstance; +import org.eclipse.etrice.core.genmodel.etricegen.StructureInstance; +import org.eclipse.etrice.core.genmodel.etricegen.SubSystemInstance; +import org.eclipse.etrice.core.genmodel.etricegen.SystemInstance; +import org.eclipse.etrice.core.genmodel.etricegen.Wire; +import org.eclipse.etrice.core.genmodel.etricegen.WiredActorClass; +import org.eclipse.etrice.core.genmodel.etricegen.WiredStructureClass; +import org.eclipse.etrice.core.genmodel.etricegen.WiredSubSystemClass; /** * <!-- begin-user-doc --> @@ -235,7 +257,6 @@ public class ETriceGenSwitch<T> extends Switch<T> { case ETriceGenPackage.EXPANDED_ACTOR_CLASS: { ExpandedActorClass expandedActorClass = (ExpandedActorClass)theEObject; T result = caseExpandedActorClass(expandedActorClass); - if (result == null) result = caseExpandedModelComponent(expandedActorClass); if (result == null) result = defaultCase(theEObject); return result; } @@ -499,21 +520,6 @@ public class ETriceGenSwitch<T> extends Switch<T> { } /** - * Returns the result of interpreting the object as an instance of '<em>Expanded Model Component</em>'. - * <!-- begin-user-doc --> - * This implementation returns null; - * returning a non-null result will terminate the switch. - * <!-- end-user-doc --> - * @param object the target of the switch. - * @return the result of interpreting the object as an instance of '<em>Expanded Model Component</em>'. - * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) - * @generated - */ - public T caseExpandedModelComponent(ExpandedModelComponent object) { - return null; - } - - /** * Returns the result of interpreting the object as an instance of '<em>Wired Structure Class</em>'. * <!-- begin-user-doc --> * This implementation returns null; |