package Ġio . pro venance . p 8 e . plugin Ċ Ċ import Ġio . pro venance . scope . contract . spec . P 8 e Contract Ċ import Ġio . pro venance . scope . contract . spec . P 8 e Scope Specification Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . jvm . tasks . Jar Ċ import Ġorg . reflection s . Reflection s Ċ import Ġorg . reflection s . sc anners . Sub Types Scanner Ċ import Ġjava . io . File Ċ import Ġjava . util . jar . Jar File Ċ Ċ fun Ġget Project ( project : ĠProject , Ġname : ĠString ): ĠProject Ġ{ ĊĠĠĠ Ġreturn Ġproject . sub projects . first OrNull Ġ{ Ġit . name Ġ== Ġname Ġ} ĊĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" Sub project Ġ$ name Ġcould Ġnot Ġbe Ġfound ") Ċ } Ċ Ċ fun Ġget Jar ( project : ĠProject , Ġtask Name : ĠString Ġ= Ġ" jar "): ĠFile Ġ{ ĊĠĠĠ Ġreturn Ġ( project . tasks . get ByName ( task Name ) Ġas ĠJar ) ĊĠĠĠĠĠĠĠ Ġ. archive File ĊĠĠĠĠĠĠĠ Ġ. or Null ĊĠĠĠĠĠĠĠ Ġ? . as File ĊĠĠĠĠĠĠĠ Ġ? . also Ġ{ ĠJar File ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" task Ġ: $ task Name Ġin Ġ${ project . name } Ġcould Ġnot Ġbe Ġfound ") Ċ } Ċ Ċ fun Ġfind Scopes ( class Loader : ĠClassLoader ): ĠSet < Class < out ĠP 8 e Scope Specification >> Ġ= ĊĠĠĠ Ġfind Classes ( P 8 e Scope Specification :: class . java , Ġclass Loader ) Ċ Ċ fun Ġfind Contracts ( class Loader : ĠClassLoader ): ĠSet < Class < out ĠP 8 e Contract >> Ġ= ĊĠĠĠ Ġfind Classes ( P 8 e Contract :: class . java , Ġclass Loader ) Ċ Ċ fun Ġfind Protos ( class Loader : ĠClassLoader ): ĠSet < Class < out Ġcom . google . protobuf . Message >> Ġ= ĊĠĠĠ Ġfind Classes ( com . google . protobuf . Message :: class . java , Ġclass Loader ) Ċ Ċ fun < T > Ġfind Classes ( clazz : ĠClass < T >, Ġclass Loader : ĠClassLoader ): ĠSet < Class < out ĠT >> Ġ= ĊĠĠĠ ĠReflection s (" io ", Ġ" com ", ĠSub Types Scanner ( false ), Ġclass Loader ) ĊĠĠĠĠĠĠĠ Ġ. getSub Types Of ( clazz ) Ċ