[furcas-discussion] referenceBy Use-Case

Thomas Goldschmidt thomas.goldschmidt at de.abb.com
Fri Feb 25 09:02:27 CET 2011


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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.furcas.org/pipermail/furcas-discussion/attachments/20110225/39c32f91/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/gif
Size: 454 bytes
Desc: not available
URL: <http://lists.furcas.org/pipermail/furcas-discussion/attachments/20110225/39c32f91/attachment.gif>


More information about the Furcas-discussion mailing list