""")
val prev = model.previous(pkg)
if (prev != null) {
- println(" PREV PACKAGE ")
+ println(" PREV PACKAGE ")
}
val next = model.next(pkg)
if (next != null) {
- println(" NEXT PACKAGE")
+ println(" NEXT PACKAGE")
}
println("""
""")
diff --git a/kdoc/src/main/kotlin/org/jetbrains/kotlin/model/KotlinModel.kt b/kdoc/src/main/kotlin/org/jetbrains/kotlin/model/KotlinModel.kt
index 75c6e7aa7f1..367c2bcf21d 100644
--- a/kdoc/src/main/kotlin/org/jetbrains/kotlin/model/KotlinModel.kt
+++ b/kdoc/src/main/kotlin/org/jetbrains/kotlin/model/KotlinModel.kt
@@ -18,7 +18,7 @@ class KModel(var title: String = "Documentation", var version: String = "TODO")
/* Returns the package for the given name, creating one if its not already been create yet */
fun getPackage(name: String): KPackage {
- return packageMap.getOrPut(name){ KPackage(name) }
+ return packageMap.getOrPut(name){ KPackage(this, name) }
}
/* Returns the class for the given qualified name, creating one if its not already been created yet */
@@ -32,15 +32,18 @@ class KModel(var title: String = "Documentation", var version: String = "TODO")
}
fun previous(pkg: KPackage): KPackage? {
+ // TODO
return null
}
fun next(pkg: KPackage): KPackage? {
+ // TODO
return null
}
}
-class KPackage(val name: String, var description: String = "", var detailedDescription: String = "") : Comparable {
+class KPackage(val model: KModel, val name: String, var external: Boolean = false,
+ var description: String = "", var detailedDescription: String = "") : Comparable {
override fun compareTo(other: KPackage): Int = name.compareTo(other.name)
fun equals(other: KPackage) = name == other.name
@@ -65,7 +68,10 @@ class KPackage(val name: String, var description: String = "", var detailedDescr
/** Returns a relative path like ../.. for each path in the name */
public val nameAsRelativePath: String
- get() = namePaths.map{ ".." }.join("/")
+ get() {
+ val answer = namePaths.map{ ".." }.join("/")
+ return if (answer.length == 0) "" else answer + "/"
+ }
// TODO generates java.lang.NoSuchMethodError: std.util.namespace.hashMap(Ljet/TypeInfo;Ljet/TypeInfo;)Ljava/util/HashMap;
//val classes = sortedMap()
@@ -78,7 +84,9 @@ class KPackage(val name: String, var description: String = "", var detailedDescr
/* Returns the class for the given name, creating one if its not already been create yet */
fun getClass(simpleName: String): KClass {
- return classMap.getOrPut(simpleName){ KClass(this, simpleName) }
+ return classMap.getOrPut(simpleName) {
+ val base = if (simpleName == "Object" && name == "java.lang") null else model.getClass("java.lang.Object")
+ KClass(this, simpleName, base) }
}
fun qualifiedName(simpleName: String): String {
@@ -89,13 +97,33 @@ class KPackage(val name: String, var description: String = "", var detailedDescr
}
}
+
+ fun previous(pkg: KClass): KClass? {
+ // TODO
+ return null
+ }
+
+ fun next(pkg: KClass): KClass? {
+ // TODO
+ return null
+ }
+
fun groupClassMap(): Map> {
return classes.groupBy(TreeMap>()){it.group}
}
}
-class KClass(val kpackage: KPackage, val simpleName: String,
- var kind: String = "class", var group: String = "Other", var description: String = "") : Comparable {
+class KClass(val pkg: KPackage, val simpleName: String,
+ var baseClass: KClass? = null,
+ var kind: String = "class", var group: String = "Other",
+ var description: String = "", var detailedDescription: String = "",
+ var annotations: List = arrayList(),
+ var since: String = "",
+ var authors: List = arrayList(),
+ var methods: List = arrayList(),
+ var nestedClasses: List = arrayList(),
+ var sourceLine: Int = 2) : Comparable {
+
override fun compareTo(other: KClass): Int = name.compareTo(other.name)
fun equals(other: KClass) = name == other.name
@@ -109,11 +137,63 @@ class KClass(val kpackage: KPackage, val simpleName: String,
return $url
}
- public val name: String = kpackage.qualifiedName(simpleName)
- public val packageName: String = kpackage.name
+ public val name: String = pkg.qualifiedName(simpleName)
+ public val packageName: String = pkg.name
/** Returns the name as a directory using '/' instead of '.' */
public val nameAsPath: String
get() = name.replace('.', '/')
+
+ fun isAnnotation() = kind == "annotation"
+ fun isInterface() = kind == "interface"
+}
+
+class KMethod(val name: String,
+ var returnType: KClass,
+ var description: String = "", var detailedDescription: String = "",
+ var deprecated: Boolean = false,
+ var modifiers: List = arrayList(),
+ var typeParameters: List = arrayList(),
+ var parameters: List = arrayList(),
+ var exceptions: List = arrayList(),
+ var annotations: List = arrayList()) : Comparable {
+ // TODO compare other things than just name :)
+
+ override fun compareTo(other: KMethod): Int = name.compareTo(other.name)
+
+ fun equals(other: KMethod) = name == other.name
+
+ fun toString() = "fun ($name)"
+
+ /** TODO generate a link with the argument type names */
+ public val link: String = name
+
+ /** Returns a list of generic type parameter names kinds like "A, I" */
+ public val typeParametersText: String
+ get() = typeParameters.map{ it.name }.join(", ")
+}
+
+class KParameter(val name: String,
+ var klass: KClass,
+ var description: String = "", var detailedDescription: String = "") {
+
+ fun toString() = "$name: ${klass.name}"
+}
+
+class KTypeParameter(val name: String,
+ var klass: KClass,
+ var extends: List = arrayList()) {
+
+ fun toString() = if (extends.isEmpty()) name else {
+ "$name extends ${extends.map{it.name}.join(" & ")}"
+ }
+}
+
+class KAnnotation(var klass: KClass,
+ var description: String = "", var detailedDescription: String = "") {
+
+ // TODO add some parameter values?
+
+ fun toString() = "@$klass.simpleName"
}
\ No newline at end of file
diff --git a/kdoc/src/test/kotlin/test/kotlin/doc/ModelTest.kt b/kdoc/src/test/kotlin/test/kotlin/doc/ModelTest.kt
index 91d961c2357..9438a0b4ca7 100644
--- a/kdoc/src/test/kotlin/test/kotlin/doc/ModelTest.kt
+++ b/kdoc/src/test/kotlin/test/kotlin/doc/ModelTest.kt
@@ -37,9 +37,14 @@ class ModelTest : TestCase() {
}
fun testModelWalk() {
- model.getClass("something.else.Aaa")
- model.getClass("something.else.Zzz")
- model.getClass("another.Cheese")
+ val a = model.getClass("something.else.Aaa")
+ val z = model.getClass("something.else.Zzz")
+ val c = model.getClass("another.Cheese")
+
+ c.methods.add(KMethod("addFoo", a, "add some foos"))
+ val m1 = KMethod("addZzzz", z, "add some zzz")
+ m1.parameters.add(KParameter("myz", z))
+ c.methods.add(m1)
// now lets iterate through the model
println("Walking the model...")