aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Generation/KotlinSignatureGenerator.kt7
-rw-r--r--src/Generation/SignatureGenerator.kt6
-rw-r--r--src/Model/Diagnostics.kt14
-rw-r--r--src/Model/DocumentationModule.kt78
-rw-r--r--src/Model/DocumentationNode.kt63
-rw-r--r--src/Model/DocumentationNodeBuilder.kt82
-rw-r--r--src/Model/DocumentationReference.kt14
-rw-r--r--src/main.kt2
8 files changed, 145 insertions, 121 deletions
diff --git a/src/Generation/KotlinSignatureGenerator.kt b/src/Generation/KotlinSignatureGenerator.kt
new file mode 100644
index 00000000..fad655b0
--- /dev/null
+++ b/src/Generation/KotlinSignatureGenerator.kt
@@ -0,0 +1,7 @@
+package org.jetbrains.dokka
+
+class KotlinSignatureGenerator : SignatureGenerator {
+ override fun getFunctionSignature(node: DocumentationNode): String {
+ return node.name
+ }
+} \ No newline at end of file
diff --git a/src/Generation/SignatureGenerator.kt b/src/Generation/SignatureGenerator.kt
new file mode 100644
index 00000000..2f603327
--- /dev/null
+++ b/src/Generation/SignatureGenerator.kt
@@ -0,0 +1,6 @@
+package org.jetbrains.dokka
+
+trait SignatureGenerator {
+ fun getFunctionSignature(node: DocumentationNode): String
+}
+
diff --git a/src/Model/Diagnostics.kt b/src/Model/Diagnostics.kt
index 723bd59d..470d7973 100644
--- a/src/Model/Diagnostics.kt
+++ b/src/Model/Diagnostics.kt
@@ -5,18 +5,18 @@ import org.jetbrains.jet.lang.resolve.name.*
import org.jetbrains.jet.lang.resolve.BindingContext
fun BindingContext.checkResolveChildren(node : DocumentationNode) {
- if (node.kind != DocumentationNodeKind.Module && node.kind != DocumentationNodeKind.Package) {
+ if (node.kind != DocumentationNode.Kind.Module && node.kind != DocumentationNode.Kind.Package) {
// TODO: we don't resolve packages and modules for now
val parentScope = getResolutionScope(node.descriptor)
for (item in node.details + node.members) {
val symbolName = item.name
val symbol: DeclarationDescriptor? = when (item.kind) {
- DocumentationNodeKind.Receiver -> (parentScope.getContainingDeclaration() as FunctionDescriptor).getReceiverParameter()
- DocumentationNodeKind.Parameter -> parentScope.getLocalVariable(Name.guess(symbolName))
- DocumentationNodeKind.Function -> parentScope.getFunctions(Name.guess(symbolName)).firstOrNull()
- DocumentationNodeKind.Property -> parentScope.getProperties(Name.guess(symbolName)).firstOrNull()
- DocumentationNodeKind.Constructor -> parentScope.getFunctions(Name.guess(symbolName)).firstOrNull()
+ DocumentationNode.Kind.Receiver -> (parentScope.getContainingDeclaration() as FunctionDescriptor).getReceiverParameter()
+ DocumentationNode.Kind.Parameter -> parentScope.getLocalVariable(Name.guess(symbolName))
+ DocumentationNode.Kind.Function -> parentScope.getFunctions(Name.guess(symbolName)).firstOrNull()
+ DocumentationNode.Kind.Property -> parentScope.getProperties(Name.guess(symbolName)).firstOrNull()
+ DocumentationNode.Kind.Constructor -> parentScope.getFunctions(Name.guess(symbolName)).firstOrNull()
else -> parentScope.getClassifier(Name.guess(symbolName))
}
@@ -25,7 +25,7 @@ fun BindingContext.checkResolveChildren(node : DocumentationNode) {
}
}
- for (reference in node.allReferences().filterNot { it.kind == DocumentationReferenceKind.Owner }) {
+ for (reference in node.allReferences().filterNot { it.kind == DocumentationReference.Kind.Owner }) {
checkResolveChildren(reference.to)
}
}
diff --git a/src/Model/DocumentationModule.kt b/src/Model/DocumentationModule.kt
index 49a54624..25cbb600 100644
--- a/src/Model/DocumentationModule.kt
+++ b/src/Model/DocumentationModule.kt
@@ -4,71 +4,7 @@ import org.jetbrains.jet.lang.resolve.BindingContext
import org.jetbrains.jet.lang.psi.JetFile
import org.jetbrains.jet.lang.descriptors.*
-public enum class DocumentationNodeKind {
- Unknown
-
- Package
- Class
- Trait
- Object
-
- Constructor
- Function
- Property
-
- Parameter
- Receiver
- TypeParameter
- Type
- UpperBound
- LowerBound
- Exception
-
- Module
-}
-
-public enum class DocumentationReferenceKind {
- Owner
- Member
- Detail
- Link
- Override
-}
-
-public open class DocumentationNode(val descriptor: DeclarationDescriptor,
- val name: String,
- val doc: DocumentationContent,
- val kind: DocumentationNodeKind) {
-
- private val references = arrayListOf<DocumentationReference>()
-
- public val owner: DocumentationNode?
- get() = references(DocumentationReferenceKind.Owner).firstOrNull()?.to // TODO: should be singleOrNull, but bugz!
- public val details: List<DocumentationNode>
- get() = references(DocumentationReferenceKind.Detail).map { it.to }
- public val members: List<DocumentationNode>
- get() = references(DocumentationReferenceKind.Member).map { it.to }
- public val links: List<DocumentationNode>
- get() = references(DocumentationReferenceKind.Link).map { it.to }
-
- // TODO: Should we allow node mutation? Model merge will copy by ref, so references are transparent, which could nice
- public fun addReferenceTo(to: DocumentationNode, kind: DocumentationReferenceKind) {
- references.add(DocumentationReference(this, to, kind))
- }
-
- public fun addAllReferencesFrom(other: DocumentationNode) {
- references.addAll(other.references)
- }
-
- public fun references(kind: DocumentationReferenceKind): List<DocumentationReference> = references.filter { it.kind == kind }
- public fun allReferences(): List<DocumentationReference> = references
-
- public override fun toString(): String {
- return "$kind:$name"
- }
-}
-
-public class DocumentationModule(val module: ModuleDescriptor) : DocumentationNode(module, "model", DocumentationContent.Empty, DocumentationNodeKind.Module) {
+public class DocumentationModule(val module: ModuleDescriptor) : DocumentationNode(module, "model", DocumentationContent.Empty, DocumentationNode.Kind.Module) {
fun merge(other: DocumentationModule): DocumentationModule {
val model = DocumentationModule(module)
model.addAllReferencesFrom(other)
@@ -77,17 +13,15 @@ public class DocumentationModule(val module: ModuleDescriptor) : DocumentationNo
}
}
-public data class DocumentationReference(val from: DocumentationNode, val to: DocumentationNode, val kind: DocumentationReferenceKind)
-
-fun BindingContext.createDocumentationModel(module: ModuleDescriptor, file: JetFile): DocumentationModule {
+fun BindingContext.createDocumentationModule(module: ModuleDescriptor, file: JetFile): DocumentationModule {
val packageFragment = getPackageFragment(file)
- val model = DocumentationModule(module)
+ val documentationModule = DocumentationModule(module)
if (packageFragment == null) throw IllegalArgumentException("File $file should have package fragment")
val visitor = DocumentationNodeBuilder(this)
- packageFragment.accept(DocumentationBuildingVisitor(this, visitor), model)
+ packageFragment.accept(DocumentationBuildingVisitor(this, visitor), documentationModule)
- checkResolveChildren(model)
+ checkResolveChildren(documentationModule)
- return model
+ return documentationModule
}
diff --git a/src/Model/DocumentationNode.kt b/src/Model/DocumentationNode.kt
new file mode 100644
index 00000000..f095e8b0
--- /dev/null
+++ b/src/Model/DocumentationNode.kt
@@ -0,0 +1,63 @@
+package org.jetbrains.dokka
+
+import org.jetbrains.jet.lang.descriptors.*
+
+
+public open class DocumentationNode(val descriptor: DeclarationDescriptor,
+ val name: String,
+ val doc: DocumentationContent,
+ val kind: DocumentationNode.Kind) {
+
+ private val references = arrayListOf<DocumentationReference>()
+
+ public val owner: DocumentationNode?
+ get() = references(DocumentationReference.Kind.Owner).firstOrNull()?.to // TODO: should be singleOrNull, but bugz!
+ public val details: List<DocumentationNode>
+ get() = references(DocumentationReference.Kind.Detail).map { it.to }
+ public val members: List<DocumentationNode>
+ get() = references(DocumentationReference.Kind.Member).map { it.to }
+ public val links: List<DocumentationNode>
+ get() = references(DocumentationReference.Kind.Link).map { it.to }
+
+ // TODO: Should we allow node mutation? Model merge will copy by ref, so references are transparent, which could nice
+ public fun addReferenceTo(to: DocumentationNode, kind: DocumentationReference.Kind) {
+ references.add(DocumentationReference(this, to, kind))
+ }
+
+ public fun addAllReferencesFrom(other: DocumentationNode) {
+ references.addAll(other.references)
+ }
+
+ public fun references(kind: DocumentationReference.Kind): List<DocumentationReference> = references.filter { it.kind == kind }
+ public fun allReferences(): List<DocumentationReference> = references
+
+ public override fun toString(): String {
+ return "$kind:$name"
+ }
+
+ public enum class Kind {
+ Unknown
+
+ Package
+ Class
+ Trait
+ Object
+
+ Constructor
+ Function
+ Property
+
+ Parameter
+ Receiver
+ TypeParameter
+ Type
+ UpperBound
+ LowerBound
+ Exception
+
+ Module
+ }
+
+}
+
+
diff --git a/src/Model/DocumentationNodeBuilder.kt b/src/Model/DocumentationNodeBuilder.kt
index b079c499..8fa12012 100644
--- a/src/Model/DocumentationNodeBuilder.kt
+++ b/src/Model/DocumentationNodeBuilder.kt
@@ -10,104 +10,104 @@ class DocumentationNodeBuilder(val context: BindingContext) : DeclarationDescrip
override fun visitDeclarationDescriptor(descriptor: DeclarationDescriptor?, data: DocumentationNode?): DocumentationNode? {
val doc = context.getDocumentation(descriptor!!)
- val node = DocumentationNode(descriptor, descriptor.getName().asString(), doc, DocumentationNodeKind.Unknown)
- data!!.addReferenceTo(node, DocumentationReferenceKind.Link)
- node.addReferenceTo(data, DocumentationReferenceKind.Owner)
+ val node = DocumentationNode(descriptor, descriptor.getName().asString(), doc, DocumentationNode.Kind.Unknown)
+ data!!.addReferenceTo(node, DocumentationReference.Kind.Link)
+ node.addReferenceTo(data, DocumentationReference.Kind.Owner)
return node
}
override fun visitReceiverParameterDescriptor(descriptor: ReceiverParameterDescriptor?, data: DocumentationNode?): DocumentationNode? {
- val node = DocumentationNode(descriptor!!, descriptor.getName().asString(), DocumentationContent.Empty, DocumentationNodeKind.Receiver)
- data!!.addReferenceTo(node, DocumentationReferenceKind.Detail)
+ val node = DocumentationNode(descriptor!!, descriptor.getName().asString(), DocumentationContent.Empty, DocumentationNode.Kind.Receiver)
+ data!!.addReferenceTo(node, DocumentationReference.Kind.Detail)
- val typeNode = DocumentationNode(descriptor, descriptor.getType().toString(), DocumentationContent.Empty, DocumentationNodeKind.Type)
- node.addReferenceTo(typeNode, DocumentationReferenceKind.Detail)
+ val typeNode = DocumentationNode(descriptor, descriptor.getType().toString(), DocumentationContent.Empty, DocumentationNode.Kind.Type)
+ node.addReferenceTo(typeNode, DocumentationReference.Kind.Detail)
- node.addReferenceTo(data, DocumentationReferenceKind.Owner)
+ node.addReferenceTo(data, DocumentationReference.Kind.Owner)
return node
}
override fun visitValueParameterDescriptor(descriptor: ValueParameterDescriptor?, data: DocumentationNode?): DocumentationNode? {
val doc = context.getDocumentation(descriptor!!)
- val node = DocumentationNode(descriptor, descriptor.getName().asString(), doc, DocumentationNodeKind.Parameter)
- data!!.addReferenceTo(node, DocumentationReferenceKind.Detail)
+ val node = DocumentationNode(descriptor, descriptor.getName().asString(), doc, DocumentationNode.Kind.Parameter)
+ data!!.addReferenceTo(node, DocumentationReference.Kind.Detail)
- val typeNode = DocumentationNode(descriptor, descriptor.getType().toString(), DocumentationContent.Empty, DocumentationNodeKind.Type)
- node.addReferenceTo(typeNode, DocumentationReferenceKind.Detail)
+ val typeNode = DocumentationNode(descriptor, descriptor.getType().toString(), DocumentationContent.Empty, DocumentationNode.Kind.Type)
+ node.addReferenceTo(typeNode, DocumentationReference.Kind.Detail)
- node.addReferenceTo(data, DocumentationReferenceKind.Owner)
+ node.addReferenceTo(data, DocumentationReference.Kind.Owner)
return node
}
override fun visitClassDescriptor(descriptor: ClassDescriptor?, data: DocumentationNode?): DocumentationNode? {
val doc = context.getDocumentation(descriptor!!)
val node = DocumentationNode(descriptor, descriptor.getName().asString(), doc, when (descriptor.getKind()) {
- ClassKind.OBJECT -> DocumentationNodeKind.Object
- ClassKind.TRAIT -> DocumentationNodeKind.Trait
- else -> DocumentationNodeKind.Class
+ ClassKind.OBJECT -> DocumentationNode.Kind.Object
+ ClassKind.TRAIT -> DocumentationNode.Kind.Trait
+ else -> DocumentationNode.Kind.Class
})
- data!!.addReferenceTo(node, DocumentationReferenceKind.Member)
- node.addReferenceTo(data, DocumentationReferenceKind.Owner)
+ data!!.addReferenceTo(node, DocumentationReference.Kind.Member)
+ node.addReferenceTo(data, DocumentationReference.Kind.Owner)
return node
}
override fun visitFunctionDescriptor(descriptor: FunctionDescriptor?, data: DocumentationNode?): DocumentationNode? {
val doc = context.getDocumentation(descriptor!!)
- val node = DocumentationNode(descriptor, descriptor.getName().asString(), doc, DocumentationNodeKind.Function)
- data!!.addReferenceTo(node, DocumentationReferenceKind.Member)
+ val node = DocumentationNode(descriptor, descriptor.getName().asString(), doc, DocumentationNode.Kind.Function)
+ data!!.addReferenceTo(node, DocumentationReference.Kind.Member)
- val typeNode = DocumentationNode(descriptor, descriptor.getReturnType().toString(), DocumentationContent.Empty, DocumentationNodeKind.Type)
- node.addReferenceTo(typeNode, DocumentationReferenceKind.Detail)
+ val typeNode = DocumentationNode(descriptor, descriptor.getReturnType().toString(), DocumentationContent.Empty, DocumentationNode.Kind.Type)
+ node.addReferenceTo(typeNode, DocumentationReference.Kind.Detail)
- node.addReferenceTo(data, DocumentationReferenceKind.Owner)
+ node.addReferenceTo(data, DocumentationReference.Kind.Owner)
return node
}
override fun visitTypeParameterDescriptor(descriptor: TypeParameterDescriptor?, data: DocumentationNode?): DocumentationNode? {
val doc = context.getDocumentation(descriptor!!)
- val node = DocumentationNode(descriptor, descriptor.getName().asString(), doc, DocumentationNodeKind.TypeParameter)
- data!!.addReferenceTo(node, DocumentationReferenceKind.Detail)
+ val node = DocumentationNode(descriptor, descriptor.getName().asString(), doc, DocumentationNode.Kind.TypeParameter)
+ data!!.addReferenceTo(node, DocumentationReference.Kind.Detail)
val builtIns = KotlinBuiltIns.getInstance()
for (constraint in descriptor.getUpperBounds()) {
if (constraint == builtIns.getDefaultBound())
continue
- val constraintNode = DocumentationNode(descriptor, constraint.toString(), DocumentationContent.Empty, DocumentationNodeKind.UpperBound)
- node.addReferenceTo(constraintNode, DocumentationReferenceKind.Detail)
+ val constraintNode = DocumentationNode(descriptor, constraint.toString(), DocumentationContent.Empty, DocumentationNode.Kind.UpperBound)
+ node.addReferenceTo(constraintNode, DocumentationReference.Kind.Detail)
}
for (constraint in descriptor.getLowerBounds()) {
if (builtIns.isNothing(constraint))
continue
- val constraintNode = DocumentationNode(descriptor, constraint.toString(), DocumentationContent.Empty, DocumentationNodeKind.LowerBound)
- node.addReferenceTo(constraintNode, DocumentationReferenceKind.Detail)
+ val constraintNode = DocumentationNode(descriptor, constraint.toString(), DocumentationContent.Empty, DocumentationNode.Kind.LowerBound)
+ node.addReferenceTo(constraintNode, DocumentationReference.Kind.Detail)
}
- node.addReferenceTo(data, DocumentationReferenceKind.Owner)
+ node.addReferenceTo(data, DocumentationReference.Kind.Owner)
return node
}
override fun visitPropertyDescriptor(descriptor: PropertyDescriptor?, data: DocumentationNode?): DocumentationNode? {
val doc = context.getDocumentation(descriptor!!)
- val node = DocumentationNode(descriptor, descriptor.getName().asString(), doc, DocumentationNodeKind.Property)
- data!!.addReferenceTo(node, DocumentationReferenceKind.Member)
+ val node = DocumentationNode(descriptor, descriptor.getName().asString(), doc, DocumentationNode.Kind.Property)
+ data!!.addReferenceTo(node, DocumentationReference.Kind.Member)
- val typeNode = DocumentationNode(descriptor, descriptor.getType().toString(), DocumentationContent.Empty, DocumentationNodeKind.Type)
- node.addReferenceTo(typeNode, DocumentationReferenceKind.Detail)
+ val typeNode = DocumentationNode(descriptor, descriptor.getType().toString(), DocumentationContent.Empty, DocumentationNode.Kind.Type)
+ node.addReferenceTo(typeNode, DocumentationReference.Kind.Detail)
- node.addReferenceTo(data, DocumentationReferenceKind.Owner)
+ node.addReferenceTo(data, DocumentationReference.Kind.Owner)
return node
}
override fun visitConstructorDescriptor(descriptor: ConstructorDescriptor?, data: DocumentationNode?): DocumentationNode? {
val doc = context.getDocumentation(descriptor!!)
- val node = DocumentationNode(descriptor, descriptor.getName().asString(), doc, DocumentationNodeKind.Constructor)
- data!!.addReferenceTo(node, DocumentationReferenceKind.Member)
- node.addReferenceTo(data, DocumentationReferenceKind.Owner)
+ val node = DocumentationNode(descriptor, descriptor.getName().asString(), doc, DocumentationNode.Kind.Constructor)
+ data!!.addReferenceTo(node, DocumentationReference.Kind.Member)
+ node.addReferenceTo(data, DocumentationReference.Kind.Owner)
return node
}
override fun visitPackageFragmentDescriptor(descriptor: PackageFragmentDescriptor?, data: DocumentationNode?): DocumentationNode? {
- val node = DocumentationNode(descriptor!!, descriptor.fqName.asString(), DocumentationContent.Empty, DocumentationNodeKind.Package)
- data!!.addReferenceTo(node, DocumentationReferenceKind.Member)
- node.addReferenceTo(data, DocumentationReferenceKind.Owner)
+ val node = DocumentationNode(descriptor!!, descriptor.fqName.asString(), DocumentationContent.Empty, DocumentationNode.Kind.Package)
+ data!!.addReferenceTo(node, DocumentationReference.Kind.Member)
+ node.addReferenceTo(data, DocumentationReference.Kind.Owner)
return node
}
}
diff --git a/src/Model/DocumentationReference.kt b/src/Model/DocumentationReference.kt
new file mode 100644
index 00000000..41cca8db
--- /dev/null
+++ b/src/Model/DocumentationReference.kt
@@ -0,0 +1,14 @@
+package org.jetbrains.dokka
+
+public data class DocumentationReference(val from: DocumentationNode, val to: DocumentationNode, val kind: DocumentationReference.Kind) {
+ public enum class Kind {
+ Owner
+ Member
+ Detail
+ Link
+ Override
+ }
+}
+
+
+
diff --git a/src/main.kt b/src/main.kt
index 975b2633..95cda7af 100644
--- a/src/main.kt
+++ b/src/main.kt
@@ -38,7 +38,7 @@ public fun main(args: Array<String>) {
val model = environment.processFiles { context, module, file ->
println("Processing: ${file.getName()}")
- context.createDocumentationModel(module, file)
+ context.createDocumentationModule(module, file)
}.reduce {(aggregate, item) -> aggregate.merge(item) }
ConsoleGenerator().generate(model)