package Ġio . github . t 4 5 k . scm . matching Ċ Ċ import Ġio . github . t 4 5 k . scm . SCM Configuration Ċ import Ġio . github . t 4 5 k . scm . entity . Code Fragment Ċ import Ġio . github . t 4 5 k . scm . entity . Token Info Ċ import Ġio . github . t 4 5 k . scm . matching . algorithms . String Search Algorithm Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ Ċ class ĠClone Matcher ( config : ĠS CM Configuration ) Ġ: ĠI Clone Matcher Ġ{ ĊĠĠĠ Ġprivate Ġval Ġquery : ĠList < Token Info > Ġ= Ġconfig . query . join ToString (" Ġ"). let Ġ{ ĠJ DT Tokenizer (). tokenize ( it ) Ġ} ĊĠĠĠ Ġprivate Ġval Ġstring Search Algorithm : ĠString Search Algorithm Ġ= ĠString Search Algorithm . create ( config . algorithm , Ġquery . map Ġ{ Ġit . token Number Ġ}) ĊĊĠĠĠ Ġoverride Ġfun Ġmatch ( paths : ĠList < Path >): ĠList < Code Fragment > Ġ= Ġpaths . flatMap Ġ{ Ġmatch ( it ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmatch ( path : ĠPath ): ĠList < Code Fragment > Ġ= ĊĠĠĠĠĠĠĠ ĠFiles . readString ( path ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠJ DT Tokenizer (). tokenize ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġtoken Infos Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring Search Algorithm . search ( token Infos . map Ġ{ Ġit . token Number Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠCode Fragment ( path , Ġtoken Infos [ it ]. line Number , Ġtoken Infos [ it Ġ+ Ġquery . size Ġ- Ġ 1 ]. line Number ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ } Ċ