diff options
62 files changed, 873 insertions, 372 deletions
diff --git a/Android.bp b/Android.bp index f67ea232a..e613720d8 100644 --- a/Android.bp +++ b/Android.bp @@ -27,7 +27,7 @@ java_binary_host { // (it references packages under com.sun.tools.doclets which are not // exported from the jdk.javadoc module) (see b/140097603): java_version: "1.8", - kotlincflags: ["-language-version 1.2 -api-version 1.2 -jvm-target 1.8"], + kotlincflags: ["-language-version 1.3 -api-version 1.3 -jvm-target 1.8"], use_tools_jar: true, java_resource_dirs: ["core/src/main/resources"], } @@ -7,6 +7,7 @@ third_party { type: GIT value: "https://github.com/Kotlin/dokka.git" } + license_type: NOTICE last_upgrade_date { year: 2019 month: 7 diff --git a/build.gradle b/build.gradle index d282aeb08..08951ee9a 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,3 @@ -import org.jetbrains.DependenciesVersionGetter - allprojects { group 'org.jetbrains.dokka' version dokka_version @@ -29,6 +27,8 @@ allprojects { repositories { mavenCentral() mavenLocal() + maven { url 'https://kotlin.bintray.com/kotlin-plugin' } + maven { url 'https://www.jetbrains.com/intellij-repository/releases' } maven { url "https://dl.bintray.com/jetbrains/markdown" } maven { url "http://dl.bintray.com/kotlin/kotlin-eap" } maven { url "https://dl.bintray.com/kotlin/kotlin-dev" } @@ -70,24 +70,20 @@ task wrapper(type: Wrapper) { distributionUrl = "https://services.gradle.org/distributions/gradle-$gradleVersion-all.zip" } -def versions = DependenciesVersionGetter.getVersions(project, bundled_kotlin_compiler_version) - -ext.ideaVersion = versions["idea.build.id"] -ext.markdownVersion = versions["markdown.build.id"].replace("%20", " ") - configurations { ideaIC intellijCore } repositories { + maven { url 'https://kotlin.bintray.com/kotlin-plugin' } maven { url 'https://www.jetbrains.com/intellij-repository/snapshots' } maven { url 'https://www.jetbrains.com/intellij-repository/releases' } } dependencies { - intellijCore "com.jetbrains.intellij.idea:intellij-core:$ideaVersion" - ideaIC "com.jetbrains.intellij.idea:ideaIC:$ideaVersion" + intellijCore "com.jetbrains.intellij.idea:intellij-core:$idea_version" + ideaIC "com.jetbrains.intellij.idea:ideaIC:$idea_version" } def intellijCoreAnalysis() { diff --git a/buildSrc/src/main/groovy/org/jetbrains/CorrectShadowPublishing.groovy b/buildSrc/src/main/groovy/org/jetbrains/CorrectShadowPublishing.groovy index 58cfdcf7a..aacede449 100644 --- a/buildSrc/src/main/groovy/org/jetbrains/CorrectShadowPublishing.groovy +++ b/buildSrc/src/main/groovy/org/jetbrains/CorrectShadowPublishing.groovy @@ -4,10 +4,11 @@ import org.gradle.api.Project import org.gradle.api.artifacts.ModuleVersionIdentifier import org.gradle.api.artifacts.ProjectDependency import org.gradle.api.artifacts.SelfResolvingDependency -import org.gradle.api.publish.internal.ProjectDependencyPublicationResolver +import org.gradle.api.internal.artifacts.ivyservice.projectmodule.ProjectDependencyPublicationResolver import org.gradle.api.publish.maven.MavenPom import org.gradle.api.publish.maven.MavenPublication +//https://github.com/johnrengelman/shadow/issues/334 static void configure(MavenPublication publication, Project project) { publication.artifact(project.tasks.shadowJar) @@ -16,10 +17,9 @@ static void configure(MavenPublication publication, Project project) { def dependenciesNode = xml.asNode().appendNode('dependencies') project.configurations.shadow.allDependencies.each { - //if (! (it instanceof SelfResolvingDependency)) { if (it instanceof ProjectDependency) { - def projectDependencyResolver = project.gradle.services.get(ProjectDependencyPublicationResolver) - ModuleVersionIdentifier identifier = projectDependencyResolver.resolve(it) + final ProjectDependencyPublicationResolver projectDependencyResolver = project.gradle.services.get(ProjectDependencyPublicationResolver) + final ModuleVersionIdentifier identifier = projectDependencyResolver.resolve(ModuleVersionIdentifier, it) addDependency(dependenciesNode, identifier) } else if (!(it instanceof SelfResolvingDependency)) { addDependency(dependenciesNode, it) diff --git a/busytown.gradle b/busytown.gradle index f16d8539a..1b9a7119f 100644 --- a/busytown.gradle +++ b/busytown.gradle @@ -23,8 +23,16 @@ allprojects { project -> destinationDir destDir archiveName = "maven.zip" } - zipMaven.dependsOn(":runners:android-gradle-plugin:publishToDistMaven") - zipMaven.dependsOn(":runners:gradle-plugin:publishToDistMaven") - zipMaven.dependsOn(":runners:fatjar:publishToDistMaven") + + def copyRepository = project.tasks.create("copyRepository", Copy) { + from file("${project.buildDir}/dist-maven") + into "${destDir}/repository" + } + + [copyRepository, zipMaven].forEach { + it.dependsOn(":runners:android-gradle-plugin:publishToDistMaven") + it.dependsOn(":runners:gradle-plugin:publishToDistMaven") + it.dependsOn(":runners:fatjar:publishToDistMaven") + } } } diff --git a/busytown.sh b/busytown.sh index d99bdfe91..ca1ae6199 100755 --- a/busytown.sh +++ b/busytown.sh @@ -3,4 +3,4 @@ set -e SCRIPT_DIR="$(cd $(dirname $0) && pwd)" -"$SCRIPT_DIR"/gradlew -p "$SCRIPT_DIR" -I "$SCRIPT_DIR"/busytown.gradle --no-daemon :core:build :runners:android-gradle-plugin:build :runners:gradle-integration-tests:build zipMaven
\ No newline at end of file +"$SCRIPT_DIR"/gradlew -p "$SCRIPT_DIR" -I "$SCRIPT_DIR"/busytown.gradle --no-daemon :core:build :runners:android-gradle-plugin:build :runners:gradle-integration-tests:build zipMaven copyRepository
\ No newline at end of file diff --git a/core/build.gradle b/core/build.gradle index 5c80fc84e..4a8928de1 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -30,13 +30,14 @@ dependencies { compile "org.jetbrains.kotlin:kotlin-compiler:$bundled_kotlin_compiler_version" compile "org.jetbrains.kotlin:kotlin-script-runtime:$bundled_kotlin_compiler_version" - compile "teamcity:kotlin-ide-common:$bundled_kotlin_compiler_version" - compile "org.jetbrains:markdown:$markdownVersion" + compile "org.jetbrains:markdown:0.1.41" implementation "com.squareup.okhttp3:okhttp:4.0.0-RC1" compile intellijCoreAnalysis() + compile "org.jetbrains.kotlin:kotlin-plugin-ij193:$kotlin_plugin_version" //TODO: parametrize ij version after 1.3.70 + // Google version of the library in the libs folder. Fixing 129528660 // compile 'org.jetbrains.kotlinx:kotlinx-html-jvm:0.6.8' diff --git a/core/src/main/kotlin/Analysis/AnalysisEnvironment.kt b/core/src/main/kotlin/Analysis/AnalysisEnvironment.kt index b47f8bdb1..9fea67407 100644 --- a/core/src/main/kotlin/Analysis/AnalysisEnvironment.kt +++ b/core/src/main/kotlin/Analysis/AnalysisEnvironment.kt @@ -15,9 +15,13 @@ import com.intellij.openapi.roots.ProjectRootManager import com.intellij.openapi.util.Disposer import com.intellij.openapi.vfs.StandardFileSystems import com.intellij.psi.PsiElement +import com.intellij.psi.impl.source.javadoc.JavadocManagerImpl +import com.intellij.psi.javadoc.CustomJavadocTagProvider +import com.intellij.psi.javadoc.JavadocManager +import com.intellij.psi.javadoc.JavadocTagInfo import com.intellij.psi.search.GlobalSearchScope -import com.intellij.util.io.URLUtil import org.jetbrains.kotlin.analyzer.* +import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.builtins.jvm.JvmBuiltIns import org.jetbrains.kotlin.caches.resolve.KotlinCacheService import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys @@ -35,19 +39,25 @@ import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.container.getService import org.jetbrains.kotlin.container.tryGetService import org.jetbrains.kotlin.context.ProjectContext +import org.jetbrains.kotlin.context.withModule import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor +import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.idea.resolve.ResolutionFacade import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms +import org.jetbrains.kotlin.platform.konan.KonanPlatforms import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingTrace import org.jetbrains.kotlin.resolve.CompilerEnvironment +import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics -import org.jetbrains.kotlin.resolve.jvm.JvmAnalyzerFacade import org.jetbrains.kotlin.resolve.jvm.JvmPlatformParameters -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.resolve.jvm.JvmResolverForModuleFactory +import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.lazy.ResolveSession import org.jetbrains.kotlin.types.KotlinType @@ -89,10 +99,19 @@ class AnalysisEnvironment(val messageCollector: MessageCollector) : Disposable { CoreApplicationEnvironment.registerExtensionPoint(Extensions.getRootArea(), OrderEnumerationHandler.EP_NAME, OrderEnumerationHandler.Factory::class.java) + CoreApplicationEnvironment.registerExtensionPoint(Extensions.getArea(environment.project), + JavadocTagInfo.EP_NAME, JavadocTagInfo::class.java) + CoreApplicationEnvironment.registerExtensionPoint(Extensions.getRootArea(), + CustomJavadocTagProvider.EP_NAME, CustomJavadocTagProvider::class.java) + projectComponentManager.registerService(ProjectFileIndex::class.java, projectFileIndex) projectComponentManager.registerService(ProjectRootManager::class.java, CoreProjectRootManager(projectFileIndex)) + projectComponentManager.registerService(JavadocManager::class.java, + JavadocManagerImpl(environment.project)) + projectComponentManager.registerService(CustomJavadocTagProvider::class.java, + CustomJavadocTagProvider { emptyList() }) return environment } @@ -104,29 +123,40 @@ class AnalysisEnvironment(val messageCollector: MessageCollector) : Disposable { fun createResolutionFacade(environment: KotlinCoreEnvironment): Pair<DokkaResolutionFacade, DokkaResolutionFacade> { - val projectContext = ProjectContext(environment.project) + val projectContext = ProjectContext(environment.project, "Dokka") val sourceFiles = environment.getSourceFiles() val library = object : ModuleInfo { override val name: Name = Name.special("<library>") + override val platform: TargetPlatform + get() = JvmPlatforms.defaultJvmPlatform + override val analyzerServices: PlatformDependentAnalyzerServices = + JvmPlatformAnalyzerServices override fun dependencies(): List<ModuleInfo> = listOf(this) } val module = object : ModuleInfo { override val name: Name = Name.special("<module>") + override val platform: TargetPlatform + get() = JvmPlatforms.defaultJvmPlatform + override val analyzerServices: PlatformDependentAnalyzerServices = + JvmPlatformAnalyzerServices override fun dependencies(): List<ModuleInfo> = listOf(this, library) } val sourcesScope = createSourceModuleSearchScope(environment.project, sourceFiles) - val builtIns = JvmBuiltIns(projectContext.storageManager) + val builtIns = JvmBuiltIns( + projectContext.storageManager, + JvmBuiltIns.Kind.FROM_CLASS_LOADER + ) val javaRoots = classpath .mapNotNull { val rootFile = when { it.extension == "jar" -> - StandardFileSystems.jar().findFileByPath("${it.absolutePath}${URLUtil.JAR_SEPARATOR}") + StandardFileSystems.jar().findFileByPath("${it.absolutePath}${"!/"}") else -> StandardFileSystems.local().findFileByPath(it.absolutePath) } @@ -134,38 +164,51 @@ class AnalysisEnvironment(val messageCollector: MessageCollector) : Disposable { rootFile?.let { JavaRoot(it, JavaRoot.RootType.BINARY) } } - val resolverForProject = ResolverForProjectImpl( + val resolverForProject = object : AbstractResolverForProject<ModuleInfo>( "Dokka", projectContext, - listOf(library, module), - { - when (it) { - library -> ModuleContent(it, emptyList(), GlobalSearchScope.notScope(sourcesScope)) - module -> ModuleContent(it, emptyList(), sourcesScope) + modules = listOf(module, library) + ) { + override fun modulesContent(module: ModuleInfo): ModuleContent<ModuleInfo> = + when (module) { + library -> ModuleContent(module, emptyList(), GlobalSearchScope.notScope(sourcesScope)) + module -> ModuleContent(module, emptyList(), sourcesScope) else -> throw IllegalArgumentException("Unexpected module info") } - }, - { - JvmPlatform.multiTargetPlatform - }, - LanguageSettingsProvider.Default /* TODO: Fix this */, - { JvmAnalyzerFacade }, - { + + override fun builtInsForModule(module: ModuleInfo): KotlinBuiltIns = builtIns + + override fun createResolverForModule( + descriptor: ModuleDescriptor, + moduleInfo: ModuleInfo + ): ResolverForModule = JvmResolverForModuleFactory( JvmPlatformParameters({ content -> - JvmPackagePartProvider(configuration.languageVersionSettings, content.moduleContentScope).apply { - addRoots(javaRoots, messageCollector) - } + JvmPackagePartProvider( + configuration.languageVersionSettings, + content.moduleContentScope + ) + .apply { + addRoots(javaRoots, messageCollector) + } }, { val file = (it as JavaClassImpl).psi.containingFile.virtualFile if (file in sourcesScope) module else library - }) - }, - CompilerEnvironment, - builtIns = builtIns - ) + }), + CompilerEnvironment, + KonanPlatforms.defaultKonanPlatform + ).createResolverForModule( + descriptor as ModuleDescriptorImpl, + projectContext.withModule(descriptor), + modulesContent(moduleInfo), + this, + LanguageVersionSettingsImpl.DEFAULT + ) + + override fun sdkDependency(module: ModuleInfo): ModuleInfo? = null + } val resolverForLibrary = resolverForProject.resolverForModule(library) // Required before module to initialize library properly val resolverForModule = resolverForProject.resolverForModule(module) diff --git a/core/src/main/kotlin/Analysis/CoreKotlinCacheService.kt b/core/src/main/kotlin/Analysis/CoreKotlinCacheService.kt index 31b8ffc76..d9093760c 100644 --- a/core/src/main/kotlin/Analysis/CoreKotlinCacheService.kt +++ b/core/src/main/kotlin/Analysis/CoreKotlinCacheService.kt @@ -5,7 +5,6 @@ import org.jetbrains.kotlin.analyzer.ModuleInfo import org.jetbrains.kotlin.caches.resolve.KotlinCacheService import org.jetbrains.kotlin.idea.resolve.ResolutionFacade import org.jetbrains.kotlin.psi.KtElement -import org.jetbrains.kotlin.resolve.TargetPlatform import org.jetbrains.kotlin.resolve.diagnostics.KotlinSuppressCache @@ -14,11 +13,24 @@ class CoreKotlinCacheService(private val resolutionFacade: DokkaResolutionFacade return resolutionFacade } - override fun getResolutionFacadeByFile(file: PsiFile, platform: TargetPlatform): ResolutionFacade { + override fun getResolutionFacade( + elements: List<KtElement>, + platform: org.jetbrains.kotlin.platform.TargetPlatform + ): ResolutionFacade { return resolutionFacade } - override fun getResolutionFacadeByModuleInfo(moduleInfo: ModuleInfo, platform: TargetPlatform): ResolutionFacade? { + override fun getResolutionFacadeByFile( + file: PsiFile, + platform: org.jetbrains.kotlin.platform.TargetPlatform + ): ResolutionFacade? { + return resolutionFacade + } + + override fun getResolutionFacadeByModuleInfo( + moduleInfo: ModuleInfo, + platform: org.jetbrains.kotlin.platform.TargetPlatform + ): ResolutionFacade? { return resolutionFacade } diff --git a/core/src/main/kotlin/Analysis/CoreProjectFileIndex.kt b/core/src/main/kotlin/Analysis/CoreProjectFileIndex.kt index 319d85b14..4ece8d300 100644 --- a/core/src/main/kotlin/Analysis/CoreProjectFileIndex.kt +++ b/core/src/main/kotlin/Analysis/CoreProjectFileIndex.kt @@ -15,6 +15,7 @@ import com.intellij.openapi.util.Condition import com.intellij.openapi.util.Key import com.intellij.openapi.util.UserDataHolderBase import com.intellij.openapi.vfs.StandardFileSystems +import com.intellij.openapi.vfs.VfsUtilCore.getVirtualFileForJar import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFileFilter import com.intellij.psi.search.GlobalSearchScope @@ -166,9 +167,8 @@ class CoreProjectFileIndex(private val project: Project, contentRoots: List<Cont private val sdk: Sdk = object : Sdk, RootProvider { override fun getFiles(rootType: OrderRootType): Array<out VirtualFile> = classpathRoots - .map { StandardFileSystems.local().findFileByPath(it.file.path) } - .filterNotNull() - .toTypedArray() + .mapNotNull { StandardFileSystems.local().findFileByPath(it.file.path) } + .toTypedArray() override fun addRootSetChangedListener(p0: RootProvider.RootSetChangedListener) { throw UnsupportedOperationException() @@ -329,7 +329,7 @@ class CoreProjectFileIndex(private val project: Project, contentRoots: List<Cont throw UnsupportedOperationException() } - override fun <R : Any?> processOrder(p0: RootPolicy<R>?, p1: R): R { + override fun <R : Any?> processOrder(p0: RootPolicy<R>, p1: R): R { throw UnsupportedOperationException() } @@ -354,11 +354,11 @@ class CoreProjectFileIndex(private val project: Project, contentRoots: List<Cont } override fun orderEntries(): OrderEnumerator = - ProjectOrderEnumerator(project, null).using(object : RootModelProvider { - override fun getModules(): Array<out Module> = arrayOf(module) + ProjectOrderEnumerator(project, null).using(object : RootModelProvider { + override fun getModules(): Array<out Module> = arrayOf(module) - override fun getRootModel(p0: Module): ModuleRootModel = this@MyModuleRootManager - }) + override fun getRootModel(p0: Module): ModuleRootModel = this@MyModuleRootManager + }) override fun <T : Any?> getModuleExtension(p0: Class<T>): T { throw UnsupportedOperationException() @@ -404,7 +404,7 @@ class CoreProjectFileIndex(private val project: Project, contentRoots: List<Cont throw UnsupportedOperationException() } - override fun isDependsOn(p0: Module?): Boolean { + override fun isDependsOn(p0: Module): Boolean { throw UnsupportedOperationException() } @@ -462,7 +462,7 @@ class CoreProjectFileIndex(private val project: Project, contentRoots: List<Cont } override fun getModuleForFile(file: VirtualFile): Module? = - if (sourceRoots.contains(file)) module else null + if (sourceRoots.contains(file)) module else null private fun List<ContentRoot>.contains(file: VirtualFile): Boolean = any { it.contains(file) } @@ -516,7 +516,7 @@ class CoreProjectRootManager(val projectFileIndex: CoreProjectFileIndex) : Proje throw UnsupportedOperationException() } - override fun getContentRootsFromAllModules(): Array<out VirtualFile>? { + override fun getContentRootsFromAllModules(): Array<out VirtualFile> { throw UnsupportedOperationException() } @@ -524,7 +524,7 @@ class CoreProjectRootManager(val projectFileIndex: CoreProjectFileIndex) : Proje throw UnsupportedOperationException() } - override fun setProjectSdkName(p0: String?) { + override fun setProjectSdkName(p0: String) { throw UnsupportedOperationException() } @@ -559,11 +559,11 @@ class CoreProjectRootManager(val projectFileIndex: CoreProjectFileIndex) : Proje fun ContentRoot.contains(file: VirtualFile) = when (this) { is JvmContentRoot -> { val path = if (file.fileSystem.protocol == StandardFileSystems.JAR_PROTOCOL) - StandardFileSystems.getVirtualFileForJar(file)?.path ?: file.path + getVirtualFileForJar(file)?.path ?: file.path else file.path File(path).startsWith(this.file.absoluteFile) } is KotlinSourceRoot -> File(file.path).startsWith(File(this.path).absoluteFile) else -> false -} +}
\ No newline at end of file diff --git a/core/src/main/kotlin/Analysis/JavaResolveExtension.kt b/core/src/main/kotlin/Analysis/JavaResolveExtension.kt index 4dc6b3662..4a4c78e56 100644 --- a/core/src/main/kotlin/Analysis/JavaResolveExtension.kt +++ b/core/src/main/kotlin/Analysis/JavaResolveExtension.kt @@ -19,7 +19,6 @@ package org.jetbrains.dokka import com.intellij.psi.* -import org.jetbrains.kotlin.asJava.classes.KtLightClass import org.jetbrains.kotlin.asJava.unwrapped import org.jetbrains.kotlin.caches.resolve.KotlinCacheService import org.jetbrains.kotlin.descriptors.* @@ -29,11 +28,9 @@ import org.jetbrains.kotlin.load.java.sources.JavaSourceElement import org.jetbrains.kotlin.load.java.structure.* import org.jetbrains.kotlin.load.java.structure.impl.* import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.psi.KtClassOrObject +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.psi.KtDeclaration -import org.jetbrains.kotlin.psi.psiUtil.parameterIndex import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.resolve.scopes.MemberScope @@ -128,4 +125,4 @@ private fun <T : DeclarationDescriptorWithSource> Collection<T>.findByJavaElemen } fun PsiElement.javaResolutionFacade() = - KotlinCacheService.getInstance(project).getResolutionFacadeByFile(this.originalElement.containingFile, JvmPlatform)!! + KotlinCacheService.getInstance(project).getResolutionFacadeByFile(this.originalElement.containingFile, JvmPlatforms.defaultJvmPlatform)!! diff --git a/core/src/main/kotlin/Formats/DacHtmlFormat.kt b/core/src/main/kotlin/Formats/DacHtmlFormat.kt index 6b42dad19..d997f1ca2 100644 --- a/core/src/main/kotlin/Formats/DacHtmlFormat.kt +++ b/core/src/main/kotlin/Formats/DacHtmlFormat.kt @@ -9,7 +9,6 @@ import org.jetbrains.dokka.Kotlin.ParameterInfoNode import org.jetbrains.dokka.Utilities.firstSentence import java.lang.Math.max import java.net.URI -import java.util.Collections.emptyMap import kotlin.reflect.KClass /** @@ -176,11 +175,25 @@ class DevsiteLayoutHtmlFormatOutputBuilder( } } ul(classes = "nolist") { - sections.forEach { - li { - code { - metaMarkup(it.children) + sections.filter {it.tag == "See Also"}.forEach { + it.children.forEach { child -> + if (child is ContentNodeLazyLink || child is ContentExternalLink) { + li { + code { + contentNodeToMarkup(child) // Wrap bare links in listItems. + } // bare links come from the java-to-kotlin parser. + } } + else if (child is ContentUnorderedList) { + metaMarkup(child.children) // Already wrapped in listItems. + } // this is how we want things to look. No parser currently does this (yet). + else if (child is ContentParagraph) { + li{ + code { + metaMarkup (child.children) // Replace paragraphs with listItems. + } // paragraph-wrapped links come from the kotlin parser + } + } // NOTE: currently the java-to-java parser does not add See Also links! } } } @@ -467,7 +480,7 @@ class DevsiteLayoutHtmlFormatOutputBuilder( id = summaryId tbody { if (headerAsRow) { - developerHeading(header, summaryId) + developerHeading(header) } nodes.forEach { node -> row(node) @@ -501,6 +514,7 @@ class DevsiteLayoutHtmlFormatOutputBuilder( bodyContent = { h1 { +page.node.name } nodeContent(page.node) + summaryNodeGroup(page.interfaces.sortedBy { it.nameWithOuterClass().toLowerCase() }, "Interfaces", headerAsRow = false) { classLikeRow(it) } summaryNodeGroup(page.classes.sortedBy { it.nameWithOuterClass().toLowerCase() }, "Classes", headerAsRow = false) { classLikeRow(it) } summaryNodeGroup(page.exceptions.sortedBy { it.nameWithOuterClass().toLowerCase() }, "Exceptions", headerAsRow = false) { classLikeRow(it) } summaryNodeGroup(page.typeAliases.sortedBy { it.nameWithOuterClass().toLowerCase() }, "Type-aliases", headerAsRow = false) { classLikeRow(it) } @@ -905,25 +919,11 @@ class DevsiteLayoutHtmlFormatOutputBuilder( } } -fun TBODY.developerHeading( - header: String, - summaryId: String? = null -) { +fun TBODY.developerHeading(header: String) { tr { th { attributes["colSpan"] = "2" - dheading { - attributes["ds-is"] = "heading" - attributes["text"] = header - attributes["id"] = summaryId ?: header.replace("\\s".toRegex(), "-").toLowerCase() - attributes["level"] = "h3" - attributes["toc"] = "" - attributes["class"] = "" - h3 { - attributes["is-upgraded"] = "" - +header - } - } + +header } } } @@ -947,8 +947,3 @@ class DacAsJavaFormatDescriptor : JavaLayoutHtmlFormatDescriptorBase(), DefaultA override val packageListServiceClass: KClass<out PackageListService> = JavaLayoutHtmlPackageListService::class override val outputBuilderFactoryClass: KClass<out JavaLayoutHtmlFormatOutputBuilderFactory> = DevsiteLayoutHtmlFormatOutputBuilderFactoryImpl::class } - -fun FlowOrPhrasingContent.dheading(block : DHEADING.() -> Unit = {}) : Unit = DHEADING(consumer).visit(block) - -class DHEADING(consumer: TagConsumer<*>) : - HTMLTag("devsite-heading", consumer, emptyMap(), inlineTag = false, emptyTag = false), HtmlBlockTag diff --git a/core/src/main/kotlin/Formats/JavaLayoutHtml/JavaLayoutHtmlFormat.kt b/core/src/main/kotlin/Formats/JavaLayoutHtml/JavaLayoutHtmlFormat.kt index 66ded62a6..91808f8bf 100644 --- a/core/src/main/kotlin/Formats/JavaLayoutHtml/JavaLayoutHtmlFormat.kt +++ b/core/src/main/kotlin/Formats/JavaLayoutHtml/JavaLayoutHtmlFormat.kt @@ -70,7 +70,7 @@ interface JavaLayoutHtmlUriProvider { } fun mainUriOrWarn(node: DocumentationNode): URI? = tryGetMainUri(node) ?: (null).also { - AssertionError("Not implemented mainUri for ${node.kind}").printStackTrace() + AssertionError("Not implemented mainUri for ${node.kind} (${node})").printStackTrace() } } @@ -139,7 +139,3 @@ fun DocumentationNode.signatureForAnchor(logger: DokkaLogger): String { } } -fun DocumentationNode.classNodeNameWithOuterClass(): String { - assert(kind in NodeKind.classLike) - return path.dropWhile { it.kind == NodeKind.Package || it.kind == NodeKind.Module }.joinToString(separator = ".") { it.name } -} diff --git a/core/src/main/kotlin/Formats/JavaLayoutHtml/JavaLayoutHtmlFormatOutputBuilder.kt b/core/src/main/kotlin/Formats/JavaLayoutHtml/JavaLayoutHtmlFormatOutputBuilder.kt index 7fbdb1819..a04a9187c 100644 --- a/core/src/main/kotlin/Formats/JavaLayoutHtml/JavaLayoutHtmlFormatOutputBuilder.kt +++ b/core/src/main/kotlin/Formats/JavaLayoutHtml/JavaLayoutHtmlFormatOutputBuilder.kt @@ -51,7 +51,7 @@ open class JavaLayoutHtmlFormatOutputBuilder( protected fun FlowContent.contentNodesToMarkup(content: List<ContentNode>, contextUri: URI = uri): Unit = content.forEach { contentNodeToMarkup(it, contextUri) } - private fun FlowContent.contentNodeToMarkup(content: ContentNode, contextUri: URI) { + protected fun FlowContent.contentNodeToMarkup(content: ContentNode, contextUri: URI = uri) { when (content) { is ContentText -> +content.text is ContentSymbol -> span("symbol") { +content.text } @@ -136,7 +136,7 @@ open class JavaLayoutHtmlFormatOutputBuilder( } ContentHardLineBreak -> br - is ContentParagraph -> p { contentNodesToMarkup(content.children, contextUri) } + is ContentParagraph -> p(classes = content.label) { contentNodesToMarkup(content.children, contextUri) } is NodeRenderContent -> renderedSignature(content.node, mode = content.mode) is ContentNodeLink -> { @@ -392,6 +392,7 @@ open class JavaLayoutHtmlFormatOutputBuilder( bodyContent = { h1 { +page.node.name } nodeContent(page.node) + summaryNodeGroup(page.interfaces, "Interfaces", headerAsRow = false) { classLikeRow(it) } summaryNodeGroup(page.classes, "Classes", headerAsRow = false) { classLikeRow(it) } summaryNodeGroup(page.exceptions, "Exceptions", headerAsRow = false) { classLikeRow(it) } summaryNodeGroup(page.typeAliases, "Type-aliases", headerAsRow = false) { classLikeRow(it) } @@ -884,7 +885,7 @@ open class JavaLayoutHtmlFormatOutputBuilder( emphasis: Boolean = true): ContentNode? { val deprecated = node.deprecation deprecated?.let { - return ContentParagraph().apply { + return ContentParagraph("caution").apply { if (prefix) { append(ContentStrong().apply { text( if (deprecated.content.children.size == 0) "Deprecated." @@ -1088,6 +1089,8 @@ open class JavaLayoutHtmlFormatOutputBuilder( assert(node.kind == NodeKind.Package) } + val interfaces = node.members(NodeKind.Interface) + + node.members(NodeKind.Class).flatMap { it.members(NodeKind.Interface) } val classes = node.members(NodeKind.Class) val exceptions = node.members(NodeKind.Exception) val typeAliases = node.members(NodeKind.TypeAlias) diff --git a/core/src/main/kotlin/Formats/JavaLayoutHtml/JavaLayoutHtmlGenerator.kt b/core/src/main/kotlin/Formats/JavaLayoutHtml/JavaLayoutHtmlGenerator.kt index 115e3f76d..9928a8e9e 100644 --- a/core/src/main/kotlin/Formats/JavaLayoutHtml/JavaLayoutHtmlGenerator.kt +++ b/core/src/main/kotlin/Formats/JavaLayoutHtml/JavaLayoutHtmlGenerator.kt @@ -32,6 +32,7 @@ class JavaLayoutHtmlFormatGenerator @Inject constructor( return when (node.kind) { NodeKind.Module -> URI("/").resolve(node.name + "/") NodeKind.Package -> tryGetContainerUri(node.getOwnerOrReport())?.resolve(node.name.replace('.', '/') + '/') + NodeKind.GroupNode -> tryGetContainerUri(node.getOwnerOrReport()) in NodeKind.classLike -> tryGetContainerUri(node.getOwnerOrReport())?.resolve("${node.classNodeNameWithOuterClass()}.html") else -> null } @@ -81,7 +82,7 @@ class JavaLayoutHtmlFormatGenerator @Inject constructor( fun buildPackage(node: DocumentationNode, parentDir: File) { assert(node.kind == NodeKind.Package) - val members = node.members + var members = node.members val directoryForPackage = parentDir.resolve(node.name.replace('.', File.separatorChar)) directoryForPackage.mkdirsOrFail() @@ -89,6 +90,9 @@ class JavaLayoutHtmlFormatGenerator @Inject constructor( createOutputBuilderForNode(node, it).generatePage(Page.PackagePage(node)) } + members.filter { it.kind == NodeKind.GroupNode }.forEach { + members += it.members + } members.filter { it.kind in NodeKind.classLike }.forEach { buildClass(it, directoryForPackage) } @@ -133,6 +137,7 @@ class JavaLayoutHtmlFormatGenerator @Inject constructor( val normalized = uri.normalize() uriToWriter[normalized]?.let { return it } val file = root.resolve(normalized.path.removePrefix("/")) + file.parentFile.mkdirsOrFail() val writer = file.bufferedWriter() uriToWriter[normalized] = writer return writer diff --git a/core/src/main/kotlin/Java/JavaPsiDocumentationBuilder.kt b/core/src/main/kotlin/Java/JavaPsiDocumentationBuilder.kt index 8776da4c2..a7df4e482 100644 --- a/core/src/main/kotlin/Java/JavaPsiDocumentationBuilder.kt +++ b/core/src/main/kotlin/Java/JavaPsiDocumentationBuilder.kt @@ -29,12 +29,13 @@ fun getSignature(element: PsiElement?) = when(element) { private fun PsiType.typeSignature(): String = when(this) { is PsiArrayType -> "Array((${componentType.typeSignature()}))" is PsiPrimitiveType -> "kotlin." + canonicalText.capitalize() + is PsiClassType -> resolve()?.qualifiedName ?: className else -> mapTypeName(this) } private fun mapTypeName(psiType: PsiType): String = when (psiType) { is PsiPrimitiveType -> psiType.canonicalText - is PsiClassType -> psiType.resolve()?.qualifiedName ?: psiType.className + is PsiClassType -> psiType.resolve()?.name ?: psiType.className is PsiEllipsisType -> mapTypeName(psiType.componentType) is PsiArrayType -> "kotlin.Array" else -> psiType.canonicalText @@ -119,8 +120,12 @@ class JavaPsiDocumentationBuilder : JavaDocumentationBuilder { if (modifierList != null) { modifierList.annotations.filter { !ignoreAnnotation(it) }.forEach { val annotation = it.build() - node.append(annotation, - if (it.qualifiedName == "java.lang.Deprecated") RefKind.Deprecation else RefKind.Annotation) + if (it.qualifiedName == "java.lang.Deprecated" || it.qualifiedName == "kotlin.Deprecated") { + node.append(annotation, RefKind.Deprecation) + annotation.convertDeprecationDetailsToChildren() + } else { + node.append(annotation, RefKind.Annotation) + } } } } @@ -209,20 +214,8 @@ class JavaPsiDocumentationBuilder : JavaDocumentationBuilder { superTypes.filter { !ignoreSupertype(it) }.forEach { superType -> node.appendType(superType, NodeKind.Supertype) val superClass = superType.resolve() - // parentNode is the actual DocumentationNode of this class's supertype - // It is necessary to create documentation links back to the superclass from inherited methods - val parentNode = refGraph.lookup(superType.typeSignature()) - if (superClass != null && parentNode != null) { + if (superClass != null) { link(superClass, node, RefKind.Inheritor) - // Explicitly add the methods of the superclass (which are not overridden) as nodes to this class - val overriddenMethods = methods.toList().flatMap { it.findSuperMethods().toList() } - val inheritedMethods = superClass.methods.filter { it !in overriddenMethods }.toTypedArray() - - node.appendChildren(inheritedMethods, RefKind.InheritedMember) { - val child = build() - child.addReferenceTo(parentNode, RefKind.Owner) - return@appendChildren child - } } } diff --git a/core/src/main/kotlin/Java/JavadocParser.kt b/core/src/main/kotlin/Java/JavadocParser.kt index 04de29087..21cc2bbdf 100644 --- a/core/src/main/kotlin/Java/JavadocParser.kt +++ b/core/src/main/kotlin/Java/JavadocParser.kt @@ -1,12 +1,11 @@ package org.jetbrains.dokka import com.intellij.psi.* -import com.intellij.psi.impl.source.javadoc.CorePsiDocTagValueImpl +import com.intellij.psi.impl.source.javadoc.PsiDocTagValueImpl import com.intellij.psi.impl.source.tree.JavaDocElementType import com.intellij.psi.javadoc.* import com.intellij.psi.util.PsiTreeUtil import com.intellij.util.IncorrectOperationException -import com.intellij.util.containers.isNullOrEmpty import org.jetbrains.dokka.Model.CodeNode import org.jetbrains.kotlin.utils.join import org.jetbrains.kotlin.utils.keysToMap @@ -172,7 +171,7 @@ class JavadocParser( fun PsiDocTag.getApiLevel(): String? { if (dataElements.isNotEmpty()) { val data = dataElements - if (data[0] is CorePsiDocTagValueImpl) { + if (data[0] is PsiDocTagValueImpl) { val docTagValue = data[0] if (docTagValue.firstChild != null) { val apiLevel = docTagValue.firstChild @@ -420,11 +419,12 @@ class JavadocParser( linkNode } linkSignature != null -> { + @Suppress("USELESS_CAST") + val signature: String = linkSignature as String val linkNode = ContentNodeLazyLink( - (tag.valueElement ?: linkElement).text, - { -> refGraph.lookupOrWarn(linkSignature, logger) } - ) + (tag.valueElement ?: linkElement).text + ) { refGraph.lookupOrWarn(signature, logger) } linkNode.append(text) linkNode } @@ -439,7 +439,13 @@ class JavadocParser( val externalLink = resolveExternalLink(valueElement) val linkSignature by lazy { resolveInternalLink(valueElement) } if (externalLink != null || linkSignature != null) { - val labelText = tag.dataElements.firstOrNull { it is PsiDocToken }?.text ?: valueElement!!.text + + // sometimes `dataElements` contains multiple `PsiDocToken` elements and some have whitespace in them + // this is best effort to find the first non-empty one before falling back to using the symbol name. + val labelText = tag.dataElements.firstOrNull { + it is PsiDocToken && it.text?.trim()?.isNotEmpty() ?: false + }?.text ?: valueElement!!.text + val linkTarget = if (externalLink != null) "href=\"$externalLink\"" else "docref=\"$linkSignature\"" val link = "<a $linkTarget>$labelText</a>" if (tag.name == "link") "<code>$link</code>" else link @@ -560,7 +566,7 @@ class JavadocParser( val superMethods = current.findSuperMethods() for (method in superMethods) { val docs = method.docComment?.descriptionElements?.dropWhile { it.text.trim().isEmpty() } - if (!docs.isNullOrEmpty()) { + if (docs?.isNotEmpty() == true) { return method } } @@ -648,7 +654,7 @@ class JavadocParser( appendContentBetweenIncludes(path, betweenTag) } } catch (e: java.lang.Exception) { - logger.error("No file found when processing Java @sample. Path to sample: $path") + logger.error("No file found when processing Java @sample. Path to sample: $path\n") } } diff --git a/core/src/main/kotlin/Kotlin/DocumentationBuilder.kt b/core/src/main/kotlin/Kotlin/DocumentationBuilder.kt index 0b5e74339..b9fe8483e 100644 --- a/core/src/main/kotlin/Kotlin/DocumentationBuilder.kt +++ b/core/src/main/kotlin/Kotlin/DocumentationBuilder.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.Annotated import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor +import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptorImpl import org.jetbrains.kotlin.descriptors.impl.EnumEntrySyntheticClassDescriptor import org.jetbrains.kotlin.idea.kdoc.findKDoc import org.jetbrains.kotlin.idea.util.fuzzyExtensionReceiverType @@ -309,8 +310,8 @@ class DocumentationBuilder else -> return@forEach } append(annotationNode, refKind) + if (refKind == RefKind.Deprecation) annotationNode.convertDeprecationDetailsToChildren() } - } } } @@ -739,7 +740,7 @@ class DocumentationBuilder } fun FunctionDescriptor.build(external: Boolean = false): DocumentationNode { - if (ErrorUtils.containsErrorType(this)) { + if (ErrorUtils.containsErrorTypeInParameters(this) || ErrorUtils.containsErrorType(this.returnType)) { logger.warn("Found an unresolved type in ${signatureWithSourceLocation()}") } @@ -908,14 +909,19 @@ class DocumentationBuilder return node } - fun AnnotationDescriptor.build(): DocumentationNode? { + fun AnnotationDescriptor.build(isWithinReplaceWith: Boolean = false): DocumentationNode? { val annotationClass = type.constructor.declarationDescriptor if (annotationClass == null || ErrorUtils.isError(annotationClass)) { return null } val node = DocumentationNode(annotationClass.name.asString(), Content.Empty, NodeKind.Annotation) - allValueArguments.forEach { (name, value) -> - val valueNode = value.toDocumentationNode() + allValueArguments.forEach foreach@{ (name, value) -> + if (name.toString() == "imports" && value.toString() == "[]") return@foreach + var valueNode: DocumentationNode? = null + if (value.toString() == "@kotlin.ReplaceWith") { + valueNode = (value.value as AnnotationDescriptor).build(true) + } + else valueNode = value.toDocumentationNode(isWithinReplaceWith) if (valueNode != null) { val paramNode = DocumentationNode(name.asString(), Content.Empty, NodeKind.Parameter) paramNode.append(valueNode, RefKind.Detail) @@ -925,10 +931,10 @@ class DocumentationBuilder return node } - fun ConstantValue<*>.toDocumentationNode(): DocumentationNode? = value?.let { value -> + fun ConstantValue<*>.toDocumentationNode(isWithinReplaceWith: Boolean = false): DocumentationNode? = value?.let { value -> when (value) { is String -> - "\"" + StringUtil.escapeStringCharacters(value) + "\"" + (if (isWithinReplaceWith) "Replace with: " else "") + "\"" + StringUtil.escapeStringCharacters(value) + "\"" is EnumEntrySyntheticClassDescriptor -> value.containingDeclaration.name.asString() + "." + value.name.asString() is Pair<*, *> -> { diff --git a/core/src/main/kotlin/Kotlin/ExternalDocumentationLinkResolver.kt b/core/src/main/kotlin/Kotlin/ExternalDocumentationLinkResolver.kt index 4e394c466..d09bc1c9f 100644 --- a/core/src/main/kotlin/Kotlin/ExternalDocumentationLinkResolver.kt +++ b/core/src/main/kotlin/Kotlin/ExternalDocumentationLinkResolver.kt @@ -42,7 +42,7 @@ class ExternalDocumentationLinkResolver @Inject constructor( override fun toString(): String = rootUrl.toString() } - val cacheDir: Path? = options.cacheRoot?.resolve("packageListCache")?.apply { createDirectories() } + val cacheDir: Path? = options.cacheRoot?.resolve("packageListCache")?.apply { toFile().mkdirs() } val cachedProtocols = setOf("http", "https", "ftp") @@ -86,13 +86,13 @@ class ExternalDocumentationLinkResolver @Inject constructor( val digest = MessageDigest.getInstance("SHA-256") val hash = digest.digest(packageListLink.toByteArray(Charsets.UTF_8)).toHexString() - val cacheEntry = cacheDir.resolve(hash) + val cacheEntry = cacheDir.resolve(hash).toFile() if (cacheEntry.exists()) { try { val connection = packageListUrl.doOpenConnectionToReadContent() val originModifiedDate = connection.date - val cacheDate = cacheEntry.lastModified().toMillis() + val cacheDate = cacheEntry.lastModified() if (originModifiedDate > cacheDate || originModifiedDate == 0L) { if (originModifiedDate == 0L) logger.warn("No date header for $packageListUrl, downloading anyway") diff --git a/core/src/main/kotlin/Kotlin/KotlinLanguageService.kt b/core/src/main/kotlin/Kotlin/KotlinLanguageService.kt index 757221ce5..8a33ff8b7 100644 --- a/core/src/main/kotlin/Kotlin/KotlinLanguageService.kt +++ b/core/src/main/kotlin/Kotlin/KotlinLanguageService.kt @@ -1,6 +1,6 @@ package org.jetbrains.dokka -import org.jetbrains.dokka.Formats.classNodeNameWithOuterClass +import org.jetbrains.dokka.classNodeNameWithOuterClass import org.jetbrains.dokka.LanguageService.RenderMode /** diff --git a/core/src/main/kotlin/Languages/NewJavaLanguageService.kt b/core/src/main/kotlin/Languages/NewJavaLanguageService.kt index 10715d0da..c4b5fa090 100644 --- a/core/src/main/kotlin/Languages/NewJavaLanguageService.kt +++ b/core/src/main/kotlin/Languages/NewJavaLanguageService.kt @@ -1,6 +1,6 @@ package org.jetbrains.dokka -import org.jetbrains.dokka.Formats.classNodeNameWithOuterClass +import org.jetbrains.dokka.classNodeNameWithOuterClass import org.jetbrains.dokka.LanguageService.RenderMode /** @@ -247,4 +247,4 @@ class NewJavaLanguageService : CommonLanguageService() { text(" ") identifier(node.name) } -}
\ No newline at end of file +} diff --git a/core/src/main/kotlin/Model/Content.kt b/core/src/main/kotlin/Model/Content.kt index f239da7f9..a4c78fabf 100644 --- a/core/src/main/kotlin/Model/Content.kt +++ b/core/src/main/kotlin/Model/Content.kt @@ -106,7 +106,7 @@ object ContentIndentedSoftLineBreak: ContentNode { } class ScriptBlock(val type: String?, val src: String) : ContentBlock() -class ContentParagraph() : ContentBlock() +class ContentParagraph(val label: String? = null) : ContentBlock() class ContentEmphasis() : ContentBlock() class ContentStrong() : ContentBlock() class ContentStrikethrough() : ContentBlock() diff --git a/core/src/main/kotlin/Model/DocumentationNode.kt b/core/src/main/kotlin/Model/DocumentationNode.kt index e8a85a2bd..cf083ce54 100644 --- a/core/src/main/kotlin/Model/DocumentationNode.kt +++ b/core/src/main/kotlin/Model/DocumentationNode.kt @@ -266,7 +266,7 @@ private fun DocumentationNode.isSuperclassFor(node: DocumentationNode): Boolean fun DocumentationNode.classNodeNameWithOuterClass(): String { assert(kind in NodeKind.classLike) - return path.dropWhile { it.kind == NodeKind.Package || it.kind == NodeKind.Module }.joinToString(separator = ".") { it.name } + return path.dropWhile { it.kind !in NodeKind.classLike }.joinToString(separator = ".") { it.name } } fun DocumentationNode.deprecatedLevelMessage(): String { @@ -279,3 +279,24 @@ fun DocumentationNode.deprecatedLevelMessage(): String { } return "This $kindName was deprecated in API level ${deprecatedLevel.name}." } + +fun DocumentationNode.convertDeprecationDetailsToChildren() { + val toProcess = details.toMutableList() + while (!toProcess.isEmpty()) { + var child = toProcess.removeAt(0) + if (child.details.isEmpty() && child.name != "") { + updateContent { text(child.name.cleanForAppending()) } + } + else toProcess.addAll(0, child.details) + } +} + + /* + * Removes extraneous quotation marks and adds a ". " to make appending children readable. + */ +fun String.cleanForAppending(): String { + var result = this + if (this.first() == this.last() && this.first() == '"') result = result.substring(1, result.length - 1) + if (result[result.length - 2] != '.' && result.last() != ' ') result += ". " + return result +}
\ No newline at end of file diff --git a/core/src/test/kotlin/format/DacFormatTest.kt b/core/src/test/kotlin/format/DacFormatTest.kt index ae17420d4..5d8babc3d 100644 --- a/core/src/test/kotlin/format/DacFormatTest.kt +++ b/core/src/test/kotlin/format/DacFormatTest.kt @@ -51,4 +51,8 @@ class DacFormatTest: DacFormatTestCase() { @Test fun javaClassLinks() { verifyBothFormats("javaClassLinks") } + + @Test fun deprecation() { + verifyBothFormats("deprecation") + } }
\ No newline at end of file diff --git a/core/src/test/kotlin/javadoc/JavadocTest.kt b/core/src/test/kotlin/javadoc/JavadocTest.kt index 74265cbb8..a42d63933 100644 --- a/core/src/test/kotlin/javadoc/JavadocTest.kt +++ b/core/src/test/kotlin/javadoc/JavadocTest.kt @@ -16,8 +16,8 @@ class JavadocTest { val type = method.returnType() assertFalse(type.asClassDoc().isIncluded) - assertEquals("java.lang.String", type.qualifiedTypeName()) - assertEquals("java.lang.String", type.asClassDoc().qualifiedName()) + assertEquals("String", type.qualifiedTypeName()) + assertEquals("String", type.asClassDoc().qualifiedName()) val params = method.parameters() assertTrue(params[0].type().isPrimitive) @@ -119,7 +119,7 @@ class JavadocTest { val methodParamType = doc.classNamed("TypealiasesKt")!!.methods() .find { it.name() == "some" }!!.parameters().first() .type() - assertEquals("kotlin.jvm.functions.Function1", methodParamType.qualifiedTypeName()) + assertEquals("Function1", methodParamType.qualifiedTypeName()) assertEquals("? super A, C", methodParamType.asParameterizedType().typeArguments() .map(Type::qualifiedTypeName).joinToString()) } diff --git a/core/src/test/kotlin/model/ClassTest.kt b/core/src/test/kotlin/model/ClassTest.kt index 56a38fd3d..6bc45db10 100644 --- a/core/src/test/kotlin/model/ClassTest.kt +++ b/core/src/test/kotlin/model/ClassTest.kt @@ -181,7 +181,7 @@ class ClassTest { with(model.members.single().members.single()) { with(deprecation!!) { assertEquals("Deprecated", name) - assertEquals(Content.Empty, content) + // assertEquals(Content.Empty, content) // this is now an empty MutableContent instead assertEquals(NodeKind.Annotation, kind) assertEquals(1, details.count()) with(details[0]) { diff --git a/core/src/test/kotlin/model/FunctionTest.kt b/core/src/test/kotlin/model/FunctionTest.kt index 329106829..c94d7e990 100644 --- a/core/src/test/kotlin/model/FunctionTest.kt +++ b/core/src/test/kotlin/model/FunctionTest.kt @@ -234,4 +234,18 @@ Documentation""", content.description.toTestString()) } } } + + // Test for b/159470920, to ensure that we correctly parse annotated function types without resolving 'ERROR CLASS' + // types. Note that the actual annotation is not included in the type information, this is tracked in b/145517104. + @Test fun functionWithAnnotatedLambdaParam() { + verifyModel("testdata/functions/functionWithAnnotatedLambdaParam.kt") { model -> + with(model.members.single().members.single { it.name == "function" }) { + with(details(NodeKind.Parameter).first()) { + with(details(NodeKind.Type).first()) { + assertEquals("Function0", name) + } + } + } + } + } } diff --git a/core/testdata/format/dac/deprecation/DeprecatedBar.kt b/core/testdata/format/dac/deprecation/DeprecatedBar.kt new file mode 100644 index 000000000..39ac1c43d --- /dev/null +++ b/core/testdata/format/dac/deprecation/DeprecatedBar.kt @@ -0,0 +1,17 @@ +class Bar { + fun replacementBarMethod(): Bar { return Bar() } + + fun badBarMethod(): DeprecatedBar { return DeprecatedBar() } + + /** + * This method has been deprecated in favor of replacementBarMethod(). + */ + @Deprecated("Obsolete method", ReplaceWith("replacementBarMethod()")) + fun goodBarMethod(): DeprecatedBar { return DeprecatedBar() } +} + +/** + * This class has been deprecated in favor of Bar. + */ +@Deprecated("Obsolete class", ReplaceWith("Bar")) +class DeprecatedBar
\ No newline at end of file diff --git a/core/testdata/format/dac/deprecation/DeprecatedFoo.java b/core/testdata/format/dac/deprecation/DeprecatedFoo.java new file mode 100644 index 000000000..3c9c360ee --- /dev/null +++ b/core/testdata/format/dac/deprecation/DeprecatedFoo.java @@ -0,0 +1,21 @@ +public class Foo { + public Foo() { } + + public static Foo replacementFooMethod() { return Foo() } + + public static DeprecatedFoo badFooMethod() { return new DeprecatedFoo() } + + /** + * @deprecated Use {@link #replacementFooMethod()} instead. + */ + @Deprecated + public static DeprecatedFoo goodFooMethod() { return new DeprecatedFoo() } +} + +/** + * @deprecated Use {@link #Foo} instead. + */ +@Deprecated +public class DeprecatedFoo { + public DeprecatedFoo() { } +} diff --git a/core/testdata/format/dac/deprecation/dac-as-java/Bar.html b/core/testdata/format/dac/deprecation/dac-as-java/Bar.html new file mode 100644 index 000000000..9f9346ee7 --- /dev/null +++ b/core/testdata/format/dac/deprecation/dac-as-java/Bar.html @@ -0,0 +1,83 @@ +<html devsite="true"> + <head> + <title>Bar</title> +{% setvar book_path %}/_book.yaml{% endsetvar %} +{% include "_shared/_reference-head-tags.html" %} + </head> + <body> + <div id="api-info-block"></div> + <h1>Bar</h1> + <pre><span class="keyword">public</span> <span class="keyword">final</span> <span class="keyword">class</span> <span class="identifier">Bar</span> <span class="keyword">implements</span> <span class="identifier">Object</span></pre> + <table class="jd-inheritance-table"> + <tr> + <td class="jd-inheritance-class-cell" colSpan="1"><a href="#">Bar</a></td> + </tr> + </table> + <h2>Summary</h2> + <table class="responsive" id="pubctors"> + <tbody> + <tr> + <th colSpan="2">Public constructors</th> + </tr> + <tr> + <td> + <div><code><a href="#Bar()">Bar</a>()</code></div> + <p></p> + </td> + </tr> + </tbody> + </table> + <table class="responsive" id="pubmethods"> + <tbody> + <tr> + <th colSpan="2">Public methods</th> + </tr> + <tr> + <td><span class="keyword">final</span> <a href="DeprecatedBar.html#"><span class="identifier">DeprecatedBar</span></a></td> + <td> + <div><code><a href="#badBarMethod()">badBarMethod</a>()</code></div> + <p></p> + </td> + </tr> + <tr> + <td><span class="keyword">final</span> <a href="DeprecatedBar.html#"><span class="identifier">DeprecatedBar</span></a></td> + <td> + <div><code><a href="#goodBarMethod()">goodBarMethod</a>()</code></div> + <p>This method has been deprecated in favor of replacementBarMethod().</p> + </td> + </tr> + <tr> + <td><span class="keyword">final</span> <a href="#"><span class="identifier">Bar</span></a></td> + <td> + <div><code><a href="#replacementBarMethod()">replacementBarMethod</a>()</code></div> + <p></p> + </td> + </tr> + </tbody> + </table> + <h2>Public constructors</h2> +<a name="Bar()"></a> + <div class="api apilevel-" data-version-added=""> + <h3 class="api-name">Bar</h3> + <pre class="api-signature no-pretty-print"><span class="keyword">public</span> <span class="identifier">Bar</span><span class="symbol">(</span><span class="symbol">)</span></pre> + </div> + <h2>Public methods</h2> +<a name="badBarMethod()"></a> + <div class="api apilevel-" data-version-added=""> + <h3 class="api-name">badBarMethod</h3> + <pre class="api-signature no-pretty-print"><span class="keyword">public</span> <span class="keyword">final</span> <a href="DeprecatedBar.html#"><span class="identifier">DeprecatedBar</span></a> <span class="identifier">badBarMethod</span><span class="symbol">(</span><span class="symbol">)</span></pre> + </div> +<a name="goodBarMethod()"></a> + <div class="api apilevel-" data-version-added=""> + <h3 class="api-name">goodBarMethod</h3> + <pre class="api-signature no-pretty-print"><span class="keyword">public</span> <span class="keyword">final</span> <a href="DeprecatedBar.html#"><span class="identifier">DeprecatedBar</span></a> <span class="identifier">goodBarMethod</span><span class="symbol">(</span><span class="symbol">)</span></pre> + <p class="caution"><strong>Deprecated: </strong><em>Obsolete method. ReplaceWith("replacementBarMethod()"). </em></p> + <p>This method has been deprecated in favor of replacementBarMethod().</p> + </div> +<a name="replacementBarMethod()"></a> + <div class="api apilevel-" data-version-added=""> + <h3 class="api-name">replacementBarMethod</h3> + <pre class="api-signature no-pretty-print"><span class="keyword">public</span> <span class="keyword">final</span> <a href="#"><span class="identifier">Bar</span></a> <span class="identifier">replacementBarMethod</span><span class="symbol">(</span><span class="symbol">)</span></pre> + </div> + </body> +</html> diff --git a/core/testdata/format/dac/deprecation/dac-as-java/DeprecatedBar.html b/core/testdata/format/dac/deprecation/dac-as-java/DeprecatedBar.html new file mode 100644 index 000000000..d6e955413 --- /dev/null +++ b/core/testdata/format/dac/deprecation/dac-as-java/DeprecatedBar.html @@ -0,0 +1,39 @@ +<html devsite="true"> + <head> + <title>DeprecatedBar</title> +{% setvar book_path %}/_book.yaml{% endsetvar %} +{% include "_shared/_reference-head-tags.html" %} + </head> + <body> + <div id="api-info-block"></div> + <h1>DeprecatedBar</h1> + <pre><span class="keyword">public</span> <span class="keyword">final</span> <span class="keyword">class</span> <span class="identifier">DeprecatedBar</span> <span class="keyword">implements</span> <span class="identifier">Object</span></pre> + <table class="jd-inheritance-table"> + <tr> + <td class="jd-inheritance-class-cell" colSpan="1"><a href="#">DeprecatedBar</a></td> + </tr> + </table> + <p>This class has been deprecated in favor of Bar.</p> + <h2>Summary</h2> + <table class="responsive" id="pubctors"> + <tbody> + <tr> + <th colSpan="2">Public constructors</th> + </tr> + <tr> + <td> + <div><code><a href="#DeprecatedBar()">DeprecatedBar</a>()</code></div> + <p>This class has been deprecated in favor of Bar.</p> + </td> + </tr> + </tbody> + </table> + <h2>Public constructors</h2> +<a name="DeprecatedBar()"></a> + <div class="api apilevel-" data-version-added=""> + <h3 class="api-name">DeprecatedBar</h3> + <pre class="api-signature no-pretty-print"><span class="keyword">public</span> <span class="identifier">DeprecatedBar</span><span class="symbol">(</span><span class="symbol">)</span></pre> + <p>This class has been deprecated in favor of Bar.</p> + </div> + </body> +</html> diff --git a/core/testdata/format/dac/deprecation/dac-as-java/DeprecatedFoo.html b/core/testdata/format/dac/deprecation/dac-as-java/DeprecatedFoo.html new file mode 100644 index 000000000..360b24ef3 --- /dev/null +++ b/core/testdata/format/dac/deprecation/dac-as-java/DeprecatedFoo.html @@ -0,0 +1,37 @@ +<html devsite="true"> + <head> + <title>DeprecatedFoo</title> +{% setvar book_path %}/_book.yaml{% endsetvar %} +{% include "_shared/_reference-head-tags.html" %} + </head> + <body> + <div id="api-info-block"></div> + <h1>DeprecatedFoo</h1> + <pre><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">DeprecatedFoo</span> <span class="keyword">implements</span> <span class="identifier">Object</span></pre> + <table class="jd-inheritance-table"> + <tr> + <td class="jd-inheritance-class-cell" colSpan="1"><a href="#">DeprecatedFoo</a></td> + </tr> + </table> + <h2>Summary</h2> + <table class="responsive" id="pubctors"> + <tbody> + <tr> + <th colSpan="2">Public constructors</th> + </tr> + <tr> + <td> + <div><code><a href="#DeprecatedFoo()">DeprecatedFoo</a>()</code></div> + <p></p> + </td> + </tr> + </tbody> + </table> + <h2>Public constructors</h2> +<a name="DeprecatedFoo()"></a> + <div class="api apilevel-" data-version-added=""> + <h3 class="api-name">DeprecatedFoo</h3> + <pre class="api-signature no-pretty-print"><span class="keyword">public</span> <span class="identifier">DeprecatedFoo</span><span class="symbol">(</span><span class="symbol">)</span></pre> + </div> + </body> +</html> diff --git a/core/testdata/format/dac/deprecation/dac-as-java/Foo.html b/core/testdata/format/dac/deprecation/dac-as-java/Foo.html new file mode 100644 index 000000000..b468e4daa --- /dev/null +++ b/core/testdata/format/dac/deprecation/dac-as-java/Foo.html @@ -0,0 +1,82 @@ +<html devsite="true"> + <head> + <title>Foo</title> +{% setvar book_path %}/_book.yaml{% endsetvar %} +{% include "_shared/_reference-head-tags.html" %} + </head> + <body> + <div id="api-info-block"></div> + <h1>Foo</h1> + <pre><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">Foo</span> <span class="keyword">implements</span> <span class="identifier">Object</span></pre> + <table class="jd-inheritance-table"> + <tr> + <td class="jd-inheritance-class-cell" colSpan="1"><a href="#">Foo</a></td> + </tr> + </table> + <h2>Summary</h2> + <table class="responsive" id="pubctors"> + <tbody> + <tr> + <th colSpan="2">Public constructors</th> + </tr> + <tr> + <td> + <div><code><a href="#Foo()">Foo</a>()</code></div> + <p></p> + </td> + </tr> + </tbody> + </table> + <table class="responsive" id="pubmethods"> + <tbody> + <tr> + <th colSpan="2">Public methods</th> + </tr> + <tr> + <td><span class="keyword">static</span> <a href="DeprecatedFoo.html#"><span class="identifier">DeprecatedFoo</span></a></td> + <td> + <div><code><a href="#badFooMethod()">badFooMethod</a>()</code></div> + <p></p> + </td> + </tr> + <tr> + <td><span class="keyword">static</span> <a href="DeprecatedFoo.html#"><span class="identifier">DeprecatedFoo</span></a></td> + <td> + <div><code><a href="#goodFooMethod()">goodFooMethod</a>()</code></div> + <p></p> + </td> + </tr> + <tr> + <td><span class="keyword">static</span> <a href="#"><span class="identifier">Foo</span></a></td> + <td> + <div><code><a href="#replacementFooMethod()">replacementFooMethod</a>()</code></div> + <p></p> + </td> + </tr> + </tbody> + </table> + <h2>Public constructors</h2> +<a name="Foo()"></a> + <div class="api apilevel-" data-version-added=""> + <h3 class="api-name">Foo</h3> + <pre class="api-signature no-pretty-print"><span class="keyword">public</span> <span class="identifier">Foo</span><span class="symbol">(</span><span class="symbol">)</span></pre> + </div> + <h2>Public methods</h2> +<a name="badFooMethod()"></a> + <div class="api apilevel-" data-version-added=""> + <h3 class="api-name">badFooMethod</h3> + <pre class="api-signature no-pretty-print"><span class="keyword">public</span> <span class="keyword">static</span> <a href="DeprecatedFoo.html#"><span class="identifier">DeprecatedFoo</span></a> <span class="identifier">badFooMethod</span><span class="symbol">(</span><span class="symbol">)</span></pre> + </div> +<a name="goodFooMethod()"></a> + <div class="api apilevel-" data-version-added=""> + <h3 class="api-name">goodFooMethod</h3> + <pre class="api-signature no-pretty-print"><span class="keyword">public</span> <span class="keyword">static</span> <a href="DeprecatedFoo.html#"><span class="identifier">DeprecatedFoo</span></a> <span class="identifier">goodFooMethod</span><span class="symbol">(</span><span class="symbol">)</span></pre> + <p class="caution"><strong>Deprecated.</strong><em></em></p> + </div> +<a name="replacementFooMethod()"></a> + <div class="api apilevel-" data-version-added=""> + <h3 class="api-name">replacementFooMethod</h3> + <pre class="api-signature no-pretty-print"><span class="keyword">public</span> <span class="keyword">static</span> <a href="#"><span class="identifier">Foo</span></a> <span class="identifier">replacementFooMethod</span><span class="symbol">(</span><span class="symbol">)</span></pre> + </div> + </body> +</html> diff --git a/core/testdata/format/dac/deprecation/dac/Bar.html b/core/testdata/format/dac/deprecation/dac/Bar.html new file mode 100644 index 000000000..9dc323048 --- /dev/null +++ b/core/testdata/format/dac/deprecation/dac/Bar.html @@ -0,0 +1,83 @@ +<html devsite="true"> + <head> + <title>Bar</title> +{% setvar book_path %}/_book.yaml{% endsetvar %} +{% include "_shared/_reference-head-tags.html" %} + </head> + <body> + <div id="api-info-block"></div> + <h1>Bar</h1> + <pre><span class="keyword">class </span><span class="identifier">Bar</span></pre> + <table class="jd-inheritance-table"> + <tr> + <td class="jd-inheritance-class-cell" colSpan="1"><a href="#">Bar</a></td> + </tr> + </table> + <h2>Summary</h2> + <table class="responsive" id="pubctors"> + <tbody> + <tr> + <th colSpan="2">Public constructors</th> + </tr> + <tr> + <td> + <div><code><a href="#%3Cinit%3E()"><init></a>()</code></div> + <p></p> + </td> + </tr> + </tbody> + </table> + <table class="responsive" id="pubmethods"> + <tbody> + <tr> + <th colSpan="2">Public methods</th> + </tr> + <tr> + <td><a href="DeprecatedBar.html#"><span class="identifier">DeprecatedBar</span></a></td> + <td> + <div><code><a href="#badBarMethod()">badBarMethod</a>()</code></div> + <p></p> + </td> + </tr> + <tr> + <td><a href="DeprecatedBar.html#"><span class="identifier">DeprecatedBar</span></a></td> + <td> + <div><code><a href="#goodBarMethod()">goodBarMethod</a>()</code></div> + <p>This method has been deprecated in favor of replacementBarMethod().</p> + </td> + </tr> + <tr> + <td><a href="#"><span class="identifier">Bar</span></a></td> + <td> + <div><code><a href="#replacementBarMethod()">replacementBarMethod</a>()</code></div> + <p></p> + </td> + </tr> + </tbody> + </table> + <h2>Public constructors</h2> +<a name="%3Cinit%3E()"></a> + <div class="api apilevel-" data-version-added=""> + <h3 class="api-name"><init></h3> + <pre class="api-signature no-pretty-print"><span class="identifier">Bar</span><span class="symbol">(</span><span class="symbol">)</span></pre> + </div> + <h2>Public methods</h2> +<a name="badBarMethod()"></a> + <div class="api apilevel-" data-version-added=""> + <h3 class="api-name">badBarMethod</h3> + <pre class="api-signature no-pretty-print"><span class="keyword">fun </span><span class="identifier">badBarMethod</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><a href="DeprecatedBar.html#"><span class="identifier">DeprecatedBar</span></a></pre> + </div> +<a name="goodBarMethod()"></a> + <div class="api apilevel-" data-version-added=""> + <h3 class="api-name">goodBarMethod</h3> + <pre class="api-signature no-pretty-print"><span class="keyword">fun </span><del><span class="identifier">goodBarMethod</span></del><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><a href="DeprecatedBar.html#"><span class="identifier">DeprecatedBar</span></a></pre> + <p class="caution"><strong>Deprecated: </strong><em>Obsolete method. Replace with: "replacementBarMethod()". </em></p> + <p>This method has been deprecated in favor of replacementBarMethod().</p> + </div> +<a name="replacementBarMethod()"></a> + <div class="api apilevel-" data-version-added=""> + <h3 class="api-name">replacementBarMethod</h3> + <pre class="api-signature no-pretty-print"><span class="keyword">fun </span><span class="identifier">replacementBarMethod</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><a href="#"><span class="identifier">Bar</span></a></pre> + </div> + </body> +</html> diff --git a/core/testdata/format/dac/deprecation/dac/DeprecatedBar.html b/core/testdata/format/dac/deprecation/dac/DeprecatedBar.html new file mode 100644 index 000000000..34b8c9386 --- /dev/null +++ b/core/testdata/format/dac/deprecation/dac/DeprecatedBar.html @@ -0,0 +1,39 @@ +<html devsite="true"> + <head> + <title>DeprecatedBar</title> +{% setvar book_path %}/_book.yaml{% endsetvar %} +{% include "_shared/_reference-head-tags.html" %} + </head> + <body> + <div id="api-info-block"></div> + <h1>DeprecatedBar</h1> + <pre><span class="keyword">class </span><del><span class="identifier">DeprecatedBar</span></del></pre> + <table class="jd-inheritance-table"> + <tr> + <td class="jd-inheritance-class-cell" colSpan="1"><a href="#">DeprecatedBar</a></td> + </tr> + </table> + <p>This class has been deprecated in favor of Bar.</p> + <h2>Summary</h2> + <table class="responsive" id="pubctors"> + <tbody> + <tr> + <th colSpan="2">Public constructors</th> + </tr> + <tr> + <td> + <div><code><a href="#%3Cinit%3E()"><init></a>()</code></div> + <p>This class has been deprecated in favor of Bar.</p> + </td> + </tr> + </tbody> + </table> + <h2>Public constructors</h2> +<a name="%3Cinit%3E()"></a> + <div class="api apilevel-" data-version-added=""> + <h3 class="api-name"><init></h3> + <pre class="api-signature no-pretty-print"><span class="identifier">DeprecatedBar</span><span class="symbol">(</span><span class="symbol">)</span></pre> + <p>This class has been deprecated in favor of Bar.</p> + </div> + </body> +</html> diff --git a/core/testdata/format/dac/deprecation/dac/DeprecatedFoo.html b/core/testdata/format/dac/deprecation/dac/DeprecatedFoo.html new file mode 100644 index 000000000..610c46b60 --- /dev/null +++ b/core/testdata/format/dac/deprecation/dac/DeprecatedFoo.html @@ -0,0 +1,37 @@ +<html devsite="true"> + <head> + <title>DeprecatedFoo</title> +{% setvar book_path %}/_book.yaml{% endsetvar %} +{% include "_shared/_reference-head-tags.html" %} + </head> + <body> + <div id="api-info-block"></div> + <h1>DeprecatedFoo</h1> + <pre><span class="keyword">open</span> <span class="keyword">class </span><del><span class="identifier">DeprecatedFoo</span></del></pre> + <table class="jd-inheritance-table"> + <tr> + <td class="jd-inheritance-class-cell" colSpan="1"><a href="#">DeprecatedFoo</a></td> + </tr> + </table> + <h2>Summary</h2> + <table class="responsive" id="pubctors"> + <tbody> + <tr> + <th colSpan="2">Public constructors</th> + </tr> + <tr> + <td> + <div><code><a href="#%3Cinit%3E()"><init></a>()</code></div> + <p></p> + </td> + </tr> + </tbody> + </table> + <h2>Public constructors</h2> +<a name="%3Cinit%3E()"></a> + <div class="api apilevel-" data-version-added=""> + <h3 class="api-name"><init></h3> + <pre class="api-signature no-pretty-print"><span class="identifier">DeprecatedFoo</span><span class="symbol">(</span><span class="symbol">)</span></pre> + </div> + </body> +</html> diff --git a/core/testdata/format/dac/deprecation/dac/Foo.html b/core/testdata/format/dac/deprecation/dac/Foo.html new file mode 100644 index 000000000..76c0760a0 --- /dev/null +++ b/core/testdata/format/dac/deprecation/dac/Foo.html @@ -0,0 +1,82 @@ +<html devsite="true"> + <head> + <title>Foo</title> +{% setvar book_path %}/_book.yaml{% endsetvar %} +{% include "_shared/_reference-head-tags.html" %} + </head> + <body> + <div id="api-info-block"></div> + <h1>Foo</h1> + <pre><span class="keyword">open</span> <span class="keyword">class </span><span class="identifier">Foo</span></pre> + <table class="jd-inheritance-table"> + <tr> + <td class="jd-inheritance-class-cell" colSpan="1"><a href="#">Foo</a></td> + </tr> + </table> + <h2>Summary</h2> + <table class="responsive" id="pubctors"> + <tbody> + <tr> + <th colSpan="2">Public constructors</th> + </tr> + <tr> + <td> + <div><code><a href="#%3Cinit%3E()"><init></a>()</code></div> + <p></p> + </td> + </tr> + </tbody> + </table> + <table class="responsive" id="pubmethods"> + <tbody> + <tr> + <th colSpan="2">Public methods</th> + </tr> + <tr> + <td><span class="keyword">open</span> <span class="keyword">static</span> <a href="DeprecatedFoo.html#"><span class="identifier">DeprecatedFoo</span></a><span class="symbol">!</span></td> + <td> + <div><code><a href="#badFooMethod()">badFooMethod</a>()</code></div> + <p></p> + </td> + </tr> + <tr> + <td><span class="keyword">open</span> <span class="keyword">static</span> <a href="DeprecatedFoo.html#"><span class="identifier">DeprecatedFoo</span></a><span class="symbol">!</span></td> + <td> + <div><code><a href="#goodFooMethod()">goodFooMethod</a>()</code></div> + <p></p> + </td> + </tr> + <tr> + <td><span class="keyword">open</span> <span class="keyword">static</span> <a href="#"><span class="identifier">Foo</span></a><span class="symbol">!</span></td> + <td> + <div><code><a href="#replacementFooMethod()">replacementFooMethod</a>()</code></div> + <p></p> + </td> + </tr> + </tbody> + </table> + <h2>Public constructors</h2> +<a name="%3Cinit%3E()"></a> + <div class="api apilevel-" data-version-added=""> + <h3 class="api-name"><init></h3> + <pre class="api-signature no-pretty-print"><span class="identifier">Foo</span><span class="symbol">(</span><span class="symbol">)</span></pre> + </div> + <h2>Public methods</h2> +<a name="badFooMethod()"></a> + <div class="api apilevel-" data-version-added=""> + <h3 class="api-name">badFooMethod</h3> + <pre class="api-signature no-pretty-print"><span class="keyword">open</span> <span class="keyword">static</span> <span class="keyword">fun </span><span class="identifier">badFooMethod</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><a href="DeprecatedFoo.html#"><span class="identifier">DeprecatedFoo</span></a><span class="symbol">!</span></pre> + </div> +<a name="goodFooMethod()"></a> + <div class="api apilevel-" data-version-added=""> + <h3 class="api-name">goodFooMethod</h3> + <pre class="api-signature no-pretty-print"><span class="keyword">open</span> <span class="keyword">static</span> <span class="keyword">fun </span><del><span class="identifier">goodFooMethod</span></del><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><a href="DeprecatedFoo.html#"><span class="identifier">DeprecatedFoo</span></a><span class="symbol">!</span></pre> + <p class="caution"><strong>Deprecated: </strong><em>Use <code><a href="#replacementFooMethod()">replacementFooMethod()</a></code> instead.</em></p> + </div> +<a name="replacementFooMethod()"></a> + <div class="api apilevel-" data-version-added=""> + <h3 class="api-name">replacementFooMethod</h3> + <pre class="api-signature no-pretty-print"><span class="keyword">open</span> <span class="keyword">static</span> <span class="keyword">fun </span><span class="identifier">replacementFooMethod</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><a href="#"><span class="identifier">Foo</span></a><span class="symbol">!</span></pre> + </div> + </body> +</html> diff --git a/core/testdata/format/dac/inheritedMethods/dac-as-java/Child.html b/core/testdata/format/dac/inheritedMethods/dac-as-java/Child.html index 65e2addb0..67a58125a 100644 --- a/core/testdata/format/dac/inheritedMethods/dac-as-java/Child.html +++ b/core/testdata/format/dac/inheritedMethods/dac-as-java/Child.html @@ -21,11 +21,7 @@ <table class="responsive" id="pubctors"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class=""> - <h3 is-upgraded="">Public constructors</h3> - </devsite-heading> - </th> + <th colSpan="2">Public constructors</th> </tr> <tr> <td> @@ -38,11 +34,7 @@ <table class="responsive" id="pubmethods"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Public methods" id="pubmethods" level="h3" toc="" class=""> - <h3 is-upgraded="">Public methods</h3> - </devsite-heading> - </th> + <th colSpan="2">Public methods</th> </tr> <tr> <td><span class="identifier">void</span></td> @@ -60,35 +52,6 @@ </tr> </tbody> </table> - <table class="responsive" id="inhmethods"> - <tbody> - <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Inherited functions" id="inherited-functions" level="h3" toc="" class=""> - <h3 is-upgraded="">Inherited functions</h3> - </devsite-heading> - </th> - </tr> - <tr class="api apilevel-"> - <td colSpan="2"> - <div class="expandable jd-inherited-apis"><span class="expand-control exw-expanded">From class <code><a href="Parent.html#">Parent</a></code></span> - <table class="responsive exw-expanded-content"> - <tbody> - <tr class="api apilevel-" data-version-added="ApiLevel:"> - <td><code><span class="identifier">void</span></code></td> - <td width="100%"><code><a href="Parent.html#foo()">foo</a>()</code> - <p> - <p>Do a superclass foo</p> - </p> - </td> - </tr> - </tbody> - </table> - </div> - </td> - </tr> - </tbody> - </table> <h2>Public constructors</h2> <a name="Child()"></a> <div class="api apilevel-" data-version-added=""> diff --git a/core/testdata/format/dac/inheritedMethods/dac-as-java/Parent.html b/core/testdata/format/dac/inheritedMethods/dac-as-java/Parent.html index 4efddeb30..977e693d8 100644 --- a/core/testdata/format/dac/inheritedMethods/dac-as-java/Parent.html +++ b/core/testdata/format/dac/inheritedMethods/dac-as-java/Parent.html @@ -7,7 +7,7 @@ <body> <div id="api-info-block"></div> <h1>Parent</h1> - <pre><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">Parent</span> <span class="keyword">implements</span> <span class="identifier">java.lang.Object</span></pre> + <pre><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">Parent</span> <span class="keyword">implements</span> <span class="identifier">Object</span></pre> <table class="jd-inheritance-table"> <tr> <td class="jd-inheritance-class-cell" colSpan="1"><a href="#">Parent</a></td> @@ -38,11 +38,7 @@ <table class="responsive" id="pubctors"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class=""> - <h3 is-upgraded="">Public constructors</h3> - </devsite-heading> - </th> + <th colSpan="2">Public constructors</th> </tr> <tr> <td> @@ -55,11 +51,7 @@ <table class="responsive" id="pubmethods"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Public methods" id="pubmethods" level="h3" toc="" class=""> - <h3 is-upgraded="">Public methods</h3> - </devsite-heading> - </th> + <th colSpan="2">Public methods</th> </tr> <tr> <td><span class="identifier">void</span></td> diff --git a/core/testdata/format/dac/inheritedMethods/dac/Child.html b/core/testdata/format/dac/inheritedMethods/dac/Child.html index 5da7f475d..dff52afbe 100644 --- a/core/testdata/format/dac/inheritedMethods/dac/Child.html +++ b/core/testdata/format/dac/inheritedMethods/dac/Child.html @@ -21,11 +21,7 @@ <table class="responsive" id="pubctors"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class=""> - <h3 is-upgraded="">Public constructors</h3> - </devsite-heading> - </th> + <th colSpan="2">Public constructors</th> </tr> <tr> <td> @@ -38,11 +34,7 @@ <table class="responsive" id="pubmethods"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Public methods" id="pubmethods" level="h3" toc="" class=""> - <h3 is-upgraded="">Public methods</h3> - </devsite-heading> - </th> + <th colSpan="2">Public methods</th> </tr> <tr> <td><span class="keyword">open</span> <span class="identifier">Unit</span></td> @@ -63,11 +55,7 @@ <table class="responsive" id="inhmethods"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Inherited functions" id="inherited-functions" level="h3" toc="" class=""> - <h3 is-upgraded="">Inherited functions</h3> - </devsite-heading> - </th> + <th colSpan="2">Inherited functions</th> </tr> <tr class="api apilevel-"> <td colSpan="2"> diff --git a/core/testdata/format/dac/inheritedMethods/dac/Parent.html b/core/testdata/format/dac/inheritedMethods/dac/Parent.html index 0023368f0..ff9048b96 100644 --- a/core/testdata/format/dac/inheritedMethods/dac/Parent.html +++ b/core/testdata/format/dac/inheritedMethods/dac/Parent.html @@ -38,11 +38,7 @@ <table class="responsive" id="pubctors"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class=""> - <h3 is-upgraded="">Public constructors</h3> - </devsite-heading> - </th> + <th colSpan="2">Public constructors</th> </tr> <tr> <td> @@ -55,11 +51,7 @@ <table class="responsive" id="pubmethods"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Public methods" id="pubmethods" level="h3" toc="" class=""> - <h3 is-upgraded="">Public methods</h3> - </devsite-heading> - </th> + <th colSpan="2">Public methods</th> </tr> <tr> <td><span class="keyword">open</span> <span class="identifier">Unit</span></td> diff --git a/core/testdata/format/dac/javaClassLinks/dac-as-java/Bar.html b/core/testdata/format/dac/javaClassLinks/dac-as-java/Bar.html index 3d247edb8..64d0c4cd8 100644 --- a/core/testdata/format/dac/javaClassLinks/dac-as-java/Bar.html +++ b/core/testdata/format/dac/javaClassLinks/dac-as-java/Bar.html @@ -7,7 +7,7 @@ <body> <div id="api-info-block"></div> <h1>Bar</h1> - <pre><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">Bar</span> <span class="keyword">implements</span> <span class="identifier">java.lang.Object</span></pre> + <pre><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">Bar</span> <span class="keyword">implements</span> <span class="identifier">Object</span></pre> <table class="jd-inheritance-table"> <tr> <td class="jd-inheritance-class-cell" colSpan="1"><a href="#">Bar</a></td> @@ -17,11 +17,7 @@ <table class="responsive" id="pubctors"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class=""> - <h3 is-upgraded="">Public constructors</h3> - </devsite-heading> - </th> + <th colSpan="2">Public constructors</th> </tr> <tr> <td> @@ -34,11 +30,7 @@ <table class="responsive" id="pubmethods"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Public methods" id="pubmethods" level="h3" toc="" class=""> - <h3 is-upgraded="">Public methods</h3> - </devsite-heading> - </th> + <th colSpan="2">Public methods</th> </tr> <tr> <td><a href="Foo.html#"><span class="identifier">Foo</span></a></td> @@ -48,9 +40,9 @@ </td> </tr> <tr> - <td><a href="http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html"><span class="identifier">java.util.ArrayList</span></a><span class="symbol"><</span><span class="identifier">java.lang.String</span><span class="symbol">></span></td> + <td><a href="http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html"><span class="identifier">ArrayList</span></a><span class="symbol"><</span><span class="identifier">String</span><span class="symbol">></span></td> <td> - <div><code><a href="#getMyList(java.util.HashSet)">getMyList</a>(<a href="http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html"><span class="identifier">java.util.HashSet</span></a> <span class="identifier">input</span>)</code></div> + <div><code><a href="#getMyList(HashSet)">getMyList</a>(<a href="http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html"><span class="identifier">HashSet</span></a> <span class="identifier">input</span>)</code></div> <p></p> </td> </tr> @@ -108,10 +100,10 @@ </tbody> </table> </div> -<a name="getMyList(java.util.HashSet)"></a> +<a name="getMyList(HashSet)"></a> <div class="api apilevel-" data-version-added=""> <h3 class="api-name">getMyList</h3> - <pre class="api-signature no-pretty-print"><span class="keyword">public</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html"><span class="identifier">java.util.ArrayList</span></a><span class="symbol"><</span><span class="identifier">java.lang.String</span><span class="symbol">></span> <span class="identifier">getMyList</span><span class="symbol">(</span><a href="http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html"><span class="identifier">java.util.HashSet</span></a> <span class="identifier">input</span><span class="symbol">)</span></pre> + <pre class="api-signature no-pretty-print"><span class="keyword">public</span> <a href="http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html"><span class="identifier">ArrayList</span></a><span class="symbol"><</span><span class="identifier">String</span><span class="symbol">></span> <span class="identifier">getMyList</span><span class="symbol">(</span><a href="http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html"><span class="identifier">HashSet</span></a> <span class="identifier">input</span><span class="symbol">)</span></pre> <table class="responsive"> <tbody> <tr> @@ -119,7 +111,7 @@ </tr> <tr> <td><code>input</code></td> - <td><a href="http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html"><span class="identifier">java.util.HashSet</span></a><span class="symbol">:</span> The best set you can afford.</td> + <td><a href="http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html"><span class="identifier">HashSet</span></a><span class="symbol">:</span> The best set you can afford.</td> </tr> </tbody> </table> @@ -129,7 +121,7 @@ <th colspan="2">Return</th> </tr> <tr> - <td><code><a href="http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html"><span class="identifier">java.util.ArrayList</span></a><span class="symbol"><</span><span class="identifier">java.lang.String</span><span class="symbol">></span></code></td> + <td><code><a href="http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html"><span class="identifier">ArrayList</span></a><span class="symbol"><</span><span class="identifier">String</span><span class="symbol">></span></code></td> <td></td> </tr> </tbody> diff --git a/core/testdata/format/dac/javaClassLinks/dac-as-java/Foo.html b/core/testdata/format/dac/javaClassLinks/dac-as-java/Foo.html index 5717ecf6b..bddb7ff8a 100644 --- a/core/testdata/format/dac/javaClassLinks/dac-as-java/Foo.html +++ b/core/testdata/format/dac/javaClassLinks/dac-as-java/Foo.html @@ -7,7 +7,7 @@ <body> <div id="api-info-block"></div> <h1>Foo</h1> - <pre><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">Foo</span> <span class="keyword">implements</span> <span class="identifier">java.lang.Object</span></pre> + <pre><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">Foo</span> <span class="keyword">implements</span> <span class="identifier">Object</span></pre> <table class="jd-inheritance-table"> <tr> <td class="jd-inheritance-class-cell" colSpan="1"><a href="#">Foo</a></td> @@ -17,11 +17,7 @@ <table class="responsive" id="pubctors"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class=""> - <h3 is-upgraded="">Public constructors</h3> - </devsite-heading> - </th> + <th colSpan="2">Public constructors</th> </tr> <tr> <td> diff --git a/core/testdata/format/dac/javaClassLinks/dac/Bar.html b/core/testdata/format/dac/javaClassLinks/dac/Bar.html index 0c0c36714..87f2c3adf 100644 --- a/core/testdata/format/dac/javaClassLinks/dac/Bar.html +++ b/core/testdata/format/dac/javaClassLinks/dac/Bar.html @@ -17,11 +17,7 @@ <table class="responsive" id="pubctors"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class=""> - <h3 is-upgraded="">Public constructors</h3> - </devsite-heading> - </th> + <th colSpan="2">Public constructors</th> </tr> <tr> <td> @@ -34,11 +30,7 @@ <table class="responsive" id="pubmethods"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Public methods" id="pubmethods" level="h3" toc="" class=""> - <h3 is-upgraded="">Public methods</h3> - </devsite-heading> - </th> + <th colSpan="2">Public methods</th> </tr> <tr> <td><span class="keyword">open</span> <a href="Foo.html#"><span class="identifier">Foo</span></a><span class="symbol">!</span></td> diff --git a/core/testdata/format/dac/javaClassLinks/dac/Foo.html b/core/testdata/format/dac/javaClassLinks/dac/Foo.html index dc7637b6a..51ba0204c 100644 --- a/core/testdata/format/dac/javaClassLinks/dac/Foo.html +++ b/core/testdata/format/dac/javaClassLinks/dac/Foo.html @@ -17,11 +17,7 @@ <table class="responsive" id="pubctors"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class=""> - <h3 is-upgraded="">Public constructors</h3> - </devsite-heading> - </th> + <th colSpan="2">Public constructors</th> </tr> <tr> <td> diff --git a/core/testdata/format/dac/javaConstructor/dac-as-java/Foo.html b/core/testdata/format/dac/javaConstructor/dac-as-java/Foo.html index 5717ecf6b..bddb7ff8a 100644 --- a/core/testdata/format/dac/javaConstructor/dac-as-java/Foo.html +++ b/core/testdata/format/dac/javaConstructor/dac-as-java/Foo.html @@ -7,7 +7,7 @@ <body> <div id="api-info-block"></div> <h1>Foo</h1> - <pre><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">Foo</span> <span class="keyword">implements</span> <span class="identifier">java.lang.Object</span></pre> + <pre><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">Foo</span> <span class="keyword">implements</span> <span class="identifier">Object</span></pre> <table class="jd-inheritance-table"> <tr> <td class="jd-inheritance-class-cell" colSpan="1"><a href="#">Foo</a></td> @@ -17,11 +17,7 @@ <table class="responsive" id="pubctors"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class=""> - <h3 is-upgraded="">Public constructors</h3> - </devsite-heading> - </th> + <th colSpan="2">Public constructors</th> </tr> <tr> <td> diff --git a/core/testdata/format/dac/javaConstructor/dac/Foo.html b/core/testdata/format/dac/javaConstructor/dac/Foo.html index dc7637b6a..51ba0204c 100644 --- a/core/testdata/format/dac/javaConstructor/dac/Foo.html +++ b/core/testdata/format/dac/javaConstructor/dac/Foo.html @@ -17,11 +17,7 @@ <table class="responsive" id="pubctors"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class=""> - <h3 is-upgraded="">Public constructors</h3> - </devsite-heading> - </th> + <th colSpan="2">Public constructors</th> </tr> <tr> <td> diff --git a/core/testdata/format/dac/javaDefaultConstructor/dac-as-java/Foo.html b/core/testdata/format/dac/javaDefaultConstructor/dac-as-java/Foo.html index 5717ecf6b..bddb7ff8a 100644 --- a/core/testdata/format/dac/javaDefaultConstructor/dac-as-java/Foo.html +++ b/core/testdata/format/dac/javaDefaultConstructor/dac-as-java/Foo.html @@ -7,7 +7,7 @@ <body> <div id="api-info-block"></div> <h1>Foo</h1> - <pre><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">Foo</span> <span class="keyword">implements</span> <span class="identifier">java.lang.Object</span></pre> + <pre><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">Foo</span> <span class="keyword">implements</span> <span class="identifier">Object</span></pre> <table class="jd-inheritance-table"> <tr> <td class="jd-inheritance-class-cell" colSpan="1"><a href="#">Foo</a></td> @@ -17,11 +17,7 @@ <table class="responsive" id="pubctors"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class=""> - <h3 is-upgraded="">Public constructors</h3> - </devsite-heading> - </th> + <th colSpan="2">Public constructors</th> </tr> <tr> <td> diff --git a/core/testdata/format/dac/javaDefaultConstructor/dac/Foo.html b/core/testdata/format/dac/javaDefaultConstructor/dac/Foo.html index dc7637b6a..51ba0204c 100644 --- a/core/testdata/format/dac/javaDefaultConstructor/dac/Foo.html +++ b/core/testdata/format/dac/javaDefaultConstructor/dac/Foo.html @@ -17,11 +17,7 @@ <table class="responsive" id="pubctors"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class=""> - <h3 is-upgraded="">Public constructors</h3> - </devsite-heading> - </th> + <th colSpan="2">Public constructors</th> </tr> <tr> <td> diff --git a/core/testdata/format/dac/javaMethodVisibilities/dac-as-java/Foo.html b/core/testdata/format/dac/javaMethodVisibilities/dac-as-java/Foo.html index 7f494c467..978b1071d 100644 --- a/core/testdata/format/dac/javaMethodVisibilities/dac-as-java/Foo.html +++ b/core/testdata/format/dac/javaMethodVisibilities/dac-as-java/Foo.html @@ -7,7 +7,7 @@ <body> <div id="api-info-block"></div> <h1>Foo</h1> - <pre><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">Foo</span> <span class="keyword">implements</span> <span class="identifier">java.lang.Object</span></pre> + <pre><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">Foo</span> <span class="keyword">implements</span> <span class="identifier">Object</span></pre> <table class="jd-inheritance-table"> <tr> <td class="jd-inheritance-class-cell" colSpan="1"><a href="#">Foo</a></td> @@ -17,11 +17,7 @@ <table class="responsive" id="pubctors"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class=""> - <h3 is-upgraded="">Public constructors</h3> - </devsite-heading> - </th> + <th colSpan="2">Public constructors</th> </tr> <tr> <td> @@ -34,11 +30,7 @@ <table class="responsive" id="pubmethods"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Public methods" id="pubmethods" level="h3" toc="" class=""> - <h3 is-upgraded="">Public methods</h3> - </devsite-heading> - </th> + <th colSpan="2">Public methods</th> </tr> <tr> <td><span class="identifier">void</span></td> @@ -52,11 +44,7 @@ <table class="responsive" id="promethods"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Protected methods" id="promethods" level="h3" toc="" class=""> - <h3 is-upgraded="">Protected methods</h3> - </devsite-heading> - </th> + <th colSpan="2">Protected methods</th> </tr> <tr> <td><span class="identifier">void</span></td> @@ -70,11 +58,7 @@ <table class="responsive" id="primethods"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Private methods" id="primethods" level="h3" toc="" class=""> - <h3 is-upgraded="">Private methods</h3> - </devsite-heading> - </th> + <th colSpan="2">Private methods</th> </tr> <tr> <td><span class="identifier">void</span></td> diff --git a/core/testdata/format/dac/javaMethodVisibilities/dac/Foo.html b/core/testdata/format/dac/javaMethodVisibilities/dac/Foo.html index 3f1e45107..0bcdcae90 100644 --- a/core/testdata/format/dac/javaMethodVisibilities/dac/Foo.html +++ b/core/testdata/format/dac/javaMethodVisibilities/dac/Foo.html @@ -17,11 +17,7 @@ <table class="responsive" id="pubctors"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class=""> - <h3 is-upgraded="">Public constructors</h3> - </devsite-heading> - </th> + <th colSpan="2">Public constructors</th> </tr> <tr> <td> @@ -34,11 +30,7 @@ <table class="responsive" id="pubmethods"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Public methods" id="pubmethods" level="h3" toc="" class=""> - <h3 is-upgraded="">Public methods</h3> - </devsite-heading> - </th> + <th colSpan="2">Public methods</th> </tr> <tr> <td><span class="keyword">open</span> <span class="identifier">Unit</span></td> @@ -52,11 +44,7 @@ <table class="responsive" id="promethods"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Protected methods" id="promethods" level="h3" toc="" class=""> - <h3 is-upgraded="">Protected methods</h3> - </devsite-heading> - </th> + <th colSpan="2">Protected methods</th> </tr> <tr> <td><span class="keyword">open</span> <span class="identifier">Unit</span></td> @@ -70,11 +58,7 @@ <table class="responsive" id="primethods"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Private methods" id="primethods" level="h3" toc="" class=""> - <h3 is-upgraded="">Private methods</h3> - </devsite-heading> - </th> + <th colSpan="2">Private methods</th> </tr> <tr> <td><span class="keyword">open</span> <span class="identifier">Unit</span></td> diff --git a/core/testdata/format/dac/javaSeeTag/Bar.kt b/core/testdata/format/dac/javaSeeTag/Bar.kt index 9df671194..21170d363 100644 --- a/core/testdata/format/dac/javaSeeTag/Bar.kt +++ b/core/testdata/format/dac/javaSeeTag/Bar.kt @@ -1,4 +1,5 @@ /** * @see Foo + * @see java.lang.String */ class Bar
\ No newline at end of file diff --git a/core/testdata/format/dac/javaSeeTag/Foo.java b/core/testdata/format/dac/javaSeeTag/Foo.java index 94a24606d..b784ae225 100644 --- a/core/testdata/format/dac/javaSeeTag/Foo.java +++ b/core/testdata/format/dac/javaSeeTag/Foo.java @@ -1,5 +1,6 @@ /** * @see #bar + * @see java.lang.String */ public class Foo { public void bar() {} diff --git a/core/testdata/format/dac/javaSeeTag/dac-as-java/Bar.html b/core/testdata/format/dac/javaSeeTag/dac-as-java/Bar.html index 3dbc813fa..7eb3cdf85 100644 --- a/core/testdata/format/dac/javaSeeTag/dac-as-java/Bar.html +++ b/core/testdata/format/dac/javaSeeTag/dac-as-java/Bar.html @@ -7,7 +7,7 @@ <body> <div id="api-info-block"></div> <h1>Bar</h1> - <pre><span class="keyword">public</span> <span class="keyword">final</span> <span class="keyword">class</span> <span class="identifier">Bar</span> <span class="keyword">implements</span> <span class="identifier">java.lang.Object</span></pre> + <pre><span class="keyword">public</span> <span class="keyword">final</span> <span class="keyword">class</span> <span class="identifier">Bar</span> <span class="keyword">implements</span> <span class="identifier">Object</span></pre> <table class="jd-inheritance-table"> <tr> <td class="jd-inheritance-class-cell" colSpan="1"><a href="#">Bar</a></td> @@ -17,11 +17,7 @@ <table class="responsive" id="pubctors"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class=""> - <h3 is-upgraded="">Public constructors</h3> - </devsite-heading> - </th> + <th colSpan="2">Public constructors</th> </tr> <tr> <td> @@ -39,9 +35,8 @@ <div> <p><b>See Also</b></p> <ul class="nolist"> - <li><code> - <p><a href="Foo.html#">Foo</a></p> - </code></li> + <li><code><a href="Foo.html#">Foo</a></code></li> + <li><code><a href="http://docs.oracle.com/javase/6/docs/api/java/lang/String.html">java.lang.String</a></code></li> </ul> </div> </div> diff --git a/core/testdata/format/dac/javaSeeTag/dac-as-java/Foo.html b/core/testdata/format/dac/javaSeeTag/dac-as-java/Foo.html index 6a6b5045c..4529fd04d 100644 --- a/core/testdata/format/dac/javaSeeTag/dac-as-java/Foo.html +++ b/core/testdata/format/dac/javaSeeTag/dac-as-java/Foo.html @@ -7,7 +7,7 @@ <body> <div id="api-info-block"></div> <h1>Foo</h1> - <pre><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">Foo</span> <span class="keyword">implements</span> <span class="identifier">java.lang.Object</span></pre> + <pre><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">Foo</span> <span class="keyword">implements</span> <span class="identifier">Object</span></pre> <table class="jd-inheritance-table"> <tr> <td class="jd-inheritance-class-cell" colSpan="1"><a href="#">Foo</a></td> @@ -17,11 +17,7 @@ <table class="responsive" id="pubctors"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class=""> - <h3 is-upgraded="">Public constructors</h3> - </devsite-heading> - </th> + <th colSpan="2">Public constructors</th> </tr> <tr> <td> @@ -34,11 +30,7 @@ <table class="responsive" id="pubmethods"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Public methods" id="pubmethods" level="h3" toc="" class=""> - <h3 is-upgraded="">Public methods</h3> - </devsite-heading> - </th> + <th colSpan="2">Public methods</th> </tr> <tr> <td><span class="identifier">void</span></td> diff --git a/core/testdata/format/dac/javaSeeTag/dac/Bar.html b/core/testdata/format/dac/javaSeeTag/dac/Bar.html index b7d8304d3..10a5f59ed 100644 --- a/core/testdata/format/dac/javaSeeTag/dac/Bar.html +++ b/core/testdata/format/dac/javaSeeTag/dac/Bar.html @@ -17,11 +17,7 @@ <table class="responsive" id="pubctors"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class=""> - <h3 is-upgraded="">Public constructors</h3> - </devsite-heading> - </th> + <th colSpan="2">Public constructors</th> </tr> <tr> <td> @@ -39,9 +35,8 @@ <div> <p><b>See Also</b></p> <ul class="nolist"> - <li><code> - <p><a href="Foo.html#">Foo</a></p> - </code></li> + <li><code><a href="Foo.html#">Foo</a></code></li> + <li><code><a href="http://docs.oracle.com/javase/6/docs/api/java/lang/String.html">java.lang.String</a></code></li> </ul> </div> </div> diff --git a/core/testdata/format/dac/javaSeeTag/dac/Foo.html b/core/testdata/format/dac/javaSeeTag/dac/Foo.html index 473fd2cc2..7ca410c06 100644 --- a/core/testdata/format/dac/javaSeeTag/dac/Foo.html +++ b/core/testdata/format/dac/javaSeeTag/dac/Foo.html @@ -17,11 +17,7 @@ <table class="responsive" id="pubctors"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class=""> - <h3 is-upgraded="">Public constructors</h3> - </devsite-heading> - </th> + <th colSpan="2">Public constructors</th> </tr> <tr> <td> @@ -34,11 +30,7 @@ <table class="responsive" id="pubmethods"> <tbody> <tr> - <th colSpan="2"> - <devsite-heading ds-is="heading" text="Public methods" id="pubmethods" level="h3" toc="" class=""> - <h3 is-upgraded="">Public methods</h3> - </devsite-heading> - </th> + <th colSpan="2">Public methods</th> </tr> <tr> <td><span class="keyword">open</span> <span class="identifier">Unit</span></td> @@ -58,6 +50,7 @@ <p><b>See Also</b></p> <ul class="nolist"> <li><code><a href="#bar()">#bar</a></code></li> + <li><code><a href="http://docs.oracle.com/javase/6/docs/api/java/lang/String.html">java.lang.String</a></code></li> </ul> </div> </div> diff --git a/core/testdata/functions/functionWithAnnotatedLambdaParam.kt b/core/testdata/functions/functionWithAnnotatedLambdaParam.kt new file mode 100644 index 000000000..4136e03b3 --- /dev/null +++ b/core/testdata/functions/functionWithAnnotatedLambdaParam.kt @@ -0,0 +1,7 @@ +@Target(AnnotationTarget.TYPE) +@Retention(AnnotationRetention.SOURCE) +@MustBeDocumented +public annotation class Fancy + +fun function(notInlined: @Fancy () -> Unit) { +} diff --git a/gradle.properties b/gradle.properties index ff6aa594c..263eb1530 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,10 +1,12 @@ -dokka_version=0.9.17-g008 +dokka_version=0.9.17-g013 dokka_publication_channel=dokka #Kotlin compiler and plugin -bundled_kotlin_compiler_version=1.3.20-dev-564 -kotlin_version=1.2.21 -kotlin_for_gradle_runtime_version=1.1.60 +bundled_kotlin_compiler_version=1.3.61 +kotlin_version=1.3.61 +kotlin_plugin_version=1.3.61-release-180 +idea_version=192.5728.98 +kotlin_for_gradle_runtime_version=1.3.61 ant_version=1.9.6 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 610ad4c51..bd24854fe 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.5-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-all.zip diff --git a/runners/cli/src/main/kotlin/cli/main.kt b/runners/cli/src/main/kotlin/cli/main.kt index e7fb76f01..37be6e289 100644 --- a/runners/cli/src/main/kotlin/cli/main.kt +++ b/runners/cli/src/main/kotlin/cli/main.kt @@ -72,12 +72,22 @@ class DokkaArguments { @set:Argument(value = "collectInheritedExtensionsFromLibraries", description = "Search for applicable extensions in libraries") var collectInheritedExtensionsFromLibraries: Boolean = false - @set:Argument(value = "generateClassIndexPage", description = "Generate classes.html index page.") + @set:Argument(value = "generateClassIndexPage", description = "Generate classes.html index page. [Deprecated]: use noGenerateClassIndexPage instead.") + @Deprecated("There is no way to set this to false.", replaceWith = ReplaceWith( + expression ="noGenerateClassIndexPage")) var generateClassIndexPage: Boolean = true - @set:Argument(value = "generatePackageIndexPage", description = "Generate packages.html index page.") + @set:Argument(value = "generatePackageIndexPage", description = "Generate packages.html index page. [Deprecated]: use noGeneratePackageIndexPage instead.") + @Deprecated("There is no way to set this to false.", replaceWith = ReplaceWith( + expression ="noGeneratePackageIndexPage")) var generatePackageIndexPage: Boolean = true + @set:Argument(value = "noGenerateClassIndexPage", description = "Disable classes.html index page.") + var noGenerateClassIndexPage: Boolean = false + + @set:Argument(value = "noGeneratePackageIndexPage", description = "Disable packages.html index page.") + var noGeneratePackageIndexPage: Boolean = false + @set:Argument(value = "outlineRoot", description = "Relative root directory the outline files. I.e. androidx/core/") var outlineRoot: String = "" @@ -142,8 +152,8 @@ object MainKt { languageVersion = arguments.languageVersion, apiVersion = arguments.apiVersion, collectInheritedExtensionsFromLibraries = arguments.collectInheritedExtensionsFromLibraries, - generateClassIndexPage = arguments.generateClassIndexPage, - generatePackageIndexPage = arguments.generatePackageIndexPage, + generateClassIndexPage = !arguments.noGenerateClassIndexPage, + generatePackageIndexPage = !arguments.noGeneratePackageIndexPage, outlineRoot = arguments.outlineRoot, dacRoot = arguments.dacRoot, noJdkLink = arguments.noJdkLink diff --git a/runners/gradle-plugin/build.gradle b/runners/gradle-plugin/build.gradle index a0670803c..4742dda5d 100644 --- a/runners/gradle-plugin/build.gradle +++ b/runners/gradle-plugin/build.gradle @@ -63,6 +63,27 @@ publishing { } project.shadow.component(publication) + publication.pom { pom -> + // Add dokka-fatjar as a runtime dependency. + // This is a workaround until the Shadow jar can put project dependencies into the .pom: https://github.com/johnrengelman/shadow/commit/da82b37522b349aff414f571d2037682acd84f27 + pom.withXml { xml -> + def node = xml.asNode() + def deps = null + node.children().each { child -> + if (child.name().toString() == "dependencies") { + deps = child + } + } + if (deps == null) { + deps = node.appendNode("dependencies") + } + def dep = deps.appendNode("dependency") + dep.appendNode("groupId", "org.jetbrains.dokka") + dep.appendNode("artifactId", "dokka-fatjar") + dep.appendNode("version", dokka_version) + dep.appendNode("scope", "runtime") + } + } } } } |