@startuml
'https://plantuml.com/sequence-diagram

skinparam style strictuml

class FirstDoclet implements Doclet{
    + getName() : String {Redefine Doclet::getName}
    + getSupportedOptions(): Set<? extends Option>
    + getSupportedSourceVersion() : SourceVersion
    + run(environment : DocletEnvironment) : boolean {Redefine Doclet::run}
    + dumpElement(element : Element)
}

interface Doclet{
    + getName() : String
    + getSupportedOptions(): Set<? extends Option>
    + getSupportedSourceVersion() : SourceVersion
    + run(environment : DocletEnvironment) : boolean
}

class Class{
    + getSimpleName() : Class
}

FirstDoclet "recupere le nom" ------> Class : >

class Collection{
    + {static}emptySet() : java.util.set
}

FirstDoclet "recupere les options" ------> Collection : >

enum SourceVersion{
    + {static}latest() : SourceVersion
}

FirstDoclet "verifie la version" -> SourceVersion : >

interface DocletEnvironment{
    + {abstract}getSpecifiedElements() :  java.util.Set<? extends javax.lang.model.element.Element>
    + {abstract}getIncludedElements() :  java.util.Set<? extends javax.lang.model.element.Element>
}

FirstDoclet "recupere nom du package" --> DocletEnvironment : >
FirstDoclet "recupere les classes" --> DocletEnvironment: >


interface Element extends AnnotatedConstruct{
    + {abstract}getKind() : ElementKind
    + {abstract}getSimpleName() : Name
    + {abstract}getEnclosingELement() : Element
    + {abstract}getEnclosedElements() : Element
    + {abstract}getModifiers() : Modifiers
}

FirstDoclet "le type" -> Element
FirstDoclet "le nom" -> Element
FirstDoclet "le Package" -> Element
FirstDoclet "le fonctions" -> Element
FirstDoclet "le visibilité" -> Element


@enduml