use of org.osate.aadl2.PrototypeBinding in project osate2 by osate.
the class SubprogramPrototypeHolderImpl method setPrototypeBinding.
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public void setPrototypeBinding(PrototypeBinding newPrototypeBinding) {
PrototypeBinding oldPrototypeBinding = prototypeBinding;
prototypeBinding = newPrototypeBinding;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, AadlBaPackage.SUBPROGRAM_PROTOTYPE_HOLDER__PROTOTYPE_BINDING, oldPrototypeBinding, prototypeBinding));
}
use of org.osate.aadl2.PrototypeBinding in project osate2 by osate.
the class GroupPrototypeHolderImpl method setPrototypeBinding.
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public void setPrototypeBinding(PrototypeBinding newPrototypeBinding) {
PrototypeBinding oldPrototypeBinding = prototypeBinding;
prototypeBinding = newPrototypeBinding;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, AadlBaPackage.GROUP_PROTOTYPE_HOLDER__PROTOTYPE_BINDING, oldPrototypeBinding, prototypeBinding));
}
use of org.osate.aadl2.PrototypeBinding in project osate2 by osate.
the class AadlBaUtils method getDataClassifier.
/**
* Returns the DataClassifier object associated to the given List of PrototypeBinging objects.
*
* @param prototypeBindings the list of PrototypeBinging object
* @param dp the DataPrototype searched for in prototypeBindings
* @return the DataClassifier object (null if not found)
*/
private static DataClassifier getDataClassifier(List<PrototypeBinding> prototypeBindings, DataPrototype dp) {
for (PrototypeBinding pb : prototypeBindings) {
if (pb instanceof ComponentPrototypeBinding && pb.getFormal().equals(dp)) {
ComponentPrototypeBinding cpb = (ComponentPrototypeBinding) pb;
ComponentPrototypeActual cpa = cpb.getActuals().get(cpb.getActuals().size() - 1);
if (cpa.getSubcomponentType() instanceof DataClassifier) {
return (DataClassifier) cpa.getSubcomponentType();
}
}
}
return null;
}
use of org.osate.aadl2.PrototypeBinding in project osate2 by osate.
the class AadlBaUtils method prototypeResolver.
/**
* Resolves the given prototype by returning the binded classifier
* or if there is no binded classifier, the constraining classifier.
* It returns {@code null} if the given prototype is not defined.
*
* @param prototype the given prototype
* @param parentContainer the element's parent component
* @return the binded classifier at first then the constraining classifier or
* {@code null}
*/
public static Classifier prototypeResolver(Prototype prototype, Classifier parentContainer) {
Classifier result = null;
// First find a prototype bind as prototype may be binded several times.
PrototypeBinding pb = Aadl2Visitors.findPrototypeBindingInComponent(parentContainer, prototype.getName());
if (pb != null) {
result = prototypeBindingResolver(pb);
} else {
if (prototype instanceof ComponentPrototype) {
result = ((ComponentPrototype) prototype).getConstrainingClassifier();
} else if (prototype instanceof FeaturePrototype) {
result = ((FeaturePrototype) prototype).getConstrainingClassifier();
} else if (prototype instanceof FeatureGroupPrototype) {
result = ((FeatureGroupPrototype) prototype).getConstrainingFeatureGroupType();
} else {
// Reports error.
String errorMsg = "prototypeResolver : " + prototype.getClass().getSimpleName() + " is not supported yet.";
System.err.println(errorMsg);
throw new UnsupportedOperationException(errorMsg);
}
}
return result;
}
use of org.osate.aadl2.PrototypeBinding in project osate2 by osate.
the class AadlBaUtils method getClassifier.
/**
* Returns the given Element object's classifier.
* If the Element object is a prototype, it will try to resolve it as
* follow: returns the data prototype binded classifier at first withing the
* element's parent container otherwise the constraining classifier.
* It returns {@code null} if the prototype is not defined.
* <BR><BR>
* This method support instances of:<BR>
* <BR>_Feature (port, data access, subprogram access, parameter, etc.)
* <BR>_Subcomponent (data subcomponent, subprogram subcomponent, etc.)
* <BR>_BehaviorVariable
* <BR>_IterativeVariable (for/forall's iterative variable)
* <BR>_Prototype (all excepted FeatureGroupPrototype)
* <BR>_PrototypeBinding (all excepted FeatureGroupPrototypeBinding)
* <BR>_ClassifierValue (struct or union data subcomponent)
* <BR><BR>
* If the given Element object is not one of those types, an
* UnsupportedOperationException is thrown.
*
* @param el the given Element object
* @param parentContainer the element's parent component.
* @return the given element's classifier or {@code null} if the prototype is
* not defined
* @exception UnsupportedOperationException for unsupported element
* object types.
*/
public static Classifier getClassifier(Element el, Classifier parentContainer) {
Classifier result = null;
if (el instanceof Feature) {
Feature f = (Feature) el;
if (el instanceof FeatureGroup) {
org.osate.aadl2.FeatureType ft = ((FeatureGroup) el).getFeatureType();
if (ft != null) {
if (ft instanceof FeatureGroupType) {
result = (FeatureGroupType) ft;
} else // FeatureGroupPrototype case
{
result = getClassifier((FeatureGroupPrototype) ft, parentContainer);
}
}
} else {
// Feature case.
result = f.getClassifier();
// Feature without classifier returns null.
if (result == null && f.getPrototype() != null) {
result = prototypeResolver(f.getPrototype(), parentContainer);
}
}
} else if (el instanceof Subcomponent) {
Subcomponent sub = (Subcomponent) el;
if (el instanceof SubprogramGroupSubcomponent) {
result = ((SubprogramGroupSubcomponent) el).getClassifier();
} else {
// Subcomponent case.
result = sub.getClassifier();
// Subcomponent without classifier returns null.
if (result == null && sub.getPrototype() != null) {
result = prototypeResolver(sub.getPrototype(), parentContainer);
}
}
} else if (el instanceof BehaviorVariable) {
// Local variable case (BehaviorVariable).
BehaviorVariable bv = (BehaviorVariable) el;
result = bv.getDataClassifier();
} else if (el instanceof IterativeVariable) {
// Iterative variable case.
result = ((IterativeVariable) el).getDataClassifier();
} else if (el instanceof Prototype) {
result = prototypeResolver((Prototype) el, parentContainer);
} else if (el instanceof PrototypeBinding) {
// Prototype binding case.
result = prototypeBindingResolver((PrototypeBinding) el);
} else if (el instanceof ClassifierValue) {
// struct or union member case (ClassifierValue).
result = ((ClassifierValue) el).getClassifier();
} else if (el instanceof StructUnionElement) {
return ((StructUnionElement) el).getDataClassifier();
} else {
// Reports error.
String errorMsg = "getClassifier : " + el.getClass().getSimpleName() + " is not supported yet.";
System.err.println(errorMsg);
throw new UnsupportedOperationException(errorMsg);
}
return result;
}
Aggregations