package Ġnet . ruby gr ape fruit . gen . builders Ċ Ċ import Ġnet . ruby gr ape fruit . gen . specs . Plugin Use Spec Ċ Ċ /** Ċ Ġ* ĠA Ġmutable Ġset Ġof Ġplugin Ġspecs . Ċ Ġ*/ Ċ interface ĠPlugins Spec Ġ{ ĊĠĠĠ Ġval Ġplugins : ĠList < Plugin Use Spec > ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġempty Ġ= Ġobject Ġ: ĠPlugins Spec Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġplugins : ĠList < Plugin Use Spec > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠComposite Plugins Spec Ġ: ĠFinal izable Builder < List < Plugin Use Spec >> (), ĠPlugins Spec Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcontents Ġ= Ġmutable ListOf < Plugins Spec >() ĊĊĠĠĠ Ġoverride Ġval Ġplugins : ĠList < Plugin Use Spec > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġvalue ĊĊĠĠĠ Ġoverride Ġfun Ġcalculate Value (): ĠList < Plugin Use Spec > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcontents . flatMap Ġ{ Ġit . plugins Ġ}. distinct () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfinalize () Ġ{ ĊĠĠĠĠĠĠĠ Ġfinalize On Read () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd ( plugin : ĠPlugins Spec ) Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Can Mutate () ĊĠĠĠĠĠĠĠ Ġcontents . add ( plugin ) ĊĠĠĠ Ġ} Ċ }