diff --git a/libraries/docs/apidoc/pom.xml b/libraries/docs/apidoc/pom.xml
index 759e4239a70..f9e323e708d 100644
--- a/libraries/docs/apidoc/pom.xml
+++ b/libraries/docs/apidoc/pom.xml
@@ -40,6 +40,8 @@
${project.version}
+ ${basedir}/../../../core/builtins/native
+ ${basedir}/../../../core/builtins/src
${basedir}/../../stdlib/src
${basedir}/../../kunit/src/main/kotlin
${basedir}/../../kotlin-jdbc/src/main/kotlin
diff --git a/libraries/tools/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/model/KotlinModel.kt b/libraries/tools/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/model/KotlinModel.kt
index 083ba6c3e0b..29ff98e6fd2 100644
--- a/libraries/tools/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/model/KotlinModel.kt
+++ b/libraries/tools/kdoc/src/main/kotlin/org/jetbrains/kotlin/doc/model/KotlinModel.kt
@@ -132,7 +132,7 @@ fun extensionProperties(properties: Collection): Map()
open val properties = sortedSetOf()
@@ -158,9 +158,9 @@ class KModel(val context: BindingContext, val config: KDocConfig, val sourceDirs
val allPackages: Collection
get() = packageMap.values()
- /** Returns the local packages */
+ /** Returns the packages that should be included in the report */
val packages: Collection
- get() = allPackages.filter { it.local && config.includePackage(it) }
+ get() = allPackages.filter { config.includePackage(it) }
val classes: Collection
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")
}
}
- val allClasses = HashSet()
- for (packageFragment in allPackageFragments) {
- getPackage(packageFragment)
- for (descriptor in packageFragment.getMemberScope().getAllDescriptors()) {
- if (descriptor is ClassDescriptor) {
- val klass = getClass(descriptor)
- if (klass != null) {
- allClasses.add(klass)
+
+ for ((name, packageFragments) in allPackageFragments.groupBy { qualifiedName(it) }) {
+ createPackage(packageFragments, name)
+
+ for (packageFragment in packageFragments) {
+ for (descriptor in packageFragment.getMemberScope().getAllDescriptors()) {
+ if (descriptor is ClassDescriptor) {
+ getClass(descriptor)
}
}
}
@@ -264,27 +264,31 @@ class KModel(val context: BindingContext, val config: KDocConfig, val sourceDirs
fun getPackage(name: String): KPackage? = packageMap.get(name)
/** 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)
- 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()) {
- // lets try find a custom doc
- var file = config.packageDescriptionFiles[name]
- loadWikiDescription(pkg, file)
- }
+ val pkg = packageMap[name]
+ if (pkg != null) return pkg
+
+ return createPackage(listOf(descriptor), name)
+ }
+
+ private fun createPackage(descriptors: List, 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 {
@@ -345,19 +349,6 @@ class KModel(val context: BindingContext, val config: KDocConfig, val sourceDirs
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 {
try {
val descriptors = scope.getAllDescriptors()
@@ -685,7 +676,7 @@ $highlight"""
while (dec != null) {
val container = dec
if (container is PackageFragmentDescriptor) {
- val pkg = getPackage(container)
+ val pkg = getOrCreatePackage(container)
return pkg.getClass(classElement)
} else {
dec = dec?.getContainingDeclaration()
@@ -732,7 +723,7 @@ class TemplateLinkRenderer(val annotated: KAnnotated, val template: KDocTemplate
// TODO really dirty hack alert!!!
// 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",
- "java.awt", "java.awt.event", "java.sql", "java.beans",
+ "kotlin", "java.awt", "java.awt.event", "java.sql", "java.beans",
"javax.swing", "javax.swing.event",
"org.w3c.dom",
"kotlin.template")) {
@@ -894,11 +885,10 @@ abstract class KNamed(val name: String, model: KModel, descriptor: DeclarationDe
class KPackage(
model: KModel,
- descriptor: PackageFragmentDescriptor,
+ descriptors: List,
val name: String,
- var local: Boolean = false,
- var useExternalLink: Boolean = false
-): KClassOrPackage(model, descriptor), Comparable {
+ val useExternalLink: Boolean = false
+): KClassOrPackage(model, descriptors.first()), Comparable {
val classMap = sortedMapOf()
val classes: Collection