From 5ece48e3cca2e5f9eb9e7784d030777e6ee0cf58 Mon Sep 17 00:00:00 2001 From: James Strachan Date: Mon, 26 Mar 2012 17:07:23 +0100 Subject: [PATCH] show traits and class visibility properly in kdoc and hide non API stuff (i.e. public and protected is shown) --- .../jetbrains/kotlin/doc/model/KotlinModel.kt | 69 ++++++++++++++----- .../kotlin/doc/templates/ClassTemplate.kt | 2 +- .../doc/templates/PackageFrameTemplate.kt | 2 +- .../doc/templates/PackageSummaryTemplate.kt | 2 +- libraries/stdlib/src/JavaIo.kt | 2 +- libraries/stdlib/src/dom/Dom.kt | 4 +- libraries/stdlib/src/properties/Properties.kt | 6 +- .../stdlib/src/support/AbstractIterator.kt | 2 +- .../jetbrains/kotlin/site/GenerateSiteTest.kt | 1 + 9 files changed, 64 insertions(+), 26 deletions(-) diff --git a/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/model/KotlinModel.kt b/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/model/KotlinModel.kt index 7776c02031c..ee8bc7cfe33 100644 --- a/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/model/KotlinModel.kt +++ b/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/model/KotlinModel.kt @@ -32,6 +32,8 @@ import org.pegdown.ast.ExpLinkNode import org.pegdown.Extensions import org.jetbrains.kotlin.doc.templates.KDocTemplate import org.jetbrains.jet.lang.resolve.scopes.WritableScopeImpl +import org.jetbrains.jet.lang.descriptors.Visibility +import org.jetbrains.jet.lang.descriptors.ClassKind /** @@ -136,7 +138,7 @@ fun extensionProperties(properties: Collection): Map = TreeSet() @@ -431,9 +433,9 @@ class KModel(var context: BindingContext, val config: KDocConfig) { } } -class TemplateLinkRenderer(val annotated: KAnnotated, val template: KDocTemplate) : LinkRenderer() { +class TemplateLinkRenderer(val annotated: KAnnotated, val template: KDocTemplate): LinkRenderer() { - override fun render(node : WikiLinkNode?) : Rendering? { + override fun render(node: WikiLinkNode?): Rendering? { val answer = super.render(node) if (answer != null) { val text = answer.text @@ -537,17 +539,17 @@ class TemplateLinkRenderer(val annotated: KAnnotated, val template: KDocTemplate */ } - override fun render(node : RefLinkNode?, url : String?, title : String?, text : String?) : Rendering? { + override fun render(node: RefLinkNode?, url: String?, title: String?, text: String?): Rendering? { // println("LinkRenderer.render(RefLinkNode): $node url: $url title: $title text: $text") return super.render(node, url, title, text) } - override fun render(node : AutoLinkNode?) : Rendering? { + override fun render(node: AutoLinkNode?): Rendering? { // println("LinkRenderer.render(AutoLinkNode): $node") return super.render(node) } - override fun render(node : ExpLinkNode?, text : String?) : Rendering? { + override fun render(node: ExpLinkNode?, text: String?): Rendering? { // println("LinkRenderer.render(ExpLinkNode): $node text: $text") return super.render(node, text) } @@ -575,7 +577,7 @@ abstract class KAnnotated(val model: KModel, val declarationDescriptor: Declarat } } -abstract class KNamed(val name: String, model: KModel, declarationDescriptor: DeclarationDescriptor) : KAnnotated(model, declarationDescriptor), Comparable { +abstract class KNamed(val name: String, model: KModel, declarationDescriptor: DeclarationDescriptor): KAnnotated(model, declarationDescriptor), Comparable { override fun compareTo(other: KNamed): Int = name.compareTo(other.name) @@ -587,7 +589,7 @@ abstract class KNamed(val name: String, model: KModel, declarationDescriptor: De class KPackage(model: KModel, val descriptor: NamespaceDescriptor, val name: String, - var local: Boolean = false) : KClassOrPackage(model, descriptor), Comparable { + var local: Boolean = false): KClassOrPackage(model, descriptor), Comparable { override fun compareTo(other: KPackage): Int = name.compareTo(other.name) @@ -645,7 +647,8 @@ class KPackage(model: KModel, val descriptor: NamespaceDescriptor, //val classes = sortedMap() public val classMap: SortedMap = TreeMap() - public val classes: Collection = classMap.values().sure() + public val classes: Collection + get() = classMap.values().sure().filter{ it.isApi() } public val annotations: Collection = ArrayList() @@ -700,14 +703,14 @@ class KType(val jetType: JetType, model: KModel, val klass: KClass?, val argumen class KClass(val pkg: KPackage, val descriptor: ClassDescriptor, val simpleName: String, - var kind: String = "class", var group: String = "Other", + var group: String = "Other", var annotations: List = arrayList(), var typeParameters: List = arrayList(), var since: String = "", var authors: List = arrayList(), var baseClasses: List = arrayList(), var nestedClasses: List = arrayList(), - var sourceLine: Int = 2) : KClassOrPackage(pkg.model, descriptor), Comparable { + var sourceLine: Int = 2): KClassOrPackage(pkg.model, descriptor), Comparable { override fun compareTo(other: KClass): Int = name.compareTo(other.name) @@ -715,6 +718,40 @@ class KClass(val pkg: KPackage, val descriptor: ClassDescriptor, fun toString() = "$kind($name)" + fun isApi(): Boolean { + val visibility = descriptor.getVisibility() + return visibility.isAPI() + } + + val kind: String + get() { + val k = descriptor.getKind() + return if (k == ClassKind.TRAIT) "trait" + else if (k == ClassKind.OBJECT) "object" + else if (k == ClassKind.ENUM_CLASS || k == ClassKind.ENUM_ENTRY) "enum" + else if (k == ClassKind.ANNOTATION_CLASS) "annotation" + else "class" + } + + val kindCode: String + get() { + val k = descriptor.getKind() + return if (k == ClassKind.TRAIT) "trait" + else if (k == ClassKind.OBJECT) "object" + else if (k == ClassKind.ENUM_CLASS || k == ClassKind.ENUM_ENTRY) "enum class" + else if (k == ClassKind.ANNOTATION_CLASS) "class" + else "class" + } + + val visibility: String + get() { + val v = descriptor.getVisibility() + return if (v == Visibility.PUBLIC) "public" + else if (v == Visibility.PROTECTED) "protected" + else if (v == Visibility.PRIVATE) "private" + else "" + } + /** Link to the type which is relative if its a local type but could be a type in a different library or null if no link */ public var url: String? = null get() { @@ -755,7 +792,7 @@ class KFunction(val descriptor: CallableDescriptor, val owner: KClassOrPackage, var typeParameters: List = arrayList(), var exceptions: List = arrayList(), var annotations: List = arrayList(), - var sourceLine: Int = 2) : KAnnotated(owner.model, descriptor), Comparable { + var sourceLine: Int = 2): KAnnotated(owner.model, descriptor), Comparable { public val parameterTypeText: String = parameters.map{ it.aType.name }.join(", ") @@ -785,7 +822,7 @@ class KFunction(val descriptor: CallableDescriptor, val owner: KClassOrPackage, } class KProperty(val owner: KClassOrPackage, val descriptor: PropertyDescriptor, val name: String, - val returnType: KType, val extensionClass: KClass?) : KAnnotated(owner.model, descriptor), Comparable { + val returnType: KType, val extensionClass: KClass?): KAnnotated(owner.model, descriptor), Comparable { override fun compareTo(other: KProperty): Int = name.compareTo(other.name) @@ -797,7 +834,7 @@ class KProperty(val owner: KClassOrPackage, val descriptor: PropertyDescriptor, } class KParameter(val name: String, - var aType: KType) : KAnnotated(aType.model, aType.declarationDescriptor) { + var aType: KType): KAnnotated(aType.model, aType.declarationDescriptor) { fun toString() = "$name: ${aType.name}" } @@ -805,12 +842,12 @@ class KParameter(val name: String, class KTypeParameter(val name: String, val descriptor: TypeParameterDescriptor, model: KModel, - var extends: List = arrayList()) : KAnnotated(model, descriptor) { + var extends: List = arrayList()): KAnnotated(model, descriptor) { fun toString() = "$name" } -class KAnnotation(var klass: KClass) : KAnnotated(klass.model, klass.descriptor) { +class KAnnotation(var klass: KClass): KAnnotated(klass.model, klass.descriptor) { // TODO add some parameter values? diff --git a/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/templates/ClassTemplate.kt b/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/templates/ClassTemplate.kt index 2c3a64be69d..e5b828ac975 100644 --- a/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/templates/ClassTemplate.kt +++ b/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/templates/ClassTemplate.kt @@ -184,7 +184,7 @@ Class ${klass.simpleName}
""")
         printAnnotations(klass.annotations)
-        print("""public class ${klass.simpleName}
""") + print("""${klass.visibility} ${klass.kindCode} ${klass.simpleName}
""") if (!klass.baseClasses.isEmpty()) { print("""extends """) for (bc in klass.baseClasses) { diff --git a/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/templates/PackageFrameTemplate.kt b/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/templates/PackageFrameTemplate.kt index a0d2e5a2b01..b200c941d4a 100644 --- a/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/templates/PackageFrameTemplate.kt +++ b/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/templates/PackageFrameTemplate.kt @@ -33,7 +33,7 @@ ${pkg.name} (${model.title}) ${pkg.name}""") - printClasses("interface", "Interfaces") + printClasses("trait", "Traits") printClasses("class", "Classes") printClasses("enum", "Enums") printClasses("annotation", "Annotations") diff --git a/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/templates/PackageSummaryTemplate.kt b/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/templates/PackageSummaryTemplate.kt index 88f5e0d526c..f8c51132f71 100644 --- a/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/templates/PackageSummaryTemplate.kt +++ b/libraries/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/templates/PackageSummaryTemplate.kt @@ -114,7 +114,7 @@ ${pkg.description(this)}

""") - printClasses("interface", "Interfaces") + printClasses("trait", "Traits") printClasses("class", "Classes") printClasses("enum", "Enums") printClasses("annotation", "Annotations") diff --git a/libraries/stdlib/src/JavaIo.kt b/libraries/stdlib/src/JavaIo.kt index 523e5ae29b4..b58e1088f61 100644 --- a/libraries/stdlib/src/JavaIo.kt +++ b/libraries/stdlib/src/JavaIo.kt @@ -232,7 +232,7 @@ inline fun Reader.useLines(block: (Iterator) -> T): T = this.buffere */ inline fun BufferedReader.lineIterator() : Iterator = LineIterator(this) -protected class LineIterator(val reader: BufferedReader) : Iterator { +class LineIterator(val reader: BufferedReader) : Iterator { private var nextValue: String? = null private var done = false diff --git a/libraries/stdlib/src/dom/Dom.kt b/libraries/stdlib/src/dom/Dom.kt index 1f2f254c20f..2c969ac960c 100644 --- a/libraries/stdlib/src/dom/Dom.kt +++ b/libraries/stdlib/src/dom/Dom.kt @@ -199,7 +199,7 @@ fun Element.get(selector: String): List { /** Returns an [[Iterator]] over the next siblings of this node */ fun Node.nextSiblings() : Iterator = NextSiblingIterator(this) -protected class NextSiblingIterator(var node: Node) : AbstractIterator() { +class NextSiblingIterator(var node: Node) : AbstractIterator() { override fun computeNext(): Node? { val next = node.getNextSibling() @@ -215,7 +215,7 @@ protected class NextSiblingIterator(var node: Node) : AbstractIterator() { /** Returns an [[Iterator]] over the next siblings of this node */ fun Node.previousSiblings() : Iterator = PreviousSiblingIterator(this) -protected class PreviousSiblingIterator(var node: Node) : AbstractIterator() { +class PreviousSiblingIterator(var node: Node) : AbstractIterator() { override fun computeNext(): Node? { val next = node.getPreviousSibling() diff --git a/libraries/stdlib/src/properties/Properties.kt b/libraries/stdlib/src/properties/Properties.kt index 3636d7bec01..12f253d9ef2 100644 --- a/libraries/stdlib/src/properties/Properties.kt +++ b/libraries/stdlib/src/properties/Properties.kt @@ -7,13 +7,13 @@ import java.util.Map import java.util.HashMap import java.util.ArrayList -class ChangeEvent(val source: Any, val name: String, val oldValue: Any?, val newValue: Any?) { +public class ChangeEvent(val source: Any, val name: String, val oldValue: Any?, val newValue: Any?) { var propogationId: Any? = null fun toString() = "ChangeEvent($name, $oldValue, $newValue)" } -trait ChangeListener { +public trait ChangeListener { fun onPropertyChange(event: ChangeEvent): Unit } @@ -22,7 +22,7 @@ trait ChangeListener { * updates for easier binding to user interfaces, undo/redo command stacks and * change tracking mechanisms for persistence or distributed change notifications. */ -abstract class ChangeSupport { +public abstract class ChangeSupport { private var allListeners: List? = null private var nameListeners: Map>? = null diff --git a/libraries/stdlib/src/support/AbstractIterator.kt b/libraries/stdlib/src/support/AbstractIterator.kt index 4c7146f1631..d6b74fa0980 100644 --- a/libraries/stdlib/src/support/AbstractIterator.kt +++ b/libraries/stdlib/src/support/AbstractIterator.kt @@ -13,7 +13,7 @@ enum class State { * A base class to simplify implementing iterators so that implementations only have to implement [[#computeNext()]] * to implement the iterator, calling [[done()]] when the iteration is complete. */ -abstract class AbstractIterator: java.util.Iterator { +public abstract class AbstractIterator: java.util.Iterator { var state: State = State.NotReady var next: T? = null diff --git a/libraries/website/src/test/kotlin/org/jetbrains/kotlin/site/GenerateSiteTest.kt b/libraries/website/src/test/kotlin/org/jetbrains/kotlin/site/GenerateSiteTest.kt index 769610fc574..62e5b0c6c86 100644 --- a/libraries/website/src/test/kotlin/org/jetbrains/kotlin/site/GenerateSiteTest.kt +++ b/libraries/website/src/test/kotlin/org/jetbrains/kotlin/site/GenerateSiteTest.kt @@ -30,6 +30,7 @@ class GenerateSiteTest : TestCase() { val config = args.docConfig config.title = "Kotlin API ($version)" config.version = version + config.ignorePackages.add("kotlin.support") config.ignorePackages.add("org.jetbrains.kotlin") config.ignorePackages.add("java") config.ignorePackages.add("jet")