@startuml title Parser Class Diagram namespace parser { class Alias << (S,Aquamarine) >> { + Name string + PackageName string + AliasOf string } class AliasSlice << (S,Aquamarine) >> { + Len() int + Less(i int, j int) bool + Swap(i int, j int) } class ClassDiagramOptions << (S,Aquamarine) >> { + FileSystem afero.Fs + Directories []string + IgnoredDirectories []string + RenderingOptions map[RenderingOption]interface{} + Recursive bool } class ClassParser << (S,Aquamarine) >> { - renderingOptions *RenderingOptions - structure map[string]map[string]*Struct - currentPackageName string - allInterfaces map[string]struct{} - allStructs map[string]struct{} - allImports map[string]string - allAliases map[string]*Alias - allRenamedStructs map[string]map[string]string - parsePackage(node ast.Node) - parseImports(impt *ast.ImportSpec) - parseDirectory(directoryPath string) error - parseFileDeclarations(node ast.Decl) - handleFuncDecl(decl *ast.FuncDecl) - handleGenDecl(decl *ast.GenDecl) - processSpec(spec ast.Spec) - renderStructures(pack string, structures map[string]*Struct, str *LineStringBuilder) - renderAliases(str *LineStringBuilder) - renderStructure(structure *Struct, pack string, name string, str *LineStringBuilder, composition *LineStringBuilder, extends *LineStringBuilder, aggregations *LineStringBuilder) - renderCompositions(structure *Struct, name string, composition *LineStringBuilder) - renderAggregations(structure *Struct, name string, aggregations *LineStringBuilder) - updatePrivateAggregations(structure *Struct, aggregationsMap map[string]struct{}) - renderAggregationMap(aggregationMap map[string]struct{}, structure *Struct, aggregations *LineStringBuilder, name string) - getPackageName(t string, st *Struct) string - renderExtends(structure *Struct, name string, extends *LineStringBuilder) - renderStructMethods(structure *Struct, privateMethods *LineStringBuilder, publicMethods *LineStringBuilder) - renderStructFields(structure *Struct, privateFields *LineStringBuilder, publicFields *LineStringBuilder) - getOrCreateStruct(name string) *Struct - getStruct(structName string) *Struct + Render() string + SetRenderingOptions(ro map[RenderingOption]interface{}) error } class Field << (S,Aquamarine) >> { + Name string + Type string + FullType string } class Function << (S,Aquamarine) >> { + Name string + Parameters []*Field + ReturnValues []string + PackageName string + FullNameReturnValues []string + SignturesAreEqual(function *Function) bool } class LineStringBuilder << (S,Aquamarine) >> { + WriteLineWithDepth(depth int, str string) } class RenderingOptions << (S,Aquamarine) >> { + Title string + Notes string + Aggregations bool + Fields bool + Methods bool + Compositions bool + Implementations bool + Aliases bool + ConnectionLabels bool + AggregatePrivateMembers bool + PrivateMembers bool } class Struct << (S,Aquamarine) >> { + PackageName string + Functions []*Function + Fields []*Field + Type string + Composition map[string]struct{} + Extends map[string]struct{} + Aggregations map[string]struct{} + PrivateAggregations map[string]struct{} - addToPrivateAggregation(fType string) + ImplementsInterface(inter *Struct) bool + AddToComposition(fType string) + AddToExtends(fType string) + AddToAggregation(fType string) + AddField(field *ast.Field, aliases map[string]string) + AddMethod(method *ast.Field, aliases map[string]string) } class parser.AliasSlice << (T, #FF7700) >> { } class parser.RenderingOption << (T, #FF7700) >> { } } "strings.Builder" *-- "extends""parser.LineStringBuilder" "parser.ClassDiagramOptions""uses" o-- "afero.Fs" "parser.ClassDiagramOptions""uses" o-- "parser.RenderingOption" "parser.Function""uses" o-- "parser.Field" "parser.Struct""uses" o-- "parser.Field" "parser.Struct""uses" o-- "parser.Function" "__builtin__.int" #.. "alias of""parser.RenderingOption" "parser.[]Alias" #.. "alias of""parser.AliasSlice" @enduml