aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlya Ryzhenkov <orangy@jetbrains.com>2014-07-11 22:25:01 +0400
committerIlya Ryzhenkov <orangy@jetbrains.com>2014-07-11 22:25:01 +0400
commit09935fc1657670eaa8beb1b56718ed267404d7db (patch)
treed43ad32d8a29fa0e0d73de641b4f459463b16e30
parentb511259a37aa9feee06a3ca92b7967552aa34104 (diff)
downloaddokka-09935fc1657670eaa8beb1b56718ed267404d7db.tar.gz
dokka-09935fc1657670eaa8beb1b56718ed267404d7db.tar.bz2
dokka-09935fc1657670eaa8beb1b56718ed267404d7db.zip
Support type parameter constraints as type parameter details.
-rw-r--r--src/Model/DocumentationBuilder.kt14
-rw-r--r--src/Model/DocumentationModel.kt2
-rw-r--r--test/data/functions/genericFunctionWithConstraints.kt6
-rw-r--r--test/src/model/FunctionTest.kt28
4 files changed, 50 insertions, 0 deletions
diff --git a/src/Model/DocumentationBuilder.kt b/src/Model/DocumentationBuilder.kt
index 2afe366b..73f83ff9 100644
--- a/src/Model/DocumentationBuilder.kt
+++ b/src/Model/DocumentationBuilder.kt
@@ -4,6 +4,7 @@ import org.jetbrains.jet.lang.resolve.*
import org.jetbrains.jet.lang.psi.*
import org.jetbrains.jet.lang.descriptors.*
import org.jetbrains.jet.lang.descriptors.impl.*
+import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns
fun BindingContext.createSourceModel(file: JetFile): DocumentationModel {
val model = DocumentationModel()
@@ -55,6 +56,19 @@ class DocumentationBuilderVisitor(val context: BindingContext) : DeclarationDesc
val doc = context.getDocumentation(descriptor!!)
val node = DocumentationNode(descriptor.getName().asString(), doc, DocumentationNodeKind.TypeParameter)
data?.addReferenceTo(node, DocumentationReferenceKind.Detail)
+ val builtIns = KotlinBuiltIns.getInstance()
+ for (constraint in descriptor.getUpperBounds()) {
+ if (constraint == builtIns.getDefaultBound())
+ continue
+ val constraintNode = DocumentationNode(constraint.toString(), "", DocumentationNodeKind.UpperBound)
+ node.addReferenceTo(constraintNode, DocumentationReferenceKind.Detail)
+ }
+ for (constraint in descriptor.getLowerBounds()) {
+ if (builtIns.isNothing(constraint))
+ continue
+ val constraintNode = DocumentationNode(constraint.toString(), "", DocumentationNodeKind.LowerBound)
+ node.addReferenceTo(constraintNode, DocumentationReferenceKind.Detail)
+ }
return node
}
diff --git a/src/Model/DocumentationModel.kt b/src/Model/DocumentationModel.kt
index 0113eb18..7f40acb2 100644
--- a/src/Model/DocumentationModel.kt
+++ b/src/Model/DocumentationModel.kt
@@ -14,6 +14,8 @@ public enum class DocumentationNodeKind {
Property
Parameter
TypeParameter
+ UpperBound
+ LowerBound
Exception
Page
diff --git a/test/data/functions/genericFunctionWithConstraints.kt b/test/data/functions/genericFunctionWithConstraints.kt
new file mode 100644
index 00000000..11598ae7
--- /dev/null
+++ b/test/data/functions/genericFunctionWithConstraints.kt
@@ -0,0 +1,6 @@
+
+/**
+ * generic function
+ */
+fun <T : CharSequence> generic() {
+} \ No newline at end of file
diff --git a/test/src/model/FunctionTest.kt b/test/src/model/FunctionTest.kt
index c2a444b9..20ae390c 100644
--- a/test/src/model/FunctionTest.kt
+++ b/test/src/model/FunctionTest.kt
@@ -39,6 +39,34 @@ public class FunctionTest {
}
}
}
+ Test fun genericFunctionWithConstraints() {
+ verifyModel("test/data/functions/genericFunctionWithConstraints.kt") { model ->
+ with(model.nodes.single().members.single()) {
+ assertEquals("generic", name)
+ assertEquals(DocumentationNodeKind.Function, kind)
+ assertEquals("generic function", doc)
+
+ with(details.single()) {
+ assertEquals("T", name)
+ assertEquals(DocumentationNodeKind.TypeParameter, kind)
+ assertEquals("", doc)
+ with(details.single()) {
+ assertEquals("CharSequence", name)
+ assertEquals(DocumentationNodeKind.UpperBound, kind)
+ assertEquals("", doc)
+ assertTrue(details.none())
+ assertTrue(members.none())
+ assertTrue(links.none())
+ }
+ assertTrue(members.none())
+ assertTrue(links.none())
+ }
+
+ assertTrue(members.none())
+ assertTrue(links.none())
+ }
+ }
+ }
Test fun functionWithParams() {
verifyModel("test/data/functions/functionWithParams.kt") { model ->