bonjour, quand je génère getRule1() :
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 
												  ;
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
              <rules ruletext="rule10 = invariant forall ps : PortTWSService in self.PORTS | (ps.Prec) =="/>
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
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 ;								  ;
j'ai la résultat suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
        <rules ruletext="activer"/>
mais lorsque je fait la concaténations entre getRule3() + getRule1() comme ça :
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()
)}
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
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
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???