package Ġcom . strument a . kol as u . parser bench Ċ Ċ import Ġcom . google . gson . JsonObject Ċ import Ġcom . google . gson . Json Primitive Ċ import Ġcom . strument a . kol as u . emf . EM F Enabled Parser Ċ import Ġcom . strument a . kol as u . emf . save As JsonObject Ċ import Ġcom . strument a . kol as u . emf . to EObject Ċ import Ġcom . strument a . kol as u . parsing . Parsing Result Ċ import Ġcom . strument a . kol as u . validation . Result Ċ import Ġorg . eclipse . emf . common . util . URI Ċ import Ġorg . emf json . jackson . resource . Json Resource Factory Ċ import Ġjava . io . File Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . io . FileWriter Ċ Ċ class ĠParser Bench Example Generator ( ĊĠĠĠ Ġval Ġparser : ĠE MF Enabled Parser < *, Ġ*, Ġ* >, ĊĠĠĠ Ġval Ġdirectory : ĠFile , ĊĠĠĠ Ġval Ġfail OnError : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġresource URI : ĠURI Ġ= ĠURI . create URI ("") Ċ ) Ġ{ ĊĊĠĠĠ Ġval Ġresource Ġ= ĠJson Resource Factory (). create Resource ( resource URI ) ĊĊĠĠĠ Ġfun Ġgenerate Met amodel () Ġ{ ĊĠĠĠĠĠĠĠ Ġparser . generate Met amodel ( resource ) ĊĠĠĠĠĠĠĠ Ġval Ġmet amodel File Ġ= ĠFile ( directory , Ġ" met amodel . json ") ĊĠĠĠĠĠĠĠ ĠFileOutputStream ( met amodel File ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresource . save ( it , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgenerate Example ( file : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgenerate Example ( file . name Without Extension , Ġfile . read Text ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgenerate Example ( name : ĠString , Ġfile : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgenerate Example ( name , Ġfile . read Text ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgenerate Example ( name : ĠString , Ġcode : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparsing Result Ġ= Ġparser . parse ( code ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! parsing Result . correct Ġ&& Ġfail OnError ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠExample Generation Failure ( parsing Result , Ġ" Cannot Ġgenerate Ġexamples Ġfrom Ġcode Ġwith Ġerrors ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġjo Ġ= ĠJsonObject () ĊĠĠĠĠĠĠĠ Ġjo . add (" name ", ĠJson Primitive ( name )) ĊĠĠĠĠĠĠĠ Ġjo . add (" code ", ĠJson Primitive ( code )) ĊĠĠĠĠĠĠĠ Ġval Ġe Object Ġ= ĠResult ( parsing Result . issues , Ġparsing Result . root ). to EObject ( resource ) ĊĠĠĠĠĠĠĠ Ġresource . contents . add ( e Object ) ĊĠĠĠĠĠĠĠ Ġval Ġast : ĠJsonObject ? ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġast Ġ= Ġe Object . save As JsonObject () ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresource . contents . remove ( e Object ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġjo . add (" ast ", Ġast ) ĊĠĠĠĠĠĠĠ Ġjo . addProperty (" parsing Time ", Ġparsing Result . first Stage !!. time ) ĊĠĠĠĠĠĠĠ Ġjo . addProperty (" ast Building Time ", Ġparsing Result . time ) ĊĠĠĠĠĠĠĠ Ġjo . toString () ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( directory , Ġ"$ name . json ") ĊĠĠĠĠĠĠĠ Ġval Ġfw Ġ= ĠFile Writer ( file ) ĊĠĠĠĠĠĠĠ Ġfw . write ( jo . toString ()) ĊĠĠĠĠĠĠĠ Ġfw . close () ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠExample Generation Failure ( val Ġresult : ĠParsing Result <* >, Ġmessage : ĠString ) Ġ: ĠRuntimeException ( message ) Ċ