diff options
author | Dmitry Jemerov <yole@jetbrains.com> | 2015-11-05 15:51:23 +0100 |
---|---|---|
committer | Dmitry Jemerov <yole@jetbrains.com> | 2015-11-05 15:51:23 +0100 |
commit | b643bf6f4b4c29676ce3301d92b7880b268d6722 (patch) | |
tree | 8f0fede2d5eac2110ca4687a35eefb8727ed4d7e | |
parent | 0bad64896baed4056d75f8b948afe0d848bc8adf (diff) | |
download | dokka-b643bf6f4b4c29676ce3301d92b7880b268d6722.tar.gz dokka-b643bf6f4b4c29676ce3301d92b7880b268d6722.tar.bz2 dokka-b643bf6f4b4c29676ce3301d92b7880b268d6722.zip |
add tests; fixes related to qualified names of types
-rw-r--r-- | dokka.iml | 2 | ||||
-rw-r--r-- | javadoc/javadoc.iml | 3 | ||||
-rw-r--r-- | javadoc/src/main/kotlin/docbase.kt | 16 | ||||
-rw-r--r-- | javadoc/src/test/data/obj.kt | 7 | ||||
-rw-r--r-- | javadoc/src/test/data/types.kt | 4 | ||||
-rw-r--r-- | javadoc/src/test/kotlin/JavadocTest.kt | 44 | ||||
-rw-r--r-- | src/Kotlin/KotlinLanguageService.kt | 7 | ||||
-rw-r--r-- | test/src/TestAPI.kt | 3 |
8 files changed, 77 insertions, 9 deletions
@@ -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, |