@startuml
skinparam linetype ortho
class ListCollector
Collector <|-- ListCollector
class RangeHead
Head <|-- RangeHead
interface Source
class Config
interface Roots
interface Targets
class FlatMapHead
Head <|-- FlatMapHead
class SymbolRule
Rule <|-- SymbolRule
class JavaRoots
class Joiner
Collector <|-- Joiner
class StringRule
Rule <|-- StringRule
class ThrowableError
Error <|-- ThrowableError
class Tuple2
class ApplicationError
Error <|-- ApplicationError
class StagedCompiler
Compiler <|-- StagedCompiler
interface Head
class StatementFolder
Folder <|-- StatementFolder
class CompileErrors
interface Generator
Stage <|-- Generator
interface Compiler
class NodeContext
Context <|-- NodeContext
class TypescriptRoots
class ImmutableCompileError
CompileError <|-- ImmutableCompileError
class EmptyHead
Head <|-- EmptyHead
interface Stage
enum TargetPlatform
class MapCollector
Collector <|-- MapCollector
interface Folder
class PathSources
Sources <|-- PathSources
class ResultCollector
Collector <|-- ResultCollector
interface DivideState
class MapRoots
Roots <|-- MapRoots
interface CompileError
Error <|-- CompileError
class RuleGenerator
Generator <|-- RuleGenerator
interface Passer
class InfixRule
Rule <|-- InfixRule
class PrefixRule
Rule <|-- PrefixRule
class RuleLexer
Lexer <|-- RuleLexer
class EmptyAfterAll
AfterAll <|-- EmptyAfterAll
class CompileApplication
Application <|-- CompileApplication
class ExactRule
Rule <|-- ExactRule
class PathSource
Source <|-- PathSource
class PlantUMLRoots
interface Collector
class StringContext
Context <|-- StringContext
class TypeRule
Rule <|-- TypeRule
class OrState
interface Node
class OrRule
Rule <|-- OrRule
interface ParseState
interface Iter
class NodeRule
Rule <|-- NodeRule
class Iters
interface Rule
class JavaToPlantUML
Passer <|-- JavaToPlantUML
class DelimitedFolder
Folder <|-- DelimitedFolder
class PathTargets
Targets <|-- PathTargets
class Location
class SingleHead
Head <|-- SingleHead
interface Context
class StripRule
Rule <|-- StripRule
class MergeDiagram
AfterAll <|-- MergeDiagram
interface Error
class Ok
Result <|-- Ok
interface Sources
interface Parser
Stage <|-- Parser
interface Application
class ImmutableParseState
ParseState <|-- ImmutableParseState
interface Lexer
Stage <|-- Lexer
class DivideRule
Rule <|-- DivideRule
class TreeParser
Parser <|-- TreeParser
class Err
Result <|-- Err
class SuffixRule
Rule <|-- SuffixRule
class AfterPasser
Passer <|-- AfterPasser
interface Result
interface AfterAll
class Main
class SafeFiles
class HeadedIter
Iter <|-- HeadedIter
class MutableDivideState
DivideState <|-- MutableDivideState
class MapNode
Node <|-- MapNode
class ContextRule
Rule <|-- ContextRule
Iters --> Tuple2
Iters --> EmptyHead
Iters --> HeadedIter
Iters --> RangeHead
Iters --> SingleHead
Iters --> ArrayList
Iters --> List
Iters --> Map
Iters --> Optional
MergeDiagram --> Iters
MergeDiagram --> MapNode
MergeDiagram --> ArrayList
MergeDiagram --> Collection
MergeDiagram --> Collections
MergeDiagram --> HashMap
MergeDiagram --> List
MergeDiagram --> Optional
Roots --> Tuple2
Roots --> Iter
Roots --> Node
Roots --> Location
Node --> Tuple2
Node --> Iter
Node --> List
Node --> Optional
ParseState --> Location
FlatMapHead --> Iter
FlatMapHead --> Function
Passer --> Tuple2
Passer --> Node
Passer --> ParseState
Passer --> Optional
Result --> Tuple2
Result --> Function
Result --> Supplier
OrState --> Err
OrState --> Ok
OrState --> Result
OrState --> CompileError
OrState --> Context
OrState --> ImmutableCompileError
OrState --> ArrayList
OrState --> List
OrState --> Optional
DivideRule --> Joiner
DivideRule --> ListCollector
DivideRule --> ResultCollector
DivideRule --> Iter
DivideRule --> Iters
DivideRule --> CompileErrors
DivideRule --> MapNode
DivideRule --> DivideState
DivideRule --> MutableDivideState
DivideRule --> Folder
DivideRule --> List
DivideRule --> Optional
ListCollector --> ArrayList
ListCollector --> List
Stage --> Result
Stage --> CompileError
Iter --> Collector
Iter --> Result
Iter --> Optional
Iter --> BiFunction
Iter --> Function
Iter --> Predicate
ResultCollector --> Ok
ResultCollector --> Result
AfterPasser --> MapNode
AfterPasser --> ArrayList
AfterPasser --> List
AfterPasser --> Stream
PrefixRule --> Err
PrefixRule --> StringContext
PrefixRule --> ImmutableCompileError
Compiler --> Result
Compiler --> CompileError
Compiler --> Location
Compiler --> Map
Head --> Optional
InfixRule --> Err
InfixRule --> StringContext
InfixRule --> ImmutableCompileError
OrRule --> Context
OrRule --> NodeContext
OrRule --> StringContext
OrRule --> List
OrRule --> Function
NodeContext --> Node
PathSource --> SafeFiles
PathSource --> Path
PathSource --> ArrayList
PathSource --> List
CompileErrors --> Err
CompileErrors --> Result
CompileErrors --> NodeContext
CompileErrors --> Node
CompileErrors --> ImmutableCompileError
DivideState --> Stream
PathTargets --> Iters
PathTargets --> SafeFiles
PathTargets --> Files
PathTargets --> Path
Sources --> Result
Sources --> Location
Sources --> IOException
Sources --> Map
Parser --> Roots
HeadedIter --> Ok
Lexer --> Location
Lexer --> Roots
Lexer --> Map
TreeParser --> Tuple2
TreeParser --> MapCollector
TreeParser --> Iters
TreeParser --> Ok
TreeParser --> Result
TreeParser --> CompileError
TreeParser --> Node
TreeParser --> Location
TreeParser --> AfterAll
TreeParser --> MapRoots
TreeParser --> Passer
TreeParser --> ArrayList
TreeParser --> List
TreeParser --> Map
MapRoots --> Iters
MapRoots --> Map
Rule --> Result
Rule --> CompileError
Rule --> Node
JavaToPlantUML --> MapNode
JavaToPlantUML --> ArrayList
JavaToPlantUML --> Collections
JavaToPlantUML --> List
RuleGenerator --> Tuple2
RuleGenerator --> MapCollector
RuleGenerator --> ResultCollector
RuleGenerator --> Result
RuleGenerator --> CompileError
RuleGenerator --> Rule
Application --> Optional
Generator --> Location
Generator --> Roots
Generator --> Map
StringRule --> Err
StringRule --> Ok
StringRule --> NodeContext
StringRule --> MapNode
StringRule --> ImmutableCompileError
PlantUMLRoots --> DivideRule
PlantUMLRoots --> ExactRule
PlantUMLRoots --> InfixRule
PlantUMLRoots --> OrRule
PlantUMLRoots --> PrefixRule
PlantUMLRoots --> Rule
PlantUMLRoots --> StringRule
PlantUMLRoots --> SuffixRule
PlantUMLRoots --> TypeRule
PlantUMLRoots --> StatementFolder
PlantUMLRoots --> List
Config --> Compiler
Config --> StagedCompiler
Config --> Rule
Config --> JavaRoots
Config --> AfterPasser
Config --> MergeDiagram
Config --> Generator
Config --> JavaToPlantUML
Config --> Lexer
Config --> Parser
Config --> RuleGenerator
Config --> RuleLexer
Config --> TreeParser
MapNode --> Iters
MapNode --> HashMap
MapNode --> Map
MapNode --> BiFunction
MapNode --> Function
Folder --> DivideState
Source --> Result
Source --> Location
Source --> IOException
PathSources --> Tuple2
PathSources --> MapCollector
PathSources --> ResultCollector
PathSources --> SafeFiles
PathSources --> Files
PathSources --> Path
ThrowableError --> PrintWriter
ThrowableError --> StringWriter
ExactRule --> Err
ExactRule --> Ok
ExactRule --> MapNode
ExactRule --> StringContext
ExactRule --> ImmutableCompileError
JavaRoots --> ContextRule
JavaRoots --> DivideRule
JavaRoots --> InfixRule
JavaRoots --> NodeRule
JavaRoots --> OrRule
JavaRoots --> PrefixRule
JavaRoots --> Rule
JavaRoots --> StringRule
JavaRoots --> StripRule
JavaRoots --> SuffixRule
JavaRoots --> SymbolRule
JavaRoots --> TypeRule
JavaRoots --> DelimitedFolder
JavaRoots --> StatementFolder
JavaRoots --> List
TargetPlatform --> Path
TargetPlatform --> Paths
AfterAll --> Node
AfterAll --> Location
AfterAll --> Map
MapCollector --> Tuple2
MapCollector --> HashMap
MapCollector --> Map
Joiner --> Optional
ImmutableCompileError --> Context
ImmutableCompileError --> ArrayList
ImmutableCompileError --> Comparator
ImmutableCompileError --> List
ImmutableCompileError --> Collectors
SafeFiles --> Iter
SafeFiles --> Iters
SafeFiles --> Err
SafeFiles --> Ok
SafeFiles --> Result
SafeFiles --> IOException
SafeFiles --> Files
SafeFiles --> Path
SafeFiles --> Optional
SafeFiles --> Collectors
SafeFiles --> Stream
Targets --> Location
Targets --> IOException
Targets --> Map
Targets --> Optional
StagedCompiler --> Generator
StagedCompiler --> Lexer
StagedCompiler --> Parser
MutableDivideState --> ArrayList
MutableDivideState --> List
CompileApplication --> Compiler
CompileApplication --> ApplicationError
CompileApplication --> ThrowableError
CompileApplication --> Location
CompileApplication --> Sources
CompileApplication --> Targets
CompileApplication --> Map
ContextRule --> NodeContext
ContextRule --> StringContext
ContextRule --> ImmutableCompileError
ContextRule --> List
NodeRule --> Err
NodeRule --> Ok
NodeRule --> NodeContext
NodeRule --> MapNode
NodeRule --> ImmutableCompileError
SuffixRule --> Err
SuffixRule --> StringContext
SuffixRule --> ImmutableCompileError
SymbolRule --> Err
SymbolRule --> StringContext
SymbolRule --> ImmutableCompileError
Main --> Iters
Main --> Application
Main --> CompileApplication
Main --> Config
Main --> Error
Main --> Compiler
Main --> StagedCompiler
Main --> Rule
Main --> PathSources
Main --> Sources
Main --> PathTargets
Main --> Targets
Main --> AfterPasser
Main --> JavaToPlantUML
Main --> MergeDiagram
Main --> PlantUMLRoots
Main --> TargetPlatform
Main --> AfterAll
Main --> EmptyAfterAll
Main --> Generator
Main --> RuleGenerator
Main --> Lexer
Main --> Parser
Main --> TreeParser
Main --> Path
Main --> Paths
Main --> Optional
RuleLexer --> Tuple2
RuleLexer --> Iters
RuleLexer --> MapCollector
RuleLexer --> ResultCollector
RuleLexer --> Result
RuleLexer --> CompileError
RuleLexer --> Node
RuleLexer --> Rule
RuleLexer --> MapRoots
TypeRule --> Err
TypeRule --> Context
TypeRule --> NodeContext
TypeRule --> StringContext
TypeRule --> ImmutableCompileError
TypeRule --> List
Location --> List
@enduml
