blob: b4b187fb752ae05c5be6d77fa007b74bd5063555 [file] [log] [blame]
modeltype ECORE "strict" uses ecore('http://www.eclipse.org/emf/2002/Ecore');
library VisitorPatternLibrary;
helper EPackage::findClass(in visitorName : String, in visitorQualifiedName : String) : EClass
{
return self ->closure(self.eSubpackages)
->including(self)
->collectOne(
self.eClassifiers![name = visitorName
and oclIsKindOf(EClass)
and oclAsType(EClass).instanceClassName = visitorQualifiedName].oclAsType(EClass));
}
helper createAcceptMethod(in visitorClass : EClass) : EOperation {
return object EOperation {
name := 'accept';
var typeParameter = object ETypeParameter {
name := visitorClass.eTypeParameters->first().name;
};
eTypeParameters += typeParameter;
eGenericType := object EGenericType {
eTypeParameter := typeParameter;
};
eParameters += object EParameter {
name := "v";
eGenericType := object EGenericType {
eClassifier := visitorClass; // Derived Visitor Class ?
eTypeArguments := object EGenericType {
eTypeParameter := typeParameter;
}
}
}
};
}
helper createGenModelAnnotation(in annotationValue :String) : EAnnotation {
return object EAnnotation {
source := "http://www.eclipse.org/emf/2002/GenModel";
details += object EStringToStringMapEntry {
key := "body";
value := annotationValue;
}
};
}