[furcas-discussion] referenceBy Use-Case
Stephan Erb
stephan at dev.static-void.de
Fri Feb 25 09:26:13 CET 2011
Hey Thomas,
I believe that we do already support this usecase:
> referenceBy="OCL:...anything goes here..."
Protocol is that the referenceBy expression returns a type covered by a
PrimitiveTemplate.
We implemented it because in same rare circumstances you need more
complex rules to derive the name of an object, as for example within the
as-Argument of the TCS syntax.
Best,
Stephan
On Fri, 2011-02-25 at 09:02 +0100, Thomas Goldschmidt wrote:
>
> Hi,
>
> I think I found a case where the current lookupScope/referenceBy
> handling might not enough:
>
> I have a syntax for the Ecore variant of OCL which is based on
> generics inheriting from a generic OCL metamodel (which is kind of
> ugly in my oppinion). Anyway, there I define a template for
> VariableExp in the fopllowing way:
>
> template "http://www.eclipse.org/ocl/1.1.0/Ecore"#VariableExp
> : [[
> referredVariable {forcedLower=1,mode=self}
> |
> referredVariable {as=identifier, forcedLower=1 ,
> lookupScope = "ocl::ecore::Variable.allInstances()",
> referenceBy="name"}
> ]]
>
> {{ eType=lookIn("OCL:self.referredVariable.oclAsType(ocl::ecore::Variable).eType"),
>
> name=lookIn("OCL:self.referredVariable.oclAsType(ocl::ecore::Variable).name") }}
> ;
>
> However, this doesn't work as the referenceBy-feature "name" is
> currently validated against the type of the feature it is intended to
> set, i.e., referredVariable. In this setting referredVariable is typed
> as Variable<C, PM> from ocl::expressions (which is the generic part
> of OCL) where the generics are bound as <EClassifier, EParameter>.
> Still there is a concrete subclass of VariableExp in the ocl::ecore
> package defined as follows: Variable ->
> ETypedElement,Variable<EClassifier, EParameter>. This leads to the
> fact that "name" is only defined on this concrete subclass (inherited
> from ETypedElement->ENamedElement). Therefore, the "name" feature is
> not found when validating the syntax and an error occurs. Still, the
> generic Variable<C, PM> also inherits from the abstract class
> ocl::utilities::TypedElement which defines an operation "getName()".
> This "coincidence" leads to the fact that on the Java side this
> "getName()" magically works by resolving to ENamedElement.getName(),
> during OCL evaluation this also works fine if we call operation
> getName() instead of attribute "name". Therefore, what might work is
> using the operation in the referenceBy clause:
>
> referenceBy="getName()"
>
> What do you think? Is this just a weird special case that will never
> occur anywhere else? Or do we need to support this?
>
> Btw: Resolving generics as reference types was not supported in the
> generator, I added this including some test cases and I will push this
> later today.
>
> Cheers,
> Thomas
>
>
> Thomas Goldschmidt
>
> ABB AG
> Forschungszentrum
> Wallstadter Straße 59
> 68526 Ladenburg
> Office Phone: +49 6203
> 716134
> Office Fax: +49 6203
> 716253
> e-mail:
> thomas.goldschmidt at de.abb.com
>
>
> ABB AG
> Sitz/Head Office: Mannheim
> Registergericht/Registry Court: Mannheim
> Handelsregisternummer/Commercial Register No.: HRB 4664
> Geschäftsführung/Managing Board: Peter Smits (Vorsitzender), Joachim
> Schneider, Markus Ochsner, Hans-Georg Krabbe
> Vorsitzender des Aufsichtsrats/Chairman of Supervisory Board: Bernhard
> Jucker
>
> Diese E-Mail enthält vertrauliche und/oder rechtlich geschützte
> Informationen. Wenn Sie nicht der richtige Adressat sind oder diese
> E-Mail irrtümlich erhalten haben, informieren Sie bitte sofort den
> Absender und vernichten Sie diese Mail. Das unerlaubte Kopieren sowie
> die unbefugte Weitergabe dieser Mail ist nicht gestattet.
>
> This e-mail may contain confidential and/or privileged information. If
> you are not the intended recipient (or have received this e-mail in
> error) please notify the sender immediately and destroy this e-mail.
> Any unauthorized copying, disclosure or distribution of the material
> in this e-mail is strictly forbidden.
> _______________________________________________
> Furcas-discussion mailing list
> Furcas-discussion at lists.furcas.org
> http://lists.furcas.org/cgi-bin/mailman/listinfo/furcas-discussion
More information about the Furcas-discussion
mailing list