Skip to content

Conversation

@adam-enko
Copy link
Member

@adam-enko adam-enko commented Oct 14, 2025

When an intermediate KotlinSourceSet has no metadata compilation (e.g. webMain, mingwMain), the classpath misses the required dependencies (e.g. kotlin-stdlib, or those defined in buildscripts).

This PR updates the logic for determining the classpath. If a source set has no primary compilations, and it has no metadata compilations, then the classpath should be aggregated from the 'leaf' source sets.

Additionally, update kotlin-multiplatform-example to compile(!), and test webMain.

Workaround for:

@adam-enko adam-enko added the runner: Gradle plugin An issue/PR related to Dokka's Gradle plugin label Oct 14, 2025
@adam-enko adam-enko changed the base branch from master to adam/support-agp-kotlin-builtin October 14, 2025 15:28
@whyoleg
Copy link
Collaborator

whyoleg commented Oct 17, 2025

JIC: my attempt to fix isMetadata failed because of an issue in AA - #4263

@adam-enko adam-enko force-pushed the adam/support-agp-kotlin-builtin branch from 12c2bb1 to 4dd9e43 Compare November 5, 2025 09:26
@adam-enko adam-enko force-pushed the adam/fix-classpath-without-metadata-compilations branch from 4cddab4 to 685f09b Compare November 6, 2025 17:03
@adam-enko adam-enko force-pushed the adam/support-agp-kotlin-builtin branch from d2b6dd7 to 747573f Compare November 10, 2025 17:38
@adam-enko adam-enko self-assigned this Nov 10, 2025
@adam-enko adam-enko force-pushed the adam/fix-classpath-without-metadata-compilations branch from 685f09b to 62d4bff Compare November 10, 2025 18:02
Workaround for intermediate source sets missing dependencies (whether stdlib or user-defined).

KT-80551
DGP can still produce output even when the code cannot be compiled.
To avoid creating invalid examples, add a test.
@adam-enko adam-enko force-pushed the adam/fix-classpath-without-metadata-compilations branch from d249aa3 to ab74561 Compare November 24, 2025 18:36
@adam-enko adam-enko changed the base branch from adam/support-agp-kotlin-builtin to master November 24, 2025 18:37
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The main change of this PR is in KotlinAdapter.

@adam-enko adam-enko marked this pull request as ready for review November 25, 2025 08:04
Copy link
Collaborator

@whyoleg whyoleg left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please take a look on the comment in KotlinAdapter

}

@OptIn(org.jetbrains.kotlin.gradle.ExperimentalWasmDsl::class)
wasmJs {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you please add wasmWasi target and declarations in wasmMain, so that we can be sure, that we test the original issue from kotlinx-io?
webMain and wasmMain might behave differently I believe.
Note: that wasmMain is not created automatically.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll add a functional test that adds a custom shared WasmJS/WasmWASI source set. I think it's best to avoid adding custom source sets into the example projects, so as to keep them simpler.

There should be no differences between a shared source set that's provided by KGP and one that's defined by users.


// This KotlinSourceSet has no primary compilations, therefore it must be an intermediate source set
// e.g. mingwMain or webMain.
// If there are no metadata compilations then we must include the classpaths of the actual targets,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So, in case of webMain or wasmMain, which compilations will be there?

For some reason, I think that at least in the case of wasmMain we will have both wasmJs and wasmWasi compilations, and so we will add classpath from both of them, potentially having conflicting klibs.

For webMain, on the other hand, I believe that a shared compilation already exists, but I might be wrong.

All of these points indicate that this PR will address #3386, and not #4116.

I do think that we need a functional test here, which will check the classpaths of source sets.

@adam-enko adam-enko force-pushed the adam/fix-classpath-without-metadata-compilations branch from 452538e to 55e4830 Compare November 26, 2025 15:07
@adam-enko
Copy link
Member Author

I've discussed more with @abdulowork and we think we've found a better workaround. We can use IdeMultiplatformImport to get the same data that IJ uses.

I'll have another attempt...

@adam-enko adam-enko marked this pull request as draft November 26, 2025 17:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

runner: Gradle plugin An issue/PR related to Dokka's Gradle plugin

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants