Skip to main content
summaryrefslogblamecommitdiffstats
blob: bc9d1b37b6f30e760bb899014089ee7daa664d88 (plain) (tree)
1
2
3
4
5
6
7
8
9







                                         
                                          




                                                     
                                          



                                                     
                                          













                                                     
                                               




                                                                                        
                                              
























                                                                                        
                                           



                                                    
                                                
                

                                                       



                             
                                                
                

                                                       









                              
                                                       
 
source _source : 'SourceMM1.ecore#/'
target _target : 'TargetMM1.ecore#/'

mappings {
	map _target::TRoot from SRoot {
		ownedA := ownedX.resolve;
	}
	
	map _target::A1 from X when isA1 {
		name := name;
		ownsB := ownsY.oclAsType(Y1).resolve;
	}
	
	
	map _target::A2 from X when isA2 {
		name := name;
		ownsC := ownsY.oclAsType(Y2).resolve;
	}

	map _target::A3 from X when isA3 {
		name := name;
		ownsC := ownsY.oclAsType(Y2).resolve;
	}
	
	map _target::B from Y1 {
		name := name;
		ownsD := ownsZ.resolve;
	}	

	map _target::C from Y2 {
		name := name;
		ownsD := ownsZ.resolve;
	}
	
	map _target::D from Z when parentIsY1 {
		toA := toY.oclAsType(_'source'::Y1).resolve.toA1;
		refsB := if refers = null then null else resolve.lookup(B,refers) endif;
	}
	
	
	map _target::D from Z when parentIsY2{
		toA := toY.oclAsType(_'source'::Y2).resolve.toA2;
		refsC := if refers = null then null else resolve.lookup(C,refers) endif;
	}
}

disambiguation {
	X {
		isA1 := isA1;
		isA2 := isA2;
		isA3 := not(isA1 or isA2);
	}
	
	Z {
		parentIsY1 := oclContainer().oclIsTypeOf(Y1);
		parentIsY2 := oclContainer().oclIsTypeOf(Y2);		
	}
}

nameresolution {
	
	named-element NamedElement name-property name; 	  /*from target */
	name-referencer PathElementCS name-property name; /*from source */
	name-qualifier PathNameCS name-segments-property path; /*from source */
		
	TRoot {
		scopes A1, A2 using ownedA;
	}
	
	A1 {
		named-element /*name-property name*/
			qualifies B using ownsB;
		
		for ownsB
			scopes B using following ownsB;
	}
	
	A2 {
		named-element
			qualifies C using ownsC;
		
		for ownsC
			scopes C using following ownsC;
	}
	
	B {
		named-element;
	}
	
	C {
		named-element;
	}
	
	--D{} -- FIXME, just to generate the env method
}

Back to the top