Skip to main content



      Home
Home » Eclipse Projects » Sirius » Evaluating "If" condition in Acceleo/Sirius
Evaluating "If" condition in Acceleo/Sirius [message #1776412] Thu, 16 November 2017 04:49 Go to next message
Eclipse UserFriend
I am facing problem on evaluation of this if condition:

[if (loadedVocabularies->size()=0) then '' else (loadedVocabularies->select(v : Vocabulary | v.terms->select(t : Term | t.oclIsTypeOf(Class))->notEmpty() ))  endif/]


loadedVocabularies is a eList that contains eList of Vocabulary and Vocabulary contains eList of Terms .

I do not want to evaluate this statement if the loadedVocabularies does not contain any thing.

If the loadedVocabularies is empty I am getting this compilation error on console:

!ENTRY org.eclipse.acceleo.parser 4 0 2017-11-16 10:34:40.567
!MESSAGE Compilation error for expression [if (loadedVocabularies->size()=0) then '' else (loadedVocabularies->select(v : Vocabulary | v.terms->select(t : Term | t.oclIsTypeOf(Class))->notEmpty() )) endif/] : Unknown type (Vocabulary)


However it works well if loadedVocabularies in not empty. I am expecting the else condition should not be evaluated when if condition is true.

What am I missing here?

Any pointers?
Re: Evaluating "If" condition in Acceleo/Sirius [message #1776422 is a reply to message #1776412] Thu, 16 November 2017 05:58 Go to previous messageGo to next message
Eclipse UserFriend
Hi

Your (runtime) expectation is correct.

What you are observing is a compile time problem. Perhaps Vocabulary is in a not-imported model, perhaps it needs disambiguation. IIRC Acceleo can get confused by complex expressions. Perhaps the origin of loadedVocabularies, that you do not show, is too complex and a let variable might help. In your particular example the Vocabulary in "v : Vocabulary | v.terms..." should be redundant so you could try "v | v.terms..." or even "terms..." both of which avoid an opportunity for the compiler to think that your Vocabulary is different to its own.

Regards

Ed Willink
Re: Evaluating "If" condition in Acceleo/Sirius [message #1776452 is a reply to message #1776422] Thu, 16 November 2017 09:32 Go to previous messageGo to next message
Eclipse UserFriend
Hello,

In your VSM, on the parent representation description, containing your expression, have you set the metamodel (in the metamodel tab)? Is it possible that you have another metamodel with a class also named Vocabulary? In your expression, you can prefix the class name with the metamodel name in this pattern "metamodelName::className" so if your metamodel (or the package containing the Vocabulary eclass) is called "dictionnary" then you should have: ...select(v: dictionnary::Vocabulary...
Also, note that you do not need the parenthesis in the if block and that size()=0 can be replace by isEmpty like this: [if loadedVocabularies->isEmpty() then ...

Regards,
Steve
Re: Evaluating "If" condition in Acceleo/Sirius [message #1776819 is a reply to message #1776452] Tue, 21 November 2017 18:01 Go to previous message
Eclipse UserFriend
It is odd that the operation works as expected if loadedVocabularies is not empty, so it cannot be that Vocabulary is not imported.
Worth noting also that loadedVocabularies is a result of a java service call that is to return a list of Vocabulary eClass instances.
Could it be that when the returned list is empty, the compiler does not recognise that the (empty) list is expected to be of type Vocabulary, hence it complains "Unknown type (Vocabulary)"?

In the end, what worked is the following:

[loadedVocabularies->select(v | v.oclAsType(vocabulary::Vocabulary).terms->select(t | t.oclIsTypeOf(vocabulary::Class))->notEmpty() ) /]


1. As suggested above, we replaced "v : Vocabulary" with simply 'v', to avoid the compilation error.
2. But then we need to replace "v.terms" with " v.oclAsType(vocabulary::Vocabulary).terms", since the compiler complained that it did not recognise 'terms', unless we tell it what the type of 'v' is first.

This change works for both empty, and non-empty loadedVocabularies.

But it is still not 100% clear why the compiler fails.
Previous Topic:Diagram extension question
Next Topic:The trigger when the node is moved
Goto Forum:
  


Current Time: Wed Jul 23 14:00:36 EDT 2025

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

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

Back to the top