aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/src/main/kotlin/Model/Content.kt3
-rw-r--r--core/src/main/kotlin/javadoc/docbase.kt44
-rw-r--r--core/src/main/kotlin/javadoc/tags.kt10
-rw-r--r--core/src/test/kotlin/javadoc/JavadocTest.kt1
-rw-r--r--core/testdata/javadoc/kdocKeywordsOnMethod.kt5
5 files changed, 29 insertions, 34 deletions
diff --git a/core/src/main/kotlin/Model/Content.kt b/core/src/main/kotlin/Model/Content.kt
index 7464d510..1a8bc5d2 100644
--- a/core/src/main/kotlin/Model/Content.kt
+++ b/core/src/main/kotlin/Model/Content.kt
@@ -132,6 +132,7 @@ object ContentTags {
val Description = "Description"
val SeeAlso = "See Also"
val Return = "Return"
+ val Exceptions = "Exceptions"
}
fun content(body: ContentBlock.() -> Unit): ContentBlock {
@@ -237,6 +238,6 @@ open class MutableContent() : Content() {
fun javadocSectionDisplayName(sectionName: String?): String? =
when(sectionName) {
"param" -> "Parameters"
- "throws", "exception" -> "Exceptions"
+ "throws", "exception" -> ContentTags.Exceptions
else -> sectionName?.capitalize()
}
diff --git a/core/src/main/kotlin/javadoc/docbase.kt b/core/src/main/kotlin/javadoc/docbase.kt
index b125a7d4..eafa216b 100644
--- a/core/src/main/kotlin/javadoc/docbase.kt
+++ b/core/src/main/kotlin/javadoc/docbase.kt
@@ -309,10 +309,8 @@ open class ExecutableMemberAdapter(module: ModuleNodeAdapter, node: Documentatio
override fun thrownExceptions(): Array<out ClassDoc> = emptyArray() // TODO
override fun throwsTags(): Array<out ThrowsTag> =
node.content.sections
- .filter { it.tag == "Exceptions" }
- .map { it.subjectName }
- .filterNotNull()
- .map { ThrowsTagAdapter(this, ClassDocumentationNodeAdapter(module, classOf(it, NodeKind.Exception))) }
+ .filter { it.tag == ContentTags.Exceptions && it.subjectName != null }
+ .map { ThrowsTagAdapter(this, ClassDocumentationNodeAdapter(module, classOf(it.subjectName!!, NodeKind.Exception)), it.children) }
.toTypedArray()
override fun isVarArgs(): Boolean = node.details(NodeKind.Parameter).any { false } // TODO
@@ -320,14 +318,7 @@ open class ExecutableMemberAdapter(module: ModuleNodeAdapter, node: Documentatio
override fun isSynchronized(): Boolean = node.annotations.any { it.name == "synchronized" }
override fun paramTags(): Array<out ParamTag> =
- (node.details(NodeKind.Parameter)
- .filter(DocumentationNode::hasNonEmptyContent)
- .map { ParamTagAdapter(module, this, it.name, false, it.content.children) }
-
- + node.content.sections
- .filter { it.subjectName in parameters().map { it.name() } }
- .map { ParamTagAdapter(module, this, it.subjectName ?: "?", true, it.children) }
- ).toTypedArray()
+ collectParamTags(NodeKind.Parameter, sectionFilter = { it.subjectName in parameters().map { it.name() } })
override fun thrownExceptionTypes(): Array<out Type> = emptyArray()
override fun receiverType(): Type? = receiverNode()?.let { receiver -> TypeAdapter(module, receiver) }
@@ -342,14 +333,7 @@ open class ExecutableMemberAdapter(module: ModuleNodeAdapter, node: Documentatio
override fun typeParameters(): Array<out TypeVariable> = node.details(NodeKind.TypeParameter).map { TypeVariableAdapter(module, it) }.toTypedArray()
override fun typeParamTags(): Array<out ParamTag> =
- (node.details(NodeKind.TypeParameter)
- .filter(DocumentationNode::hasNonEmptyContent)
- .map { ParamTagAdapter(module, this, it.name, true, it.content.children) }
-
- + node.content.sections
- .filter { it.subjectName in typeParameters().map { it.simpleTypeName() } }
- .map { ParamTagAdapter(module, this, it.subjectName ?: "?", true, it.children) }
- ).toTypedArray()
+ collectParamTags(NodeKind.TypeParameter, sectionFilter = { it.subjectName in typeParameters().map { it.simpleTypeName() } })
private fun receiverNode() = node.details(NodeKind.Receiver).let { receivers ->
when {
@@ -443,14 +427,7 @@ open class ClassDocumentationNodeAdapter(module: ModuleNodeAdapter, val classNod
.toTypedArray()
override fun typeParamTags(): Array<out ParamTag> =
- (classNode.details(NodeKind.TypeParameter)
- .filter(DocumentationNode::hasNonEmptyContent)
- .map { ParamTagAdapter(module, this, it.name, true, it.content.children) }
-
- + classNode.content.sections
- .filter { it.subjectName in typeParameters().map { it.simpleTypeName() } }
- .map { ParamTagAdapter(module, this, it.subjectName ?: "?", true, it.children) }
- ).toTypedArray()
+ collectParamTags(NodeKind.TypeParameter, sectionFilter = { it.subjectName in typeParameters().map { it.simpleTypeName() } })
override fun fields(): Array<out FieldDoc> = fields(true)
override fun fields(filter: Boolean): Array<out FieldDoc> = classNode.members(NodeKind.Field).map { FieldAdapter(module, it) }.toTypedArray()
@@ -533,3 +510,14 @@ class ModuleNodeAdapter(val module: DocumentationModule, val reporter: DocErrorR
override fun specifiedClasses(): Array<out ClassDoc> = classes()
}
+
+private fun DocumentationNodeAdapter.collectParamTags(kind: NodeKind, sectionFilter: (ContentSection) -> Boolean) =
+ (node.details(kind)
+ .filter(DocumentationNode::hasNonEmptyContent)
+ .map { ParamTagAdapter(module, this, it.name, true, it.content.children) }
+
+ + node.content.sections
+ .filter(sectionFilter)
+ .map { ParamTagAdapter(module, this, it.subjectName ?: "?", true, it.children) })
+
+ .toTypedArray() \ No newline at end of file
diff --git a/core/src/main/kotlin/javadoc/tags.kt b/core/src/main/kotlin/javadoc/tags.kt
index 5ee2cbac..9e023a81 100644
--- a/core/src/main/kotlin/javadoc/tags.kt
+++ b/core/src/main/kotlin/javadoc/tags.kt
@@ -114,20 +114,20 @@ class ParamTagAdapter(val module: ModuleNodeAdapter,
}
-class ThrowsTagAdapter(val holder: Doc, val type: ClassDocumentationNodeAdapter) : ThrowsTag {
+class ThrowsTagAdapter(val holder: Doc, val type: ClassDocumentationNodeAdapter, val content: List<ContentNode>) : ThrowsTag {
override fun name(): String = "@throws"
override fun kind(): String = name()
override fun holder(): Doc = holder
override fun position(): SourcePosition? = holder.position()
- override fun text(): String = "@throws ${type.qualifiedTypeName()}"
- override fun inlineTags(): Array<out Tag> = emptyArray()
+ override fun text(): String = "${name()} ${exceptionName()} ${exceptionComment()}"
+ override fun inlineTags(): Array<out Tag> = buildInlineTags(type.module, holder, content).toTypedArray()
override fun firstSentenceTags(): Array<out Tag> = emptyArray()
- override fun exceptionComment(): String = ""
+ override fun exceptionComment(): String = content.toString()
override fun exceptionType(): Type = type
override fun exception(): ClassDoc = type
- override fun exceptionName(): String = type.qualifiedName()
+ override fun exceptionName(): String = type.qualifiedTypeName()
}
class ReturnTagAdapter(val module: ModuleNodeAdapter, val holder: Doc, val content: List<ContentNode>) : Tag {
diff --git a/core/src/test/kotlin/javadoc/JavadocTest.kt b/core/src/test/kotlin/javadoc/JavadocTest.kt
index f60c49fd..f7f86881 100644
--- a/core/src/test/kotlin/javadoc/JavadocTest.kt
+++ b/core/src/test/kotlin/javadoc/JavadocTest.kt
@@ -128,6 +128,7 @@ class JavadocTest {
val method = doc.classNamed("KdocKeywordsOnMethodKt")!!.methods()[0]
assertEquals("@return [ContentText(text=value of a)]", method.tags("return").first().text())
assertEquals("@param a [ContentText(text=Some string)]", method.paramTags().first().text())
+ assertEquals("@throws FireException [ContentText(text=in case of fire)]", method.throwsTags().first().text())
}
}
diff --git a/core/testdata/javadoc/kdocKeywordsOnMethod.kt b/core/testdata/javadoc/kdocKeywordsOnMethod.kt
index 63bbaba4..df5bbbe0 100644
--- a/core/testdata/javadoc/kdocKeywordsOnMethod.kt
+++ b/core/testdata/javadoc/kdocKeywordsOnMethod.kt
@@ -1,7 +1,12 @@
+class FireException : Exception
+
+
/**
* COMM
* @param a Some string
* @return value of a
+ * @throws FireException in case of fire
*/
+@Throws(FireException::class)
fun my(a: String): String = a