package Ġme . ty ler bw ong . gradle . metal ava . task Ċ Ċ import Ġme . ty ler bw ong . gradle . metal ava . Module Ċ import Ġme . ty ler bw ong . gradle . metal ava . extension . Metal ava Extension Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . tasks . Java Exec Ċ import Ġorg . gradle . api . tasks . Task Provider Ċ import Ġjava . io . File Ċ import Ġjava . util . Locale Ċ Ċ internal Ġobject ĠMet al ava Signature Ġ: ĠMet al ava Task Container () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġsource Language Directory Names Ġ= ĠlistOf (" java ", Ġ" kotlin ") ĊĊĠĠĠ Ġfun Ġregister Metal ava Signature Task ( ĊĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġdescription : ĠString , ĊĠĠĠĠĠĠĠ Ġextension : ĠMet al ava Extension , ĊĠĠĠĠĠĠĠ Ġmodule : ĠModule , ĊĠĠĠĠĠĠĠ Ġtask Group : ĠString ? Ġ= Ġ" documentation ", ĊĠĠĠĠĠĠĠ Ġfilename : ĠString Ġ= Ġextension . filename ĊĠĠĠ Ġ): ĠTask Provider < Java Exec > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwith ( project ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtasks . register ( name , ĠJava Exec :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( extension . source Paths . isNotEmpty ()) Ġ{ Ġ" source Paths Ġcannot Ġbe Ġempty ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task Group Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ= Ġtask Group ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . description Ġ= Ġdescription ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Class . set (" com . android . tools . metal ava . Driver ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclasspath ( extension . metal ava Jar Path ?. let Ġ{ Ġfiles ( it ) Ġ} Ġ?: Ġget Metal ava Classpath ( extension . version )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Files Ġ= Ġextension . source Paths . flatMap Ġ{ Ġsource Path Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile ( source Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. walk () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Enter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension . ignore Source Paths . none Ġ{ Ġignored DirectoryName Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġignored DirectoryName . equals ( it . name , Ġignore Case Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . isDirectory Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . name . toLowerCase ( Locale . getDefault ()) Ġin Ġsource Language Directory Names Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinputs . files ( source Files ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinputs . property (" documentation ", Ġextension . documentation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinputs . property (" format ", Ġextension . format ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinputs . property (" signature ", Ġextension . signature ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinputs . property (" java Source Level ", Ġextension . java Source Level ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinputs . property (" output Kotlin Null s ", Ġextension . output Kotlin Null s . flag Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinputs . property (" output Default Values ", Ġextension . output Default Values . flag Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinputs . property (" include Signature Version ", Ġextension . include Signature Version . flag Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinputs . property (" hidden Packages ", Ġextension . hidden Packages ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinputs . property (" hidden Annotations ", Ġextension . hidden Annotations ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutputs . file ( filename ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo First Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfull Classpath Ġ= Ġ( module . boot Classpath Ġ+ Ġmodule . compile Classpath ). join ToString ( File . path Separator ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Paths Ġ= ĠlistOf ("-- source - path ") Ġ+ Ġsource Files . join ToString ( File . path Separator ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhide Packages Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension . hidden Packages . flatMap Ġ{ ĠlistOf ("-- hide - package ", Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhide Annotations Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension . hidden Annotations . flatMap Ġ{ ĠlistOf ("-- hide - annotation ", Ġit ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs : ĠList < String > Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ extension . documentation }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- no - banner ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- format =${ extension . format }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ extension . signature }", Ġfilename , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- java - source ", Ġ"${ extension . java Source Level }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- classpath ", Ġfull Classpath , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- output - kotlin - null s =${ extension . output Kotlin Null s . flag Value }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- output - default - values =${ extension . output Default Values . flag Value }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- include - signature - version =${ extension . include Signature Version . flag Value }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ+ Ġsource Paths Ġ+ Ġhide Packages Ġ+ Ġhide Annotations ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Ignore Exit Value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Args ( args ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ