Skip to content

Commit

Permalink
Bump Kotlin to 1.7.0-RC (#2508)
Browse files Browse the repository at this point in the history
* `UnresolvedType` is replaced with `ErrorType` in JetBrains/kotlin@b5933c7

*  Support `sig` files in JetBrains/kotlin@22b3688

* `org.jetbrains.kotlin.idea.kdoc.resolveKDocSampleLink` is removed in JetBrains/intellij-community@e4af6f9

* `org.jetbrains.kotlin.idea.refactoring.fqName.getKotlinFqName` is deprecated

* `org.codehaus.plexus.archiver.AbstractArchiver.addDirectory` is deprecated https://codehaus-plexus.github.io/plexus-archiver/apidocs/org/codehaus/plexus/archiver/Archiver.html#addDirectory-java.io.File-java.lang.String:A-java.lang.String:A-

* Make `clean` independent from `setupMaven`

* Set up JDK classpath roots explicitly

because of JetBrains/kotlin@f89765e

* Add JPS model and faxml dependencies

* Fix test

* Exclude compiler from buildscript in integration test

* Exclude `com.intellij` package from compiler

* Update kotlin version in integration tests
  • Loading branch information
vmishenev committed May 31, 2022
1 parent 623cf22 commit 73f78dc
Show file tree
Hide file tree
Showing 23 changed files with 65 additions and 33 deletions.
6 changes: 3 additions & 3 deletions gradle.properties
Expand Up @@ -2,12 +2,12 @@
dokka_version=1.7.0-SNAPSHOT
dokka_integration_test_parallelism=2
# Versions
kotlin_version=1.6.21
kotlin_version=1.7.0-RC
coroutines_version=1.6.0
kotlinx_html_version=0.7.3
kotlin_plugin_version=211-1.6.21-release-334-IJ7442.40
kotlin_plugin_version=213-1.7.0-RC-release-217-IJ6777.52
jsoup_version=1.14.3
idea_version=211.7442.40
idea_version=213.6777.52
language_version=1.4
jackson_version=2.12.4
freemarker_version=2.3.31
Expand Down
4 changes: 3 additions & 1 deletion integration-tests/gradle/projects/it-basic/build.gradle.kts
Expand Up @@ -12,7 +12,9 @@ plugins {

buildscript {
dependencies {
classpath("org.jetbrains.dokka:dokka-base:${System.getenv("DOKKA_VERSION")}")
classpath("org.jetbrains.dokka:dokka-base:${System.getenv("DOKKA_VERSION")}") {
exclude(group = "org.jetbrains.dokka", module = "dokka-analysis") // Gradle has embeddable Kotlin compiler
}
}
}

Expand Down
Expand Up @@ -18,7 +18,7 @@ class JsIRGradleIntegrationTest(override val versions: BuildVersions) : Abstract
// some core react classes were moved from `react-router-dom` to `react` artifacts.
// Writing an integration test project that would work for both 1.4.0 and 1.5.0 would involve
// ugly solutions, so these versions are ignored. Not a big loss given they are deprecated as of this moment.
"1.4.0", "1.4.32"
"1.4.0", "1.4.32", "1.7.0-RC"
)

@BeforeTest
Expand Down
Expand Up @@ -5,7 +5,7 @@ internal object TestedVersions {
val BASE =
BuildVersions.permutations(
gradleVersions = listOf("7.4.2", "6.9"),
kotlinVersions = listOf("1.6.21", "1.5.31", "1.4.32"),
kotlinVersions = listOf("1.7.0-RC", "1.6.21", "1.5.31", "1.4.32"),
) + BuildVersions.permutations(
gradleVersions = listOf(*ifExhaustive("7.0", "6.1.1")),
kotlinVersions = listOf(*ifExhaustive("1.6.0", "1.5.0", "1.4.0"))
Expand Down
2 changes: 1 addition & 1 deletion kotlin-analysis/compiler-dependency/build.gradle.kts
Expand Up @@ -16,7 +16,7 @@ tasks {
val dokka_version: String by project
archiveFileName.set("dokka-kotlin-analysis-compiler-$dokka_version.jar")
archiveClassifier.set("")
exclude("**/intellij**")
exclude("com/intellij/")
}
}

Expand Down
12 changes: 11 additions & 1 deletion kotlin-analysis/intellij-dependency/build.gradle.kts
Expand Up @@ -19,7 +19,14 @@ repositories {
val intellijCore: Configuration by configurations.creating

fun intellijCoreAnalysis() = zipTree(intellijCore.singleFile).matching {
include("intellij-core-analysis-deprecated.jar")
include("intellij-core.jar")
}

val jpsStandalone: Configuration by configurations.creating

fun jpsModel() = zipTree(jpsStandalone.singleFile).matching {
include("jps-model.jar")
include("aalto-xml-*.jar")
}

dependencies {
Expand All @@ -34,6 +41,9 @@ dependencies {
val idea_version: String by project
intellijCore("com.jetbrains.intellij.idea:intellij-core:$idea_version")
implementation(intellijCoreAnalysis())

jpsStandalone("com.jetbrains.intellij.idea:jps-standalone:$idea_version")
implementation(jpsModel())
}

tasks {
Expand Down
Expand Up @@ -542,6 +542,8 @@ class AnalysisEnvironment(val messageCollector: MessageCollector, val analysisPl
}
}

// Set up JDK classpath roots explicitly because of https://github.com/JetBrains/kotlin/commit/f89765eb33dd95c8de33a919cca83651b326b246
fun configureJdkClasspathRoots() = configuration.configureJdkClasspathRoots()
/**
* Adds path to classpath.
* $path: path to add
Expand Down
Expand Up @@ -15,6 +15,10 @@ class CoreKotlinCacheService(private val resolutionFacade: DokkaResolutionFacade
return resolutionFacade
}

override fun getResolutionFacade(element: KtElement): ResolutionFacade {
return resolutionFacade
}

override fun getResolutionFacadeByFile(
file: PsiFile,
platform: org.jetbrains.kotlin.platform.TargetPlatform
Expand Down
Expand Up @@ -17,7 +17,7 @@ internal fun createEnvironmentAndFacade(
): EnvironmentAndFacade =
AnalysisEnvironment(DokkaMessageCollector(logger), sourceSet.analysisPlatform).run {
if (analysisPlatform == Platform.jvm) {
addClasspath(PathUtil.getJdkClassesRootsFromCurrentJre())
configureJdkClasspathRoots()
}

val parentSourceSets = sourceSets.filter { it.sourceSetID in sourceSet.dependentSourceSets }
Expand Down
Expand Up @@ -209,6 +209,7 @@ class JvmDependenciesIndexImpl(_roots: List<JavaRoot>) : JvmDependenciesIndex {

val fileExtension = when (rootType) {
JavaRoot.RootType.BINARY -> JavaClassFileType.INSTANCE.defaultExtension
JavaRoot.RootType.BINARY_SIG -> "sig"
JavaRoot.RootType.SOURCE -> JavaFileType.INSTANCE.defaultExtension
}

Expand Down
Expand Up @@ -90,7 +90,7 @@ class KotlinCliJavaFileManagerImpl(private val myPsiManager: PsiManager) : CoreJ
val (classId, classFileContentFromRequest, outerClassFromRequest) = request
val virtualFile = findVirtualFileForTopLevelClass(classId, searchScope) ?: return null

if (!usePsiClassFilesReading && virtualFile.extension == "class") {
if (!usePsiClassFilesReading && (virtualFile.extension == "class" || virtualFile.extension == "sig")) {
synchronized(binaryCache){
// We return all class files' names in the directory in knownClassNamesInPackage method, so one may request an inner class
return binaryCache.getOrPut(classId) {
Expand Down Expand Up @@ -215,6 +215,7 @@ class KotlinCliJavaFileManagerImpl(private val myPsiManager: PsiManager) : CoreJ

val vFile = when (rootType) {
JavaRoot.RootType.BINARY -> packageDir.findChild("$topLevelClassName.class")
JavaRoot.RootType.BINARY_SIG -> packageDir.findChild("$topLevelClassName.sig")
JavaRoot.RootType.SOURCE -> packageDir.findChild("$topLevelClassName.java")
} ?: return null

Expand All @@ -235,7 +236,7 @@ class KotlinCliJavaFileManagerImpl(private val myPsiManager: PsiManager) : CoreJ
val result = THashSet<String>()
index.traverseDirectoriesInPackage(packageFqName, continueSearch = { dir, _ ->
for (child in dir.children) {
if (child.extension == "class" || child.extension == "java") {
if (child.extension == "class" || child.extension == "java" || child.extension == "sig") {
result.add(child.nameWithoutExtension)
}
}
Expand Down
Expand Up @@ -9,7 +9,9 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
import org.jetbrains.kotlin.resolve.scopes.receivers.ExtensionReceiver
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.TypeProjection
import org.jetbrains.kotlin.types.UnresolvedType
import org.jetbrains.kotlin.types.error.ErrorType
import org.jetbrains.kotlin.types.error.ErrorTypeConstructor
import org.jetbrains.kotlin.types.error.ErrorTypeKind

fun TypeReference.Companion.from(d: ReceiverParameterDescriptor): TypeReference? =
when (d.value) {
Expand All @@ -35,10 +37,14 @@ private fun TypeReference.Companion.fromPossiblyRecursive(t: KotlinType, paramTr
?: from(t, paramTrace)

private fun TypeReference.Companion.from(t: KotlinType, paramTrace: List<KotlinType>): TypeReference {
if (t is UnresolvedType) {
return TypeConstructor(
t.presentableName, t.arguments.map { fromProjection(it, paramTrace) }
)
if (t is ErrorType) {
val errorConstructor = t.constructor as? ErrorTypeConstructor
val presentableName =
if (errorConstructor?.kind == ErrorTypeKind.UNRESOLVED_TYPE && errorConstructor.parameters.isNotEmpty())
errorConstructor.getParam(0)
else
t.constructor.toString()
return TypeConstructor(presentableName, t.arguments.map { fromProjection(it, paramTrace) })
}
return when (val d = t.constructor.declarationDescriptor) {
is TypeParameterDescriptor -> TypeParam(
Expand Down
Expand Up @@ -2,7 +2,6 @@ package org.jetbrains.dokka.base.transformers.pages.samples

import com.intellij.psi.PsiElement
import org.jetbrains.dokka.plugability.DokkaContext
import org.jetbrains.kotlin.idea.kdoc.resolveKDocSampleLink
import org.jetbrains.kotlin.psi.KtBlockExpression
import org.jetbrains.kotlin.psi.KtDeclarationWithBody
import org.jetbrains.kotlin.psi.KtFile
Expand Down
Expand Up @@ -18,7 +18,7 @@ import org.jetbrains.dokka.plugability.DokkaContext
import org.jetbrains.dokka.plugability.plugin
import org.jetbrains.dokka.plugability.querySingle
import org.jetbrains.dokka.transformers.pages.PageTransformer
import org.jetbrains.kotlin.idea.kdoc.resolveKDocSampleLink
import org.jetbrains.kotlin.idea.kdoc.resolveKDocLink
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
Expand Down Expand Up @@ -55,7 +55,7 @@ abstract class SamplesTransformer(val context: DokkaContext) : PageTransformer {
.querySingle { kotlinAnalysis }[sourceSet] // from sourceSet.sourceRoots
else AnalysisEnvironment(DokkaMessageCollector(context.logger), sourceSet.analysisPlatform).run {
if (analysisPlatform == Platform.jvm) {
addClasspath(PathUtil.getJdkClassesRootsFromCurrentJre())
configureJdkClasspathRoots()
}
sourceSet.classpath.forEach(::addClasspath)

Expand Down Expand Up @@ -124,10 +124,11 @@ abstract class SamplesTransformer(val context: DokkaContext) : PageTransformer {
val packageName = functionName.takeWhile { it != '.' }
val descriptor = resolutionFacade.resolveSession.getPackageFragment(FqName(packageName))
?: return null.also { context.logger.warn("Cannot find descriptor for package $packageName") }
val symbol = resolveKDocSampleLink(
val symbol = resolveKDocLink(
BindingContext.EMPTY,
resolutionFacade,
descriptor,
null,
functionName.split(".")
).firstOrNull() ?: return null.also { context.logger.warn("Unresolved function $functionName in @sample") }
return DescriptorToSourceUtils.descriptorToDeclaration(symbol)
Expand Down
Expand Up @@ -587,7 +587,7 @@ private class DokkaDescriptorVisitor(
parameter(index, desc, DRIWithPlatformInfo(dri, actual))
},
sources = actual,
expectPresentInSet = sourceSet.takeIf { isExpect },
expectPresentInSet = if(isExpect) sourceSet else null,
visibility = descriptor.visibility.toDokkaVisibility().toSourceSetDependent(),
documentation = descriptor.resolveDescriptorData().let { sourceSetDependent ->
if (descriptor.isPrimary) {
Expand Down
Expand Up @@ -39,7 +39,7 @@ import org.jetbrains.dokka.utilities.parallelMapNotNull
import org.jetbrains.kotlin.asJava.elements.KtLightAbstractAnnotation
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
import org.jetbrains.kotlin.cli.jvm.config.JavaSourceRoot
import org.jetbrains.kotlin.idea.refactoring.fqName.getKotlinFqName
import org.jetbrains.kotlin.idea.base.utils.fqname.getKotlinFqName
import org.jetbrains.kotlin.load.java.JvmAbi
import org.jetbrains.kotlin.load.java.propertyNameByGetMethodName
import org.jetbrains.kotlin.load.java.propertyNamesBySetMethodName
Expand Down
Expand Up @@ -3,7 +3,7 @@ package org.jetbrains.dokka.base.translators.psi
import com.intellij.psi.PsiClass
import com.intellij.psi.PsiMethod
import org.jetbrains.dokka.utilities.DokkaLogger
import org.jetbrains.kotlin.idea.refactoring.fqName.getKotlinFqName
import org.jetbrains.kotlin.idea.base.utils.fqname.getKotlinFqName
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.utils.addToStdlib.safeAs

Expand Down
Expand Up @@ -19,7 +19,7 @@ import org.jetbrains.dokka.utilities.DokkaLogger
import org.jetbrains.dokka.utilities.enumValueOrNull
import org.jetbrains.dokka.utilities.htmlEscape
import org.jetbrains.kotlin.idea.kdoc.resolveKDocLink
import org.jetbrains.kotlin.idea.refactoring.fqName.getKotlinFqName
import org.jetbrains.kotlin.idea.base.utils.fqname.getKotlinFqName
import org.jetbrains.kotlin.idea.util.CommentSaver.Companion.tokenType
import org.jetbrains.kotlin.psi.psiUtil.getNextSiblingIgnoringWhitespace
import org.jetbrains.kotlin.psi.psiUtil.siblings
Expand Down
Expand Up @@ -9,7 +9,7 @@ import org.jetbrains.dokka.links.DRI
import org.jetbrains.dokka.utilities.DokkaLogger
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.idea.kdoc.findKDoc
import org.jetbrains.kotlin.idea.refactoring.fqName.getKotlinFqName
import org.jetbrains.kotlin.idea.base.utils.fqname.getKotlinFqName
import org.jetbrains.kotlin.idea.search.usagesSearch.descriptor
import org.jetbrains.kotlin.kdoc.psi.impl.KDocTag
import org.jetbrains.kotlin.psi.KtDeclaration
Expand Down
Expand Up @@ -126,7 +126,7 @@ internal class JavadocIndexTest : AbstractJavadocTemplateMapTest() {
class Clazz {
fun funName(param: List<String>) {}
fun funName(param: String) {}
fun funName(param: Map<String>) {}
fun funName(param: Map<String, String>>) {}
fun funName(param: Int) {}
}
""".trimIndent()
Expand All @@ -144,10 +144,10 @@ internal class JavadocIndexTest : AbstractJavadocTemplateMapTest() {
assertEquals(1, it.callable!!.params.size)
}

assertEquals("[kotlin.String]", indexElementDRIs[0].getParam(0))
assertEquals("kotlin.Int", indexElementDRIs[1].getParam(0))
assertEquals("kotlin.String", indexElementDRIs[2].getParam(0))
assertEquals("kotlin.collections.List[kotlin.String]", indexElementDRIs[3].getParam(0))
assertEquals("kotlin.Int", indexElementDRIs[0].getParam(0))
assertEquals("kotlin.String", indexElementDRIs[1].getParam(0))
assertEquals("kotlin.collections.List[kotlin.String]", indexElementDRIs[2].getParam(0))
assertEquals("kotlin.collections.Map[kotlin.String,kotlin.String]", indexElementDRIs[3].getParam(0))
}
}

Expand Down
Expand Up @@ -25,6 +25,7 @@ internal fun Project.classpathOf(sourceSet: KotlinSourceSet): FileCollection {
private fun Project.compileClasspathOf(compilation: KotlinCompilation): FileCollection {
if (compilation.target.isAndroidTarget()) {
// This is a workaround for https://youtrack.jetbrains.com/issue/KT-33893
@Suppress("DEPRECATION") // for compatibility
return compilation.compileKotlinTask.cast<KotlinCompile>().classpath
}

Expand All @@ -34,5 +35,6 @@ private fun Project.compileClasspathOf(compilation: KotlinCompilation): FileColl
?: files()

return compilation.compileDependencyFiles + platformDependencyFiles +
@Suppress("DEPRECATION") // for compatibility
(compilation.compileKotlinTask.run { this as? KotlinCompile }?.classpath ?: files())
}
7 changes: 5 additions & 2 deletions runners/maven-plugin/build.gradle.kts
Expand Up @@ -13,9 +13,12 @@ dependencies {
implementation(kotlin("stdlib-jdk8"))
}

val mavenBuildDir = setupMaven.mavenBuildDir
val mavenBinDir = setupMaven.mavenBinDir

tasks.named<Delete>("clean") {
delete(setupMaven.mavenBuildDir)
delete(setupMaven.mavenBinDir)
delete(mavenBuildDir)
delete(mavenBinDir)
}

/**
Expand Down
3 changes: 2 additions & 1 deletion runners/maven-plugin/src/main/kotlin/DokkaMojo.kt
Expand Up @@ -17,6 +17,7 @@ import org.apache.maven.project.MavenProjectHelper
import org.apache.maven.repository.RepositorySystem
import org.codehaus.plexus.archiver.Archiver
import org.codehaus.plexus.archiver.jar.JarArchiver
import org.codehaus.plexus.archiver.util.DefaultFileSet
import org.codehaus.plexus.util.xml.Xpp3Dom
import org.jetbrains.dokka.*
import org.jetbrains.dokka.DokkaConfiguration.ExternalDocumentationLink
Expand Down Expand Up @@ -404,7 +405,7 @@ class DokkaJavadocJarMojo : AbstractDokkaMojo(listOf(javadocDependency)) {
val archiver = MavenArchiver()
archiver.archiver = jarArchiver
archiver.setOutputFile(javadocJar)
archiver.archiver.addDirectory(File(outputDir), arrayOf("**/**"), arrayOf())
archiver.archiver.addFileSet(DefaultFileSet().apply { directory = File(outputDir) })

archive.isAddMavenDescriptor = false
archiver.createArchive(session, mavenProject, archive)
Expand Down

0 comments on commit 73f78dc

Please sign in to comment.