// ĠCopyright Ġ 2 0 0 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ @ file : Suppress (" unused ") Ċ Ċ package Ġcom . intellij . openapi . roots Ċ Ċ import Ġcom . intellij . j ps . impl . J ps Plugin Bean Ċ import Ġcom . intellij . openapi . Disposable Ċ import Ġcom . intellij . openapi . application . run Write Action And Wait Ċ import Ġcom . intellij . openapi . extensions . Default Plugin Descriptor Ċ import Ġcom . intellij . openapi . extensions . Plugin Id Ċ import Ġcom . intellij . openapi . util . Dis poser Ċ import Ġcom . intellij . openapi . util . io . File Util Ċ import Ġcom . intellij . util . lang . Url ClassLoader Ċ import Ġorg . j dom . Element Ċ import Ġorg . jetbrains . j ps . model . ex . J ps Element Base Ċ import Ġorg . jetbrains . j ps . model . ex . J ps ElementType Base Ċ import Ġorg . jetbrains . j ps . model . module . J ps Module Source Root Type Ċ import Ġorg . jetbrains . j ps . model . serialization . J ps Model Serializer Extension Ċ import Ġorg . jetbrains . j ps . model . serialization . module . J ps Module Source Root Properties Serializer Ċ import Ġjava . io . File Ċ Ċ class ĠTest Custom Root Model Serializer Extension Ġ: ĠJ ps Model Serializer Extension () Ġ{ ĊĠ Ġoverride Ġfun Ġget Module Source Root Properties Serial izers (): ĠList < J ps Module Source Root Properties Serializer <* >> Ġ= ĊĠĠĠ ĠlistOf ( Test Custom Source Root Properties Serializer ( Test Custom Source Root Type . INSTANCE , ĠTest Custom Source Root Type . TYPE _ ID )) ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġfun Ġregister Test Custom Source Root Type ( temp Plugin Root : ĠFile , Ġdis posable : ĠDis posable ) Ġ{ ĊĠĠĠĠĠ Ġval Ġj ps Plugin Disposable Ġ= ĠDis poser . new Disposable () ĊĠĠĠĠĠ ĠDis poser . register ( dis posable , ĠDis posable Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Write Action And Wait Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠDis poser . dispose ( j ps Plugin Disposable ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠ ĠFile Util . write ToFile ( File ( temp Plugin Root , Ġ" META - INF / services /${ J ps Model Serializer Extension :: class . java . name } "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Custom Root Model Serializer Extension :: class . java . name ) ĊĠĠĠĠĠ Ġval Ġplugin ClassLoader Ġ= ĠUrl ClassLoader . build (). parent ( Test Custom Root Model Serializer Extension :: class . java . class Loader ). urls ( temp Plugin Root . to URI (). to URL ()). get () ĊĠĠĠĠĠ Ġval Ġplugin Descriptor Ġ= ĠDefault Plugin Descriptor ( Plugin Id . getId (" com . intellij . custom . source . root . test "), Ġplugin ClassLoader ) ĊĠĠĠĠĠ ĠJ ps Plugin Bean . EP _ NAME . point . register Extension ( J ps Plugin Bean (), Ġplugin Descriptor , Ġj ps Plugin Disposable ) ĊĠĠĠ Ġ} ĊĊĠ Ġ} Ċ } Ċ Ċ class ĠTest Custom Source Root Type Ġprivate Ġconstructor () Ġ: ĠJ ps ElementType Base < Test Custom Source Root Properties >(), ĠJ ps Module Source Root Type < Test Custom Source Root Properties > Ġ{ ĊĠ Ġoverride Ġfun Ġis For Tests (): ĠBoolean Ġ= Ġfalse ĊĊĠ Ġoverride Ġfun Ġcreate Default Properties (): ĠTest Custom Source Root Properties Ġ= ĠTest Custom Source Root Properties (" default Ġproperties ") ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġval ĠINSTANCE Ġ= ĠTest Custom Source Root Type () ĊĠĠĠ Ġconst Ġval ĠTYPE _ ID Ġ= Ġ" custom - source - root - type " ĊĠ Ġ} Ċ } Ċ Ċ class ĠTest Custom Source Root Properties ( initial Test String : ĠString ?) Ġ: ĠJ ps Element Base < Test Custom Source Root Properties >() Ġ{ ĊĠ Ġvar Ġtest String : ĠString ? Ġ= Ġinitial Test String ĊĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġfield ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġfire Element Changed () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Copy (): ĠTest Custom Source Root Properties Ġ{ ĊĠĠĠ Ġreturn ĠTest Custom Source Root Properties ( test String ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġapply Changes ( modified : ĠTest Custom Source Root Properties ) Ġ{ ĊĠĠĠ Ġtest String Ġ= Ġmodified . test String ĊĠ Ġ} Ċ } Ċ Ċ class ĠTest Custom Source Root Properties Serializer ( ĊĠ Ġtype : ĠJ ps Module Source Root Type < Test Custom Source Root Properties >, Ġtype Id : ĠString ) ĊĠ Ġ: ĠJ ps Module Source Root Properties Serializer < Test Custom Source Root Properties >( type , Ġtype Id ) Ġ{ ĊĊĠ Ġoverride Ġfun Ġload Properties ( source Root Tag : ĠElement ): ĠTest Custom Source Root Properties Ġ{ ĊĠĠĠ Ġval Ġtest String Ġ= Ġsource Root Tag . getAttribute Value (" test String ") ĊĠĠĠ Ġreturn ĠTest Custom Source Root Properties ( test String ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġsave Properties ( properties : ĠTest Custom Source Root Properties , Ġsource Root Tag : ĠElement ) Ġ{ ĊĠĠĠ Ġval Ġtest String Ġ= Ġproperties . test String ĊĊĠĠĠ Ġif Ġ( test String Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġsource Root Tag . setAttribute (" test String ", Ġtest String ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ