Fix incorrect apidoc for 'kotlin'
KDoc was confused because now there are two package fragments for package 'kotlin' (built-ins and stdlib). KDoc's KPackage now has a list of descriptors, not only one. This fixes missing documentation for top-level members in package 'kotlin' in the apidoc #KT-2521 Fixed
This commit is contained in:
@@ -40,6 +40,8 @@
|
|||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<sources>
|
<sources>
|
||||||
|
<source>${basedir}/../../../core/builtins/native</source>
|
||||||
|
<source>${basedir}/../../../core/builtins/src</source>
|
||||||
<source>${basedir}/../../stdlib/src</source>
|
<source>${basedir}/../../stdlib/src</source>
|
||||||
<source>${basedir}/../../kunit/src/main/kotlin</source>
|
<source>${basedir}/../../kunit/src/main/kotlin</source>
|
||||||
<source>${basedir}/../../kotlin-jdbc/src/main/kotlin</source>
|
<source>${basedir}/../../kotlin-jdbc/src/main/kotlin</source>
|
||||||
|
|||||||
+38
-48
@@ -132,7 +132,7 @@ fun extensionProperties(properties: Collection<KProperty>): Map<KClass, List<KPr
|
|||||||
return map
|
return map
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class KClassOrPackage(model: KModel, declarationDescriptor: DeclarationDescriptor): KAnnotated(model, declarationDescriptor) {
|
abstract class KClassOrPackage(model: KModel, descriptor: DeclarationDescriptor): KAnnotated(model, descriptor) {
|
||||||
open val functions = sortedSetOf<KFunction>()
|
open val functions = sortedSetOf<KFunction>()
|
||||||
open val properties = sortedSetOf<KProperty>()
|
open val properties = sortedSetOf<KProperty>()
|
||||||
|
|
||||||
@@ -158,9 +158,9 @@ class KModel(val context: BindingContext, val config: KDocConfig, val sourceDirs
|
|||||||
val allPackages: Collection<KPackage>
|
val allPackages: Collection<KPackage>
|
||||||
get() = packageMap.values()
|
get() = packageMap.values()
|
||||||
|
|
||||||
/** Returns the local packages */
|
/** Returns the packages that should be included in the report */
|
||||||
val packages: Collection<KPackage>
|
val packages: Collection<KPackage>
|
||||||
get() = allPackages.filter { it.local && config.includePackage(it) }
|
get() = allPackages.filter { config.includePackage(it) }
|
||||||
|
|
||||||
val classes: Collection<KClass>
|
val classes: Collection<KClass>
|
||||||
get() = packages.flatMap { it.classes }
|
get() = packages.flatMap { it.classes }
|
||||||
@@ -226,14 +226,14 @@ class KModel(val context: BindingContext, val config: KDocConfig, val sourceDirs
|
|||||||
warning("No PackageFragmentDescriptor for source $source")
|
warning("No PackageFragmentDescriptor for source $source")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val allClasses = HashSet<KClass>()
|
|
||||||
for (packageFragment in allPackageFragments) {
|
for ((name, packageFragments) in allPackageFragments.groupBy { qualifiedName(it) }) {
|
||||||
getPackage(packageFragment)
|
createPackage(packageFragments, name)
|
||||||
for (descriptor in packageFragment.getMemberScope().getAllDescriptors()) {
|
|
||||||
if (descriptor is ClassDescriptor) {
|
for (packageFragment in packageFragments) {
|
||||||
val klass = getClass(descriptor)
|
for (descriptor in packageFragment.getMemberScope().getAllDescriptors()) {
|
||||||
if (klass != null) {
|
if (descriptor is ClassDescriptor) {
|
||||||
allClasses.add(klass)
|
getClass(descriptor)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -264,27 +264,31 @@ class KModel(val context: BindingContext, val config: KDocConfig, val sourceDirs
|
|||||||
fun getPackage(name: String): KPackage? = packageMap.get(name)
|
fun getPackage(name: String): KPackage? = packageMap.get(name)
|
||||||
|
|
||||||
/** Returns the package for the given descriptor, creating one if its not available */
|
/** Returns the package for the given descriptor, creating one if its not available */
|
||||||
fun getPackage(descriptor: PackageFragmentDescriptor): KPackage {
|
fun getOrCreatePackage(descriptor: PackageFragmentDescriptor): KPackage {
|
||||||
val name = qualifiedName(descriptor)
|
val name = qualifiedName(descriptor)
|
||||||
var created = false
|
|
||||||
val pkg = packageMap.getOrPut(name) {
|
|
||||||
created = true
|
|
||||||
KPackage(this, descriptor, name)
|
|
||||||
}
|
|
||||||
if (created) {
|
|
||||||
configureComments(pkg, descriptor)
|
|
||||||
val scope = descriptor.getMemberScope()
|
|
||||||
addFunctions(pkg, scope)
|
|
||||||
pkg.local = isLocal(descriptor)
|
|
||||||
pkg.useExternalLink = pkg.model.config.resolveLink(pkg.name, false).isNotEmpty()
|
|
||||||
|
|
||||||
if (pkg.wikiDescription.isEmpty()) {
|
val pkg = packageMap[name]
|
||||||
// lets try find a custom doc
|
if (pkg != null) return pkg
|
||||||
var file = config.packageDescriptionFiles[name]
|
|
||||||
loadWikiDescription(pkg, file)
|
return createPackage(listOf(descriptor), name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun createPackage(descriptors: List<PackageFragmentDescriptor>, name: String): KPackage {
|
||||||
|
val pkg = KPackage(this, descriptors, name, config.resolveLink(name, false).isNotEmpty())
|
||||||
|
|
||||||
|
assert(!packageMap.containsKey(name)) { "packageMap entry created earlier for package $name: old=${packageMap[name]}, new=$pkg" }
|
||||||
|
|
||||||
|
packageMap[name] = pkg
|
||||||
|
|
||||||
|
for (descriptor in descriptors) {
|
||||||
|
addFunctions(pkg, descriptor.getMemberScope())
|
||||||
}
|
}
|
||||||
return pkg;
|
|
||||||
|
// lets try find a custom doc
|
||||||
|
var file = config.packageDescriptionFiles[name]
|
||||||
|
loadWikiDescription(pkg, file)
|
||||||
|
|
||||||
|
return pkg
|
||||||
}
|
}
|
||||||
|
|
||||||
protected fun loadWikiDescription(pkg: KPackage, file: String?): Unit {
|
protected fun loadWikiDescription(pkg: KPackage, file: String?): Unit {
|
||||||
@@ -345,19 +349,6 @@ class KModel(val context: BindingContext, val config: KDocConfig, val sourceDirs
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
protected fun isLocal(descriptor: DeclarationDescriptor): Boolean {
|
|
||||||
return if (descriptor is ModuleDescriptor) {
|
|
||||||
true
|
|
||||||
} else {
|
|
||||||
val parent = descriptor.getContainingDeclaration()
|
|
||||||
if (parent != null) {
|
|
||||||
isLocal(parent)
|
|
||||||
} else {
|
|
||||||
false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun addFunctions(owner: KClassOrPackage, scope: JetScope): Unit {
|
fun addFunctions(owner: KClassOrPackage, scope: JetScope): Unit {
|
||||||
try {
|
try {
|
||||||
val descriptors = scope.getAllDescriptors()
|
val descriptors = scope.getAllDescriptors()
|
||||||
@@ -685,7 +676,7 @@ $highlight"""
|
|||||||
while (dec != null) {
|
while (dec != null) {
|
||||||
val container = dec
|
val container = dec
|
||||||
if (container is PackageFragmentDescriptor) {
|
if (container is PackageFragmentDescriptor) {
|
||||||
val pkg = getPackage(container)
|
val pkg = getOrCreatePackage(container)
|
||||||
return pkg.getClass(classElement)
|
return pkg.getClass(classElement)
|
||||||
} else {
|
} else {
|
||||||
dec = dec?.getContainingDeclaration()
|
dec = dec?.getContainingDeclaration()
|
||||||
@@ -732,7 +723,7 @@ class TemplateLinkRenderer(val annotated: KAnnotated, val template: KDocTemplate
|
|||||||
// TODO really dirty hack alert!!!
|
// TODO really dirty hack alert!!!
|
||||||
// until the resolver is working, lets try adding a few prefixes :)
|
// until the resolver is working, lets try adding a few prefixes :)
|
||||||
for (prefix in listOf("java.lang", "java.util", "java.util.concurrent", "java.util.regex", "java.io",
|
for (prefix in listOf("java.lang", "java.util", "java.util.concurrent", "java.util.regex", "java.io",
|
||||||
"java.awt", "java.awt.event", "java.sql", "java.beans",
|
"kotlin", "java.awt", "java.awt.event", "java.sql", "java.beans",
|
||||||
"javax.swing", "javax.swing.event",
|
"javax.swing", "javax.swing.event",
|
||||||
"org.w3c.dom",
|
"org.w3c.dom",
|
||||||
"kotlin.template")) {
|
"kotlin.template")) {
|
||||||
@@ -894,11 +885,10 @@ abstract class KNamed(val name: String, model: KModel, descriptor: DeclarationDe
|
|||||||
|
|
||||||
class KPackage(
|
class KPackage(
|
||||||
model: KModel,
|
model: KModel,
|
||||||
descriptor: PackageFragmentDescriptor,
|
descriptors: List<PackageFragmentDescriptor>,
|
||||||
val name: String,
|
val name: String,
|
||||||
var local: Boolean = false,
|
val useExternalLink: Boolean = false
|
||||||
var useExternalLink: Boolean = false
|
): KClassOrPackage(model, descriptors.first()), Comparable<KPackage> {
|
||||||
): KClassOrPackage(model, descriptor), Comparable<KPackage> {
|
|
||||||
val classMap = sortedMapOf<String, KClass>()
|
val classMap = sortedMapOf<String, KClass>()
|
||||||
|
|
||||||
val classes: Collection<KClass>
|
val classes: Collection<KClass>
|
||||||
|
|||||||
Reference in New Issue
Block a user