diff --git a/plab/javadoc.go b/plab/javadoc.go index d1e9a596ee122426d5bc59487b8337aae53cbe0e..10dfea5f312cbe8697a7b654cf37f7db2c2fe03f 100644 --- a/plab/javadoc.go +++ b/plab/javadoc.go @@ -94,11 +94,54 @@ func (c *Class) getMethod(name string) *Method { return nil } +func (i *InternalType) changed() bool { + for _, a := range i.Annotations { + if a.changed() { + return true + } + } + return false +} + +func (a *Annot) changed() bool { + if a.TypeName == "Docs" { + for _, e := range a.Elements { + switch e.QualifiedName { + case "projlab.Docs.changed": + if e.Value == "true" { + return true + } + } + } + } + return false +} + +func (c *Class) changedClass() bool { + if c.changed() { + return true + } + + for _, m := range c.Methods { + if m.changed() { + return true + } + } + + for _, f := range c.Fields { + if f.changed() { + return true + } + } + + return false +} + var Javadoc = helpers.Subcommand{ Name: "javadoc", Command: func(args []string) { - if len(args) > 1 { - fmt.Println("usage: javadoc [source location]") + if len(args) > 2 { + fmt.Println("usage: javadoc [source location] [-changed]") return } @@ -117,7 +160,15 @@ var Javadoc = helpers.Subcommand{ classes = linkInheritance(classes) classes = resolveDocsFromInheritance(classes) - printLatex(classes) + changed := false + for _, a := range args { + if a == "-changed" { + changed = true + break + } + } + + printLatex(classes, changed) }, Help: "create and parse javadoc from code", } @@ -347,7 +398,7 @@ func resolveDocsFromInheritance(c map[string]*Class) map[string]*Class { return c } -func printLatex(c map[string]*Class) { +func printLatex(c map[string]*Class, changed bool) { keys := make([]string, 0, len(c)) for k := range c { keys = append(keys, k) @@ -359,91 +410,121 @@ func printLatex(c map[string]*Class) { for _, k := range keys { class := c[k] - printClassDoc(class) + printClassDoc(class, changed) } } -func printClassDoc(c *Class) { - fmt.Printf("\\subsubsection{\\texttt{%s \\textcolor{blue}{%s}}}\n", c.Modifiers, c.Name) +func printClassDoc(c *Class, changed bool) { + if changed && !c.changedClass() { + return + } + extra := "" + if !changed || c.changed() { + extra = "\\textit{Új osztály}" + } + fmt.Printf("\\subsubsection{\\texttt{%s \\textcolor{blue}{%s}} %s}\n", c.Modifiers, c.Name, extra) + fmt.Println("\\begin{itemize}") + if !changed || c.changed() { + if c.DocString != "" { + fmt.Println("\\item Felelősség:") + fmt.Println("\\newline") + fmt.Println(c.DocString) + } - if c.DocString != "" { - fmt.Println("\\item Felelősség:") + fmt.Println("\\item Ősosztályok:") fmt.Println("\\newline") - fmt.Println(c.DocString) - } - - fmt.Println("\\item Ősosztályok:") - fmt.Println("\\newline") - if c.Superclass.realClass != nil { - var loopy func(c *Class) - loopy = func(c *Class) { - if c.Superclass.realClass != nil { - loopy(c.Superclass.realClass) - fmt.Print(" $\\rightarrow$ ") + if c.Superclass.realClass != nil { + var loopy func(c *Class) + loopy = func(c *Class) { + if c.Superclass.realClass != nil { + loopy(c.Superclass.realClass) + fmt.Print(" $\\rightarrow$ ") + } + fmt.Printf("\\texttt{\\textcolor{blue}{%s}}", c.Name) } - fmt.Printf("\\texttt{\\textcolor{blue}{%s}}", c.Name) + loopy(c) + fmt.Println() + } else { + fmt.Println("\\emph{Nincs ősosztály}") } - loopy(c) - fmt.Println() - } else { - fmt.Println("\\emph{Nincs ősosztály}") - } - if !strings.Contains(c.Modifiers, "interface") { + if !strings.Contains(c.Modifiers, "interface") { - fmt.Println("\\item Interfészek:") - if len(c.Interfaces) == 0 { - fmt.Println("\\newline") - fmt.Println("\\emph{Nem valósít meg interfészeket}") - } else { - fmt.Println("\\begin{itemize}") - for _, i := range c.Interfaces { - fmt.Printf("\\item %s\n", i.Name) + fmt.Println("\\item Interfészek:") + if len(c.Interfaces) == 0 { + fmt.Println("\\newline") + fmt.Println("\\emph{Nem valósít meg interfészeket}") + } else { + fmt.Println("\\begin{itemize}") + for _, i := range c.Interfaces { + fmt.Printf("\\item %s\n", i.Name) + } + fmt.Println("\\end{itemize}") } - fmt.Println("\\end{itemize}") } + } + if changed && !c.changed() { + fmt.Println("\\item Változott attribútumok") + } else { fmt.Println("\\item Attribútumok") - if len(c.Fields) == 0 { - fmt.Println("\\newline") - fmt.Println("\\emph{Nincsenek attribútumok}") - } else { - fmt.Println("\\begin{itemize}") - for _, attr := range c.Fields { + } + if len(c.Fields) == 0 { + fmt.Println("\\newline") + fmt.Println("\\emph{Nincsenek attribútumok}") + } else { + fmt.Println("\\begin{itemize}") + ch := false + for _, attr := range c.Fields { + if !changed || attr.changed() || c.changed() { + ch = true fmt.Printf(`\item \texttt{%s \textcolor{blue}{%s} %s}`, attr.Modifiers, attr.Type.Name, attr.Name) if attr.DocString != "" { fmt.Printf(": %s", attr.DocString) } fmt.Println() } - fmt.Println("\\end{itemize}") } - + if !ch { + fmt.Println("\\item \\textit{Nincsenek megváltozott attribútumok}") + } + fmt.Println("\\end{itemize}") } - fmt.Println("\\item Metódusok") + if changed && !c.changed() { + fmt.Println("\\item Megváltozott metódusok") + } else { + fmt.Println("\\item Metódusok") + } if len(c.Methods) == 0 { fmt.Println("\\newline") fmt.Println("\\emph{Nincsenek metódusok}") } else { fmt.Println("\\begin{itemize}") + ch := false for _, meth := range c.Methods { - fmt.Printf(`\item \texttt{%s \textcolor{blue}{`, meth.Modifiers) - fmt.Printf("%s} ", meth.ReturnType.Name) - fmt.Printf("%s(", meth.Name) - for i, par := range meth.Parameters { - fmt.Printf("\\textcolor{blue}{%s} %s", par.Type.Name, par.Name) - if i != len(meth.Parameters)-1 { - fmt.Print(", ") + if !changed || meth.changed() || c.changed() { + ch = true + fmt.Printf(`\item \texttt{%s \textcolor{blue}{`, meth.Modifiers) + fmt.Printf("%s} ", meth.ReturnType.Name) + fmt.Printf("%s(", meth.Name) + for i, par := range meth.Parameters { + fmt.Printf("\\textcolor{blue}{%s} %s", par.Type.Name, par.Name) + if i != len(meth.Parameters)-1 { + fmt.Print(", ") + } } + fmt.Print(")") + fmt.Printf("}") + if meth.DocString != "" { + fmt.Printf(": %s", meth.DocString) + } + fmt.Println() } - fmt.Print(")") - fmt.Printf("}") - if meth.DocString != "" { - fmt.Printf(": %s", meth.DocString) - } - fmt.Println() + } + if !ch { + fmt.Println("\\item \\textit{Nincsenek megváltozott metódusok}") } fmt.Println("\n\\end{itemize}") }