| Generic valueType for EMap [message #1004758] |
Wed, 23 January 2013 15:19  |
Jason Roberts Messages: 5 Registered: February 2012 |
Junior Member |
|
|
I have created an model class, Expression<T>, that I would like to use as the valueType for a map feature in another EClass.
/**
* @model keyType="java.lang.String" valueType="com.example.expression.Expression" containment="true"
*/
public EMap<String, Expression<Boolean>> getBooleanParameters();
When I generate the model, the method signature is changed to:
public EMap<String, Expression> getBooleanParameters();
Does EMF support specifying a generic type for a map valueType?
|
|
|
| Re: Generic valueType for EMap [message #1004911 is a reply to message #1004758] |
Thu, 24 January 2013 00:29   |
Ed Merks Messages: 24564 Registered: July 2009 |
Senior Member |
|
|
Jason,
In Xcore you'd express that like this:
package com.example.expression
class Expression<T>
{
}
class StringToBooleanExpressionMapEntry wraps java.util.Map$Entry
{
String key
refers Expression<Boolean> value
}
class AnotherClass
{
contains StringToBooleanExpressionMapEntry[] booleanParameters
}
It generates this:
/*...
* @model
mapType="com.example.expression.StringToBooleanExpressionMapEntry<org.eclipse.emf.ecore.EString,
com.example.expression.Expression<org.eclipse.emf.ecore.EBooleanObject>>"
* @generated
*/
EMap<String, Expression<Boolean>> getBooleanParameters();
The information about map's type is determined from this in the
generated package.
* @model keyUnique="false" keyDataType="org.eclipse.emf.ecore.EString"
*
valueType="com.example.expression.Expression<org.eclipse.emf.ecore.EBooleanObject>"
* @generated
*/
EClass getStringToBooleanExpressionMapEntry();
It's very tricky to get the annotations correct, so while it's
definitely possible, there's nothing in the way of error feedback when
you make typos. In Xcore, if you do something wrong, it will tell you
immediately in the editor.
On 23/01/2013 9:19 PM, Jason Roberts wrote:
> I have created an model class, Expression<T>, that I would like to use
> as the valueType for a map feature in another EClass.
>
>
> /**
> * @model keyType="java.lang.String"
> valueType="com.example.expression.Expression" containment="true"
> */
> public EMap<String, Expression<Boolean>> getBooleanParameters();
>
>
> When I generate the model, the method signature is changed to:
>
> public EMap<String, Expression> getBooleanParameters();
>
>
> Does EMF support specifying a generic type for a map valueType?
>
>
>
|
|
|
|
| Re: Generic valueType for EMap [message #1005198 is a reply to message #1005188] |
Thu, 24 January 2013 11:14   |
Ed Merks Messages: 24564 Registered: July 2009 |
Senior Member |
|
|
Jason,
No, it can if you get the annotations right. It's certainly expressible
in Ecore and I did check that the model code generated from the Xcore
has @model annotations that can be used as input for creation a model
from annotated Java and I showed you what those annotations look like.
On 24/01/2013 4:57 PM, Jason Roberts wrote:
> Ed,
>
> It appears that this cannot be done purely with annotated java? If I
> understand your response correctly, I will first have to create an
> EClass for the map entry in the ECore editor?
No, but when it's a big battle to get it right with annotations, it
might be easier to do it in the Ecore editor, let EMF generate the right
annotations (be sure to delete the methods and the package interface so
EMF generates them fully), and then continue from there.
|
|
|
|
Powered by
FUDForum. Page generated in 0.01563 seconds