package Ġio . github . f om in . o as gen . gradle . java Ċ Ċ import Ġio . github . f om in . o as gen . gradle .* Ċ import Ġorg . gradle . api . Named Domain Object Provider Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . tasks . Source Set Ċ import Ġorg . gradle . api . tasks . Task Provider Ċ import Ġjava . io . File Ċ Ċ sealed Ġclass ĠOutput Configuration Ċ Ċ class ĠSingle Output ( ĊĠĠĠ Ġval Ġoutput Dir : ĠFile ?, ĊĠĠĠ Ġval Ġsource Set Provider : ĠNamed Domain Object Provider < Source Set >? Ċ ) Ġ: ĠOutput Configuration () Ġ{ ĊĠĠĠ Ġconstructor ( source Set Provider : ĠNamed Domain Object Provider < Source Set > ?) Ġ: Ġthis ( null , Ġsource Set Provider ) ĊĠĠĠ Ġconstructor () Ġ: Ġthis ( null , Ġnull ) Ċ } Ċ Ċ class ĠSepar ated Output ( ĊĠĠĠ Ġval Ġdto : ĠSingle Output ?, ĊĠĠĠ Ġval Ġroute : ĠSingle Output ?, Ċ ) Ġ: ĠOutput Configuration () Ċ Ċ private Ġsealed Ġclass ĠEffect ive Output Configuration Ċ Ċ private Ġclass ĠEffect ive Single Output ( ĊĠĠĠ Ġval Ġoutput Dir : ĠFile , ĊĠĠĠ Ġval Ġsource Set Provider : ĠNamed Domain Object Provider < Source Set > ?, Ċ ) Ġ: ĠEffect ive Output Configuration () Ċ Ċ private Ġclass ĠEffect ive Separ ated Output ( ĊĠĠĠ Ġval Ġdto : ĠEffect ive Single Output , ĊĠĠĠ Ġval Ġroute : ĠEffect ive Single Output , Ċ ) Ġ: ĠEffect ive Output Configuration () Ċ Ċ sealed Ġclass ĠNamespace Configuration Ċ Ċ class ĠSingle Namespace ( val Ġnamespace : ĠString ) Ġ: ĠNamespace Configuration () Ċ Ċ class ĠSepar ated Namespace ( val Ġdto Namespace : ĠString , Ġval Ġroute Namespace : ĠString ) Ġ: ĠNamespace Configuration () Ċ Ċ class ĠJava Generator ( ĊĠĠĠ Ġprivate Ġval Ġgenerator Id : ĠString , ĊĠĠĠ Ġprivate Ġval Ġgenerator Dependencies : ĠList < String >, ĊĠĠĠ Ġprivate Ġval Ġnamespace Configuration : ĠNamespace Configuration , ĊĠĠĠ Ġprivate Ġval Ġoutput Configuration : ĠOutput Configuration , ĊĠĠĠ Ġprivate Ġval Ġconverter Ids : ĠList < String > Ġ= Ġempty List (), ĊĠĠĠ Ġprivate Ġval Ġapi Dependencies : ĠList < String > Ġ= Ġempty List (), Ċ ) Ġ: ĠGenerator Spec Ġ{ ĊĊĠĠĠ Ġprivate Ġfun Ġeffective Output Configuration ( project : ĠProject , Ġname : ĠString ): ĠEffect ive Output Configuration Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdefault Output Dir Ġ= ĠFile ( project . build Dir , Ġ" o as - gen /${ name }") ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( output Configuration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSingle Output Ġ-> ĠEffect ive Single Output ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Configuration . output Dir Ġ?: Ġdefault Output Dir , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Configuration . source Set Provider , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSepar ated Output Ġ-> ĠEffect ive Separ ated Output ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEffect ive Single Output ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Configuration . dto ?. output Dir Ġ?: Ġdefault Output Dir , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Configuration . dto ?. source Set Provider ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEffect ive Single Output ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Configuration . route ?. output Dir Ġ?: Ġdefault Output Dir , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Configuration . route ?. source Set Provider ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġconfigure ( ĊĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġgeneration Source : ĠGeneration Source , ĊĠĠĠĠĠĠĠ Ġschema Path : ĠString , ĊĠĠĠ Ġ): ĠTask Parameters Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġeffective Output Configuration Ġ= Ġeffective Output Configuration ( project , Ġname ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdto Output Dir Name Provider Ġ= Ġwhen Ġ( effective Output Configuration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEffect ive Single Output Ġ-> Ġeffective Output Configuration . output Dir . path ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEffect ive Separ ated Output Ġ-> Ġeffective Output Configuration . dto . output Dir . path ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġinitial Dto Output Dir Provider Ġ= Ġproject . objects . directory Property () ĊĠĠĠĠĠĠĠ Ġinitial Dto Output Dir Provider . set ( File (". ")) ĊĠĠĠĠĠĠĠ Ġval Ġdto Output Dir Provider Ġ= Ġinitial Dto Output Dir Provider . dir ( dto Output Dir Name Provider ) ĊĊĠĠĠĠĠĠĠ Ġval Ġroute Output Dir Name Provider Ġ= Ġwhen Ġ( effective Output Configuration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEffect ive Single Output Ġ-> Ġeffective Output Configuration . output Dir . path ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEffect ive Separ ated Output Ġ-> Ġeffective Output Configuration . route . output Dir . path ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġinitial Route Output Dir Provider Ġ= Ġproject . objects . directory Property () ĊĠĠĠĠĠĠĠ Ġinitial Route Output Dir Provider . set ( File (". ")) ĊĠĠĠĠĠĠĠ Ġval Ġroute Output Dir Provider Ġ= Ġinitial Route Output Dir Provider . dir ( route Output Dir Name Provider ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdto Namespace Ġ= Ġwhen Ġ( namespace Configuration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSingle Namespace Ġ-> Ġnamespace Configuration . namespace ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSepar ated Namespace Ġ-> Ġnamespace Configuration . dto Namespace ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġroute Namespace Ġ= Ġwhen Ġ( namespace Configuration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSingle Namespace Ġ-> Ġnamespace Configuration . namespace ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSepar ated Namespace Ġ-> Ġnamespace Configuration . route Namespace ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠTask Parameters ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerator Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconverter Ids , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdto Namespace , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroute Namespace , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdto Output Dir Provider , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroute Output Dir Provider , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerator Dependencies , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Task Created ( ĊĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġo as Gen Task Provider : ĠTask Provider < O as Gen Task >, ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġeffective Output Configuration Ġ= Ġeffective Output Configuration ( project , Ġname )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEffect ive Single Output Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Source Set ( o as Gen Task Provider , Ġproject , Ġeffective Output Configuration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEffect ive Separ ated Output Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Source Set ( o as Gen Task Provider , Ġproject , Ġeffective Output Configuration . dto ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Source Set ( o as Gen Task Provider , Ġproject , Ġeffective Output Configuration . route ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Source Set ( ĊĠĠĠĠĠĠĠ Ġo as Gen Task Provider : ĠTask Provider < O as Gen Task >, ĊĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ Ġoutput Configuration : ĠEffect ive Single Output , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoutput Configuration . source Set Provider ?. configure Ġ{ Ġsource Set Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Set . java Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . src Dir ( output Configuration . output Dir ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . tasks . named ( source Set . compile Java Task Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . depends On ( o as Gen Task Provider ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi Dependencies . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfiguration Name Ġ= Ġif Ġ( project . configurations . find ByName ( source Set . api Configuration Name ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Set . api Configuration Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Set . implementation Configuration Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . dependencies . add ( configuration Name , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ