bonjour, quand je génère getRule1() :
ici je n'ai pas des problèmes et j'ai l'affichage suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 lazy rule Rule2Rule{ from f:GrammAcme!Rule to t:MMAcme!Rule( ruletext<-thisModule.getRule1() )} helper def: getRule1(f:GrammAcme!Rule):String= if not f.designRuleExpression.qt.formalParam.oclIsUndefined() then if not f.designRuleExpression.qt.designRuleExpression.qb.oclIsUndefined() then if not f.designRuleExpression.qt.designRuleExpression.qb.orExpression.impliesExpression.iffExpression.equalityExpression.relationalExpression.additiveExpression .multiplicativeExpression.unaryExpression.primitiveExpression.ruleExpression.oclIsUndefined() then if not f.designRuleExpression.qt.designRuleExpression.qb.orExpression.impliesExpression.iffExpression.equalityExpression.relationalExpression.additiveExpression .multiplicativeExpression.unaryExpression.primitiveExpression.ruleExpression.qb.orExpression.impliesExpression.iffExpression.equalityExpression.relationalExpression .additiveExpression.multiplicativeExpression.unaryExpression.primitiveExpression.id.oclIsUndefined() then f.nameRule +' '+ '='+' ' + f.typeRule +' '+ f.designRuleExpression.qt.typeExp + ' '+ f.designRuleExpression.qt.nameComponent + ' '+':'+' ' +f.designRuleExpression.qt.formalParam.type + ' '+'in'+ ' '+ f.designRuleExpression.qt.setExpression.nameSetReference +'.' + f.designRuleExpression.qt.setExpression.set.toString().regexReplaceAll('Sequence',' ').replaceAll('{',' ').replaceAll('}',' ').replaceAll('\'',' ').trim() +' '+'|' +' '+'('+ f.designRuleExpression.qt.designRuleExpression.qb.orExpression.impliesExpression.iffExpression.equalityExpression.relationalExpression.additiveExpression .multiplicativeExpression.unaryExpression.primitiveExpression.ruleExpression.qb.orExpression.impliesExpression.iffExpression.equalityExpression.relationalExpression .additiveExpression.multiplicativeExpression.unaryExpression.primitiveExpression.id.idName+'.'+f.designRuleExpression.qt.designRuleExpression.qb.orExpression.impliesExpression.iffExpression.equalityExpression.relationalExpression.additiveExpression .multiplicativeExpression.unaryExpression.primitiveExpression.ruleExpression.qb.orExpression.impliesExpression.iffExpression.equalityExpression.relationalExpression .additiveExpression.multiplicativeExpression.unaryExpression.primitiveExpression.id.iddNames.toString().regexReplaceAll('Sequence',' ').replaceAll('{',' ').replaceAll('}',' ').replaceAll('\'',' ').trim() +')'+' '+'==' else OclUndefined endif else OclUndefined endif else OclUndefined endif else OclUndefined endif ;
et quand je génère getRule3() je n'ai pas des problèmes ici :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <rules ruletext="rule10 = invariant forall ps : PortTWSService in self.PORTS | (ps.Prec) =="/>
j'ai la résultat suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 lazy rule Rule2Rule{ from f:GrammAcme!Rule to t:MMAcme!Rule( ruletext<-thisModule.getRule3() )} helper def: getRule3(f:GrammAcme!Rule):String= if not f.oclIsUndefined() then if not f.designRuleExpression.qt.designRuleExpression.oclIsUndefined() then if not f.designRuleExpression.qt.designRuleExpression.qb.oclIsUndefined() then if not f.designRuleExpression.qt.designRuleExpression.qb.orExpression.impliesExpression.iffExpression.equalityExpression.relationalExpression.additiveExpression .multiplicativeExpression.unaryExpression.primitiveExpression.ruleExpression.oclIsUndefined() then if not f.designRuleExpression.qt.designRuleExpression.qb.orExpression.impliesExpression.iffExpression.equalityExpression.relationalExpression.additiveExpression .multiplicativeExpression.unaryExpression.primitiveExpression.ruleExpression.qb.orExpression.impliesExpression.iffExpression.equalityExpression.relationalExpressions->first(). oclIsUndefined() then f.designRuleExpression.qt.designRuleExpression.qb.orExpression.impliesExpression.iffExpression.equalityExpression.relationalExpression.additiveExpression .multiplicativeExpression.unaryExpression.primitiveExpression.ruleExpression.qb.orExpression.impliesExpression.iffExpression.equalityExpression.relationalExpressions->first(). additiveExpression.multiplicativeExpression.unaryExpression.primitiveExpression.id.idName else OclUndefined endif else OclUndefined endif else OclUndefined endif else OclUndefined endif else OclUndefined endif ; ;
mais lorsque je fait la concaténations entre getRule3() + getRule1() comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <rules ruletext="activer"/>
j'ai l’erreur sivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 lazy rule Rule2Rule{ from f:GrammAcme!Rule to t:MMAcme!Rule( ruletext<-thisModule.getRule1()+thisModule.getRule3() )}
je ne comprend pas quelle est la problème surtout que getRule1() et getRule3() marche bien sans concaténation je crois que la problème en OclUndefined???
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 org.eclipse.m2m.atl.engine.emfvm.VMException: Operation not found: OclUndefined.+(org.eclipse.m2m.atl.engine.emfvm.lib.OclUndefined) at Rule2Rule#296(Acme2Acme.atl[116:2-116:47]) local variables: self=Acme2Acme : ASMModule, f=IN!<unnamed>, t=OUT!<unnamed> at Family2Family#113(Acme2Acme.atl[28:32-28:55]) local variables: self=Acme2Acme : ASMModule, f=IN!<unnamed>, q=IN!<unnamed>, j=OUT!WSM, e=IN!<unnamed> at __applyFamily2AcmeFile#24(Acme2Acme.atl[12:17-12:46]) local variables: self=Acme2Acme : ASMModule, link=TransientLink {rule = Family2AcmeFile, sourceElements = {q = org.eclipse.emf.ecore.impl.DynamicEObjectImpl@9a6d8c (eClass: org.eclipse.emf.ecore.impl.EClassImpl@1a36881 (name: FamilyBody) (instanceClassName: null) (abstract: false, interface: false)), f = org.eclipse.emf.ecore.impl.DynamicEObjectImpl@11642c7 (eClass: org.eclipse.emf.ecore.impl.EClassImpl@8201b4 (name: Family) (instanceClassName: null) (abstract: false, interface: false))}, targetElements = {j = org.eclipse.emf.ecore.impl.DynamicEObjectImpl@d60adf (eClass: org.eclipse.emf.ecore.impl.EClassImpl@14f5028 (name: AcmeFile) (instanceClassName: null) (abstract: false, interface: false))}, variables = {}}, f=IN!<unnamed>, q=IN!<unnamed>, j=OUT!WSM at __exec__#8(Acme2Acme.atl) local variables: self=Acme2Acme : ASMModule, e=TransientLink {rule = Family2AcmeFile, sourceElements = {q = org.eclipse.emf.ecore.impl.DynamicEObjectImpl@9a6d8c (eClass: org.eclipse.emf.ecore.impl.EClassImpl@1a36881 (name: FamilyBody) (instanceClassName: null) (abstract: false, interface: false)), f = org.eclipse.emf.ecore.impl.DynamicEObjectImpl@11642c7 (eClass: org.eclipse.emf.ecore.impl.EClassImpl@8201b4 (name: Family) (instanceClassName: null) (abstract: false, interface: false))}, targetElements = {j = org.eclipse.emf.ecore.impl.DynamicEObjectImpl@d60adf (eClass: org.eclipse.emf.ecore.impl.EClassImpl@14f5028 (name: AcmeFile) (instanceClassName: null) (abstract: false, interface: false))}, variables = {}} at main#27(Acme2Acme.atl) local variables: self=Acme2Acme : ASMModule
Partager