diff --git a/common/build.gradle.kts b/common/build.gradle.kts index 57e8e3921..bf25d5dca 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -97,13 +97,13 @@ tasks.create("tectonicDocs") { } } - val children = HashMap>() + val children = HashMap>() sources.forEach { (name, unit) -> unit.getClassByName(name).ifPresent { declaration -> declaration.extendedTypes.forEach { classOrInterfaceType -> val inherit = classOrInterfaceType.name.asString() if (!children.containsKey(inherit)) children[inherit] = ArrayList() - children[inherit]!!.add(declaration.name) + children[inherit]!!.add(declaration) } } } @@ -111,7 +111,11 @@ tasks.create("tectonicDocs") { val doc = StringBuilder() doc.append("# ${generify(name, refactor)}\n") + var applicable = false + unit.getClassByName(name).ifPresent { declaration -> + applicable = scanForParent(sources, declaration, "ConfigTemplate", "ValidatedConfigTemplate", "ObjectTemplate") + if(applicable) println("Validated $name") declaration.javadoc.ifPresent { doc.append("${sanitizeJavadoc(it.toText())} \n") } @@ -123,14 +127,14 @@ tasks.create("tectonicDocs") { if (children.containsKey(name)) { doc.append("Children:\n") children[name]!!.forEach { - doc.append("* ${parseTypeLink(it, refactor)}\n") + doc.append("* ${parseTypeLink(it.name, refactor)}\n") } doc.append(" \n\n") } doc.append("\n") } - var applicable = false + unit.findAll(FieldDeclaration::class.java).filter { it.isAnnotationPresent("Value") }.forEach { fieldDeclaration -> doc.append("## ${(fieldDeclaration.getAnnotationByName("Value").get().childNodes[1] as StringLiteralExpr).asString()}\n") @@ -168,6 +172,22 @@ tasks.create("tectonicDocs") { } } +fun scanForParent(map: HashMap, current: com.github.javaparser.ast.body.ClassOrInterfaceDeclaration, vararg parent: String): Boolean { + for (type in current.implementedTypes) { + if(parent.contains(type.childNodes[0].toString())) return true + } + for(type in current.extendedTypes) { + val name = type.childNodes[0].toString() + if(map.containsKey(name)) { + val op = map[name]!!.getClassByName(name) + if(op.isPresent && scanForParent(map, op.get(), *parent)) { + return true + } + } + } + return false +} + fun parseTypeLink(type: Node, refactor: Map, generic: Boolean = true): String { val st = parseType(type, refactor)