package Ġmutation _ operators Ċ Ċ import Ġcom . github . g um tre ed iff . actions . model . Action Ċ import Ġg um tree . sp oon . diff . operations . Operation Ċ import Ġg um tree . sp oon . diff . operations . Update Operation Ċ import Ġspo on . reflect . code . Ct Binary Operator Ċ import Ġspo on . reflect . declaration . Ct Element Ċ import Ġspo on . reflect . declaration . Ct Parameter Ċ import Ġspo on . reflect . reference . Ct Type Reference Ċ import Ġutils . is Bit shift Ċ Ċ class ĠArgument Type Change () Ġ: ĠMutation Operator < Argument Type Change >() Ġ{ ĊĠĠĠ Ġlateinit Ġvar Ġfrom Elem : ĠC t Element ĊĠĠĠ Ġlateinit Ġvar Ġto Elem : ĠC t Element ĊĊĠĠĠ Ġconstructor ( from Elem : ĠC t Element , Ġto Elem : ĠC t Element ): Ġthis () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . from Elem Ġ= Ġfrom Elem ĊĠĠĠĠĠĠĠ Ġthis . to Elem Ġ= Ġto Elem ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcheck ( op : ĠOperation < Action >): ĠMutation Operator < Argument Type Change >? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( op ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠUpdate Operation Ġ-> Ġcheck Update ( op ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Update ( update Op : ĠUpdate Operation ): ĠMutation Operator < Argument Type Change >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( src , Ġdest ) Ġ= ĠPair ( update Op . src Node , Ġupdate Op . dst Node ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif ( src Ġis ĠC t Type Reference < *> Ġ&& Ġdest Ġis ĠC t Type Reference < *> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġsrc . parent Ġis ĠC t Parameter < *> Ġ&& Ġdest . parent Ġis ĠC t Parameter < *> ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArgument Type Change ( src . parent , Ġdest . parent ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Arg Type C ( from =$ from Elem , to =$ to Elem )" ĊĠĠĠ Ġ} Ċ } Ċ