Skip to main content



      Home
Home » Modeling » M2T (model-to-text transformation) » Trouble getting a list of "items" of a certain type(Xpand/Xtend)
Trouble getting a list of "items" of a certain type [message #518928] Fri, 05 March 2010 08:43 Go to next message
Eclipse UserFriend
Hello,

In my metamodel, I created a NamedElement EClass, which has an EAttribute "name" of type EString.
I have a Declaration EClass which ESuper Types is NamedElement,
and an EClass Class which ESUper Types is Declaration.

(so Class extends Declaration extends NamedElement)

in my .ext, I want to create an expression which returns all Class.

I tried
List[Class] classes(NamedElement this) :
	name.typeSelect(Class);


Which doesn't work, I get "Collection type expected! was : String"

Why ?
Re: Trouble getting a list of "items" of a certain type [message #518936 is a reply to message #518928] Fri, 05 March 2010 08:57 Go to previous messageGo to next message
Eclipse UserFriend
Hello Maxime,

please read the documentation of Expressions in the Xpand Docmentation.

This fragment does not work.
List[Class] classes(NamedElement this) :
	name.typeSelect(Class);

You definet an extension for the type:
'NamedElement'. The expression will first access the property 'name'
and on that property it tries to evaluate the expression '.typeSelect(Class)'.
But typeSelect is only defined for collections Wink

Regards
Darius
Re: Trouble getting a list of "items" of a certain type [message #518955 is a reply to message #518928] Fri, 05 March 2010 09:51 Go to previous messageGo to next message
Eclipse UserFriend
Thanks for helping.

I've tried
List[Class] classes(NamedElement this) :
	typeSelect(Class);


which does correct the error sign but I don't think I'm pointing to a Collection. I'm actually trying to get all elements of a type in a Collection, so I guess i'm not solving anything, just displacing the error.
After that I have troubles with the workflow.

When running the workflow, I got
GRAVE: Error in Component  of type org.eclipse.xpand2.Generator: 
	EvaluationException : No Definition 'template::Template::main for metamodel::Model' found!
	[23,41] on line 1 'EXPAND template::Template::main FOR model'

Which I solved(?) by turning NamedElement to not abstract (but I want it to be abstract).

I get a new error now
GRAVE: Error in Component  of type org.eclipse.xtend.check.CheckComponent: 
	EvaluationException : Type not found : Class
	metamodel::Checks.chk[53,75] on line 5 'Class "No elements defined"'


which points to my Checks.chk,
context Class ERROR "No elements defined" :
	exists(e|Class.isInstance(e));


Re: Trouble getting a list of "items" of a certain type [message #518988 is a reply to message #518955] Fri, 05 March 2010 11:02 Go to previous messageGo to next message
Eclipse UserFriend
have you tried

List[Class] classes(NamedElement this) :
	{this}.typeSelect(Class);


{this} creates a list of the given NamedElement this
Re: Trouble getting a list of "items" of a certain type [message #518990 is a reply to message #518955] Fri, 05 March 2010 11:00 Go to previous messageGo to next message
Eclipse UserFriend
Hi Maxime,

unlike OCL in Xpand the types don't know their instances (which is a
good thing).

So if you want to find all classes you'll have to pass some container or
context. For instance the following would find all classes in the passed
model:

classes(EObject ctx) :
ctx.eRootContainer.eAllContents.typeSelect(Class);

Sven


Maxime Lecourt schrieb:
> Thanks for helping.
>
> I've tried List[Class] classes(NamedElement this) :
> typeSelect(Class);
>
> which does correct the error sign but I don't think I'm pointing to a
> Collection. I'm actually trying to get all elements of a type in a
> Collection, so I guess i'm not solving anything, just displacing the error.
> After that I have troubles with the workflow.
>
> When running the workflow, I got
> GRAVE: Error in Component of type org.eclipse.xpand2.Generator:
> EvaluationException : No Definition 'template::Template::main for
> metamodel::Model' found!
> [23,41] on line 1 'EXPAND template::Template::main FOR model'
>
> Which I solved(?) by turning NamedElement to not abstract (but I want it
> to be abstract).
>
> I get a new error now
> GRAVE: Error in Component of type
> org.eclipse.xtend.check.CheckComponent: EvaluationException : Type
> not found : Class
> metamodel::Checks.chk[53,75] on line 5 'Class "No elements defined"'
>
>
> which points to my Checks.chk,
> context Class ERROR "No elements defined" :
> exists(e|Class.isInstance(e));
>
>


--
Need professional support for Xtext and EMF?
Go to: http://xtext.itemis.com
Twitter : @svenefftinge
Blog : blog.efftinge.de
Re: Trouble getting a list of "items" of a certain type [message #519270 is a reply to message #518990] Mon, 08 March 2010 05:43 Go to previous messageGo to next message
Eclipse UserFriend
>unlike OCL in Xpand the types don't know their instances (which is a
>good thing).

I see. As the syntax is nearly the same, I thought it worked the same. Is it a good thing because of problems with inheritance that would have arisen ?

>So if you want to find all classes you'll have to pass some container or
>context. For instance the following would find all classes in the passed
>model:

>classes(EObject ctx) :
>ctx.eRootContainer.eAllContents.typeSelect(Class);

Thanks, I can't test it yet, but Eclipse doesn't find any error anymore.

I now have but one problem left (I hope).
When I run the workflow, I still get an error.

Quote:
INFO: Generator: generating 'template::Template::main FOR model' => src-gen
8 mars 2010 11:40:49 org.eclipse.xtend.expression.AbstractExpressionsUsingWorkflo wComponent invokeInternal
GRAVE: Error in Component of type org.eclipse.xpand2.Generator:
EvaluationException : No Definition 'template::Template::main for metamodel::Model' found!
[23,41] on line 1 'EXPAND template::Template::main FOR model'


As my Template.xpt starts like this
«IMPORT metamodel»

«EXTENSION template::GeneratorExtensions»

«DEFINE main FOR NamedElement»
	«FILE TypeFileName ()»
		«EXPAND typedef FOREACH typedefs()»
	«ENDFILE»
	«EXPAND maStruct FOREACH classes()»
«ENDDEFINE»

I guess I'm not pointing towards the right model.

I think I have to modify my workflow (which looks like that)
Quote:
<!-- generate code -->
<component class="org.eclipse.xpand2.Generator">
<metaModel idRef="mm"/>
<expand
value="template::Template::main FOR model" />
<outlet path="${src-gen}" >
<postprocessor class="org.eclipse.xpand2.output.JavaBeautifier" />
</outlet>
<!-- globalVarDef name="TypeFileName" value="'types.h'"/ -->
</component>



Regards
Maxime
Re: Trouble getting a list of "items" of a certain type [message #519333 is a reply to message #519270] Mon, 08 March 2010 09:30 Go to previous messageGo to next message
Eclipse UserFriend
Maxime,

> Quote:
>> INFO: Generator: generating 'template::Template::main FOR model' =>
>> src-gen
>> 8 mars 2010 11:40:49
>> org.eclipse.xtend.expression.AbstractExpressionsUsingWorkflo
>> wComponent invokeInternal
>> GRAVE: Error in Component of type org.eclipse.xpand2.Generator:
>> EvaluationException : No Definition 'template::Template::main for
>> metamodel::Model' found!
>> [23,41] on line 1 'EXPAND template::Template::main FOR model'
>
>
> As my Template.xpt starts like this
> «IMPORT metamodel»
>
> «EXTENSION template::GeneratorExtensions»
>
> «DEFINE main FOR NamedElement»
> «FILE TypeFileName ()»
> «EXPAND typedef FOREACH typedefs()»
> «ENDFILE»
> «EXPAND maStruct FOREACH classes()»
> «ENDDEFINE»

You're passing an instance of metamodel::Model not and instance of
NamedElement. Assumed that the model contains named elements, you could
write

<expand value="template::Template::main FOREACH model.eContents" />

Or you could introduce a definition for metamodel::Model:

<<DEFINE main FOR Model>>
<<EXPAND main FOREACH this.eContents>>
<<ENDDEFINE>>

Sven

--
Need professional support for Xtext and EMF?
Go to: http://xtext.itemis.com
Twitter : @svenefftinge
Blog : blog.efftinge.de
Re: Trouble getting a list of "items" of a certain type [message #519340 is a reply to message #518928] Mon, 08 March 2010 09:54 Go to previous message
Eclipse UserFriend
The problem was with my definitions, I didn't point to the right thing.

Thank you

Regards,

Maxime
Previous Topic:Xpand: could not find the property exception
Next Topic:how to link xpand in workflow file
Goto Forum:
  


Current Time: Wed Jul 16 22:03:00 EDT 2025

Powered by FUDForum. Page generated in 1.12484 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top