package Ġtech . k zen . lib . common . service . context Ċ Ċ import Ġtech . k zen . lib . common . api . Object Creator Ċ import Ġtech . k zen . lib . common . api . Object Def iner Ċ import Ġtech . k zen . lib . common . model . attribute . AttributeName Map Ċ import Ġtech . k zen . lib . common . model . definition . Graph Definition Ċ import Ġtech . k zen . lib . common . model . definition . Graph Definition Attempt Ċ import Ġtech . k zen . lib . common . model . definition . Object Definition Failure Ċ import Ġtech . k zen . lib . common . model . definition . Object Definition Success Ċ import Ġtech . k zen . lib . common . model . instance . Graph Instance Ċ import Ġtech . k zen . lib . common . model . instance . Object Instance Ċ import Ġtech . k zen . lib . common . model . locate . Object Location Ċ import Ġtech . k zen . lib . common . model . locate . Object Location Map Ċ import Ġtech . k zen . lib . common . model . locate . Object Reference Ċ import Ġtech . k zen . lib . common . model . locate . Object Reference Host Ċ import Ġtech . k zen . lib . common . model . obj . ObjectName Ċ import Ġtech . k zen . lib . common . model . obj . Object N esting Ċ import Ġtech . k zen . lib . common . model . obj . Object Path Ċ import Ġtech . k zen . lib . common . model . structure . Graph Structure Ċ import Ġtech . k zen . lib . common . model . structure . notation . Graph Not ation Ċ import Ġtech . k zen . lib . common . objects . bootstrap . Default Constructor Object Creator Ċ import Ġtech . k zen . lib . common . objects . bootstrap . Default Constructor Object Def iner Ċ import Ġtech . k zen . lib . common . service . notation . Not ation Con ventions Ċ import Ġtech . k zen . lib . platform . collect . persistent Map Of Ċ import Ġtech . k zen . lib . platform . collect . to Persistent Map Ċ import Ġkotlin . reflect . K Class ĊĊ Ċ // ĠTODO : Ġconvert Ġto Ġobject ? Ċ class ĠGraph Def iner Ġ{ ĊĠĠĠ Ġ// ---------------------------------------------------------------- ------------------------------------------------ - ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbootstrap Objects Ġ= ĠGraph Instance ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObject Location Map ( persistent Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbootstrap Entry ( Default Constructor Object Creator ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbootstrap Entry ( Default Constructor Object Def iner ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ))) ĊĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġbootstrap Entry ( bootstrap Object : ĠAny ): ĠPair < Object Location , ĠObject Instance > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobject Path Ġ= Ġbootstrap Path ( bootstrap Object :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġobject Path Ġto ĠObject Instance ( bootstrap Object , ĠAttribute Name Map . of ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġbootstrap Path ( type : ĠK Class < *> ): ĠObject Location Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbootstrap Path ( ObjectName ( type . simple Name !! )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġbootstrap Path ( objectName : ĠObject Name ): ĠObject Location Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠObject Location ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNot ation Con ventions . k zen BasePath , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObject Path ( objectName , ĠObject N esting . root )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// ---------------------------------------------------------------- ------------------------------------------------ - ĊĠĠĠ Ġfun Ġdefine ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgraph Structure : ĠGraph Structure ĊĠĠĠ Ġ): ĠGraph Definition Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġattempt Ġ= Ġtry Define ( graph Structure ) ĊĠĠĠĠĠĠĠ Ġrequire (! Ġattempt . has Errors ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Definition Ġerrors : Ġ${ attempt . failures }" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġattempt . successful () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġtry Define ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgraph Structure : ĠGraph Structure ĊĠĠĠ Ġ): ĠGraph Definition Attempt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdefin er And Related Instances Ġ= Ġbootstrap Objects ĊĊĠĠĠĠĠĠĠ Ġval Ġopen Definitions : ĠMutable Set < Object Location > Ġ= Ġgraph Structure ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. graph Not ation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. object Locations ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġ! in Ġbootstrap Objects Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! Ġis Abstract ( it , Ġgraph Structure . graph Not ation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. to Mutable Set () ĊĊĠĠĠĠĠĠĠ Ġvar Ġclosed Definitions Ġ= ĠGraph Definition . empty ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. copy ( graph Structure Ġ= Ġgraph Structure ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmissing Instances Ġ= Ġmutable Set Of < Object Location >() ĊĊĠĠĠĠĠĠĠ Ġval Ġlevel Closed Ġ= Ġmutable Set Of < Object Location >() ĊĠĠĠĠĠĠĠ Ġval Ġlevel Created Ġ= Ġmutable Set Of < Object Location >() ĊĠĠĠĠĠĠĠ Ġval Ġmissing Creator Instances Ġ= Ġmutable Set Of < Object Location >() ĊĠĠĠĠĠĠĠ Ġval Ġlevel Errors Ġ= Ġmutable Map Of < Object Location , ĠString >() ĊĠĠĠĠĠĠĠ Ġval Ġlevel Failures Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable Map Of < Object Location , ĠObject Definition Failure >() ĊĊĠĠĠĠĠĠĠ Ġvar Ġlevel Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( open Definitions . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlevel Count Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( level Count Ġ< Ġ 1 6 ) Ġ{ Ġ" too Ġdeep " Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ^^^^ ^ Ġopen Ġ- Ġ$ level Count : Ġ$ open Definitions ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( object Location Ġin Ġopen Definitions ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ^^^^ ^ Ġobject Name : Ġ$ object Location ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefin er Reference Ġ= Ġdefin er Reference ( object Location , Ġgraph Structure . graph Not ation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( def iner Reference Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlevel Errors [ object Location ] Ġ= Ġ" Def iner Ġmissing " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefin er Location Ġ= Ġgraph Structure . graph Not ation . co alesce . locate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefin er Reference , ĠObject Reference Host . of Location ( object Location )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefin er Ġ= Ġdefin er And Related Instances [ def iner Location ]?. reference Ġas ? ĠObject Def iner ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( def iner Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmissing Instances . add ( def iner Location ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefinition Ġ= Ġdefin er . define ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Location , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraph Structure , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclosed Definitions , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefin er And Related Instances ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Ġ Ġ>> Ġdefinition : Ġ$ definition ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( definition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠObject Definition Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclosed Definitions Ġ= Ġclosed Definitions . put ( object Location , Ġdefinition . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlevel Closed . add ( object Location ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠObject Definition Failure Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlevel Errors [ object Location ] Ġ= Ġdefinition . errorMessage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmissing Instances . addAll ( definition . missing Objects . values ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlevel Failures [ object Location ] Ġ= Ġdefinition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" --- Ġmissing Instances : Ġ$ missing Instances ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( missing Location Ġin Ġmissing Instances ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefinition Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclosed Definitions [ missing Location ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġcontinue Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Ġ Ġ$$ Ġgot Ġdefinition Ġfor : Ġ$ missing Name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreator Location Ġ= Ġgraph Structure . graph Not ation . co alesce . locate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefinition . creator ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġhas Missing Creator Instances Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( creator Location Ġ! in Ġdefin er And Related Instances ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmissing Creator Instances . add ( creator Location ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Missing Creator Instances Ġ= Ġtrue Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Ġ Ġ$$ Ġmissing Ġcreator Ġ($ missing Name ): Ġ$ creator Location ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( creator Required Ġin Ġdefinition . creator Dependencies ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreator Reference Location Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraph Structure . graph Not ation . co alesce . locate ( creator Required ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( creator Reference Location Ġ! in Ġdefin er And Related Instances ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmissing Creator Instances . add ( creator Reference Location ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Missing Creator Instances Ġ= Ġtrue Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Ġ Ġ$$ Ġmissing Ġcreator Ġreference Ġ($ missing Name ): Ġ" Ġ+ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ definition . creator } Ġ- Ġ$ creator Reference Location ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Missing Creator Instances ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreator Ġ= Ġdefin er And Related Instances [ creator Location ]?. reference Ġas ĠObject Creator ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinstance Ġ= Ġcreator . create ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmissing Location , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraph Structure , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefinition , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefin er And Related Instances ) Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Ġ Ġ$$ Ġcreated : Ġ$ missing Name ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefin er And Related Instances Ġ= Ġdefin er And Related Instances . put ( missing Location , Ġinstance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlevel Created . add ( missing Location ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmissing Instances . addAll ( missing Creator Instances ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmissing Instances . removeAll ( level Created ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( level Closed . isEmpty () Ġ&& Ġlevel Created . isEmpty ()) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( object Location , Ġpartial Definition ) Ġin Ġlevel Partial ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclosed Definitions Ġ= Ġclosed Definitions . put ( object Location , Ġpartial Definition ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠGraph Definition Attempt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclosed Definitions . object Definitions , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObject Location Map ( level Failures . to Persistent Map ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraph Structure ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Definitions . removeAll ( level Closed ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlevel Created . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlevel Closed . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmissing Creator Instances . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlevel Errors . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlevel Failures . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠGraph Definition Attempt ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclosed Definitions . object Definitions , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObject Location Map . empty (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgraph Structure ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġdefin er Reference ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Location : ĠObject Location , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Not ation : ĠGraph Not ation ĊĠĠĠ Ġ): ĠObject Reference ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġproject Not ation . first Attribute ( object Location , ĠNot ation Con ventions . def iner Attribute Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . asString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ ĠObject Reference . parse ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġis Abstract ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Name : ĠObject Location , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Not ation : ĠGraph Not ation ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġproject Not ation . direct Attribute ( objectName , ĠNot ation Con ventions . abstract Attribute Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . as Boolean () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġfalse ĊĠĠĠ Ġ} Ċ }