aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Jemerov <yole@jetbrains.com>2015-11-05 15:51:23 +0100
committerDmitry Jemerov <yole@jetbrains.com>2015-11-05 15:51:23 +0100
commitb643bf6f4b4c29676ce3301d92b7880b268d6722 (patch)
tree8f0fede2d5eac2110ca4687a35eefb8727ed4d7e
parent0bad64896baed4056d75f8b948afe0d848bc8adf (diff)
downloaddokka-b643bf6f4b4c29676ce3301d92b7880b268d6722.tar.gz
dokka-b643bf6f4b4c29676ce3301d92b7880b268d6722.tar.bz2
dokka-b643bf6f4b4c29676ce3301d92b7880b268d6722.zip
add tests; fixes related to qualified names of types
-rw-r--r--dokka.iml2
-rw-r--r--javadoc/javadoc.iml3
-rw-r--r--javadoc/src/main/kotlin/docbase.kt16
-rw-r--r--javadoc/src/test/data/obj.kt7
-rw-r--r--javadoc/src/test/data/types.kt4
-rw-r--r--javadoc/src/test/kotlin/JavadocTest.kt44
-rw-r--r--src/Kotlin/KotlinLanguageService.kt7
-rw-r--r--test/src/TestAPI.kt3
8 files changed, 77 insertions, 9 deletions
diff --git a/dokka.iml b/dokka.iml
index 2f83283e..08f86168 100644
--- a/dokka.iml
+++ b/dokka.iml
@@ -15,7 +15,7 @@
<orderEntry type="library" name="junit:junit:4.11" level="project" />
<orderEntry type="library" name="markdown" level="project" />
<orderEntry type="library" name="jsoup" level="project" />
- <orderEntry type="library" name="kotlin-for-upsource" level="project" />
+ <orderEntry type="library" exported="" name="kotlin-for-upsource" level="project" />
<orderEntry type="library" name="cli-parser" level="project" />
<orderEntry type="library" name="guava" level="project" />
<orderEntry type="library" name="picocontainer" level="project" />
diff --git a/javadoc/javadoc.iml b/javadoc/javadoc.iml
index 4f38fb20..b4f1b67f 100644
--- a/javadoc/javadoc.iml
+++ b/javadoc/javadoc.iml
@@ -5,10 +5,11 @@
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/kotlin" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/test/kotlin" isTestSource="true" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
- <orderEntry type="library" name="kotlin" level="project" />
<orderEntry type="module" module-name="dokka" />
+ <orderEntry type="library" name="junit:junit:4.11" level="project" />
</component>
</module> \ No newline at end of file
diff --git a/javadoc/src/main/kotlin/docbase.kt b/javadoc/src/main/kotlin/docbase.kt
index e98e28cd..1587db2a 100644
--- a/javadoc/src/main/kotlin/docbase.kt
+++ b/javadoc/src/main/kotlin/docbase.kt
@@ -93,7 +93,7 @@ private fun DocumentationNode.hasModifier(name: String) = details(DocumentationN
class PackageAdapter(module: ModuleNodeAdapter, node: DocumentationNode) : DocumentationNodeAdapter(module, node), PackageDoc {
- private val allClasses = node.members.collectAllTypesRecursively()
+ private val allClasses = listOf(node).collectAllTypesRecursively()
override fun findClass(className: String?): ClassDoc? =
allClasses.get(className)?.let { ClassDocumentationNodeAdapter(module, it) }
@@ -126,7 +126,7 @@ class ProgramElementAdapter(module: ModuleNodeAdapter, node: DocumentationNode)
override fun isPackagePrivate(): Boolean = false
override fun isStatic(): Boolean = node.hasModifier("static")
override fun modifierSpecifier(): Int = Modifier.PUBLIC + if (isStatic) Modifier.STATIC else 0
- override fun qualifiedName(): String? = node.qualifiedName()
+ override fun qualifiedName(): String? = if (node.kind == DocumentationNode.Kind.Type) node.qualifiedNameFromType() else node.qualifiedName()
override fun annotations(): Array<out AnnotationDesc>? = nodeAnnotations(this).toTypedArray()
override fun modifiers(): String? = "public ${if (isStatic) "static" else ""}".trim()
override fun isProtected(): Boolean = false
@@ -134,6 +134,10 @@ class ProgramElementAdapter(module: ModuleNodeAdapter, node: DocumentationNode)
override fun isFinal(): Boolean = node.hasModifier("final")
override fun containingPackage(): PackageDoc? {
+ if (node.kind == DocumentationNode.Kind.Type) {
+ return null
+ }
+
var owner: DocumentationNode? = node
while (owner != null) {
if (owner.kind == DocumentationNode.Kind.Package) {
@@ -146,6 +150,10 @@ class ProgramElementAdapter(module: ModuleNodeAdapter, node: DocumentationNode)
}
override fun containingClass(): ClassDoc? {
+ if (node.kind == DocumentationNode.Kind.Type) {
+ return null
+ }
+
var owner = node.owner
while (owner != null) {
when (owner.kind) {
@@ -166,7 +174,7 @@ class ProgramElementAdapter(module: ModuleNodeAdapter, node: DocumentationNode)
open class TypeAdapter(override val module: ModuleNodeAdapter, override val node: DocumentationNode) : Type, HasDocumentationNode, HasModule {
private val javaLanguageService = JavaLanguageService()
- override fun qualifiedTypeName(): String = javaLanguageService.getArrayElementType(node)?.qualifiedName() ?: node.qualifiedName()
+ override fun qualifiedTypeName(): String = javaLanguageService.getArrayElementType(node)?.qualifiedNameFromType() ?: node.qualifiedNameFromType()
override fun typeName(): String = javaLanguageService.getArrayElementType(node)?.name ?: node.name
override fun simpleTypeName(): String = typeName() // TODO difference typeName() vs simpleTypeName()
@@ -178,7 +186,7 @@ open class TypeAdapter(override val module: ModuleNodeAdapter, override val node
when (node.kind) {
in DocumentationNode.Kind.classLike,
DocumentationNode.Kind.ExternalClass,
- DocumentationNode.Kind.Exception -> ClassDocumentationNodeAdapter(module, node)
+ DocumentationNode.Kind.Exception -> module.classNamed(qualifiedTypeName()) ?: ClassDocumentationNodeAdapter(module, node)
else -> when {
node.links.isNotEmpty() -> TypeAdapter(module, node.links.first()).asClassDoc()
diff --git a/javadoc/src/test/data/obj.kt b/javadoc/src/test/data/obj.kt
new file mode 100644
index 00000000..1d10a422
--- /dev/null
+++ b/javadoc/src/test/data/obj.kt
@@ -0,0 +1,7 @@
+package foo
+
+class O {
+ companion object {
+
+ }
+}
diff --git a/javadoc/src/test/data/types.kt b/javadoc/src/test/data/types.kt
new file mode 100644
index 00000000..55be6058
--- /dev/null
+++ b/javadoc/src/test/data/types.kt
@@ -0,0 +1,4 @@
+package foo
+
+fun foo(x: Int, o: Any): String {
+}
diff --git a/javadoc/src/test/kotlin/JavadocTest.kt b/javadoc/src/test/kotlin/JavadocTest.kt
new file mode 100644
index 00000000..1ac7069b
--- /dev/null
+++ b/javadoc/src/test/kotlin/JavadocTest.kt
@@ -0,0 +1,44 @@
+package org.jetbrains.dokka.javadoc
+
+import org.jetbrains.dokka.DokkaConsoleLogger
+import org.jetbrains.dokka.tests.verifyModel
+import org.junit.Test
+import kotlin.test.assertEquals
+import kotlin.test.assertFalse
+import kotlin.test.assertNotNull
+import kotlin.test.assertTrue
+
+class JavadocTest {
+ @Test fun testTypes() {
+ verifyModel("javadoc/src/test/data/types.kt", format = "javadoc", withJdk = true) { model ->
+ val doc = ModuleNodeAdapter(model, StandardReporter(DokkaConsoleLogger), "")
+ val classDoc = doc.classNamed("foo.TypesKt")!!
+ val method = classDoc.methods().find { it.name() == "foo" }!!
+
+ val type = method.returnType()
+ assertFalse(type.asClassDoc().isIncluded)
+ assertEquals("java.lang.String", type.qualifiedTypeName())
+ assertEquals("java.lang.String", type.asClassDoc().qualifiedName())
+
+ val params = method.parameters()
+ assertTrue(params[0].type().isPrimitive)
+ assertFalse(params[1].type().asClassDoc().isIncluded)
+ }
+ }
+
+ @Test fun testObject() {
+ verifyModel("javadoc/src/test/data/obj.kt", format = "javadoc") { model ->
+ val doc = ModuleNodeAdapter(model, StandardReporter(DokkaConsoleLogger), "")
+
+ val classDoc = doc.classNamed("foo.O")
+ assertNotNull(classDoc)
+
+ val companionDoc = doc.classNamed("foo.O.Companion")
+ assertNotNull(companionDoc)
+
+ val pkgDoc = doc.packageNamed("foo")!!
+ assertEquals(2, pkgDoc.allClasses().size)
+ }
+ }
+
+}
diff --git a/src/Kotlin/KotlinLanguageService.kt b/src/Kotlin/KotlinLanguageService.kt
index d07f4c09..0d39f410 100644
--- a/src/Kotlin/KotlinLanguageService.kt
+++ b/src/Kotlin/KotlinLanguageService.kt
@@ -65,8 +65,7 @@ class KotlinLanguageService : LanguageService {
private fun DocumentationNode.getReceiverQName(): String? {
if (kind != DocumentationNode.Kind.Function && kind != DocumentationNode.Kind.Property) return null
val receiver = details(DocumentationNode.Kind.Receiver).singleOrNull() ?: return null
- val receiverType = receiver.detail(DocumentationNode.Kind.Type)
- return (receiverType.links.firstOrNull() ?: receiverType.hiddenLinks.firstOrNull())?.qualifiedName()
+ return receiver.detail(DocumentationNode.Kind.Type).qualifiedNameFromType()
}
companion object {
@@ -405,4 +404,6 @@ class KotlinLanguageService : LanguageService {
identifier(node.name)
}
}
-} \ No newline at end of file
+}
+
+fun DocumentationNode.qualifiedNameFromType() = (links.firstOrNull() ?: hiddenLinks.firstOrNull())?.qualifiedName() ?: name
diff --git a/test/src/TestAPI.kt b/test/src/TestAPI.kt
index 79b5ba77..33cf4908 100644
--- a/test/src/TestAPI.kt
+++ b/test/src/TestAPI.kt
@@ -62,6 +62,9 @@ public fun verifyModel(source: String,
withKotlinRuntime: Boolean = false,
format: String = "html",
verifier: (DocumentationModule) -> Unit) {
+ if (!File(source).exists()) {
+ throw IllegalArgumentException("Can't find test data file $source")
+ }
verifyModel(contentRootFromPath(source),
withJdk = withJdk,
withKotlinRuntime = withKotlinRuntime,