package Ġorg . jetbrains . kotlin . tools Ċ Ċ import Ġkotlin .* Ċ import Ġkotlin . io .* Ċ import Ġkotlin . util .* Ċ import Ġjava . io .* Ċ import Ġjava . util .* Ċ Ċ fun Ġgenerate File ( out File : ĠFile , Ġheader : ĠString , Ġinput File : ĠFile , Ġf : Ġ( String )-> ĠString ) Ġ{ ĊĠ Ġprintln (" Parsing Ġ$ inputFile Ġand Ġwriting Ġ$ out File ") ĊĊĠ Ġout File . getParent File ()?. mkdir s () ĊĠ Ġval Ġwriter Ġ= ĠPrintWriter ( FileWriter ( out File )) ĊĠ Ġtry Ġ{ ĊĠĠĠ Ġwriter . println ("// ĠNOTE Ġthis Ġfile Ġis Ġauto - generated Ġfrom Ġ$ inputFile ") ĊĠĠĠ Ġwriter . println ( header ) ĊĊĠĠĠ Ġval Ġreader Ġ= ĠFileReader ( inputFile ). buffered () ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġ// ĠTODO Ġide ally Ġwe 'd Ġuse Ġa Ġfilter Not () Ġhere Ġ:) ĊĠĠĠĠĠ Ġval Ġiter Ġ= Ġreader . line Iterator () ĊĠĠĠĠĠ Ġwhile Ġ( iter . hasNext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġiter . next () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( line . startsWith (" package ")) Ġcontinue ĊĊĠĠĠĠĠĠĠ Ġval Ġx form Ġ= Ġf ( line ) ĊĠĠĠĠĠĠĠ Ġwriter . println ( xform ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠ Ġreader . close () ĊĠĠĠĠĠ Ġreader . close () ĊĠĠĠ Ġ} ĊĠ Ġ} Ġfinally Ġ{ ĊĠĠĠ Ġwriter . close () ĊĠ Ġ} Ċ } ĊĊ Ċ /** Ċ Ġ* ĠGenerates Ġmethods Ġin Ġthe Ġstandard Ġlibrary Ġwhich Ġare Ġmostly Ġidentical Ċ Ġ* Ġbut Ġjust Ġusing Ġa Ġdifferent Ġinput Ġkind . Ċ Ġ* Ċ Ġ* ĠKind a Ġlike Ġm im ick ing Ġsource Ġmacros Ġhere , Ġbut Ġthis Ġavoids Ġthe Ġin e fficiency Ġof Ġtype Ġconversions Ċ Ġ* Ġat Ġruntime . Ċ Ġ*/ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠ Ġvar Ġstdlib Ġ= ĠFile (" stdlib ") ĊĠ Ġif Ġ(! stdlib . exists ()) Ġ{ ĊĠĠĠ Ġstdlib Ġ= ĠFile ("../ stdlib ") ĊĠĠĠ Ġif Ġ(! stdlib . exists ()) Ġ{ ĊĠĠĠĠĠ Ġprintln (" Cannot Ġfind Ġstdlib !") ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĠ Ġval Ġsrc Dir Ġ= ĠFile ( stdlib , Ġ" kt Src ") ĊĠ Ġval Ġout Dir Ġ= ĠFile ( src Dir , Ġ" generated ") ĊĊĊĠ Ġ// ĠJava Iter ables Ġ- ĠGeneric Ġiterable Ġstuff ĊĠ Ġgenerate File ( File ( out Dir , Ġ" Arrays From Java Iter ables . kt "), Ġ" package Ġkotlin \ n \ n import Ġkotlin . util .* ", ĠFile ( src Dir , Ġ" Java Iter ables . kt ")) Ġ{ ĊĠĠĠĠĠ Ġit . replaceAll (" java . lang . Iterable < T ", Ġ" Array < T "). replaceAll (" java . lang . Iterable < T ", Ġ" Array < T ") ĊĠ Ġ} ĊĊĠ Ġgenerate File ( File ( out Dir , Ġ" Standard From Java Iter ables . kt "), Ġ" package Ġkotlin \ n \ n import Ġkotlin . util .* ", ĠFile ( src Dir , Ġ" Java Iter ables . kt ")) Ġ{ ĊĠĠĠ Ġit . replaceAll (" java . lang . Iterable < T ", Ġ" Iterable < T ") ĊĠ Ġ} ĊĊĊĠ Ġ// ĠJava Collections Ġ- Ġmethods Ġreturning Ġa Ġcollection Ġof Ġthe Ġsame Ġinput Ġsize Ġ( if Ġits Ġa Ġcollection ) ĊĊĠ Ġgenerate File ( File ( out Dir , Ġ" Arrays From Java Collections . kt "), Ġ" package Ġkotlin ", ĠFile ( src Dir , Ġ" Java Collections . kt ")) Ġ{ ĊĠĠĠ Ġit . replaceAll (" java . util . Collection < T ", Ġ" Array < T ") ĊĠ Ġ} ĊĊĠ Ġgenerate File ( File ( out Dir , Ġ" JavaUtil Iter ables From Java Collections . kt "), Ġ" package Ġkotlin . util ", ĠFile ( src Dir , Ġ" Java Collections . kt ")) Ġ{ ĊĠĠĠ Ġit . replaceAll (" java . util . Collection < T ", Ġ" java . lang . Iterable < T "). replaceAll ("( this . size )", Ġ"") ĊĠ Ġ} ĊĊĠ Ġgenerate File ( File ( out Dir , Ġ" Standard From Java Collections . kt "), Ġ" package Ġkotlin ", ĠFile ( src Dir , Ġ" Java Collections . kt ")) Ġ{ ĊĠĠĠ Ġit . replaceAll (" java . util . Collection < T ", Ġ" Iterable < T "). replaceAll ("( this . size )", Ġ"") ĊĠ Ġ} Ċ } Ċ