123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804(*
Copyright 2012-2025 Codinuum Software Lab <https://codinuum.com>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*)(* java/change.ml *)moduleXlist=Diffast_misc.XlistmoduleUID=Diffast_misc.UIDmoduleOtree=Diffast_misc.OtreemoduleEdit=Diffast_core.EditmoduleMisc=Diffast_core.MiscmoduleTriple=Diffast_core.TriplemoduleInfo=Diffast_core.InfomoduleJava_label=Java_base.Java_labelletnups=Misc.nupsmoduleF(L:Java_label.T)=structmoduleI=InfomoduleE=Edit(*let sprintf = Printf.sprintf*)includeDiffast_core.Change_basemoduleCB=F(L)letmkjres=Triple.mkjresletp_accessibility_increased=mkjres"accessibilityIncreased"letp_accessibility_decreased =mkjres"accessibilityDecreased"(* predicates *)letgetlab=L.getlabletis_methnd=L.is_method (getlabnd)letis_ctor nd=L.is_ctor(getlabnd)letis_paramnd=L.is_parameter(getlabnd)letis_tparamnd=L.is_typeparameter(getlabnd)letis_typend=L.is_type(getlabnd)letis_stmtnd=L.is_statement(getlabnd)letis_fieldnd=L.is_field(getlabnd)letis_classnd=L.is_class(getlabnd)letis_interfacend=L.is_interface(getlabnd)letis_enumnd=L.is_enum(getlabnd)letis_finalnd=L.is_final(getlabnd)letis_publicnd=L.is_public(getlabnd)letis_protectednd=L.is_protected(getlabnd)letis_privatend=L.is_private(getlabnd)letis_methodbodynd=L.is_methodbody(getlabnd)letis_methinvoknd=L.is_methodinvocation(getlabnd)letis_extendsnd=L.is_extends(getlabnd)letis_extendsifsnd=L.is_extendsinterfaces(getlabnd)letis_modifiersnd=L.is_modifiers(getlabnd)letis_modifiernd=L.is_modifier(getlabnd)letis_vdeclarationnd=L.is_localvariabledecl(getlabnd)letis_vdeclaratornd=L.is_variabledeclarator(getlabnd)letis_literalnd=L.is_literal(getlabnd)letis_namend=L.is_name(getlabnd)letis_namednd=L.is_named(getlabnd)letis_instcreatnd=L.is_instancecreation(getlabnd)letis_acreatnd=L.is_arraycreation(getlabnd)letis_ctorinvoknd=L.is_ctorinvocation(getlabnd)letis_assignnd=L.is_assignment (getlabnd)letis_qualnd=L.is_qualifier(getlabnd)letis_throwsnd=L.is_throws(getlabnd)(*
let is_namedxxx nd = L.is_namedxxx (getlab nd)
let is_namedxxxpair(nd1, nd2) = L.is_namedxxxpair(getlab nd1, getlab nd2)
*)letis_expressionnd=L.is_expression(getlabnd)letis_primarynd=L.is_primary(getlabnd)letis_unaryopnd=L.is_unaryop(getlabnd)letis_binaryopnd=L.is_binaryop(getlabnd)letis_pdeclnd=L.is_packagedeclaration(getlabnd)letis_field_accnd=L.is_fieldaccess(getlabnd)letis_argnd=tryL.is_arguments(getlabnd#initial_parent)with_->falseletis_elsend=tryletpnd=nd#initial_parentinL.is_if(getlabpnd)&&nd#pos=2with_->falseletis_condnd=tryletpnd=nd#initial_parentinletlab=getlabpndinL.is_iflab&&nd#pos=0||L.is_whilelab&&nd#pos=0||L.is_dolab&&nd#pos=1with_->falseletis_paramtynd=tryletpnd=nd#initial_parentinis_parampnd&&nd#pos=pnd#nchildren-1with_->falseletis_rettynd=tryis_typend&&L.is_method(getlabnd#initial_parent)with_->falseletis_retvalnd=tryis_expressionnd&&L.is_return(getlabnd#initial_parent)with_->falseletis_fieldtynd=tryletpnd=nd#initial_parentinis_typend&&is_fieldpndwith_->falseletis_vartynd=tryis_typend&&is_vdeclarationnd#initial_parentwith_->falseletis_extendednd=tryis_typend&&is_extendsnd#initial_parentwith_->falseletis_extendedifsnd=tryis_typend&&is_extendsifsnd#initial_parentwith_->falseletis_assertnd=L.is_assert(getlabnd)letis_assertcondnd=tryis_assertnd#initial_parent&&nd#pos=0with_->falseletis_assertmesnd=tryis_assertnd#initial_parent&&nd#pos=1with_->falseletis_forinitnd=tryL.is_forinit(getlabnd#initial_parent)with_->falseletis_forcondnd=tryL.is_forcond(getlabnd#initial_parent)with_->falseletis_forupdatend=tryL.is_forupdate(getlabnd#initial_parent)with_->falseletis_lhsnd=tryis_assignnd#initial_parent&&nd#pos=0with_->falseletis_rhsnd=tryis_assignnd#initial_parent&&nd#pos=1with_->falseletis_ideclnd=tryL.is_importdeclarations(getlabnd#initial_parent)with_->falseletis_thtynd=tryis_typend&&is_throwsnd#initial_parentwith_->falseletis_primary_or_expressionnd=is_primarynd||is_expressionndletis_blocknd=L.is_block(getlabnd)let_nesting_depth_of_methodbodymethodbody_nd=lettbl=Hashtbl.create0inletadddnd=tryHashtbl.replacetbld(nd::(Hashtbl.findtbld))withNot_found->Hashtbl.addtbld[nd]inletrecdoitdepthnd=ifis_stmtndthenbeginletnew_depth=depth+1inaddnew_depthnd;Array.iter(doitnew_depth)nd#childrenendelseArray.iter(doitdepth)nd#childreninArray.iter(doit0)methodbody_nd#children;letmaxd=ref0inHashtbl.iter(fund_->ifd>!maxdthenmaxd:=d)tbl;letnodes=Hashtbl.findtbl!maxdin[%debug_log"body=%s maxd=%d nd=%s"methodbody_nd#data#to_string!maxd(Xlist.to_string(funn->n#data#to_string)";"nodes)];!maxd,nodes(* end of func _nesting_depth_of_methodbody *)letnesting_depth_of_methodbodymb=letd,_=_nesting_depth_of_methodbodymbindletenclosing_methodbodynd=letrecdoitn=tryletpnd=n#initial_parentinifis_methodbodypndthenpndelsedoitpndwithOtree.Parent_not_found_->raiseNot_foundinletres=doitndin[%debug_log"%s -> %s"nd#data#to_stringres#data#to_string];res(* end of func enclosing_methodbody *)letstmt_ancestorsstmt_nd=letres=ref[]inletrecdoitn=tryletp=n#initial_parentinifis_stmtpthenres:=p::!reselsedoitp#initial_parentwithOtree.Parent_not_found_->()indoitstmt_nd;!resletis_depth_definingnd=tryletmbnd=enclosing_methodbodyndinletndepth,nodes=_nesting_depth_of_methodbodymbndinlet_=ndepthin[%debug_log"nd=%s mbnd=%s depth=%d"nd#data#to_stringmbnd#data#to_stringndepth];matchnodeswith|[]->false|[n]->n==nd|_->lettbl=Hashtbl.create0inList.iter(funn->List.iter(funa->Hashtbl.addtblatrue)(stmt_ancestorsn);)nodes;Hashtbl.memtblndwithNot_found->false(* *)let_get_unittreend=tryletu=tree#get_nearest_containing_unitndinu#data#labelwithNot_found->""letget_unittreend=let_unit=_get_unittreendintryifis_argndthen_unit^"."^nd#initial_parent#initial_parent#data#labelelse_unitwith_->_unitletids_to_strids=ifids=[]then""elsesprintf"{%s}"(String.concat","ids)letsubtree_to_strtreend=sprintf"[%s]"(tree#subtree_to_simple_stringnd#gindex)letget_desc1is_wholetreend=letids=tree#get_ident_use_listnd#gindexinletextra=ifis_wholethenifis_paramnd||is_vdeclarationndthenletty=nd#initial_children.(0)inifis_typetythen":"^ty#data#labelelse""else""else""inletextra2=if(* is_whole *)truethensubtree_to_strtreendelse""innd#data#label^extra^(ids_to_strids)^extra2letget_desc2tree1tree2nd1nd2=letids1=tree1#get_ident_use_listnd1#gindexinletids2=tree2#get_ident_use_listnd2#gindexinsprintf"%s%s%s -> %s%s%s"nd1#data#label(ids_to_strids1)(subtree_to_strtree1nd1)nd2#data#label(ids_to_strids2)(subtree_to_strtree2nd2)letcat_argument=Triple.make_qnameL.lang_prefix"Argument"(* class Change.F.c *)classcoptionstree1tree2nmappingeditsget_unitget_desc1get_desc2=object(self)inheritCB.coptionstree1tree2nmappingeditsget_unitget_desc1get_desc2methodmkt_accessibility_increased?(category=Triple.ghost)=function|Cmodified(nd1,nd2)->beginignorecategory;[(self#mkent1nd1,p_accessibility_increased,self#mkent2nd2)]end|_->[]methodmkt_accessibility_decreased?(category=Triple.ghost)=function|Cmodified(nd1,nd2)->beginignorecategory;[(self#mkent1nd1,p_accessibility_decreased,self#mkent2nd2)]end|_->[]methodmkt_nesting_depth=self#_mkt_nesting_depthenclosing_methodbodynesting_depth_of_methodbodymethodmake_implementation_change()=letchanges=newchange_setinedits#iter(funed->matchedwith|E.Move(_,_,(info1,_),(info2,_))->letnd1=I.get_nodeinfo1inletnd2=I.get_nodeinfo2inifis_methodbodynd1&&is_methodbodynd2thenbegintryletmeth_nd1=nd1#initial_parentinletmeth_nd2=nd2#initial_parentinchanges#add(Cmodified(meth_nd1,meth_nd2))withOtree.Parent_not_found_->assertfalseend|_->());changes#get_list(* low <- private - protected - <none> - public -> high *)methodmake_accessibility_change~rel_cond~del_cond~ins_cond()=letchanges=newchange_setinifnotoptions#fact_for_changes_basic_flagthenbeginletd_tbl=Hashtbl.create0inleti_tbl=Hashtbl.create0inletuse_cand_tbl=Hashtbl.create0inletadd1tblkv=tryHashtbl.replacetblk(v::(Hashtbl.findtblk))withNot_found->Hashtbl.addtblk[v]inedits#iter(funed->matchedwith|E.Relabel(_,(info1,_),(info2,_))->letnd1=I.get_nodeinfo1inletnd2=I.get_nodeinfo2inletc=not(edits#mem_mov12nd1nd2)inif(rel_condnd1nd2)&&cthenbegintryletppnd1=nd1#initial_parent#initial_parentinletppnd2=nd2#initial_parent#initial_parentinchanges#add(Cmodified(ppnd1,ppnd2));self#set_useded;withOtree.Parent_not_found_->assertfalseend|E.Delete(_,info,_)->beginletnd=I.get_nodeinfointryifdel_condndthenbeginletppnd=nd#initial_parent#initial_parentinadd1d_tblppndnd;add1use_cand_tblppndedend;withOtree.Parent_not_found_->assertfalseend|E.Insert(_,info,_)->beginletnd=I.get_nodeinfointryifins_condndthenbeginletppnd=nd#initial_parent#initial_parentinadd1i_tblppndnd;add1use_cand_tblppndedend;withOtree.Parent_not_found_->assertfalseend|E.Move(_,sub,(info1,_),(info2,_))->if!sub<>E.Mpermutationthenbeginletnd1=I.get_nodeinfo1inletnd2=I.get_nodeinfo2intryifdel_condnd1thenbeginletppnd1=nd1#initial_parent#initial_parentinadd1d_tblppnd1nd1;add1use_cand_tblppnd1edend;ifins_condnd2thenbeginletppnd2=nd2#initial_parent#initial_parentinadd1i_tblppnd2nd2;add1use_cand_tblppnd2ed;end;withOtree.Parent_not_found_->assertfalseend);Hashtbl.iter(funndnds->[%debug_log"checking %a"nupsnd];tryletnd'=nmapping#findndin[%debug_log" -> %a"nupsnd'];letnds'=tryHashtbl.findi_tblnd'withNot_found->[]inifnot((List.existsis_protectednds)&&(List.existsis_protectednds'))thenbegintry[%debug_log"added %s - %s"nd#data#to_stringnd'#data#to_string];changes#add(Cmodified(nd,nd'));List.iterself#set_used(Hashtbl.finduse_cand_tblnd)with_->assertfalseendwithNot_found->())d_tbl;Hashtbl.iter(funnd'nds'->tryletnd=nmapping#inv_findnd'inifnot(Hashtbl.memd_tblnd)thenifnot(List.existsis_protectednds')thenbegintry[%debug_log"added %s - %s"nd#data#to_stringnd'#data#to_string];changes#add(Cmodified(nd,nd'));List.iterself#set_used(Hashtbl.finduse_cand_tblnd')with_->assertfalseendwithNot_found->())i_tbl;end;(* of if not options#fact_for_changes_basic_flag *)changes#get_list(* end of method make_accessibility_change *)method!make_changes_list()=letmkt_del=self#mkt_deleted~category:Triple.ghostinletmkt_del_ccat=self#mkt_deleted~category:catinletmkt_ins=self#mkt_inserted~category:Triple.ghostinletmkt_ins_ccat=self#mkt_inserted~category:catinletmkt_mod=self#mkt_modified~category:Triple.ghostinletmkt_mod_ccat=self#mkt_modified~category:catinletmkt_chgto=self#mkt_changed_to~category:Triple.ghostinletmkt_chgto_ccat=self#mkt_changed_to~category:catinletmkt_ren=self#mkt_renamed~category:Triple.ghostinletmkt_ren_ccat=self#mkt_renamed~category:catinletmkt_mov=self#mkt_moved_to~category:Triple.ghostinletmkt_odrchg=self#mkt_order_changed~category:Triple.ghostinletmkt_odrchg_ccat=self#mkt_order_changed~category:catin["primary name renamed",Slow,(self#make_renamingis_name),mkt_ren;"field access renamed",Slow,(self#make_renamingis_field_acc),mkt_ren;"condition expression changed",Smedium,(self#make_changed_tois_cond),mkt_chgto;"condition expression modified",Smedium,(self#aggregate_changesis_cond),mkt_mod;"else-part removed",Smedium,(self#make_delete_stis_else),mkt_del;"else-part added",Smedium,(self#make_insert_stis_else),mkt_ins;"else-part deleted",Smedium,(self#make_deleteis_else),mkt_del;"else-part inserted",Smedium,(self#make_insertis_else),mkt_ins;"method renamed or signature changed",Shigh,(self#make_renamingis_meth),mkt_ren;"method removed",Scrucial,(self#make_delete_stis_meth),mkt_del;"method added",Slow,(self#make_insert_stis_meth),mkt_ins;"method modified",Slow,(self#aggregate_changesis_meth),mkt_mod;"class renamed",Shigh,(self#make_renamingis_class),mkt_ren;"class removed",Smedium,(self#make_delete_stis_class),mkt_del;"class added",Slow,(self#make_insert_stis_class),mkt_ins;"interface renamed",Shigh,(self#make_renamingis_interface),mkt_ren;"interface removed",Smedium,(self#make_delete_stis_interface),mkt_del;"interface added",Slow,(self#make_insert_stis_interface),mkt_ins;"enum renamed",Shigh,(self#make_renamingis_enum),mkt_ren;"enum removed",Smedium,(self#make_delete_stis_enum),mkt_del;"enum added",Slow,(self#make_insert_stis_enum),mkt_ins;"parameter removed",Scrucial,(self#make_delete_stis_param),mkt_del;"parameter added",Scrucial,(self#make_insert_stis_param),mkt_ins;"parameter order changed",Scrucial,(self#make_order_changeis_param),mkt_odrchg;"parameter renamed",Smedium,(self#make_renamingis_param),mkt_ren;"parameter type changed",Scrucial,(self#make_changed_tois_paramty),mkt_chgto;"type parameter removed",Scrucial,(self#make_delete_stis_tparam),mkt_del;"type parameter added",Scrucial,(self#make_insert_stis_tparam),mkt_ins;"type parameter order changed",Scrucial,(self#make_order_changeis_tparam),mkt_odrchg;"type parameter renamed",Smedium,(self#make_renamingis_tparam),mkt_ren;"return type changed",Scrucial,(self#make_changed_tois_retty),mkt_chgto;"return value changed",Scrucial,(self#make_changed_tois_retval),mkt_chgto;"return value modified",Scrucial,(self#aggregate_changesis_retval),mkt_mod;"constructor removed",Scrucial,(self#make_delete_stis_ctor),mkt_del;"constructor added",Slow,(self#make_insert_stis_ctor),mkt_ins;"constructor deleted",Scrucial,(self#make_deleteis_ctor),mkt_del;"constructor inserted",Slow,(self#make_insertis_ctor),mkt_ins;"field removed",Scrucial,(self#make_delete_stis_field),mkt_del;"field added",Slow,(self#make_insert_stis_field),mkt_ins;"field type changed",Scrucial,(self#make_changed_tois_fieldty),mkt_chgto;"field renamed",Shigh,(self#make_renamingis_field),mkt_ren;"final modifier added",Scrucial,(self#make_insert_stis_final),mkt_ins;"final modifier removed",Slow,(self#make_delete_stis_final),mkt_del;"accessibility increased",Smedium,(self#make_accessibility_change~rel_cond:(funnd1nd2->(is_privatend1&&(is_protectednd2||is_publicnd2))||(is_protectednd1&&is_publicnd2))~del_cond:(funnd->is_privatend||is_protectednd)~ins_cond:is_public),self#mkt_accessibility_increased~category:Triple.ghost;"accessibility decreased",Scrucial,(self#make_accessibility_change~rel_cond:(funnd1nd2->(is_publicnd1&&(is_protectednd2||is_privatend2))||(is_protectednd1&&is_privatend2))~del_cond:is_public~ins_cond:(funnd->is_protectednd||is_privatend)),self#mkt_accessibility_decreased~category:Triple.ghost;"statement deleted to decrease nesting-depth",Shigh,(self#make_delete(funn->is_depth_definingn&&is_stmtn)),self#mkt_nesting_depth~category:Triple.ghost;"statement removed to decrease nesting-depth",Shigh,(self#make_delete_st(funn->is_depth_definingn&&is_stmtn)),self#mkt_nesting_depth~category:Triple.ghost;"statement inserted to increase nesting-depth",Shigh,(self#make_insert(funn->is_depth_definingn&&is_stmtn)),self#mkt_nesting_depth~category:Triple.ghost;"statement added to increase nesting-depth",Shigh,(self#make_insert_st(funn->is_depth_definingn&&is_stmtn)),self#mkt_nesting_depth~category:Triple.ghost;"statement moved to increase nesting-depth",Shigh,(self#_make_move(funn1n2->not(is_depth_definingn1)&&is_depth_definingn2)is_stmt),self#mkt_nesting_depth~category:Triple.ghost;"statement moved to decrease nesting-depth",Shigh,(self#_make_move(funn1n2->is_depth_definingn1&¬(is_depth_definingn2))is_stmt),self#mkt_nesting_depth~category:Triple.ghost;"parent class removed",Scrucial,(self#make_delete_stis_extends),mkt_del;"parent class added",Scrucial,(self#make_insert_stis_extends),mkt_ins;"parent class renamed",Scrucial,(self#make_renamingis_extended),mkt_ren;"parent interface removed",Scrucial,(self#make_delete_st(funnd->is_extendedifsnd||is_extendsifsnd)),mkt_del;"parent interface added",Scrucial,(self#make_insert_st(funnd->is_extendedifsnd||is_extendsifsnd)),mkt_ins;"parent interface renamed",Scrucial,(self#make_renamingis_extendedifs),mkt_ren;(* finer-grained changes *)"modifier removed",Smedium,(self#make_delete_stis_modifier),mkt_del;"modifier added",Smedium,(self#make_insert_stis_modifier),mkt_ins;"modifier changed",Smedium,(self#make_changed_tois_modifier),mkt_chgto;"method invocation modified",Slow,(self#aggregate_changesis_methinvok),mkt_mod;"method invocation renamed",Slow,(self#make_renamingis_methinvok),mkt_ren;"method invocation changed",Slow,(self#make_changed_tois_methinvok),mkt_chgto;"method invocation removed",Slow,(self#make_delete_stis_methinvok),mkt_del;"method invocation added",Slow,(self#make_insert_stis_methinvok),mkt_ins;"method invocation deleted",Slow,(self#make_deleteis_methinvok),mkt_del;"method invocation inserted",Slow,(self#make_insertis_methinvok),mkt_ins;"qualifier of method invocation renamed",Slow,(self#make_renamingis_qual),mkt_ren;"qualifier of method invocation removed",Slow,(self#make_deleteis_qual),mkt_del;"qualifier of method invocation added",Slow,(self#make_insertis_qual),mkt_ins;"block removed",Smedium,(self#make_delete_stis_block),mkt_del;"block added",Smedium,(self#make_insert_stis_block),mkt_ins;"block deleted",Smedium,(self#make_deleteis_block),mkt_del;"block inserted",Smedium,(self#make_insertis_block),mkt_ins;"block moved",Smedium,(self#make_moveis_block),mkt_mov;"throws-clause removed",Smedium,(self#make_delete_stis_throws),mkt_del;"throws-clause added",Smedium,(self#make_insert_stis_throws),mkt_ins;"exception type removed in throws-clause",Smedium,(self#make_delete_stis_thty),mkt_del;"exception type added in throws-clause",Smedium,(self#make_insert_stis_thty),mkt_ins;"exception type renamed in throws-clause",Smedium,(self#make_renamingis_thty),mkt_ren;"variable declaration renamed",Slow,(self#make_renamingis_vdeclarator),mkt_ren;"variable declaration removed",Smedium,(self#make_delete_st(funnd->is_vdeclarationnd||is_vdeclaratornd)),mkt_del;"variable declaration added",Smedium,(self#make_insert_st(funnd->is_vdeclarationnd||is_vdeclaratornd)),mkt_ins;"variable type changed",Slow,(self#make_changed_tois_varty),mkt_chgto;"instance creation changed",Slow,(self#make_changed_tois_instcreat),mkt_chgto;"instance creation modified",Slow,(self#aggregate_changesis_instcreat),mkt_mod;"instance creation removed",Smedium,(self#make_delete_stis_instcreat),mkt_del;"instance creation added",Smedium,(self#make_insert_stis_instcreat),mkt_ins;"array creation changed",Slow,(self#make_changed_tois_acreat),mkt_chgto;"array creation modified",Slow,(self#aggregate_changesis_acreat),mkt_mod;"array creation removed",Smedium,(self#make_delete_stis_acreat),mkt_del;"array creation added",Smedium,(self#make_insert_stis_acreat),mkt_ins;"constructor invocation changed",Slow,(self#make_changed_tois_ctorinvok),mkt_chgto;"constructor invocation modified",Slow,(self#aggregate_changesis_ctorinvok),mkt_mod;"constructor invocation removed",Smedium,(self#make_delete_stis_ctorinvok),mkt_del;"constructor invocation added",Smedium,(self#make_insert_stis_ctorinvok),mkt_ins;"assertion condition changed",Slow,(self#make_changed_tois_assertcond),mkt_chgto;"assertion condition modified",Slow,(self#aggregate_changesis_assertcond),mkt_mod;"assertion removed",Smedium,(self#make_delete_stis_assert),mkt_del;"assertion added",Smedium,(self#make_insert_stis_assert),mkt_ins;"assertion message removed",Slow,(self#make_delete_stis_assertmes),mkt_del;"assertion message added",Slow,(self#make_insert_stis_assertmes),mkt_ins;"initialization-part of for-statement changed",Slow,(self#make_changed_tois_forinit),mkt_chgto;"initialization-part of for-statement modified",Slow,(self#aggregate_changesis_forinit),mkt_mod;"condition-part of for-statement changed",Slow,(self#make_changed_tois_forcond),mkt_chgto;"condition-part of for-statement modified",Slow,(self#aggregate_changesis_forcond),mkt_mod;"update-part of for-statement changed",Slow,(self#make_changed_tois_forupdate),mkt_chgto;"update-part of for-statement modified",Slow,(self#aggregate_changesis_forupdate),mkt_mod;"assignment removed",Smedium,(self#make_delete_stis_assign),mkt_del;"assignment added",Smedium,(self#make_insert_stis_assign),mkt_ins;"LHS of assignment changed",Slow,(self#make_changed_tois_lhs),mkt_chgto;"LHS of assignment modified",Slow,(self#aggregate_changesis_lhs),mkt_mod;"RHS of assignment changed",Slow,(self#make_changed_tois_rhs),mkt_chgto;"RHS of assignment modified",Slow,(self#aggregate_changesis_rhs),mkt_mod;"argument removed",Scrucial,(self#make_delete_stis_arg),mkt_del_ccat_argument;"argument added",Scrucial,(self#make_insert_stis_arg),mkt_ins_ccat_argument;"argument order changed",Scrucial,(self#make_order_changeis_arg),mkt_odrchg_ccat_argument;"argument renamed",Slow,(self#make_renamingis_arg),mkt_ren_ccat_argument;"argument changed",Slow,(self#make_changed_tois_arg),mkt_chgto_ccat_argument;"argument modified",Slow,(self#aggregate_changesis_arg),mkt_mod_ccat_argument;"import declaration removed",Smedium,(self#make_delete_stis_idecl),mkt_del;"import declaration added",Smedium,(self#make_insert_stis_idecl),mkt_ins;"import declaration renamed",Smedium,(self#make_renamingis_idecl),mkt_ren;"import declaration order changed",Slow,(self#make_order_changeis_idecl),mkt_odrchg;"package declaration removed",Smedium,(self#make_delete_stis_pdecl),mkt_del;"package declaration added",Smedium,(self#make_insert_stis_pdecl),mkt_ins;"package declaration renamed",Smedium,(self#make_renamingis_pdecl),mkt_ren;"constant changed",Smedium,(self#make_changed_tois_literal),mkt_chgto;"expression removed",Slow,(self#make_delete_stis_primary_or_expression),mkt_del;"expression added",Slow,(self#make_insert_stis_primary_or_expression),mkt_ins;"expression moved",Slow,(self#make_moveis_primary_or_expression),mkt_mov;"expression changed",Slow,(self#make_changed_tois_primary_or_expression),mkt_chgto;"expression modified",Slow,(self#aggregate_changesis_primary_or_expression),mkt_mod;"unary operator removed",Slow,(self#make_deleteis_unaryop),mkt_del;"unary operator added",Slow,(self#make_insertis_unaryop),mkt_ins;"unary operator changed",Slow,(self#make_changed_tois_unaryop),mkt_chgto;"binary operator removed",Slow,(self#make_deleteis_binaryop),mkt_del;"binary operator added",Slow,(self#make_insertis_binaryop),mkt_ins;"binary operator changed",Slow,(self#make_changed_tois_binaryop),mkt_chgto;"statement removed",Smedium,(self#make_delete_stis_stmt),mkt_del;"statement added",Smedium,(self#make_insert_stis_stmt),mkt_ins;"statement deleted",Smedium,(self#make_deleteis_stmt),mkt_del;"statement inserted",Smedium,(self#make_insertis_stmt),mkt_ins;"statement order changed",Slow,(self#make_order_changeis_stmt),mkt_odrchg;"statement moved",Smedium,(self#make_moveis_stmt),mkt_mov;"statement changed",Slow,(self#make_changed_tois_stmt),mkt_chgto;"statement modified",Slow,(self#aggregate_changesis_stmt),mkt_mod;"method implementation changed",Slow,(self#make_implementation_change),mkt_mod;"(removed)",Slow,(self#make_delete_st(fun_->true)),mkt_del;"(added)",Slow,(self#make_insert_st(fun_->true)),mkt_ins;"(deleted)",Slow,(self#make_delete(fun_->true)),mkt_del;"(inserted)",Slow,(self#make_insert(fun_->true)),mkt_ins;"(moved)",Slow,(self#make_move(fun_->true)),mkt_mov;"(changed)",Slow,(self#make_changed_to(fun_->true)),mkt_chgto;"(renamed)",Slow,(self#make_renamingis_named),mkt_ren;"(order changed)",Slow,(self#make_order_change(fun_->true)),mkt_odrchg;](* end of method make_changes_list *)end(* of class Change.F.c *)letextractoptionstree1tree2nmappingedits=letchg=newcoptionstree1tree2nmappingeditsget_unitget_desc1get_desc2inletres=chg#extractinchg#recover_edits;resend(* of functor Change.F *)