Skip to content

Commit 17cd417

Browse files
authored
Fix setup js deps (#2258)
* Add checker of KLIB resolving * Fix setup of JS deps in `AnalysisEnvironment` * Update JS integration test
1 parent 702c102 commit 17cd417

File tree

3 files changed

+41
-21
lines changed

3 files changed

+41
-21
lines changed

integration-tests/gradle/projects/it-js-ir-0/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,6 @@ kotlin {
1414

1515
dependencies {
1616
implementation(kotlin("stdlib"))
17+
implementation(npm("is-sorted", "1.0.5"))
1718
implementation("org.jetbrains.kotlin-wrappers:kotlin-react-router-dom:${properties["dokka_it_react_kotlin_version"]}")
1819
}

integration-tests/gradle/projects/it-js-ir-0/src/main/kotlin/RootPackageClass.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,10 @@ class RootPackageClass {
1212
val description = "I do live in the root package!"
1313
}
1414

15-
fun RComponent<*, *>.params() = URLSearchParams()
15+
fun RComponent<*, *>.params() = URLSearchParams()
16+
17+
fun test(list: MutableList<Int>) = "list"
18+
19+
@JsModule("is-sorted")
20+
@JsNonModule
21+
external fun <T> sorted(a: Array<T>): Boolean

kotlin-analysis/src/main/kotlin/org/jetbrains/dokka/analysis/AnalysisEnvironment.kt

Lines changed: 33 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
3030
import org.jetbrains.kotlin.cli.common.config.ContentRoot
3131
import org.jetbrains.kotlin.cli.common.config.KotlinSourceRoot
3232
import org.jetbrains.kotlin.cli.common.config.addKotlinSourceRoot
33+
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
3334
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
3435
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
3536
import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider
@@ -74,7 +75,7 @@ import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
7475
import org.jetbrains.kotlin.resolve.konan.platform.NativePlatformAnalyzerServices
7576
import java.io.File
7677
import org.jetbrains.kotlin.konan.file.File as KFile
77-
78+
import org.jetbrains.kotlin.library.KLIB_FILE_EXTENSION
7879

7980
const val JAR_SEPARATOR = "!/"
8081

@@ -289,23 +290,32 @@ class AnalysisEnvironment(val messageCollector: MessageCollector, val analysisPl
289290
val analyzerServices = analysisPlatform.analyzerServices()
290291

291292
return buildMap {
292-
classpath.forEach { libraryFile ->
293-
val kotlinLibrary = resolveSingleFileKlib(
294-
libraryFile = KFile(libraryFile.absolutePath),
295-
strategy = ToolingSingleFileKlibResolveStrategy
296-
)
297-
298-
if (kotlinLibrary.getCompatibilityInfo().isCompatible) {
299-
// exists, is KLIB, has compatible format
300-
put(
301-
libraryFile.absolutePath,
302-
if (analysisPlatform == Platform.native)
303-
DokkaNativeKlibLibraryInfo(kotlinLibrary, analyzerServices, dependencyResolver)
304-
else
305-
DokkaJsKlibLibraryInfo(kotlinLibrary, analyzerServices, dependencyResolver)
306-
)
293+
classpath
294+
.filter { it.isDirectory || (it.extension == "jar" || it.extension == KLIB_FILE_EXTENSION) }
295+
.forEach { libraryFile ->
296+
try {
297+
val kotlinLibrary = resolveSingleFileKlib(
298+
libraryFile = KFile(libraryFile.absolutePath),
299+
strategy = ToolingSingleFileKlibResolveStrategy
300+
)
301+
302+
if (kotlinLibrary.getCompatibilityInfo().isCompatible) {
303+
// exists, is KLIB, has compatible format
304+
put(
305+
libraryFile.absolutePath,
306+
if (analysisPlatform == Platform.native) DokkaNativeKlibLibraryInfo(
307+
kotlinLibrary,
308+
analyzerServices,
309+
dependencyResolver
310+
)
311+
else DokkaJsKlibLibraryInfo(kotlinLibrary, analyzerServices, dependencyResolver)
312+
)
313+
}
314+
} catch (e: Throwable) {
315+
configuration.getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY)
316+
.report(CompilerMessageSeverity.WARNING, "Can not resolve KLIB. " + e.message)
317+
}
307318
}
308-
}
309319
}
310320
}
311321

@@ -487,7 +497,8 @@ class AnalysisEnvironment(val messageCollector: MessageCollector, val analysisPl
487497
* Classpath for this environment.
488498
*/
489499
val classpath: List<File>
490-
get() = configuration.jvmClasspathRoots
500+
get() = configuration.jvmClasspathRoots + configuration.getList(JSConfigurationKeys.LIBRARIES)
501+
.mapNotNull { File(it) }
491502

492503
/**
493504
* Adds list of paths to classpath.
@@ -496,8 +507,9 @@ class AnalysisEnvironment(val messageCollector: MessageCollector, val analysisPl
496507
fun addClasspath(paths: List<File>) {
497508
if (analysisPlatform == Platform.js) {
498509
configuration.addAll(JSConfigurationKeys.LIBRARIES, paths.map { it.absolutePath })
510+
} else {
511+
configuration.addJvmClasspathRoots(paths)
499512
}
500-
configuration.addJvmClasspathRoots(paths)
501513
}
502514

503515
/**
@@ -507,8 +519,9 @@ class AnalysisEnvironment(val messageCollector: MessageCollector, val analysisPl
507519
fun addClasspath(path: File) {
508520
if (analysisPlatform == Platform.js) {
509521
configuration.add(JSConfigurationKeys.LIBRARIES, path.absolutePath)
522+
} else {
523+
configuration.addJvmClasspathRoot(path)
510524
}
511-
configuration.addJvmClasspathRoot(path)
512525
}
513526

514527
/**

0 commit comments

Comments
 (0)