Skip to content

Commit

Permalink
Bug resolving in ultralightmethod (#2400)
Browse files Browse the repository at this point in the history
  • Loading branch information
vmishenev committed Mar 28, 2022
1 parent 414475f commit 57133de
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 5 deletions.
Expand Up @@ -49,6 +49,7 @@ import org.jetbrains.kotlin.idea.klib.KlibLoadingMetadataCache
import org.jetbrains.kotlin.idea.klib.getCompatibilityInfo
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
import org.jetbrains.kotlin.js.resolve.JsPlatformAnalyzerServices
import org.jetbrains.kotlin.library.KLIB_FILE_EXTENSION
import org.jetbrains.kotlin.library.ToolingSingleFileKlibResolveStrategy
import org.jetbrains.kotlin.library.resolveSingleFileKlib
import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl
Expand All @@ -75,7 +76,6 @@ import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
import org.jetbrains.kotlin.resolve.konan.platform.NativePlatformAnalyzerServices
import java.io.File
import org.jetbrains.kotlin.konan.file.File as KFile
import org.jetbrains.kotlin.library.KLIB_FILE_EXTENSION

const val JAR_SEPARATOR = "!/"

Expand Down Expand Up @@ -478,7 +478,7 @@ class AnalysisEnvironment(val messageCollector: MessageCollector, val analysisPl
projectContext.withModule(descriptor),
modulesContent(moduleInfo),
this,
LanguageVersionSettingsImpl.DEFAULT,
configuration.languageVersionSettings,
CliSealedClassInheritorsProvider,
)

Expand All @@ -490,7 +490,13 @@ class AnalysisEnvironment(val messageCollector: MessageCollector, val analysisPl
val languageVersion = LanguageVersion.fromVersionString(languageVersionString) ?: LanguageVersion.LATEST_STABLE
val apiVersion =
apiVersionString?.let { ApiVersion.parse(it) } ?: ApiVersion.createByLanguageVersion(languageVersion)
configuration.languageVersionSettings = LanguageVersionSettingsImpl(languageVersion, apiVersion)
configuration.languageVersionSettings = LanguageVersionSettingsImpl(
languageVersion = languageVersion,
apiVersion = apiVersion, analysisFlags = hashMapOf(
// force to resolve light classes (lazily by default)
AnalysisFlags.eagerResolveOfLightClasses to true
)
)
}

/**
Expand Down
@@ -1,13 +1,17 @@
package translators

import org.jetbrains.dokka.model.doc.Text
import org.jetbrains.dokka.model.firstMemberOfType
import org.jetbrains.dokka.base.DokkaBase
import org.jetbrains.dokka.base.testApi.testRunner.BaseAbstractTest
import org.jetbrains.dokka.links.DRI
import org.jetbrains.dokka.model.Annotations
import org.jetbrains.dokka.model.TypeConstructor
import org.jetbrains.dokka.model.doc.Text
import org.jetbrains.dokka.model.firstMemberOfType
import org.jetbrains.dokka.plugability.DokkaPlugin
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.Test
import utils.assertNotNull

class DefaultPsiToDocumentableTranslatorTest : BaseAbstractTest() {
val configuration = dokkaConfiguration {
Expand Down Expand Up @@ -193,4 +197,65 @@ class DefaultPsiToDocumentableTranslatorTest : BaseAbstractTest() {
}
}
}

class OnlyPsiPlugin : DokkaPlugin() {
private val dokkaBase by lazy { plugin<DokkaBase>() }

@Suppress("unused")
val psiOverrideDescriptorTranslator by extending {
(dokkaBase.psiToDocumentableTranslator
override dokkaBase.descriptorToDocumentableTranslator)
}
}

// for Kotlin classes from DefaultPsiToDocumentableTranslator
@Test
fun `should resolve ultralight class`() {
val configurationWithNoJVM = dokkaConfiguration {
sourceSets {
sourceSet {
sourceRoots = listOf("src/main/java")
}
}
}

testInline(
"""
|/src/main/java/example/Test.kt
|package example
|
|open class KotlinSubClass {
| fun kotlinSubclassFunction(bar: String): String {
| return "KotlinSubClass"
| }
|}
|
|/src/main/java/example/JavaLeafClass.java
|package example;
|
|public class JavaLeafClass extends KotlinSubClass {
| public String javaLeafClassFunction(String baz) {
| return "JavaLeafClass";
| }
|}
""".trimMargin(),
configurationWithNoJVM,
pluginOverrides = listOf(OnlyPsiPlugin()) // suppress a descriptor translator because of psi and descriptor translators work in parallel
) {
documentablesMergingStage = { module ->
val kotlinSubclassFunction =
module.packages.single().classlikes.find { it.name == "JavaLeafClass" }?.functions?.find { it.name == "kotlinSubclassFunction" }
.assertNotNull("kotlinSubclassFunction ")

assertEquals(
"String",
(kotlinSubclassFunction.type as? TypeConstructor)?.dri?.classNames
)
assertEquals(
"String",
(kotlinSubclassFunction.parameters.firstOrNull()?.type as? TypeConstructor)?.dri?.classNames
)
}
}
}
}

0 comments on commit 57133de

Please sign in to comment.