@startuml
skinparam linetype ortho
class CompileError
CompileError --> Error
CompileError --> Context
class StringRule
StringRule --> Err
StringRule --> NodeContext
StringRule --> CompileError
StringRule --> CompileResult
StringRule --> ResultCompileResult
StringRule --> DisplayableNode
StringRule --> NodeFactory
StringRule --> NodeWithStrings
class MapNodeFactory
class Err
Err --> Optional
Err --> Function
class EmptyRule
EmptyRule --> CompileResult
EmptyRule --> ResultCompileResult
EmptyRule --> NodeFactory
class MapNode
MapNode --> MapNodeProperties
MapNode --> NodeProperties
MapNode --> List
class MapNodeProperties
MapNodeProperties --> HashMap
MapNodeProperties --> Map
MapNodeProperties --> Optional
class LastRule
LastRule --> Err
LastRule --> StringContext
LastRule --> CompileError
LastRule --> CompileResult
LastRule --> ResultCompileResult
class ThrowableError
ThrowableError --> IOException
ThrowableError --> PrintWriter
ThrowableError --> StringWriter
class Result
Result --> Optional
Result --> Function
class SuffixTruncator
SuffixTruncator --> Optional
class NodeProperties
NodeProperties --> Optional
class RuleBuilder
RuleBuilder --> MapNodeFactory
RuleBuilder --> NodeWithEverything
RuleBuilder --> EmptyRule
RuleBuilder --> LastRule
RuleBuilder --> OrRule
RuleBuilder --> Rule
RuleBuilder --> StringRule
RuleBuilder --> TruncateRule
RuleBuilder --> NodeListRule
RuleBuilder --> List
class RuleCompiler
RuleCompiler --> CompileResult
RuleCompiler --> ResultCompileResult
RuleCompiler --> MapNode
RuleCompiler --> NodeWithEverything
RuleCompiler --> NodeWithNodeLists
RuleCompiler --> Rule
RuleCompiler --> ArrayList
RuleCompiler --> Map
class StringContext
class Context
class Compiler
Compiler --> CompileResult
Compiler --> Map
class PrefixTruncator
PrefixTruncator --> Optional
class OrRule
OrRule --> Err
OrRule --> StringContext
OrRule --> CompileError
OrRule --> CompileResult
OrRule --> ResultCompileResult
OrRule --> List
OrRule --> Optional
class NodeContext
NodeContext --> DisplayableNode
class ResultCompileResult
ResultCompileResult --> Err
ResultCompileResult --> Ok
ResultCompileResult --> Result
ResultCompileResult --> StringContext
ResultCompileResult --> Function
class Error
class Completer
class MutableDivideState
MutableDivideState --> ArrayList
MutableDivideState --> List
class Truncator
Truncator --> Optional
class DivideState
DivideState --> List
class DisplayableNode
class StripTruncator
StripTruncator --> Optional
class CommonLang
CommonLang --> NodeWithEverything
CommonLang --> Rule
CommonLang --> List
class TruncateRule
TruncateRule --> CompileResult
TruncateRule --> ResultCompileResult
TruncateRule --> PrefixTruncator
TruncateRule --> StripTruncator
TruncateRule --> SuffixTruncator
TruncateRule --> Truncator
class NodeListRule
NodeListRule --> CompileResult
NodeListRule --> ResultCompileResult
NodeListRule --> DisplayableNode
NodeListRule --> NodeFactory
NodeListRule --> NodeWithNodeLists
NodeListRule --> Rule
NodeListRule --> ArrayList
NodeListRule --> List
class NodeFactory
class NodeWithEverything
class NodeWithStrings
NodeWithStrings --> NodeProperties
class CompileResult
CompileResult --> Result
CompileResult --> Function
class Rule
Rule --> CompileResult
class NodeWithNodeLists
NodeWithNodeLists --> NodeProperties
NodeWithNodeLists --> List
class Ok
Ok --> Optional
Ok --> Function
class Application
Application --> Err
Application --> Error
Application --> Ok
Application --> Result
Application --> ThrowableError
Application --> Compiler
Application --> IOException
Application --> Files
Application --> Path
Application --> Paths
Application --> HashMap
Application --> Map
Application --> Optional
Application --> Set
Application --> Collectors
class Main
Main --> Application
Main --> RuleCompiler
Main --> CommonLang
class Divider
Divider --> List
@enduml