diff --git a/.github/workflows/auto-merge.yml b/.github/workflows/auto-merge.yml index 60e339f750..fa014d7bb9 100644 --- a/.github/workflows/auto-merge.yml +++ b/.github/workflows/auto-merge.yml @@ -22,7 +22,7 @@ jobs: - uses: actions/checkout@v2 with: fetch-depth: 0 - ref: 2.0.2-release + ref: 2.0.4-release - name: merge commits from main to release branch run: | @@ -40,7 +40,7 @@ jobs: VERSION_BUMPS=$(git log $MERGE_BASE..origin/main --pretty=%H --grep UPDATE_KOTLIN_VERSION) TO_PICK=$(grep -Fxv -f <(echo "$PICKED"; echo "$VERSION_BUMPS"; echo "$DONT_PICK") <(echo "$CANDIDATES") | awk '{a[i++]=$0} END {for (j=i-1; j>=0;) print a[j--] }') echo Picking $TO_PICK - if [ -n "$TO_PICK" ]; then git cherry-pick -x $TO_PICK; fi + if [ -n "$TO_PICK" ]; then git cherry-pick -x --allow-empty $TO_PICK; fi - name: Setup Java 17 uses: actions/setup-java@v1.4.3 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 818b99fc46..7068e820fb 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -30,7 +30,7 @@ This project follows ## API verification -For changes that involves API changes(new API, API signature change), please also update [api.base](./api/api.base) file. You can monitor api change with `./gradlew :api:apiCheck`, and`./gradlew :api:updateApi` to generate new api signature. +For changes that involves API changes(new API, API signature change), please also update [api.base](./api/api.base) file. You can monitor api change with `./gradlew :api:checkApi`, and`./gradlew :api:updateApi` to generate new api signature. ## Testing For incoming PRs, we would like to request changes covered by tests for good practice. diff --git a/README.md b/README.md index 88d01b3f4e..f11873fb67 100644 --- a/README.md +++ b/README.md @@ -46,12 +46,27 @@ standardizing its API and disallowing accesses to its internal implementations o The KSP team will try to support KSP1 with best efforts so that users have more time to migrate to KSP2, but no promise can be made. Please plan migrating to KSP2 as early as possible. +### Deprecation notice for KSP1 + +KSP1 is deprecated and support will be removed. We are focusing our development efforts on KSP2 to provide better performance, improved APIs, and a more robust architecture for the future. + +#### Compatibility Limitations +Please be aware that KSP1 will not be updated to support upcoming major versions of the Android and Kotlin toolchains. Specifically, KSP1 will not be compatible with: +* Kotlin version `2.3.0` and higher. +* Android Gradle Plugin (AGP) version `9.0` and higher. + +Projects using KSP1 may not behave correctly (or fail the build) if you upgrade to these or any subsequent versions of AGP or Kotlin. + +To ensure your annotation processors continue to function correctly and to take advantage of future tooling advancements, it is crucial to migrate your projects to use KSP2 (which has been the default since beginning of 2025) + +Please refer to the [KSP2 introduction](docs/ksp2.md) for further details. + + ## Nightly Builds -Nightly builds of KSP for the latest Kotlin stable releases are published -[here](https://oss.sonatype.org/content/repositories/snapshots/com/google/devtools/ksp/). +Nightly builds of KSP for the latest Kotlin stable releases are published here: ``` -maven("https://oss.sonatype.org/content/repositories/snapshots") +maven("https://central.sonatype.com/repository/maven-snapshots/") ``` ## Feedback and Bug Reporting diff --git a/build.gradle.kts b/build.gradle.kts index 616d6b844f..63935c89cc 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -14,7 +14,7 @@ if (extra.has("kspOnlyVersion") && kotlinBaseVersion != null) { } if (!extra.has("kspVersion")) { - extra.set("kspVersion", "2.0.255-SNAPSHOT") + extra.set("kspVersion", "255.255.255-SNAPSHOT") } repositories { @@ -24,7 +24,7 @@ repositories { plugins { kotlin("jvm") - id("io.github.gradle-nexus.publish-plugin") version "1.1.0" + id("io.github.gradle-nexus.publish-plugin") version "2.0.0" // Adding plugins used in multiple places to the classpath for centralized version control id("com.gradleup.shadow") version "8.3.6" apply false id("org.jetbrains.dokka") version "1.9.20" apply false @@ -37,6 +37,8 @@ nexusPublishing { sonatype { username.set(sonatypeUserName) password.set(sonatypePassword) + nexusUrl.set(uri("https://ossrh-staging-api.central.sonatype.com/service/local/")) + snapshotRepositoryUrl.set(uri("https://central.sonatype.com/repository/maven-snapshots/")) } } } diff --git a/common-deps/src/main/kotlin/com/google/devtools/ksp/KspGradleLogger.kt b/common-deps/src/main/kotlin/com/google/devtools/ksp/KspGradleLogger.kt index be1864dbbd..ef0d2f94e3 100644 --- a/common-deps/src/main/kotlin/com/google/devtools/ksp/KspGradleLogger.kt +++ b/common-deps/src/main/kotlin/com/google/devtools/ksp/KspGradleLogger.kt @@ -16,29 +16,37 @@ */ package com.google.devtools.ksp.processing +import com.google.devtools.ksp.symbol.FileLocation import com.google.devtools.ksp.symbol.KSNode +import com.google.devtools.ksp.symbol.NonExistLocation class KspGradleLogger(val loglevel: Int) : KSPLogger { private val messager = System.out + private fun decorateMessage(message: String, symbol: KSNode?): String = + when (val location = symbol?.location) { + is FileLocation -> "${location.filePath}:${location.lineNumber}: $message" + is NonExistLocation, null -> message + } + override fun logging(message: String, symbol: KSNode?) { if (loglevel <= LOGGING_LEVEL_LOGGING) - messager.println("v: [ksp] $message") + messager.println("v: [ksp] ${decorateMessage(message, symbol)}") } override fun info(message: String, symbol: KSNode?) { if (loglevel <= LOGGING_LEVEL_INFO) - messager.println("i: [ksp] $message") + messager.println("i: [ksp] ${decorateMessage(message, symbol)}") } override fun warn(message: String, symbol: KSNode?) { if (loglevel <= LOGGING_LEVEL_WARN) - messager.println("w: [ksp] $message") + messager.println("w: [ksp] ${decorateMessage(message, symbol)}") } override fun error(message: String, symbol: KSNode?) { if (loglevel <= LOGGING_LEVEL_ERROR) - messager.println("e: [ksp] $message") + messager.println("e: [ksp] ${decorateMessage(message, symbol)}") } override fun exception(e: Throwable) { diff --git a/compiler-plugin/build.gradle.kts b/compiler-plugin/build.gradle.kts index 6caa43952f..1596393985 100644 --- a/compiler-plugin/build.gradle.kts +++ b/compiler-plugin/build.gradle.kts @@ -1,3 +1,4 @@ +import com.google.devtools.ksp.RelativizingInternalPathProvider import com.google.devtools.ksp.RelativizingPathProvider evaluationDependsOn(":common-util") @@ -116,5 +117,5 @@ tasks.test.configure { .asFile .apply { if (!exists()) mkdirs() } jvmArgumentProviders.add(RelativizingPathProvider("idea.home.path", ideaHomeDir)) - jvmArgumentProviders.add(RelativizingPathProvider("java.io.tmpdir", temporaryDir)) + jvmArgumentProviders.add(RelativizingInternalPathProvider("java.io.tmpdir", temporaryDir)) } diff --git a/docs/ksp2cmdline.md b/docs/ksp2cmdline.md index a31a1185f9..cc1e8dd00e 100644 --- a/docs/ksp2cmdline.md +++ b/docs/ksp2cmdline.md @@ -2,22 +2,22 @@ KSP2 has 4 main classes, one for each platform: `KSPJvmMain`, `KSPJsMain`, `KSPNativeMain`, `KSPCommonMain`. They reside in the same jars from the -[artifacts.zip](https://github.com/google/ksp/releases/download/2.0.21-1.0.26/artifacts.zip) in the -[release page](https://github.com/google/ksp/releases/tag/2.0.21-1.0.26): -* `symbol-processing-aa-2.0.21-1.0.26.jar` +[artifacts.zip](https://github.com/google/ksp/releases/download/2.2.10-2.0.2/artifacts.zip) in the +[release page](https://github.com/google/ksp/releases/tag/2.2.10-2.0.2): +* `symbol-processing-aa-2.2.10-2.0.2.jar` and depend on: -* `symbol-processing-common-deps-2.0.21-1.0.26.jar` +* `symbol-processing-common-deps-2.2.10-2.0.2.jar` You’ll also need the Kotlin runtime: -* `kotlin-stdlib-2.0.21.jar` -* `kotlinx-coroutines-core-jvm-1.6.4.jar` +* `kotlin-stdlib-2.2.10.jar` +* `kotlinx-coroutines-core-jvm-1.10.2.jar` Taking `KSPJvmMain` for example, ``` java -cp \ -kotlin-analysis-api-2.0.21-1.0.26.jar:common-deps-2.0.21-1.0.26.jar:symbol-processing-api-2.0.21-1.0.26.jar:kotlin-stdlib-2.0.21.jar:kotlinx-coroutines-core-jvm-1.6.4.jar \ +symbol-processing-aa-2.2.10-2.0.2.jar:kotlin-analysis-api-2.2.10-2.0.2.jar:common-deps-2.2.10-2.0.2.jar:symbol-processing-api-2.2.10-2.0.2.jar:kotlin-stdlib-2.2.10.jar:kotlinx-coroutines-core-jvm-1.10.2.jar \ com.google.devtools.ksp.cmdline.KSPJvmMain \ -jvm-target 11 \ -module-name=main \ @@ -48,6 +48,7 @@ Available options: * -source-roots=List -common-source-roots=List -libraries=List + -friends=List -processor-options=Map * -project-base-dir=File * -output-base-dir=File @@ -70,4 +71,16 @@ where: * is required List is colon separated. E.g., arg1:arg2:arg3 Map is in the form key1=value1:key2=value2 -``` \ No newline at end of file +``` + +## Notable options + +* `-libraries` - classpath of the dependencies of the source files. This is usually the module compile classpath. +* `-jdk-home` - Useful when the processor does not resolve java symbols. Pointing to a JDK home directory + (e.g. `~/.sdkman/candidates/java/current`) will help the processor locate the Java standard library. +* `-friends` - classpath of the modules that are friends of the current module. This is usually the + submodules this module depends on. Supported since [2.1.21-2.0.2](https://github.com/google/ksp/releases/tag/2.1.21-2.0.2). See also [friend modules](https://kotlinlang.org/api/kotlin-gradle-plugin/kotlin-gradle-plugin-api/org.jetbrains.kotlin.gradle.tasks/-base-kotlin-compile/friend-paths.html). + +### Jvm Parameters + +* `-Dksp.logging` - logging level, one of `error`, `warn` or `warning`, `info`, `debug`. Default is `warn`. If an unrecognised level is specified, it will be treated as `warn`. \ No newline at end of file diff --git a/gradle-plugin/lint-baseline.xml b/gradle-plugin/lint-baseline.xml index d7fb583808..5417d71047 100644 --- a/gradle-plugin/lint-baseline.xml +++ b/gradle-plugin/lint-baseline.xml @@ -4,12 +4,23 @@ + errorLine1=" val destinationProperty = (kaptProvider?.get() as? KaptTask)?.destinationDir" + errorLine2=" ~~~"> + line="89" + column="62"/> + + + + @@ -30,7 +41,7 @@ errorLine2=" ~~~"> @@ -74,7 +85,7 @@ errorLine2=" ~~~~~~~~~~~"> @@ -85,7 +96,7 @@ errorLine2=" ~~~~~~~~~~~"> @@ -96,7 +107,7 @@ errorLine2=" ~~~~~~~~~~~"> @@ -107,7 +118,7 @@ errorLine2=" ~~~"> @@ -118,7 +129,7 @@ errorLine2=" ~~~"> @@ -129,7 +140,7 @@ errorLine2=" ~~~"> @@ -140,7 +151,7 @@ errorLine2=" ~~~~~~~"> @@ -151,7 +162,7 @@ errorLine2=" ~~~~~~~~~~~~~~"> @@ -162,7 +173,7 @@ errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -239,7 +250,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -250,7 +261,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -261,7 +272,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -272,7 +283,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -283,7 +294,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -294,7 +305,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -305,7 +316,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -316,7 +327,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> diff --git a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/AndroidPluginIntegration.kt b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/AndroidPluginIntegration.kt index ee73e3b00b..4e185a21f9 100644 --- a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/AndroidPluginIntegration.kt +++ b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/AndroidPluginIntegration.kt @@ -17,16 +17,20 @@ package com.google.devtools.ksp.gradle import com.android.build.api.AndroidPluginVersion +import com.android.build.api.artifact.ScopedArtifact import com.android.build.api.dsl.CommonExtension +import com.android.build.api.variant.Component +import com.android.build.api.variant.ScopedArtifacts import com.android.build.gradle.BaseExtension import com.android.build.gradle.api.SourceKind +import com.google.devtools.ksp.gradle.utils.getAgpVersion import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.file.Directory -import org.gradle.api.file.FileCollection import org.gradle.api.provider.Provider import org.gradle.api.tasks.TaskProvider import org.jetbrains.kotlin.gradle.internal.KaptTask +import org.jetbrains.kotlin.gradle.plugin.KotlinBaseApiPlugin import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly import java.util.concurrent.Callable @@ -59,9 +63,7 @@ object AndroidPluginIntegration { } fun getCompilationSourceSets(kotlinCompilation: KotlinJvmAndroidCompilation): List { - return kotlinCompilation.androidVariant - .sourceSets - .map { it.name } + return kotlinCompilation.androidVariant?.sourceSets?.map { it.name } ?: emptyList() } /** @@ -71,12 +73,22 @@ object AndroidPluginIntegration { private fun tryUpdateKspWithAndroidSourceSets( project: Project, kotlinCompilation: KotlinJvmAndroidCompilation, - kspTaskProvider: TaskProvider<*> + kspTaskProvider: TaskProvider<*>, + androidComponent: Component? ) { val kaptProvider: TaskProvider? = project.locateTask(kotlinCompilation.compileTaskProvider.kaptTaskName) - val sources = kotlinCompilation.androidVariant.getSourceFolders(SourceKind.JAVA) + val androidVariant = kotlinCompilation.androidVariant + if (androidVariant == null) { + throw RuntimeException( + "KSP is not compatible with Android Gradle Plugin's built-in Kotlin. " + + "Please disable by adding android.builtInKotlin=false to gradle.properties " + + "and apply kotlin(\"android\") plugin" + ) + } + val sources = androidVariant.getSourceFolders(SourceKind.JAVA) + kspTaskProvider.configure { task -> // this is workaround for KAPT generator that prevents circular dependency val filteredSources = Callable { @@ -87,12 +99,10 @@ object AndroidPluginIntegration { when (task) { is KspTaskJvm -> { task.source(filteredSources) - task.dependsOn(filteredSources) } is KspAATask -> { task.kspConfig.javaSourceRoots.from(filteredSources) - task.dependsOn(filteredSources) } else -> Unit @@ -118,18 +128,61 @@ object AndroidPluginIntegration { javaOutputDir: Provider, kotlinOutputDir: Provider, classOutputDir: Provider, - resourcesOutputDir: FileCollection, + resourcesOutputDir: Provider, + androidComponent: Component?, + useKsp2: Boolean, ) { - val kspJavaOutput = project.fileTree(javaOutputDir).builtBy(kspTaskProvider) - val kspKotlinOutput = project.fileTree(kotlinOutputDir).builtBy(kspTaskProvider) - val kspClassOutput = project.fileTree(classOutputDir).builtBy(kspTaskProvider) - kspJavaOutput.include("**/*.java") - kspKotlinOutput.include("**/*.kt") - kspClassOutput.include("**/*.class") - kotlinCompilation.androidVariant.registerExternalAptJavaOutput(kspJavaOutput) - kotlinCompilation.androidVariant.addJavaSourceFoldersToModel(kspKotlinOutput.dir) - kotlinCompilation.androidVariant.registerPreJavacGeneratedBytecode(kspClassOutput) - kotlinCompilation.androidVariant.registerPostJavacGeneratedBytecode(resourcesOutputDir) + if (androidComponent != null && useKsp2 && project.canUseAddGeneratedSourceDirectoriesApi()) { + androidComponent.sources.java?.addGeneratedSourceDirectory( + taskProvider = kspTaskProvider, + wiredWith = { task -> (task as KspAATask).kspConfig.javaOutputDir } + ) + + androidComponent.sources.java?.addGeneratedSourceDirectory( + taskProvider = kspTaskProvider, + wiredWith = { task -> (task as KspAATask).kspConfig.kotlinOutputDir } + ) + androidComponent.sources.resources?.addGeneratedSourceDirectory( + taskProvider = kspTaskProvider, + wiredWith = { task -> (task as KspAATask).kspConfig.resourceOutputDir } + ) + + // this is a bit of a hack because merge*GeneratedProguardFiles in AGP looks in the CLASSES artifacts + // for the KSP generated proguard files + // todo: remove this once the issues is amended in AGP + androidComponent.artifacts + .forScope(ScopedArtifacts.Scope.PROJECT) + .use(kspTaskProvider) + .toAppend( + ScopedArtifact.CLASSES + ) { task -> project.objects.directoryProperty().also { it.set(resourcesOutputDir) } } + + androidComponent.artifacts + .forScope(ScopedArtifacts.Scope.PROJECT) + .use(kspTaskProvider) + .toAppend( + ScopedArtifact.CLASSES + ) { task -> project.objects.directoryProperty().also { it.set(classOutputDir) } } + } else { + val kspJavaOutput = project.fileTree(javaOutputDir).builtBy(kspTaskProvider) + val kspKotlinOutput = project.fileTree(kotlinOutputDir).builtBy(kspTaskProvider) + val kspClassOutput = project.fileTree(classOutputDir).builtBy(kspTaskProvider) + // PostJavacGeneratedBytecode will be used by bundleLibRuntimeToJar* + // We need add ksp task dependency for this output to avoid bundleLib task run before KSP + val resourcesOutput = project.files(resourcesOutputDir).builtBy(kspTaskProvider) + + kspJavaOutput.include("**/*.java") + kspKotlinOutput.include("**/*.kt") + kspClassOutput.include("**/*.class") + + kotlinCompilation.androidVariant?.addJavaSourceFoldersToModel(kspKotlinOutput.dir) + kotlinCompilation.androidVariant?.registerExternalAptJavaOutput(kspJavaOutput) + kotlinCompilation.androidVariant?.registerPostJavacGeneratedBytecode(resourcesOutput) + if (project.isAgpBuiltInKotlinUsed().not()) { + // This API leads to circular dependency with AGP + Built in kotlin + kotlinCompilation.androidVariant?.registerPreJavacGeneratedBytecode(kspClassOutput) + } + } } fun syncSourceSets( @@ -139,12 +192,14 @@ object AndroidPluginIntegration { javaOutputDir: Provider, kotlinOutputDir: Provider, classOutputDir: Provider, - resourcesOutputDir: FileCollection + resourcesOutputDir: Provider, + androidComponent: Component?, + useKsp2: Boolean, ) { // Order is important here as we update task with AGP generated sources and // then update AGP with source that KSP will generate. // Mixing this up will cause circular dependency in Gradle - tryUpdateKspWithAndroidSourceSets(project, kotlinCompilation, kspTaskProvider) + tryUpdateKspWithAndroidSourceSets(project, kotlinCompilation, kspTaskProvider, androidComponent) registerGeneratedSources( project, @@ -153,29 +208,36 @@ object AndroidPluginIntegration { javaOutputDir, kotlinOutputDir, classOutputDir, - resourcesOutputDir + resourcesOutputDir, + androidComponent, + useKsp2 ) } + fun Project.isKotlinBaseApiPluginApplied() = plugins.findPlugin(KotlinBaseApiPlugin::class.java) != null + + fun Project.isKotlinAndroidPluginApplied() = pluginManager.hasPlugin("org.jetbrains.kotlin.android") + + fun Project.isAgpBuiltInKotlinUsed() = isKotlinBaseApiPluginApplied() && isKotlinAndroidPluginApplied().not() + /** * Returns false for AGP versions 8.10.0-alpha03 or higher. * * Returns true for older AGP versions or when AGP version cannot be determined. */ fun Project.useLegacyVariantApi(): Boolean { - val agpVersion = try { - this.extensions - .findByType(com.android.build.api.variant.AndroidComponentsExtension::class.java) - ?.pluginVersion - } catch (e: Exception) { - // Perhaps a version of AGP before pluginVersion API was added. - null - } + val agpVersion = project.getAgpVersion() ?: return true // Fall back to using the legacy Variant API if the AGP version can't be determined for now. - if (agpVersion == null) { - return true - } return agpVersion < AndroidPluginVersion(8, 10, 0).alpha(3) } + + /** + * Returns true for AGP version is 8.12.0-alpha06 or higher. + * That is the version where addGeneratedSourceDirectories API was fixed + */ + fun Project.canUseAddGeneratedSourceDirectoriesApi(): Boolean { + val agpVersion = project.getAgpVersion() ?: return false + return agpVersion >= AndroidPluginVersion(8, 12, 0).alpha(6) + } } diff --git a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KotlinFactories.kt b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KotlinFactories.kt index cc03b02f5f..513821aedc 100644 --- a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KotlinFactories.kt +++ b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KotlinFactories.kt @@ -38,7 +38,6 @@ import org.gradle.api.tasks.PathSensitivity import org.gradle.api.tasks.SkipWhenEmpty import org.gradle.api.tasks.TaskProvider import org.gradle.process.CommandLineArgumentProvider -import org.gradle.process.ExecOperations import org.gradle.work.Incremental import org.gradle.work.InputChanges import org.gradle.work.NormalizeLineEndings @@ -171,6 +170,7 @@ class KotlinFactories { it.name == konanTargetName } } + kspTask.separateKmpCompilation.value(false) } } } @@ -307,13 +307,11 @@ abstract class KspTaskNative @Inject internal constructor( compilation: KotlinCompilationInfo, objectFactory: ObjectFactory, providerFactory: ProviderFactory, - execOperations: ExecOperations ) : KotlinNativeCompile( compilation, objectFactory.newInstance(KotlinNativeCompilerOptionsDefault::class.java), objectFactory, providerFactory, - execOperations ), KspTask diff --git a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspAATask.kt b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspAATask.kt index 4020eba542..12212f22e5 100644 --- a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspAATask.kt +++ b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspAATask.kt @@ -26,6 +26,7 @@ import com.google.devtools.ksp.processing.KSPJvmConfig import com.google.devtools.ksp.processing.KSPNativeConfig import com.google.devtools.ksp.processing.KspGradleLogger import org.gradle.api.DefaultTask +import org.gradle.api.JavaVersion import org.gradle.api.artifacts.Configuration import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.DirectoryProperty @@ -190,8 +191,9 @@ abstract class KspAATask @Inject constructor( cfg.processorClasspath.from(incomingProcessors) val kotlinOutputDir = KspGradleSubplugin.getKspKotlinOutputDir(project, sourceSetName, target) val javaOutputDir = KspGradleSubplugin.getKspJavaOutputDir(project, sourceSetName, target) - val filteredTasks = + val filteredTasks = if (kspExtension.excludedSources.isEmpty.not()) { kspExtension.excludedSources.buildDependencies.getDependencies(null).map { it.name } + } else emptyList() kotlinCompilation.allKotlinSourceSetsObservable.forAll { sourceSet -> val filtered = kotlinOutputDir.zip(javaOutputDir) { kotlinOut, javaOut -> sourceSet.kotlin.srcDirs.filter { @@ -229,7 +231,11 @@ abstract class KspAATask @Inject constructor( ) ) } else { - cfg.libraries.from(kotlinCompilation.compileDependencyFiles) + cfg.libraries.from( + project.provider { + kotlinCompilation.compileDependencyFiles + } + ) } val classOutputDir = KspGradleSubplugin.getKspClassOutputDir(project, sourceSetName, target) @@ -254,6 +260,7 @@ abstract class KspAATask @Inject constructor( ) ) cfg.processorOptions.putAll(kspExtension.apOptions) + cfg.apOptions.putAll(kspExtension.apOptions) fun ListProperty.mapArgProviders() = map { providers -> @@ -270,7 +277,7 @@ abstract class KspAATask @Inject constructor( } } - cfg.processorOptions.putAll(kspExtension.commandLineArgumentProviders.mapArgProviders()) + kspAATask.commandLineArgumentProviders.addAll(kspExtension.commandLineArgumentProviders) cfg.processorOptions.putAll(kspAATask.commandLineArgumentProviders.mapArgProviders()) val logLevel = LogLevel.entries.first { @@ -302,12 +309,8 @@ abstract class KspAATask @Inject constructor( // TODO: set proper jdk home cfg.jdkHome.value(File(System.getProperty("java.home"))) - val javaVersion = System.getProperty("java.version")?.split(".")?.let { - if (it[0] == "1") it.getOrNull(1) else it.getOrNull(0) - } - javaVersion?.let { - cfg.jdkVersion.value(it.toInt()) - } + val javaVersion = JavaVersion.toVersion(System.getProperty("java.version")) + cfg.jdkVersion.value(javaVersion.majorVersion.toInt()) val oldJvmDefaultMode = compilerOptions.freeCompilerArgs .map { args -> args.filter { it.startsWith("-Xjvm-default=") } } @@ -354,6 +357,12 @@ abstract class KspAATask @Inject constructor( } } + cfg.profilingMode.value( + project.providers + .gradleProperty("ksp.ksp2.profiling.mode") + .map { it.toBoolean() } + .orElse(false) + ) // TODO: pass targets of common } } @@ -427,9 +436,12 @@ abstract class KspGradleConfig @Inject constructor() { @get:Input abstract val apiVersion: Property - @get:Input + @get:Internal abstract val processorOptions: MapProperty + @get:Input + abstract val apOptions: MapProperty + // Unfortunately, passing project.logger over is not possible. @get:Input abstract val logLevel: Property @@ -480,6 +492,9 @@ abstract class KspGradleConfig @Inject constructor() { @get:Input @get:Optional abstract val konanHome: Property + + @get:Internal + abstract val profilingMode: Property } interface KspAAWorkParameter : WorkParameters { @@ -492,6 +507,7 @@ interface KspAAWorkParameter : WorkParameters { } var isolatedClassLoaderCache = mutableMapOf() +val doNotGC = mutableSetOf() abstract class KspAAWorkerAction : WorkAction { override fun execute() { @@ -516,6 +532,11 @@ abstract class KspAAWorkerAction : WorkAction { gradleCfg.processorClasspath.files.map { it.toURI().toURL() }.toTypedArray(), isolatedClassLoader ) + if (gradleCfg.profilingMode.get()) { + doNotGC.add(processorClassloader) + } else { + doNotGC.clear() + } val excludedProcessors = gradleCfg.excludedProcessors.get() val processorProviders = ServiceLoader.load( diff --git a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspConfigurations.kt b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspConfigurations.kt index 72d78fd301..7b2ab3731f 100644 --- a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspConfigurations.kt +++ b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspConfigurations.kt @@ -91,9 +91,9 @@ class KspConfigurations(private val project: Project) { init { project.plugins.withType(KotlinBasePluginWrapper::class.java).configureEach { - // 1.6.0: decorateKotlinProject(project.kotlinExtension)? - decorateKotlinProject(project.extensions.getByName("kotlin") as KotlinProjectExtension, project) + decorateKotlinProject(project.kotlinExtension, project) } + // Create sourceSet-specific KSP configurations for the case when the KotlinBaseApiPlugin is applied instead // of the KotlinBasePluginWrapper (e.g., when AGP's built-in Kotlin support is enabled). project.plugins.withType(KotlinBaseApiPlugin::class.java).configureEach { @@ -101,11 +101,11 @@ class KspConfigurations(private val project: Project) { // decorateKotlinProject here instead. createAndroidSourceSetConfigurations(project, kotlinTarget = null) } + project.pluginManager.withPlugin("com.android.base") { if (!project.useLegacyVariantApi()) { val androidComponents = project.extensions.findByType(com.android.build.api.variant.AndroidComponentsExtension::class.java) - @Suppress("UnstableApiUsage") // use of addKspConfigurations androidComponents?.addKspConfigurations(useGlobalConfiguration = allowAllTargetConfiguration) } } diff --git a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt index 7d0c4e7db2..b2b3848d36 100644 --- a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt +++ b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt @@ -16,6 +16,7 @@ */ package com.google.devtools.ksp.gradle +import com.android.build.api.variant.Component import com.google.devtools.ksp.KspExperimental import com.google.devtools.ksp.gradle.AndroidPluginIntegration.useLegacyVariantApi import com.google.devtools.ksp.gradle.model.builder.KspModelBuilder @@ -40,7 +41,6 @@ import org.gradle.util.GradleVersion import org.gradle.work.ChangeType import org.gradle.work.InputChanges import org.jetbrains.kotlin.buildtools.api.SourcesChanges -import org.jetbrains.kotlin.config.ApiVersion import org.jetbrains.kotlin.gradle.dsl.KotlinVersion import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin import org.jetbrains.kotlin.gradle.internal.kapt.incremental.CLASS_STRUCTURE_ARTIFACT_TYPE @@ -55,7 +55,6 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationWithResources import org.jetbrains.kotlin.gradle.plugin.KotlinCompilerPluginSupportPlugin import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType -import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.SubpluginArtifact import org.jetbrains.kotlin.gradle.plugin.SubpluginOption import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion @@ -72,9 +71,11 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile import org.jetbrains.kotlin.incremental.isJavaFile import org.jetbrains.kotlin.incremental.isKotlinFile +import org.jetbrains.kotlin.tooling.core.KotlinToolingVersion import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty import java.io.File import java.util.concurrent.Callable +import java.util.concurrent.ConcurrentHashMap import javax.inject.Inject @OptIn(KspExperimental::class) @@ -216,6 +217,8 @@ class KspGradleSubplugin @Inject internal constructor(private val registry: Tool private lateinit var kspConfigurations: KspConfigurations + private val androidComponentCache = ConcurrentHashMap() + override fun apply(target: Project) { val ksp = target.extensions.create("ksp", KspExtension::class.java) ksp.useKsp2.convention( @@ -226,16 +229,40 @@ class KspGradleSubplugin @Inject internal constructor(private val registry: Tool ) kspConfigurations = KspConfigurations(target) registry.register(KspModelBuilder()) + + target.plugins.withId("com.android.base") { + val androidComponents = + target.extensions.findByType(com.android.build.api.variant.AndroidComponentsExtension::class.java)!! + + val selector = androidComponents.selector().all() + androidComponents.onVariants(selector) { variant -> + for (component in variant.components) { + androidComponentCache.computeIfAbsent(component.name) { + component + } + } + } + } } override fun isApplicable(kotlinCompilation: KotlinCompilation<*>): Boolean { val project = kotlinCompilation.target.project - val kspVersion = ApiVersion.parse(KSP_KOTLIN_BASE_VERSION)!! - val kotlinVersion = ApiVersion.parse(project.getKotlinPluginVersion())!! + val kspVersion = KotlinToolingVersion(KSP_KOTLIN_BASE_VERSION) + val kotlinVersion = KotlinToolingVersion(project.getKotlinPluginVersion()) + + val useKsp2 = project.extensions.getByType(KspExtension::class.java).useKsp2.get() + + if (useKsp2.not()) { + project.logger.warn( + "We noticed you are using KSP1 which is deprecated and support for it will be removed soon - " + + "please migrate to KSP2 as soon as possible. KSP1 will no longer be compatible with" + + " Android Gradle Plugin 9.0.0 (and above) and Kotlin 2.3.0 (and above)" + ) + } // Check version and show warning by default. val noVersionCheck = project.providers.gradleProperty("ksp.version.check").orNull?.toBoolean() == false - if (!noVersionCheck) { + if (!noVersionCheck && !useKsp2) { if (kspVersion < kotlinVersion) { project.logger.warn( "ksp-$KSP_VERSION is too old for kotlin-$kotlinVersion. " + @@ -253,12 +280,9 @@ class KspGradleSubplugin @Inject internal constructor(private val registry: Tool return true } - // TODO: to be future proof, protect with `synchronized` - // Map from default input source set to output source set - private val sourceSetMap: MutableMap = mutableMapOf() - override fun applyToCompilation(kotlinCompilation: KotlinCompilation<*>): Provider> { val project = kotlinCompilation.target.project + val component = androidComponentCache.get(kotlinCompilation.name) val kotlinCompileProvider: TaskProvider> = project.locateTask(kotlinCompilation.compileKotlinTaskName) ?: return project.provider { emptyList() } val kspExtension = project.extensions.getByType(KspExtension::class.java) @@ -654,7 +678,9 @@ class KspGradleSubplugin @Inject internal constructor(private val registry: Tool javaOutputDir = javaOutputDir, kotlinOutputDir = kotlinOutputDir, classOutputDir = classOutputDir, - resourcesOutputDir = project.files(resourceOutputDir) + resourcesOutputDir = resourceOutputDir, + androidComponent = component, + useKsp2 = useKSP2 ) } diff --git a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/utils/agpUtils.kt b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/utils/agpUtils.kt new file mode 100644 index 0000000000..0df943a0db --- /dev/null +++ b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/utils/agpUtils.kt @@ -0,0 +1,16 @@ +package com.google.devtools.ksp.gradle.utils + +import com.android.build.api.AndroidPluginVersion +import org.gradle.api.Project + +fun Project.getAgpVersion(): AndroidPluginVersion? = try { + this.extensions + .findByType(com.android.build.api.variant.AndroidComponentsExtension::class.java) + ?.pluginVersion +} catch (e: NoClassDefFoundError) { + // AGP not applied + null +} catch (e: Exception) { + // Perhaps a version of AGP before pluginVersion API was added. + null +} diff --git a/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/GradleCompilationTest.kt b/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/GradleCompilationTest.kt index 8a766215f3..54d7f8a36e 100644 --- a/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/GradleCompilationTest.kt +++ b/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/GradleCompilationTest.kt @@ -439,6 +439,8 @@ class GradleCompilationTest(val useKSP2: Boolean) { */ @Test fun androidGradlePluginBuiltInKotlin() { + // built in kotlin will only be supported with KSP2 + Assume.assumeTrue(useKSP2) testRule.setupAppAsAndroidApp(enableAgpBuiltInKotlinSupport = true) testRule.appModule.dependencies.addAll( listOf( @@ -446,7 +448,7 @@ class GradleCompilationTest(val useKSP2: Boolean) { artifact(configuration = "kspTest", "androidx.room:room-compiler:2.4.2") ) ) - testRule.runner().withArguments(":app:assembleDebug").build() + testRule.runner().withArguments(":app:assembleDebug", "--stacktrace").build() } /** diff --git a/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/SourceSetConfigurationsTest.kt b/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/SourceSetConfigurationsTest.kt index 4ca4f25cff..8f404b4e45 100644 --- a/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/SourceSetConfigurationsTest.kt +++ b/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/SourceSetConfigurationsTest.kt @@ -28,6 +28,7 @@ import com.google.devtools.ksp.processing.SymbolProcessor import com.google.devtools.ksp.symbol.KSAnnotated import com.google.devtools.ksp.symbol.KSClassDeclaration import org.gradle.testkit.runner.TaskOutcome +import org.junit.Assume import org.junit.Rule import org.junit.Test import org.junit.rules.TemporaryFolder @@ -166,6 +167,7 @@ class SourceSetConfigurationsTest(val useKSP2: Boolean) { @Test fun registerGeneratedSourcesToAndroid() { + Assume.assumeTrue(useKSP2) testRule.setupAppAsAndroidApp() testRule.appModule.dependencies.addAll( listOf( @@ -176,25 +178,42 @@ class SourceSetConfigurationsTest(val useKSP2: Boolean) { ) testRule.appModule.buildFileAdditions.add( """ - tasks.register("printSources") { - fun logVariantSources(variants: DomainObjectSet) { - variants.all { - println("VARIANT:" + this.name) - val baseVariant = (this as com.android.build.gradle.internal.api.BaseVariantImpl) - val variantData = baseVariant::class.java.getMethod("getVariantData").invoke(baseVariant) - as com.android.build.gradle.internal.variant.BaseVariantData - variantData.extraGeneratedSourceFoldersOnlyInModel.forEach { - println("SRC:" + it.relativeTo(layout.buildDirectory.get().asFile).path) - } - variantData.allPreJavacGeneratedBytecode.forEach { - println("BYTE:" + it.relativeTo(layout.buildDirectory.get().asFile).path) + + abstract class DisplayAllSources: DefaultTask() { + + @get:InputFiles + abstract val sourceFolders: ListProperty + + @get:Input + abstract val componentName: Property + + @TaskAction + fun taskAction() { + println("VARIANT:" + componentName.get()) + sourceFolders.get().forEach { directory -> + if (directory.asFile.path.contains("generated")) { + println("SRC:" + directory.asFile.relativeTo(project.layout.buildDirectory.get().asFile).path) } } } - doLast { - logVariantSources(android.applicationVariants) - logVariantSources(android.testVariants) - logVariantSources(android.unitTestVariants) + } + + val globalTaskProvider = project.tasks.register("printSources") + + androidComponents { + onVariants { variant -> + variant.components.forEach { component -> + component.sources.let { sources -> + val taskProvider = + project.tasks.register("${'$'}{component.name}DisplayAllSources") { + sourceFolders.addAll(sources.java!!.all) + componentName.set(component.name) + } + globalTaskProvider.configure { + dependsOn(taskProvider) + } + } + } } } """.trimIndent() @@ -256,6 +275,21 @@ class SourceSetConfigurationsTest(val useKSP2: Boolean) { SourceFolder( "releaseUnitTest", "SRC:generated/ksp/releaseUnitTest/kotlin" ), + SourceFolder( + "debug", "SRC:generated/ksp/debug/java" + ), + SourceFolder( + "release", "SRC:generated/ksp/release/java" + ), + SourceFolder( + "debugAndroidTest", "SRC:generated/ksp/debugAndroidTest/java" + ), + SourceFolder( + "debugUnitTest", "SRC:generated/ksp/debugUnitTest/java" + ), + SourceFolder( + "releaseUnitTest", "SRC:generated/ksp/releaseUnitTest/java" + ), // TODO byte sources seems to be overridden by tmp/kotlin-classes/debug // assert them as well once fixed ) diff --git a/gradle.properties b/gradle.properties index 1c48300a30..19a0bb5e55 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,15 +1,15 @@ # Copied from kotlinc org.gradle.jvmargs=-Duser.country=US -Dkotlin.daemon.jvm.options=-Xmx4096m -Dfile.encoding=UTF-8 -kotlinBaseVersion=2.2.20-dev-2432 -agpBaseVersion=8.10.0-alpha03 +kotlinBaseVersion=2.2.20 +agpBaseVersion=8.13.0-rc01 intellijVersion=241.19416.19 junitVersion=4.13.1 junit5Version=5.8.2 junitPlatformVersion=1.8.2 googleTruthVersion=1.1 -aaKotlinBaseVersion=2.2.20-dev-2432 +aaKotlinBaseVersion=2.3.0-dev-7225 aaIntellijVersion=241.19416.19 aaGuavaVersion=33.2.0-jre aaAsmVersion=9.0 @@ -24,7 +24,7 @@ compilerTestEnabled=false kotlin.jvm.target.validation.mode=warning # Build or runtime dependencies of this project -buildKotlinVersion=2.1.20 -buildKspVersion=2.1.20-1.0.32 +buildKotlinVersion=2.2.10 +buildKspVersion=2.2.10-2.0.2 -android.lint.useK2Uast=true \ No newline at end of file +android.lint.useK2Uast=true diff --git a/integration-tests/build.gradle.kts b/integration-tests/build.gradle.kts index 762eeb790c..1399877843 100644 --- a/integration-tests/build.gradle.kts +++ b/integration-tests/build.gradle.kts @@ -41,7 +41,9 @@ fun Test.configureCommonSettings() { dependsOn(":symbol-processing-aa-embeddable:publishAllPublicationsToTestRepository") } -val agpCompatibilityTestClasses = listOf("**/AGP731IT.class", "**/AGP741IT.class") +val agpCompatibilityTestClasses = listOf( + "**/AGP812IT.class", "**/AGP810IT.class", "**/AGP890IT.class", "**/AGP900IT.class", "**/BuiltInKotlinAGP900IT.class" +) // Create a new test task for the AGP compatibility tests val agpCompatibilityTest by tasks.registering(Test::class) { diff --git a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AGP810IT.kt b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AGP810IT.kt new file mode 100644 index 0000000000..3cd8e922cd --- /dev/null +++ b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AGP810IT.kt @@ -0,0 +1,24 @@ +package com.google.devtools.ksp.test + +import org.gradle.testkit.runner.GradleRunner +import org.gradle.testkit.runner.TaskOutcome +import org.junit.Assert +import org.junit.Rule +import org.junit.Test +import java.io.File + +class AGP810IT { + @Rule + @JvmField + val project: TemporaryTestProject = TemporaryTestProject("playground-android-multi", "playground", true) + + @Test + fun testRunsKSP() { + val gradleRunner = GradleRunner.create().withProjectDir(project.root).withGradleVersion("8.11.1") + + File(project.root, "gradle.properties").appendText("\nagpVersion=8.10.0") + gradleRunner.withArguments(":workload:compileDebugKotlin").build().let { result -> + Assert.assertEquals(TaskOutcome.SUCCESS, result.task(":workload:kspDebugKotlin")?.outcome) + } + } +} diff --git a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AGP812IT.kt b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AGP812IT.kt new file mode 100644 index 0000000000..c981ec19df --- /dev/null +++ b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AGP812IT.kt @@ -0,0 +1,24 @@ +package com.google.devtools.ksp.test + +import org.gradle.testkit.runner.GradleRunner +import org.gradle.testkit.runner.TaskOutcome +import org.junit.Assert +import org.junit.Rule +import org.junit.Test +import java.io.File + +class AGP812IT { + @Rule + @JvmField + val project: TemporaryTestProject = TemporaryTestProject("playground-android-multi", "playground", true) + + @Test + fun testRunsKSP() { + val gradleRunner = GradleRunner.create().withProjectDir(project.root).withGradleVersion("8.13") + + File(project.root, "gradle.properties").appendText("\nagpVersion=8.12.0") + gradleRunner.withArguments(":workload:compileDebugKotlin").build().let { result -> + Assert.assertEquals(TaskOutcome.SUCCESS, result.task(":workload:kspDebugKotlin")?.outcome) + } + } +} diff --git a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AGP741IT.kt b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AGP890IT.kt similarity index 77% rename from integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AGP741IT.kt rename to integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AGP890IT.kt index af26d58b62..52e3e48f8c 100644 --- a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AGP741IT.kt +++ b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AGP890IT.kt @@ -1,43 +1,24 @@ -/* - * Copyright 2020 Google LLC - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - package com.google.devtools.ksp.test import org.gradle.testkit.runner.GradleRunner +import org.gradle.testkit.runner.TaskOutcome import org.junit.Assert import org.junit.Rule import org.junit.Test -import org.junit.runner.RunWith -import org.junit.runners.Parameterized import java.io.File -@RunWith(Parameterized::class) -class AGP741IT(useKSP2: Boolean) { +class AGP890IT { @Rule @JvmField - val project: TemporaryTestProject = TemporaryTestProject("playground-android-multi", "playground", useKSP2) + val project: TemporaryTestProject = TemporaryTestProject("playground-android-multi", "playground", true) @Test - fun testDependencyResolutionCheck() { - val gradleRunner = GradleRunner.create().withProjectDir(project.root).withGradleVersion("7.6.3") + fun testRunsKSP() { + val gradleRunner = GradleRunner.create().withProjectDir(project.root).withGradleVersion("8.11.1") - File(project.root, "gradle.properties").appendText("\nagpVersion=7.4.1") + File(project.root, "gradle.properties").appendText("\nagpVersion=8.9.0") gradleRunner.withArguments(":workload:compileDebugKotlin").build().let { result -> - Assert.assertFalse(result.output.contains("was resolved during configuration time.")) + Assert.assertEquals(TaskOutcome.SUCCESS, result.task(":workload:kspDebugKotlin")?.outcome) } } @@ -47,9 +28,9 @@ class AGP741IT(useKSP2: Boolean) { */ @Test fun testConfigurationsForAndroidApp() { - val gradleRunner = GradleRunner.create().withProjectDir(project.root).withGradleVersion("7.6.3") + val gradleRunner = GradleRunner.create().withProjectDir(project.root).withGradleVersion("8.11.1") - File(project.root, "gradle.properties").appendText("\nagpVersion=7.4.1") + File(project.root, "gradle.properties").appendText("\nagpVersion=8.9.0") File(project.root, "workload/build.gradle.kts").appendText( """ android { @@ -122,12 +103,6 @@ class AGP741IT(useKSP2: Boolean) { """.trimIndent() ) - gradleRunner.withArguments(":workload:testConfigurations").build() - } - - companion object { - @JvmStatic - @Parameterized.Parameters(name = "KSP2={0}") - fun params() = listOf(arrayOf(true), arrayOf(false)) + gradleRunner.withArguments(":workload:testConfigurations", "--no-configuration-cache").build() } } diff --git a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AGP731IT.kt b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AGP900IT.kt similarity index 56% rename from integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AGP731IT.kt rename to integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AGP900IT.kt index fb90b6bdb1..79ba9b45a7 100644 --- a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AGP731IT.kt +++ b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AGP900IT.kt @@ -1,20 +1,3 @@ -/* - * Copyright 2020 Google LLC - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - package com.google.devtools.ksp.test import org.gradle.testkit.runner.GradleRunner @@ -27,16 +10,19 @@ import org.junit.runners.Parameterized import java.io.File @RunWith(Parameterized::class) -class AGP731IT(useKSP2: Boolean) { +class AGP900IT(useKSP2: Boolean) { @Rule @JvmField val project: TemporaryTestProject = TemporaryTestProject("playground-android-multi", "playground", useKSP2) @Test fun testRunsKSP() { - val gradleRunner = GradleRunner.create().withProjectDir(project.root).withGradleVersion("7.6.3") + val gradleRunner = GradleRunner.create().withProjectDir(project.root).withGradleVersion("9.0.0") + + File(project.root, "gradle.properties").appendText("\nagpVersion=9.0.0-alpha05") + File(project.root, "gradle.properties").appendText("\nandroid.builtInKotlin=false") + File(project.root, "gradle.properties").appendText("\nandroid.newDsl=false") - File(project.root, "gradle.properties").appendText("\nagpVersion=7.3.1") gradleRunner.withArguments(":workload:compileDebugKotlin").build().let { result -> Assert.assertEquals(TaskOutcome.SUCCESS, result.task(":workload:kspDebugKotlin")?.outcome) } diff --git a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AndroidBuiltInKotlinIT.kt b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AndroidBuiltInKotlinIT.kt new file mode 100644 index 0000000000..65cc15c448 --- /dev/null +++ b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AndroidBuiltInKotlinIT.kt @@ -0,0 +1,55 @@ +package com.google.devtools.ksp.test + +import org.gradle.testkit.runner.GradleRunner +import org.gradle.testkit.runner.TaskOutcome +import org.junit.Assert +import org.junit.Rule +import org.junit.Test +import java.io.File + +class AndroidBuiltInKotlinIT { + @Rule + @JvmField + val project: TemporaryTestProject = TemporaryTestProject("playground-android-builtinkotlin", "playground", true) + + @Test + fun testPlaygroundAndroidWithBuiltInKotlin() { + val gradleRunner = GradleRunner.create().withProjectDir(project.root) + + gradleRunner.withArguments( + "clean", "build", "minifyReleaseWithR8", "--configuration-cache", "--info", "--stacktrace" + ).build().let { result -> + Assert.assertEquals(TaskOutcome.SUCCESS, result.task(":workload:build")?.outcome) + val mergedConfiguration = File(project.root, "workload/build/outputs/mapping/release/configuration.txt") + assert(mergedConfiguration.exists()) { + "Merged configuration file not found!\n${printDirectoryTree(project.root)}" + } + val configurationText = mergedConfiguration.readText() + assert("-keep class com.example.AClassBuilder { *; }" in configurationText) { + "Merged configuration did not contain generated proguard rules!\n$configurationText" + } + val outputs = result.output.lines() + assert("w: [ksp] [workload_debug] Mangled name for internalFun: internalFun\$workload_debug" in outputs) + assert("w: [ksp] [workload_release] Mangled name for internalFun: internalFun\$workload_release" in outputs) + } + } + + @Test + fun testPlaygroundAndroidWithBuiltInKotlinAGP90() { + val gradleRunner = GradleRunner.create().withProjectDir(project.root).withGradleVersion("9.0.0") + + File(project.root, "gradle.properties").appendText("\nagpVersion=9.0.0-alpha05") + + gradleRunner.withArguments( + "clean", "build", "minifyReleaseWithR8", "--configuration-cache", "--info", "--stacktrace" + ).buildAndFail().let { result -> + Assert.assertTrue( + result.output.contains( + "KSP is not compatible with Android Gradle Plugin's built-in Kotlin. " + + "Please disable by adding android.builtInKotlin=false to gradle.properties " + + "and apply kotlin(\"android\") plugin" + ) + ) + } + } +} diff --git a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AndroidDataBindingIT.kt b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AndroidDataBindingIT.kt new file mode 100644 index 0000000000..e0ba688b8b --- /dev/null +++ b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AndroidDataBindingIT.kt @@ -0,0 +1,42 @@ +package com.google.devtools.ksp.test + +import org.gradle.testkit.runner.GradleRunner +import org.junit.Assert +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.Parameterized + +@RunWith(Parameterized::class) +class AndroidDataBindingIT(useKSP2: Boolean) { + @Rule + @JvmField + val project: TemporaryTestProject = TemporaryTestProject("android-data-binding", useKSP2 = useKSP2) + + @Test + fun testPlaygroundAndroid() { + val gradleRunner = GradleRunner.create().withProjectDir(project.root) + + // Disabling configuration cache. See https://github.com/google/ksp/issues/299 for details + gradleRunner.withArguments( + "clean", + ":app:assemble", + "--configuration-cache-problems=warn", + "--info", + "--stacktrace" + ) + .build().let { result -> + val output = result.output.lines() + val kspTask = output.filter { + it.contains(":app:kspDebugKotlin") + } + Assert.assertTrue(kspTask.isNotEmpty()) + } + } + + companion object { + @JvmStatic + @Parameterized.Parameters(name = "KSP2={0}") + fun params() = listOf(arrayOf(true), arrayOf(false)) + } +} diff --git a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AndroidViewBindingIT.kt b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AndroidViewBindingIT.kt index 614456fc34..3159f215a7 100644 --- a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AndroidViewBindingIT.kt +++ b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AndroidViewBindingIT.kt @@ -11,7 +11,7 @@ import org.junit.runners.Parameterized class AndroidViewBindingIT(useKSP2: Boolean) { @Rule @JvmField - val project: TemporaryTestProject = TemporaryTestProject("android-view-binding", "playground", useKSP2) + val project: TemporaryTestProject = TemporaryTestProject("android-view-binding", useKSP2 = useKSP2) @Test fun testPlaygroundAndroid() { @@ -20,7 +20,7 @@ class AndroidViewBindingIT(useKSP2: Boolean) { // Disabling configuration cache. See https://github.com/google/ksp/issues/299 for details gradleRunner.withArguments( "clean", - ":app:testDebugUnitTest", + ":app:assemble", "--configuration-cache-problems=warn", "--info", "--stacktrace" diff --git a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/BuiltInKotlinAGP900IT.kt b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/BuiltInKotlinAGP900IT.kt new file mode 100644 index 0000000000..9b2e686f8e --- /dev/null +++ b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/BuiltInKotlinAGP900IT.kt @@ -0,0 +1,24 @@ +package com.google.devtools.ksp.test + +import org.gradle.testkit.runner.GradleRunner +import org.gradle.testkit.runner.TaskOutcome +import org.junit.Assert +import org.junit.Rule +import org.junit.Test +import java.io.File + +class BuiltInKotlinAGP900IT { + @Rule + @JvmField + val project: TemporaryTestProject = TemporaryTestProject("playground-android-builtinkotlin", "playground", true) + + @Test + fun testRunsKSP() { + val gradleRunner = GradleRunner.create().withProjectDir(project.root).withGradleVersion("9.0.0") + + File(project.root, "gradle.properties").appendText("\nagpVersion=9.0.0-alpha03") + gradleRunner.withArguments(":workload:compileDebugKotlin").build().let { result -> + Assert.assertEquals(TaskOutcome.SUCCESS, result.task(":workload:kspDebugKotlin")?.outcome) + } + } +} diff --git a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/GeneratedSrcsIncIT.kt b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/GeneratedSrcsIncIT.kt index ba9559cc15..0bab5ba1c9 100644 --- a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/GeneratedSrcsIncIT.kt +++ b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/GeneratedSrcsIncIT.kt @@ -19,19 +19,26 @@ class GeneratedSrcsIncIT(useKSP2: Boolean) { val gradleRunner = GradleRunner.create().withProjectDir(project.root) val expected = listOf( - "w: [ksp] 1: [File: Bar.kt, File: Baz.kt]", - "w: [ksp] 2: [File: Foo.kt]", + "w: [ksp] 1: [File: A.kt, File: Bar.kt, File: Baz.kt, File: MyJavaClass.java, File: MyKotlinClass.kt]", + "w: [ksp] 2: [File: Foo.kt, File: MyJavaClassBuilder.kt, File: MyKotlinClassBuilder.kt]", "w: [ksp] 3: [File: FooBar.kt, File: FooBaz.kt]" ) gradleRunner.withArguments("assemble").build().let { result -> - val outputs = result.output.lines().filter { it.startsWith("w: [ksp]") } + val outputs = result.output.lines().filter { it.startsWith("w: [ksp]") }.distinct() Assert.assertEquals(expected, outputs) } + + val expected2 = listOf( + "w: [ksp] 1: [File: Bar.kt, File: Baz.kt, File: MyJavaClass.java, File: MyKotlinClass.kt]", + "w: [ksp] 2: [File: Foo.kt, File: MyJavaClassBuilder.kt, File: MyKotlinClassBuilder.kt]", + "w: [ksp] 3: [File: FooBar.kt, File: FooBaz.kt]" + ) + File(project.root, "workload/src/main/kotlin/com/example/Baz.kt").appendText(System.lineSeparator()) gradleRunner.withArguments("assemble").build().let { result -> - val outputs = result.output.lines().filter { it.startsWith("w: [ksp]") } - Assert.assertEquals(expected, outputs) + val outputs = result.output.lines().filter { it.startsWith("w: [ksp]") }.distinct() + Assert.assertEquals(expected2, outputs) } } diff --git a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/KSPCmdLineOptionsIT.kt b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/KSPCmdLineOptionsIT.kt index 99741bc007..4ac7851c7f 100644 --- a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/KSPCmdLineOptionsIT.kt +++ b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/KSPCmdLineOptionsIT.kt @@ -33,10 +33,12 @@ class KSPCmdLineOptionsIT(val useKSP2: Boolean) { .newInstance() as K2JVMCompiler val repoPath = "../build/repos/test/com/google/devtools/ksp/" val kspPluginId = "com.google.devtools.ksp.symbol-processing" - val kspPluginJar = File("$repoPath/symbol-processing-cmdline/2.0.255-SNAPSHOT").listFiles()!!.filter { + val kspPluginJar = File("$repoPath/symbol-processing-cmdline/${System.getProperty("kspVersion")}") + .listFiles()!!.filter { it.name.matches(Regex(".*-\\d.jar")) }.maxByOrNull { it.lastModified() }!! - val kspApiJar = File("$repoPath/symbol-processing-api/2.0.255-SNAPSHOT").listFiles()!!.filter { + val kspApiJar = File("$repoPath/symbol-processing-api/${System.getProperty("kspVersion")}") + .listFiles()!!.filter { it.name.matches(Regex(".*-\\d.jar")) }.maxByOrNull { it.lastModified() }!! val compilerArgs = mutableListOf( @@ -98,13 +100,16 @@ class KSPCmdLineOptionsIT(val useKSP2: Boolean) { private fun getKsp2Main(mainClassName: String): Method { val repoPath = "../build/repos/test/com/google/devtools/ksp/" - val commonDepsJar = File("$repoPath/symbol-processing-common-deps/2.0.255-SNAPSHOT").listFiles()!!.filter { + val commonDepsJar = File("$repoPath/symbol-processing-common-deps/${System.getProperty("kspVersion")}") + .listFiles()!!.filter { it.name.matches(Regex(".*-\\d.jar")) }.maxByOrNull { it.lastModified() }!! - val kspMainJar = File("$repoPath/symbol-processing-aa-embeddable/2.0.255-SNAPSHOT").listFiles()!!.filter { + val kspMainJar = File("$repoPath/symbol-processing-aa-embeddable/${System.getProperty("kspVersion")}") + .listFiles()!!.filter { it.name.matches(Regex(".*-\\d.jar")) }.maxByOrNull { it.lastModified() }!! - val kspApiJar = File("$repoPath/symbol-processing-api/2.0.255-SNAPSHOT").listFiles()!!.filter { + val kspApiJar = File("$repoPath/symbol-processing-api/${System.getProperty("kspVersion")}") + .listFiles()!!.filter { it.name.matches(Regex(".*-\\d.jar")) }.maxByOrNull { it.lastModified() }!! diff --git a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/OnErrorIT.kt b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/OnErrorIT.kt index 26d8cab0f6..a0444ce0d2 100644 --- a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/OnErrorIT.kt +++ b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/OnErrorIT.kt @@ -20,8 +20,8 @@ class OnErrorIT(useKSP2: Boolean) { gradleRunner.withArguments("clean", "assemble").buildAndFail().let { result -> val errors = result.output.lines().filter { it.startsWith("e: [ksp]") } - Assert.assertEquals("e: [ksp] Error processor: errored at 2", errors.first()) - Assert.assertEquals("e: [ksp] NormalProcessor called error on 2", errors.last()) + Assert.assertTrue(errors[0].endsWith("Error processor: errored at 2")) + Assert.assertTrue(errors[1].endsWith("NormalProcessor called error at 2")) } } @@ -69,8 +69,8 @@ class OnErrorIT(useKSP2: Boolean) { gradleRunner.withArguments("clean", "assemble").buildAndFail().let { result -> val errors = result.output.lines().filter { it.startsWith("e: [ksp]") } - Assert.assertEquals("e: [ksp] Error processor: errored at 2", errors.first()) - Assert.assertEquals("e: [ksp] java.lang.Exception: Test Exception in error", errors[1]) + Assert.assertTrue(errors[0].endsWith("Error processor: errored at 2")) + Assert.assertTrue(errors[1].endsWith("java.lang.Exception: Test Exception in error")) } project.restore("workload/build.gradle.kts") } diff --git a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/PlaygroundIT.kt b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/PlaygroundIT.kt index 9677ed0535..183d3e2894 100644 --- a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/PlaygroundIT.kt +++ b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/PlaygroundIT.kt @@ -272,6 +272,14 @@ class PlaygroundIT(val useKSP2: Boolean) { project.restore(buildFile.path) } + @Test + fun testInternalJdkVersion() { + System.setProperty("java.version", "17-internal") + val gradleRunner = GradleRunner.create().withProjectDir(project.root) + + gradleRunner.buildAndCheck("clean", "build") + } + @Test fun testExcludeProcessor() { val gradleRunner = GradleRunner.create().withProjectDir(project.root) diff --git a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/TemporaryTestProject.kt b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/TemporaryTestProject.kt index c2bea5d517..bb7c9f1a7b 100644 --- a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/TemporaryTestProject.kt +++ b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/TemporaryTestProject.kt @@ -22,7 +22,9 @@ class TemporaryTestProject( val kotlinVersion = System.getProperty("kotlinVersion") val kspVersion = System.getProperty("kspVersion") val agpVersion = System.getProperty("agpVersion") - val testRepo = System.getProperty("testRepo").replace(File.separator, "/") + val testRepo = System.getProperty("testRepo") + .replace(File.separator, "/") + .replace(":", "\\:") appendProperty("kotlinVersion=$kotlinVersion") appendProperty("kspVersion=$kspVersion") appendProperty("agpVersion=$agpVersion") diff --git a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/VersionCheckIT.kt b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/VersionCheckIT.kt index 08d7a3499b..6943e1167b 100644 --- a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/VersionCheckIT.kt +++ b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/VersionCheckIT.kt @@ -2,26 +2,46 @@ package com.google.devtools.ksp.test import org.gradle.testkit.runner.GradleRunner import org.junit.Assert -import org.junit.Ignore +import org.junit.Assume import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.junit.runners.Parameterized @RunWith(Parameterized::class) -@Ignore -class VersionCheckIT(useKSP2: Boolean) { +class VersionCheckIT(val useKSP2: Boolean) { @Rule @JvmField val project: TemporaryTestProject = TemporaryTestProject("playground", useKSP2 = useKSP2) + @Test + fun testKsp1Usage() { + Assume.assumeFalse(useKSP2) + val gradleRunner = GradleRunner.create().withProjectDir(project.root) + val result = gradleRunner.withArguments( + "clean", "build" + ).run() + + Assert.assertTrue( + result.output.contains( + "We noticed you are using KSP1 which is deprecated and support for it will be removed " + + "soon - please migrate to KSP2 as soon as possible. KSP1 will no " + + "longer be compatible with Android Gradle Plugin 9.0.0 (and above) and Kotlin 2.3.0 (and above)" + ) + ) + } + @Test fun testVersion() { val gradleRunner = GradleRunner.create().withProjectDir(project.root) val result = gradleRunner.withArguments( - "-PkotlinVersion=1.4.20", "clean", "build" - ).buildAndFail() - Assert.assertTrue(result.output.contains("is too new for kotlin")) + "-PkotlinVersion=2.0.0", "clean", "build" + ).run() + if (!useKSP2) { + Assert.assertTrue(result.output.contains("is too new for kotlin")) + } else { + Assert.assertFalse(result.output.contains("is too new for kotlin")) + } } @Test @@ -29,7 +49,7 @@ class VersionCheckIT(useKSP2: Boolean) { val gradleRunner = GradleRunner.create().withProjectDir(project.root) val result = gradleRunner.withArguments( "clean", "build" - ).build() + ).run() Assert.assertFalse(result.output.contains("is too new for kotlin")) Assert.assertFalse(result.output.contains("is too old for kotlin")) } @@ -38,8 +58,8 @@ class VersionCheckIT(useKSP2: Boolean) { fun testMuteVersionCheck() { val gradleRunner = GradleRunner.create().withProjectDir(project.root) val result = gradleRunner.withArguments( - "-PkotlinVersion=1.4.20", "-Pksp.version.check=false", "clean", "build" - ).buildAndFail() + "-PkotlinVersion=2.0.0", "-Pksp.version.check=false", "clean", "build" + ).run() Assert.assertFalse(result.output.contains("is too new for kotlin")) } diff --git a/integration-tests/src/test/resources/android-data-binding/app/build.gradle.kts b/integration-tests/src/test/resources/android-data-binding/app/build.gradle.kts new file mode 100644 index 0000000000..de6868176e --- /dev/null +++ b/integration-tests/src/test/resources/android-data-binding/app/build.gradle.kts @@ -0,0 +1,52 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + +plugins { + id("com.android.application") + id("com.google.dagger.hilt.android") version "2.57.1" + id("com.google.devtools.ksp") + kotlin("android") +} + +dependencies { + implementation("androidx.activity:activity:1.11.0") + implementation("com.google.dagger:hilt-android:2.57.1") + ksp("com.google.dagger:hilt-compiler:2.57.1") +} + +android { + namespace = "com.example.databinding" + compileSdk = 36 + + defaultConfig { + applicationId = "com.example.databinding" + minSdk = 24 + targetSdk = 36 + versionCode = 1 + versionName = "1.0" + } + + buildFeatures { + dataBinding = true + } + + dataBinding { + enable = true + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } +} + +kotlin { + compilerOptions { + jvmTarget = JvmTarget.JVM_11 + } +} + +hilt { + enableAggregatingTask = false +} + + diff --git a/integration-tests/src/test/resources/android-data-binding/app/src/main/AndroidManifest.xml b/integration-tests/src/test/resources/android-data-binding/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..f10f89ecc5 --- /dev/null +++ b/integration-tests/src/test/resources/android-data-binding/app/src/main/AndroidManifest.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + diff --git a/integration-tests/src/test/resources/android-data-binding/app/src/main/kotlin/A.kt b/integration-tests/src/test/resources/android-data-binding/app/src/main/kotlin/A.kt new file mode 100644 index 0000000000..0abd30d1ff --- /dev/null +++ b/integration-tests/src/test/resources/android-data-binding/app/src/main/kotlin/A.kt @@ -0,0 +1,8 @@ +package com.example.databinding + +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton class A @Inject constructor() { + val string = "a" +} diff --git a/integration-tests/src/test/resources/android-data-binding/app/src/main/kotlin/App.kt b/integration-tests/src/test/resources/android-data-binding/app/src/main/kotlin/App.kt new file mode 100644 index 0000000000..bb89bea434 --- /dev/null +++ b/integration-tests/src/test/resources/android-data-binding/app/src/main/kotlin/App.kt @@ -0,0 +1,7 @@ +package com.example.databinding + +import android.app.Application +import dagger.hilt.android.HiltAndroidApp + +@HiltAndroidApp +class App : Application() diff --git a/integration-tests/src/test/resources/android-data-binding/app/src/main/kotlin/BindingActivity.kt b/integration-tests/src/test/resources/android-data-binding/app/src/main/kotlin/BindingActivity.kt new file mode 100644 index 0000000000..a2d69318f2 --- /dev/null +++ b/integration-tests/src/test/resources/android-data-binding/app/src/main/kotlin/BindingActivity.kt @@ -0,0 +1,20 @@ +package com.example.databinding + +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.annotation.CallSuper +import androidx.annotation.LayoutRes +import androidx.databinding.DataBindingUtil +import androidx.databinding.ViewDataBinding + +abstract class BindingActivity( + @get:LayoutRes private val layoutId: Int, +) : ComponentActivity() { + protected lateinit var binding: T + private set + + @CallSuper override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = DataBindingUtil.setContentView(this, layoutId) + } +} diff --git a/integration-tests/src/test/resources/android-data-binding/app/src/main/kotlin/MainActivity.kt b/integration-tests/src/test/resources/android-data-binding/app/src/main/kotlin/MainActivity.kt new file mode 100644 index 0000000000..4a89581a70 --- /dev/null +++ b/integration-tests/src/test/resources/android-data-binding/app/src/main/kotlin/MainActivity.kt @@ -0,0 +1,16 @@ +package com.example.databinding + +import android.os.Bundle +import com.example.databinding.databinding.ActivityMainBinding +import dagger.hilt.android.AndroidEntryPoint +import javax.inject.Inject + +@AndroidEntryPoint +class MainActivity : BindingActivity(R.layout.activity_main) { + @Inject lateinit var a: A + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding.a = a + } +} diff --git a/integration-tests/src/test/resources/android-data-binding/app/src/main/res/layout/activity_main.xml b/integration-tests/src/test/resources/android-data-binding/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000000..2b1157cd6a --- /dev/null +++ b/integration-tests/src/test/resources/android-data-binding/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + diff --git a/integration-tests/src/test/resources/android-data-binding/build.gradle.kts b/integration-tests/src/test/resources/android-data-binding/build.gradle.kts new file mode 100644 index 0000000000..46dc822881 --- /dev/null +++ b/integration-tests/src/test/resources/android-data-binding/build.gradle.kts @@ -0,0 +1,26 @@ +buildscript { + val testRepo: String by project + + repositories { + maven(testRepo) + mavenCentral() + maven("https://redirector.kotlinlang.org/maven/bootstrap/") + google() + } +} + +plugins { + id("com.android.application") apply false + kotlin("android") apply false + id("com.google.devtools.ksp") apply false +} + +allprojects { + val testRepo: String by project + repositories { + maven(testRepo) + mavenCentral() + maven("https://redirector.kotlinlang.org/maven/bootstrap/") + google() + } +} diff --git a/integration-tests/src/test/resources/android-data-binding/settings.gradle.kts b/integration-tests/src/test/resources/android-data-binding/settings.gradle.kts new file mode 100644 index 0000000000..fa66e55963 --- /dev/null +++ b/integration-tests/src/test/resources/android-data-binding/settings.gradle.kts @@ -0,0 +1,22 @@ +pluginManagement { + val kotlinVersion: String by settings + val kspVersion: String by settings + val testRepo: String by settings + val agpVersion: String by settings + plugins { + id("com.google.devtools.ksp") version kspVersion apply false + kotlin("jvm") version kotlinVersion apply false + kotlin("android") version kotlinVersion apply false + id("com.android.application") version agpVersion apply false + id("com.android.library") version agpVersion apply false + } + repositories { + maven(testRepo) + gradlePluginPortal() + google() + mavenCentral() + maven("https://redirector.kotlinlang.org/maven/bootstrap/") + } +} + +include(":app") diff --git a/integration-tests/src/test/resources/android-view-binding/app/build.gradle.kts b/integration-tests/src/test/resources/android-view-binding/app/build.gradle.kts index c3c6cd4f35..688dfc33ed 100644 --- a/integration-tests/src/test/resources/android-view-binding/app/build.gradle.kts +++ b/integration-tests/src/test/resources/android-view-binding/app/build.gradle.kts @@ -18,4 +18,7 @@ android { buildFeatures { viewBinding = true } + viewBinding { + enable = true + } } diff --git a/integration-tests/src/test/resources/android-view-binding/build.gradle.kts b/integration-tests/src/test/resources/android-view-binding/build.gradle.kts index 69149405bd..46dc822881 100644 --- a/integration-tests/src/test/resources/android-view-binding/build.gradle.kts +++ b/integration-tests/src/test/resources/android-view-binding/build.gradle.kts @@ -10,7 +10,6 @@ buildscript { } plugins { - kotlin("jvm") apply false id("com.android.application") apply false kotlin("android") apply false id("com.google.devtools.ksp") apply false diff --git a/integration-tests/src/test/resources/android-view-binding/processor/build.gradle.kts b/integration-tests/src/test/resources/android-view-binding/processor/build.gradle.kts deleted file mode 100644 index d92c72abd7..0000000000 --- a/integration-tests/src/test/resources/android-view-binding/processor/build.gradle.kts +++ /dev/null @@ -1,9 +0,0 @@ -plugins { - kotlin("jvm") -} -dependencies { - implementation("com.google.devtools.ksp:symbol-processing-api:2.0.255-SNAPSHOT") - implementation(files("/Users/alexgolubev/Projects/alex-ksp/gradle-plugin/build/kotlin/compileTestKotlin/classpath-snapshot")) - implementation(files("/Users/alexgolubev/Projects/alex-ksp/gradle-plugin/build/classes/kotlin/test")) - implementation(files("/Users/alexgolubev/Projects/alex-ksp/gradle-plugin/build/kotlin/compileTestKotlin/cacheable")) -} diff --git a/integration-tests/src/test/resources/android-view-binding/settings.gradle.kts b/integration-tests/src/test/resources/android-view-binding/settings.gradle.kts index 7ee188b4d1..fa66e55963 100644 --- a/integration-tests/src/test/resources/android-view-binding/settings.gradle.kts +++ b/integration-tests/src/test/resources/android-view-binding/settings.gradle.kts @@ -20,4 +20,3 @@ pluginManagement { } include(":app") -include(":processor") diff --git a/integration-tests/src/test/resources/on-error/on-error-processor/src/main/kotlin/ErrorProcessor.kt b/integration-tests/src/test/resources/on-error/on-error-processor/src/main/kotlin/ErrorProcessor.kt index 976019bf55..e809c51f75 100644 --- a/integration-tests/src/test/resources/on-error/on-error-processor/src/main/kotlin/ErrorProcessor.kt +++ b/integration-tests/src/test/resources/on-error/on-error-processor/src/main/kotlin/ErrorProcessor.kt @@ -36,14 +36,15 @@ class ErrorProcessor : SymbolProcessor { throw Exception("Test Exception in process") } rounds++ + val main = resolver.getSymbolsWithAnnotation("kotlin.OptIn").single() if (rounds == 2) { if (exception == "" || exception == "error") { - logger.error("Error processor: errored at $rounds") + logger.error("Error processor: errored at $rounds", main) } } else { codeGenerator.createNewFile(Dependencies.ALL_FILES, "test", "error", "log") } - return emptyList() + return listOf(main) } override fun finish() { diff --git a/integration-tests/src/test/resources/on-error/on-error-processor/src/main/kotlin/NormalProcessor.kt b/integration-tests/src/test/resources/on-error/on-error-processor/src/main/kotlin/NormalProcessor.kt index c751c5827d..4b1f0d0ff0 100644 --- a/integration-tests/src/test/resources/on-error/on-error-processor/src/main/kotlin/NormalProcessor.kt +++ b/integration-tests/src/test/resources/on-error/on-error-processor/src/main/kotlin/NormalProcessor.kt @@ -7,7 +7,7 @@ class NormalProcessor : SymbolProcessor { var rounds = 0 override fun onError() { - logger.error("NormalProcessor called error on $rounds") + logger.error("NormalProcessor called error at $rounds") } fun init( diff --git a/integration-tests/src/test/resources/playground-android-builtinkotlin/build.gradle.kts b/integration-tests/src/test/resources/playground-android-builtinkotlin/build.gradle.kts new file mode 100644 index 0000000000..4d3201df21 --- /dev/null +++ b/integration-tests/src/test/resources/playground-android-builtinkotlin/build.gradle.kts @@ -0,0 +1,20 @@ +buildscript { + val testRepo: String by project + + repositories { + maven(testRepo) + mavenCentral() + maven("https://redirector.kotlinlang.org/maven/bootstrap/") + google() + } +} + +allprojects { + val testRepo: String by project + repositories { + maven(testRepo) + mavenCentral() + maven("https://redirector.kotlinlang.org/maven/bootstrap/") + google() + } +} diff --git a/integration-tests/src/test/resources/playground-android-builtinkotlin/settings.gradle.kts b/integration-tests/src/test/resources/playground-android-builtinkotlin/settings.gradle.kts new file mode 100644 index 0000000000..9902a6f43e --- /dev/null +++ b/integration-tests/src/test/resources/playground-android-builtinkotlin/settings.gradle.kts @@ -0,0 +1,24 @@ +pluginManagement { + val kotlinVersion: String by settings + val kspVersion: String by settings + val testRepo: String by settings + val agpVersion: String by settings + plugins { + id("com.google.devtools.ksp") version kspVersion apply false + kotlin("jvm") version kotlinVersion apply false + id("com.android.application") version agpVersion apply false + id("com.android.experimental.built-in-kotlin") version agpVersion apply false + } + repositories { + maven(testRepo) + gradlePluginPortal() + google() + mavenCentral() + maven("https://redirector.kotlinlang.org/maven/bootstrap/") + } +} + +rootProject.name = "playground" + +include(":workload") +include(":test-processor") diff --git a/integration-tests/src/test/resources/playground-android-builtinkotlin/test-processor/build.gradle.kts b/integration-tests/src/test/resources/playground-android-builtinkotlin/test-processor/build.gradle.kts new file mode 100644 index 0000000000..d3390ab956 --- /dev/null +++ b/integration-tests/src/test/resources/playground-android-builtinkotlin/test-processor/build.gradle.kts @@ -0,0 +1,25 @@ +val kspVersion: String by project +val testRepo: String by project + +plugins { + kotlin("jvm") +} + +group = "com.example" +version = "1.0-SNAPSHOT" + +repositories { + maven(testRepo) + mavenCentral() + maven("https://redirector.kotlinlang.org/maven/bootstrap/") +} + +dependencies { + implementation(kotlin("stdlib")) + implementation("com.squareup:javapoet:1.12.1") + implementation("com.google.devtools.ksp:symbol-processing-api:$kspVersion") +} + +sourceSets.main { + java.srcDirs("src/main/kotlin") +} diff --git a/integration-tests/src/test/resources/playground-android-builtinkotlin/workload/build.gradle.kts b/integration-tests/src/test/resources/playground-android-builtinkotlin/workload/build.gradle.kts new file mode 100644 index 0000000000..748419c111 --- /dev/null +++ b/integration-tests/src/test/resources/playground-android-builtinkotlin/workload/build.gradle.kts @@ -0,0 +1,45 @@ +val testRepo: String by project + +plugins { + // DO NOT CHANGE THE ORDER. + id("com.google.devtools.ksp") + id("com.android.application") + id("com.android.experimental.built-in-kotlin") +} + +version = "1.0-SNAPSHOT" + +repositories { + maven(testRepo) + mavenCentral() + maven("https://redirector.kotlinlang.org/maven/bootstrap/") +} + +dependencies { + implementation(project(":test-processor")) + ksp(project(":test-processor")) +} + +android { + namespace = "com.example.myapplication" + compileSdk = 34 + defaultConfig { + applicationId = "org.gradle.kotlin.dsl.samples.androidstudio" + minSdk = 34 + targetSdk = 34 + versionCode = 1 + versionName = "1.0" + } + buildTypes { + getByName("release") { + // For regression testing https://github.com/google/ksp/pull/467 + proguardFiles.add(file("proguard-rules.pro")) + isMinifyEnabled = true + } + } +} + +ksp { + arg("option1", "value1") + arg("option2", "value2") +} diff --git a/integration-tests/src/test/resources/playground-android-builtinkotlin/workload/proguard-rules.pro b/integration-tests/src/test/resources/playground-android-builtinkotlin/workload/proguard-rules.pro new file mode 100644 index 0000000000..a90bbb3f00 --- /dev/null +++ b/integration-tests/src/test/resources/playground-android-builtinkotlin/workload/proguard-rules.pro @@ -0,0 +1 @@ +-keep class com.example.AClass { *; } \ No newline at end of file diff --git a/integration-tests/src/test/resources/playground-android-builtinkotlin/workload/src/main/AndroidManifest.xml b/integration-tests/src/test/resources/playground-android-builtinkotlin/workload/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..568741e54f --- /dev/null +++ b/integration-tests/src/test/resources/playground-android-builtinkotlin/workload/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/integration-tests/src/test/resources/playground-android-multi/workload/build.gradle.kts b/integration-tests/src/test/resources/playground-android-multi/workload/build.gradle.kts index 48553720b6..11b6b9c80c 100644 --- a/integration-tests/src/test/resources/playground-android-multi/workload/build.gradle.kts +++ b/integration-tests/src/test/resources/playground-android-multi/workload/build.gradle.kts @@ -26,6 +26,12 @@ android { compileSdk = 34 defaultConfig { minSdk = 34 + } + lint { + targetSdk = 34 + } + + testOptions { targetSdk = 34 } } diff --git a/integration-tests/src/test/resources/playground-android/settings.gradle.kts b/integration-tests/src/test/resources/playground-android/settings.gradle.kts index 3ecdc0dde2..07915a765c 100644 --- a/integration-tests/src/test/resources/playground-android/settings.gradle.kts +++ b/integration-tests/src/test/resources/playground-android/settings.gradle.kts @@ -8,6 +8,7 @@ pluginManagement { kotlin("jvm") version kotlinVersion apply false kotlin("android") version kotlinVersion apply false id("com.android.application") version agpVersion apply false + id("app.cash.sqldelight") version "2.0.2" apply false } repositories { maven(testRepo) diff --git a/integration-tests/src/test/resources/playground-android/workload/build.gradle.kts b/integration-tests/src/test/resources/playground-android/workload/build.gradle.kts index 5eb45a17c5..d6aaf3b09d 100644 --- a/integration-tests/src/test/resources/playground-android/workload/build.gradle.kts +++ b/integration-tests/src/test/resources/playground-android/workload/build.gradle.kts @@ -5,6 +5,7 @@ plugins { id("com.google.devtools.ksp") id("com.android.application") kotlin("android") + id("app.cash.sqldelight") } version = "1.0-SNAPSHOT" diff --git a/integration-tests/src/test/resources/srcs-gen/build.gradle.kts b/integration-tests/src/test/resources/srcs-gen/build.gradle.kts new file mode 100644 index 0000000000..333c8553ab --- /dev/null +++ b/integration-tests/src/test/resources/srcs-gen/build.gradle.kts @@ -0,0 +1,26 @@ +buildscript { + val testRepo: String by project + + repositories { + maven(testRepo) + mavenCentral() + maven("https://redirector.kotlinlang.org/maven/bootstrap/") + google() + } +} + +plugins { + kotlin("android") apply false + id("com.google.devtools.ksp") apply false + id("com.android.library") apply false +} + +allprojects { + val testRepo: String by project + repositories { + maven(testRepo) + mavenCentral() + maven("https://redirector.kotlinlang.org/maven/bootstrap/") + google() + } +} diff --git a/integration-tests/src/test/resources/srcs-gen/settings.gradle.kts b/integration-tests/src/test/resources/srcs-gen/settings.gradle.kts new file mode 100644 index 0000000000..db9ecc5bda --- /dev/null +++ b/integration-tests/src/test/resources/srcs-gen/settings.gradle.kts @@ -0,0 +1,24 @@ +pluginManagement { + val kotlinVersion: String by settings + val kspVersion: String by settings + val testRepo: String by settings + val agpVersion: String by settings + plugins { + id("com.google.devtools.ksp") version kspVersion apply false + kotlin("jvm") version kotlinVersion apply false + kotlin("android") version kotlinVersion apply false + id("com.android.library") version agpVersion apply false + } + repositories { + maven(testRepo) + gradlePluginPortal() + google() + mavenCentral() + maven("https://redirector.kotlinlang.org/maven/bootstrap/") + } +} + +rootProject.name = "playground" + +include(":workload") +include(":test-processor") diff --git a/integration-tests/src/test/resources/srcs-gen/test-processor/src/main/kotlin/Builder.kt b/integration-tests/src/test/resources/srcs-gen/test-processor/src/main/kotlin/Builder.kt new file mode 100644 index 0000000000..9434b3627d --- /dev/null +++ b/integration-tests/src/test/resources/srcs-gen/test-processor/src/main/kotlin/Builder.kt @@ -0,0 +1,3 @@ +package com.example.annotation + +annotation class Builder diff --git a/integration-tests/src/test/resources/srcs-gen/test-processor/src/main/kotlin/BuilderProcessor.kt b/integration-tests/src/test/resources/srcs-gen/test-processor/src/main/kotlin/BuilderProcessor.kt new file mode 100644 index 0000000000..6ee5158483 --- /dev/null +++ b/integration-tests/src/test/resources/srcs-gen/test-processor/src/main/kotlin/BuilderProcessor.kt @@ -0,0 +1,102 @@ +import com.google.devtools.ksp.getConstructors +import com.google.devtools.ksp.containingFile +import com.google.devtools.ksp.processing.* +import com.google.devtools.ksp.symbol.* +import com.google.devtools.ksp.validate +import java.io.OutputStream + +fun OutputStream.appendText(str: String) { + this.write(str.toByteArray()) +} + +class BuilderProcessor : SymbolProcessor { + lateinit var codeGenerator: CodeGenerator + lateinit var logger: KSPLogger + + fun init( + options: Map, + kotlinVersion: KotlinVersion, + codeGenerator: CodeGenerator, + logger: KSPLogger, + ) { + this.codeGenerator = codeGenerator + this.logger = logger + } + + override fun process(resolver: Resolver): List { + val symbols = resolver.getSymbolsWithAnnotation("com.example.annotation.Builder") + val ret = symbols.filter { !it.validate() } + symbols + .filter { it.validate() } + .forEach { it.accept(BuilderVisitor(), Unit) } + return ret.toList() + } + + inner class BuilderVisitor : KSVisitorVoid() { + override fun visitClassDeclaration(classDeclaration: KSClassDeclaration, data: Unit) { + val constructor = classDeclaration.primaryConstructor + ?: classDeclaration.getConstructors().maxByOrNull { it.parameters.size } + + if (constructor == null) { + logger.error("No suitable constructor found for ${classDeclaration.qualifiedName?.asString()}", classDeclaration) + return + } + + constructor.accept(this, data) + } + + override fun visitFunctionDeclaration(function: KSFunctionDeclaration, data: Unit) { + val parent = function.parentDeclaration as KSClassDeclaration + val packageName = parent.containingFile!!.packageName.asString() + val className = "${parent.simpleName.asString()}Builder" + + val file = codeGenerator.createNewFile( + Dependencies(true, function.containingFile!!), packageName, className + ) + file.appendText("package $packageName\n\n") + file.appendText("class $className{\n") + function.parameters.forEach { + val name = it.name!!.asString() + val typeName = StringBuilder(it.type.resolve().declaration.qualifiedName?.asString() ?: "") + val typeArgs = it.type.element!!.typeArguments + if (it.type.element!!.typeArguments.toList().isNotEmpty()) { + typeName.append("<") + typeName.append( + typeArgs.map { + val type = it.type?.resolve() + "${it.variance.label} ${type?.declaration?.qualifiedName?.asString() ?: "ERROR"}" + + if (type?.nullability == Nullability.NULLABLE) "?" else "" + }.joinToString(", ") + ) + typeName.append(">") + } + file.appendText(" private var $name: $typeName? = null\n") + file.appendText(" internal fun with${name.capitalize()}($name: $typeName): $className {\n") + file.appendText(" this.$name = $name\n") + file.appendText(" return this\n") + file.appendText(" }\n\n") + } + file.appendText(" internal fun build(): ${parent.qualifiedName!!.asString()} {\n") + file.appendText(" return ${parent.qualifiedName!!.asString()}(") + file.appendText( + function.parameters.map { + "${it.name!!.asString()}!!" + }.joinToString(", ") + ) + file.appendText(")\n") + file.appendText(" }\n") + file.appendText("}\n") + file.close() + } + } +} + +class TestProcessorProvider2 : SymbolProcessorProvider { + override fun create( + env: SymbolProcessorEnvironment, + ): SymbolProcessor { + return BuilderProcessor().apply { + init(env.options, env.kotlinVersion, env.codeGenerator, env.logger) + } + } +} diff --git a/integration-tests/src/test/resources/srcs-gen/test-processor/src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider b/integration-tests/src/test/resources/srcs-gen/test-processor/src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider new file mode 100644 index 0000000000..3a1528c96c --- /dev/null +++ b/integration-tests/src/test/resources/srcs-gen/test-processor/src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider @@ -0,0 +1,2 @@ +TestProcessorProvider +TestProcessorProvider2 diff --git a/integration-tests/src/test/resources/srcs-gen/workload/build.gradle.kts b/integration-tests/src/test/resources/srcs-gen/workload/build.gradle.kts new file mode 100644 index 0000000000..09b9056158 --- /dev/null +++ b/integration-tests/src/test/resources/srcs-gen/workload/build.gradle.kts @@ -0,0 +1,129 @@ +val testRepo: String by project + +plugins { + // DO NOT CHANGE THE ORDER. + id("com.google.devtools.ksp") + id("com.android.library") + kotlin("android") +} + +version = "1.0-SNAPSHOT" + +repositories { + maven(testRepo) + mavenCentral() + maven("https://redirector.kotlinlang.org/maven/bootstrap/") +} + +dependencies { + implementation(kotlin("stdlib")) + implementation(project(":test-processor")) + ksp(project(":test-processor")) +} + +android { + namespace = "com.example.mylibrary" + compileSdk = 34 + defaultConfig { + minSdk = 34 + } + lint { + targetSdk = 34 + } + + testOptions { + targetSdk = 34 + } +} + +ksp { + arg("option1", "value1") + arg("option2", "value2") +} + +androidComponents.onVariants { variant -> + val kotlinGenTaskProvider = project.tasks.register( + "generate${variant.name}KotlinSources", + KotlinSourceGeneratingTask::class.java + ) + + kotlinGenTaskProvider.configure { + this.packageName.set("com.kotlingen") + this.sourceFiles.set( + variant.sources.kotlin!!.static + ) + } + variant.sources.java!!.addGeneratedSourceDirectory( + kotlinGenTaskProvider, KotlinSourceGeneratingTask::outputDir + ) + + + val javaGenTaskProvider = project.tasks.register( + "generate${variant.name}JavaSources", + JavaSourceGeneratingTask::class.java + ) + javaGenTaskProvider.configure { + this.packageName.set("com.javagen") + this.sourceFiles.set( + variant.sources.java!!.static + ) + } + variant.sources.java!!.addGeneratedSourceDirectory( + javaGenTaskProvider, JavaSourceGeneratingTask::outputDir + ) +} + +abstract class KotlinSourceGeneratingTask: DefaultTask() { + @get:Input + abstract val packageName: Property + @get:OutputDirectory + abstract val outputDir: DirectoryProperty + @get:InputFiles + abstract val sourceFiles: ListProperty + @TaskAction + fun generate() { + val outputFolder = File(outputDir.get().asFile, packageName.get().replace('.', File.separatorChar)) + outputFolder.mkdirs() + File(outputFolder, "MyKotlinClass.kt").writeText( + """ + package ${packageName.get()} + import com.example.annotation.Builder + + @Builder + class MyKotlinClass { + fun someFunctionUsingGeneratedAPIs() { + System.err.println("Hello world !") + } + } + """.trimIndent() + ) + } +} + +abstract class JavaSourceGeneratingTask: DefaultTask() { + @get:Input + abstract val packageName: Property + @get:OutputDirectory + abstract val outputDir: DirectoryProperty + @get:InputFiles + abstract val sourceFiles: ListProperty + @TaskAction + fun generate() { + val outputFolder = File(outputDir.get().asFile, packageName.get().replace('.', File.separatorChar)) + outputFolder.mkdirs() + File(outputFolder, "MyJavaClass.java").writeText( + """ + package ${packageName.get()}; + import com.example.annotation.Builder; + + @Builder + public class MyJavaClass { + public static void someFunctionUsingGeneratedAPIs() { + System.err.println("Hello world !"); + } + } + """.trimIndent() + ) + } +} + diff --git a/integration-tests/src/test/resources/srcs-gen/workload/src/main/kotlin/com/example/A.kt b/integration-tests/src/test/resources/srcs-gen/workload/src/main/kotlin/com/example/A.kt new file mode 100644 index 0000000000..38beb9fba3 --- /dev/null +++ b/integration-tests/src/test/resources/srcs-gen/workload/src/main/kotlin/com/example/A.kt @@ -0,0 +1,14 @@ +package com.example + +import com.kotlingen.MyKotlinClassBuilder +import com.javagen.MyJavaClassBuilder + +fun main() { + val builder = MyKotlinClassBuilder() + val kotlinClass = builder.build() + println(kotlinClass) + + val builder2 = MyJavaClassBuilder() + val javaClass = builder.build() + println(javaClass) +} diff --git a/kotlin-analysis-api/build.gradle.kts b/kotlin-analysis-api/build.gradle.kts index c579976ccf..a9ac1607ae 100644 --- a/kotlin-analysis-api/build.gradle.kts +++ b/kotlin-analysis-api/build.gradle.kts @@ -1,4 +1,5 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar +import com.google.devtools.ksp.RelativizingInternalPathProvider import com.google.devtools.ksp.RelativizingPathProvider import java.io.ByteArrayOutputStream @@ -163,10 +164,6 @@ tasks.withType().configureEach { exclude("kotlin/**") exclude("kotlinx/coroutines/**") archiveClassifier.set("") - minimize { - exclude(dependency("org.lz4:lz4-java:.*")) - exclude(dependency("com.github.ben-manes.caffeine:caffeine:.*")) - } mergeServiceFiles() } @@ -322,5 +319,5 @@ tasks.test { .asFile .apply { if (!exists()) mkdirs() } jvmArgumentProviders.add(RelativizingPathProvider("idea.home.path", ideaHomeDir)) - jvmArgumentProviders.add(RelativizingPathProvider("java.io.tmpdir", temporaryDir)) + jvmArgumentProviders.add(RelativizingInternalPathProvider("java.io.tmpdir", temporaryDir)) } diff --git a/kotlin-analysis-api/shadow-validation-baseline.txt b/kotlin-analysis-api/shadow-validation-baseline.txt index 3a900e8d35..1042e8017b 100644 --- a/kotlin-analysis-api/shadow-validation-baseline.txt +++ b/kotlin-analysis-api/shadow-validation-baseline.txt @@ -1,25 +1,12 @@ -kotlin-analysis-api-2.0.255-SNAPSHOT.jar -> not found - com.google.common.base.package-info -> javax.annotation.ParametersAreNonnullByDefault not found - com.google.common.cache.package-info -> javax.annotation.ParametersAreNonnullByDefault not found - com.google.common.collect.package-info -> javax.annotation.ParametersAreNonnullByDefault not found - com.google.common.escape.package-info -> javax.annotation.ParametersAreNonnullByDefault not found - com.google.common.eventbus.package-info -> javax.annotation.ParametersAreNonnullByDefault not found - com.google.common.graph.package-info -> javax.annotation.ParametersAreNonnullByDefault not found - com.google.common.hash.package-info -> javax.annotation.ParametersAreNonnullByDefault not found - com.google.common.html.package-info -> javax.annotation.ParametersAreNonnullByDefault not found - com.google.common.io.package-info -> javax.annotation.ParametersAreNonnullByDefault not found - com.google.common.math.package-info -> javax.annotation.ParametersAreNonnullByDefault not found - com.google.common.net.package-info -> javax.annotation.ParametersAreNonnullByDefault not found - com.google.common.primitives.package-info -> javax.annotation.ParametersAreNonnullByDefault not found - com.google.common.reflect.package-info -> javax.annotation.ParametersAreNonnullByDefault not found - com.google.common.util.concurrent.package-info -> javax.annotation.ParametersAreNonnullByDefault not found - com.google.common.xml.package-info -> javax.annotation.ParametersAreNonnullByDefault not found - com.intellij.codeInsight.AnnotationTargetUtil -> com.intellij.psi.CommonClassNames not found - com.intellij.codeInsight.AnnotationUtil -> com.intellij.psi.CommonClassNames not found - com.intellij.codeInsight.ExceptionUtil -> com.intellij.psi.CommonClassNames not found - com.intellij.codeInsight.daemon.impl.analysis.JavaGenericsUtil -> com.intellij.psi.CommonClassNames not found - com.intellij.codeInsight.folding.impl.ClosureFolding -> com.intellij.psi.CommonClassNames not found - com.intellij.codeInsight.generation.OverrideImplementExploreUtil -> com.intellij.psi.CommonClassNames not found +kotlin-analysis-api-255.255.255-SNAPSHOT.jar -> not found + com.google.common.util.concurrent.AbstractFuture -> com.google.j2objc.annotations.ReflectionSupport not found + com.google.common.util.concurrent.AbstractFuture -> com.google.j2objc.annotations.ReflectionSupport$Level not found + com.google.common.util.concurrent.AggregateFutureState -> com.google.j2objc.annotations.ReflectionSupport not found + com.google.common.util.concurrent.AggregateFutureState -> com.google.j2objc.annotations.ReflectionSupport$Level not found + com.google.common.util.concurrent.AtomicDouble -> com.google.j2objc.annotations.ReflectionSupport not found + com.google.common.util.concurrent.AtomicDouble -> com.google.j2objc.annotations.ReflectionSupport$Level not found + com.google.common.util.concurrent.InterruptibleTask -> com.google.j2objc.annotations.ReflectionSupport not found + com.google.common.util.concurrent.InterruptibleTask -> com.google.j2objc.annotations.ReflectionSupport$Level not found com.intellij.codeWithMe.ClientIdElement -> kotlinx.coroutines.ThreadContextElement not found com.intellij.codeWithMe.ClientIdElement -> kotlinx.coroutines.ThreadContextElement$DefaultImpls not found com.intellij.concurrency.ThreadContext$getContextSkeleton$1 -> kotlinx.coroutines.CoroutineId not found @@ -56,7 +43,11 @@ kotlin-analysis-api-2.0.255-SNAPSHOT.jar -> not found com.intellij.diagnostic.CoroutineTracerShim$Companion$coroutineTracer$1 -> kotlinx.coroutines.CoroutineScope not found com.intellij.diagnostic.JobTree -> kotlinx.coroutines.Job not found com.intellij.diagnostic.JobTree -> kotlinx.coroutines.debug.internal.DebugCoroutineInfo not found + com.intellij.diagnostic.PerformanceListener -> kotlinx.coroutines.CoroutineScope not found + com.intellij.diagnostic.StartUpPerformanceService -> kotlinx.coroutines.flow.Flow not found com.intellij.diagnostic.ThreadDumper -> kotlinx.coroutines.CoroutineScope not found + com.intellij.ide.bootstrap.InitAppContext -> kotlinx.coroutines.CompletableDeferred not found + com.intellij.ide.bootstrap.InitAppContext -> kotlinx.coroutines.Job not found com.intellij.ide.plugins.PathBasedProductLoadingStrategy -> kotlinx.coroutines.CoroutineScope not found com.intellij.ide.plugins.PathBasedProductLoadingStrategy -> kotlinx.coroutines.Deferred not found com.intellij.ide.plugins.PathBasedProductLoadingStrategy$loadFromPluginClasspathDescriptor$1$1 -> kotlinx.coroutines.CoroutineScope not found @@ -120,13 +111,23 @@ kotlin-analysis-api-2.0.255-SNAPSHOT.jar -> not found com.intellij.ide.plugins.cl.PluginClassLoader -> kotlinx.coroutines.Job not found com.intellij.ide.plugins.cl.PluginClassLoader -> kotlinx.coroutines.JobKt not found com.intellij.ide.plugins.cl.PluginClassLoader -> kotlinx.coroutines.SupervisorKt not found - com.intellij.lang.jvm.types.JvmPrimitiveTypeKind -> com.intellij.psi.CommonClassNames not found + com.intellij.java.frontback.psi.impl.JavaLangLevelProjectCustomDataSynchronizer -> kotlinx.coroutines.flow.Flow not found + com.intellij.java.frontback.psi.impl.JavaLangLevelProjectCustomDataSynchronizer$getValues$$inlined$map$1 -> kotlinx.coroutines.flow.Flow not found + com.intellij.java.frontback.psi.impl.JavaLangLevelProjectCustomDataSynchronizer$getValues$$inlined$map$1 -> kotlinx.coroutines.flow.FlowCollector not found + com.intellij.java.frontback.psi.impl.JavaLangLevelProjectCustomDataSynchronizer$getValues$$inlined$map$1 -> kotlinx.coroutines.flow.FlowKt__TransformKt not found + com.intellij.java.frontback.psi.impl.JavaLangLevelProjectCustomDataSynchronizer$getValues$$inlined$map$1$2 -> kotlinx.coroutines.flow.FlowCollector not found + com.intellij.java.frontback.psi.impl.JavaLangLevelProjectCustomDataSynchronizer$getValues$1 -> kotlinx.coroutines.channels.ProducerScope not found + com.intellij.java.frontback.psi.impl.JavaLangLevelProjectCustomDataSynchronizer$getValues$1 -> kotlinx.coroutines.flow.Flow not found com.intellij.mock.MockApplication -> kotlinx.coroutines.CoroutineScope not found com.intellij.mock.MockApplication -> kotlinx.coroutines.GlobalScope not found com.intellij.mock.MockProject -> kotlinx.coroutines.CoroutineScope not found com.intellij.mock.MockProject -> kotlinx.coroutines.GlobalScope not found com.intellij.model.SideEffectGuard$Companion -> kotlinx.coroutines.BuildersKt not found com.intellij.model.SideEffectGuard$Companion -> kotlinx.coroutines.CoroutineScope not found + com.intellij.openapi.application.ClassPathUtil -> org.apache.oro.text.regex.PatternMatcher not found + com.intellij.openapi.application.CoroutinesKt -> kotlinx.coroutines.BuildersKt not found + com.intellij.openapi.application.CoroutinesKt -> kotlinx.coroutines.Dispatchers not found + com.intellij.openapi.application.CoroutinesKt$writeAction$2 -> kotlinx.coroutines.CoroutineScope not found com.intellij.openapi.application.ex.ApplicationUtil -> kotlinx.coroutines.BuildersKt not found com.intellij.openapi.application.ex.ApplicationUtil -> kotlinx.coroutines.CoroutineDispatcher not found com.intellij.openapi.application.ex.ApplicationUtil -> kotlinx.coroutines.CoroutineScope not found @@ -143,8 +144,20 @@ kotlin-analysis-api-2.0.255-SNAPSHOT.jar -> not found com.intellij.openapi.application.ex.ApplicationUtil$runWithCheckCanceled$1$1$2 -> kotlinx.coroutines.Job not found com.intellij.openapi.application.ex.ApplicationUtil$runWithCheckCanceled$1$1$2 -> kotlinx.coroutines.Job$DefaultImpls not found com.intellij.openapi.application.ex.ApplicationUtil$runWithCheckCanceled$deferred$1 -> kotlinx.coroutines.CoroutineScope not found + com.intellij.openapi.application.impl.DispatchedRunnable -> kotlinx.coroutines.DisposableHandle not found + com.intellij.openapi.application.impl.DispatchedRunnable -> kotlinx.coroutines.Job not found + com.intellij.openapi.application.impl.DispatchedRunnable -> kotlinx.coroutines.Job$DefaultImpls not found + com.intellij.openapi.application.impl.EdtCoroutineDispatcher -> kotlinx.coroutines.Job not found + com.intellij.openapi.application.impl.EdtCoroutineDispatcher -> kotlinx.coroutines.JobKt not found + com.intellij.openapi.application.impl.EdtCoroutineDispatcher -> kotlinx.coroutines.MainCoroutineDispatcher not found + com.intellij.openapi.application.impl.EdtCoroutineDispatcherFactory -> kotlinx.coroutines.MainCoroutineDispatcher not found + com.intellij.openapi.application.impl.EdtCoroutineDispatcherFactory -> kotlinx.coroutines.internal.MainDispatcherFactory not found + com.intellij.openapi.application.impl.EdtCoroutineDispatcherFactory -> kotlinx.coroutines.internal.MainDispatcherFactory$DefaultImpls not found com.intellij.openapi.application.impl.JobProvider -> kotlinx.coroutines.Job not found com.intellij.openapi.application.impl.ModalityStateEx -> kotlinx.coroutines.Job not found + com.intellij.openapi.client.ClientSessionsUtil -> kotlinx.coroutines.BuildersKt not found + com.intellij.openapi.client.ClientSessionsUtil$forEachSessionSuspending$2 -> kotlinx.coroutines.CoroutineScope not found + com.intellij.openapi.client.ClientSessionsUtil$forEachSessionSuspending$4 -> kotlinx.coroutines.CoroutineScope not found com.intellij.openapi.components.ComponentManagerEx -> kotlinx.coroutines.CoroutineScope not found com.intellij.openapi.editor.impl.PersistentRangeMarker -> com.intellij.util.diff.FilesTooBigForDiffException not found com.intellij.openapi.editor.impl.RangeMarkerImpl -> com.intellij.util.diff.FilesTooBigForDiffException not found @@ -162,17 +175,117 @@ kotlin-analysis-api-2.0.255-SNAPSHOT.jar -> not found com.intellij.openapi.progress.Cancellation -> kotlinx.coroutines.Job not found com.intellij.openapi.progress.Cancellation -> kotlinx.coroutines.Job$Key not found com.intellij.openapi.progress.Cancellation -> kotlinx.coroutines.JobKt not found + com.intellij.openapi.progress.ContextKt -> kotlinx.coroutines.BuildersKt not found + com.intellij.openapi.progress.ContextKt -> kotlinx.coroutines.CompletableJob not found + com.intellij.openapi.progress.ContextKt -> kotlinx.coroutines.CoroutineDispatcher not found + com.intellij.openapi.progress.ContextKt -> kotlinx.coroutines.CoroutineName not found + com.intellij.openapi.progress.ContextKt -> kotlinx.coroutines.CoroutineScope not found + com.intellij.openapi.progress.ContextKt -> kotlinx.coroutines.CoroutineStart not found + com.intellij.openapi.progress.ContextKt -> kotlinx.coroutines.Dispatchers not found + com.intellij.openapi.progress.ContextKt -> kotlinx.coroutines.GlobalScope not found + com.intellij.openapi.progress.ContextKt -> kotlinx.coroutines.Job not found + com.intellij.openapi.progress.ContextKt -> kotlinx.coroutines.Job$DefaultImpls not found + com.intellij.openapi.progress.ContextKt -> kotlinx.coroutines.Job$Key not found + com.intellij.openapi.progress.ContextKt -> kotlinx.coroutines.JobKt not found + com.intellij.openapi.progress.ContextKt$cancelWithIndicator$1 -> kotlinx.coroutines.CoroutineScope not found + com.intellij.openapi.progress.ContextKt$cancelWithIndicator$1 -> kotlinx.coroutines.DelayKt not found + com.intellij.openapi.progress.ContextKt$cancelWithIndicator$1 -> kotlinx.coroutines.Job not found + com.intellij.openapi.progress.CoroutineSuspenderElement -> kotlinx.coroutines.CancellableContinuationImpl not found + com.intellij.openapi.progress.CoroutinesKt -> com.intellij.platform.util.progress.ContextKt not found + com.intellij.openapi.progress.CoroutinesKt -> com.intellij.platform.util.progress.RawProgressReporter not found + com.intellij.openapi.progress.CoroutinesKt -> com.intellij.platform.util.progress.RawProgressReporterHandle not found + com.intellij.openapi.progress.CoroutinesKt -> kotlinx.coroutines.CoroutineScope not found + com.intellij.openapi.progress.CoroutinesKt -> kotlinx.coroutines.CoroutineScopeKt not found + com.intellij.openapi.progress.CoroutinesKt -> kotlinx.coroutines.DisposableHandle not found + com.intellij.openapi.progress.CoroutinesKt -> kotlinx.coroutines.Job not found + com.intellij.openapi.progress.CoroutinesKt -> kotlinx.coroutines.Job$DefaultImpls not found + com.intellij.openapi.progress.CoroutinesKt -> kotlinx.coroutines.Job$Key not found + com.intellij.openapi.progress.CoroutinesKt -> kotlinx.coroutines.JobKt not found + com.intellij.openapi.progress.CoroutinesKt$blockingContext$2 -> kotlinx.coroutines.CoroutineScope not found + com.intellij.openapi.progress.CoroutinesKt$blockingContextScope$2 -> kotlinx.coroutines.CoroutineScope not found + com.intellij.openapi.progress.CoroutinesKt$blockingContextScope$2 -> kotlinx.coroutines.Job not found + com.intellij.openapi.progress.CoroutinesKt$blockingContextScope$2 -> kotlinx.coroutines.JobKt not found + com.intellij.openapi.progress.CoroutinesKt$indicatorRunBlockingCancellable$1 -> kotlinx.coroutines.BuildersKt not found + com.intellij.openapi.progress.CoroutinesKt$indicatorRunBlockingCancellable$1 -> kotlinx.coroutines.CoroutineName not found + com.intellij.openapi.progress.CoroutinesKt$indicatorRunBlockingCancellable$1 -> kotlinx.coroutines.CoroutineScope not found + com.intellij.openapi.progress.CoroutinesKt$jobToIndicator$1$completionHandle$1 -> kotlinx.coroutines.Job not found + com.intellij.openapi.progress.CoroutinesKt$runBlockingCancellable$1 -> kotlinx.coroutines.BuildersKt not found + com.intellij.openapi.progress.CoroutinesKt$runBlockingCancellable$1 -> kotlinx.coroutines.CoroutineScope not found + com.intellij.openapi.progress.CoroutinesKt$runBlockingCancellable$1 -> kotlinx.coroutines.Job not found + com.intellij.openapi.progress.CoroutinesKt$runBlockingCancellable$1 -> kotlinx.coroutines.Job$Key not found + com.intellij.openapi.progress.IndicatorRawProgressReporter -> com.intellij.platform.util.progress.RawProgressReporter not found + com.intellij.openapi.progress.ProgressReporterKt -> com.intellij.platform.util.progress.StepsKt not found + com.intellij.openapi.progress.ProgressReporterKt -> kotlinx.coroutines.CoroutineScope not found + com.intellij.openapi.progress.RawProgressReporterIndicator -> com.intellij.platform.util.progress.RawProgressReporter not found com.intellij.openapi.progress.impl.ProgressRunner -> kotlinx.coroutines.DisposableHandle not found com.intellij.openapi.progress.impl.ProgressRunner -> kotlinx.coroutines.Job not found + com.intellij.openapi.project.DumbKt -> kotlinx.coroutines.CancellableContinuation not found + com.intellij.openapi.project.DumbKt -> kotlinx.coroutines.CancellableContinuationImpl not found + com.intellij.openapi.project.DumbKt$waitForSmartMode$2$1 -> kotlinx.coroutines.CancellableContinuation not found com.intellij.openapi.project.Project -> kotlinx.coroutines.CoroutineScope not found + com.intellij.openapi.project.ProjectCustomDataSynchronizer -> kotlinx.coroutines.flow.Flow not found + com.intellij.openapi.startup.StartupManager -> kotlinx.coroutines.Job not found + com.intellij.openapi.util.CoroutinesKt -> kotlinx.coroutines.CancellableContinuation not found + com.intellij.openapi.util.CoroutinesKt -> kotlinx.coroutines.CancellableContinuationImpl not found + com.intellij.openapi.util.CoroutinesKt$await$2$1 -> kotlinx.coroutines.CancellableContinuation not found + com.intellij.openapi.util.CoroutinesKt$await$2$2 -> kotlinx.coroutines.CancellableContinuation not found + com.intellij.openapi.util.io.FileSetLimiter -> kotlinx.coroutines.CoroutineDispatcher not found + com.intellij.openapi.util.io.FileSetLimiter -> kotlinx.coroutines.Dispatchers not found + com.intellij.openapi.util.io.FileSetLimiter -> kotlinx.coroutines.ExecutorsKt not found + com.intellij.openapi.util.registry.RegistryManagerKt -> kotlinx.coroutines.BuildersKt not found + com.intellij.openapi.util.registry.RegistryManagerKt -> kotlinx.coroutines.CoroutineScope not found + com.intellij.openapi.util.registry.RegistryManagerKt -> kotlinx.coroutines.CoroutineStart not found + com.intellij.openapi.util.registry.RegistryManagerKt -> kotlinx.coroutines.Job not found + com.intellij.openapi.util.registry.RegistryManagerKt$useRegistryManagerWhenReady$1 -> kotlinx.coroutines.CoroutineScope not found + com.intellij.openapi.util.registry.RegistryManagerKt$useRegistryManagerWhenReadyJavaAdapter$1 -> kotlinx.coroutines.CoroutineScope not found com.intellij.openapi.util.registry.RegistryValue -> kotlinx.coroutines.CoroutineScope not found com.intellij.openapi.util.registry.RegistryValue -> kotlinx.coroutines.DisposableHandle not found com.intellij.openapi.util.registry.RegistryValue -> kotlinx.coroutines.Job not found com.intellij.openapi.util.registry.RegistryValue -> kotlinx.coroutines.Job$Key not found + com.intellij.openapi.vfs.VirtualFileCustomDataProvider -> kotlinx.coroutines.flow.Flow not found + com.intellij.patterns.StringPatternUtil -> dk.brics.automaton.Automaton not found + com.intellij.patterns.StringPatternUtil -> dk.brics.automaton.AutomatonProvider not found + com.intellij.patterns.StringPatternUtil -> dk.brics.automaton.DatatypesAutomatonProvider not found + com.intellij.patterns.StringPatternUtil -> dk.brics.automaton.RegExp not found + com.intellij.patterns.StringPatternUtil -> dk.brics.automaton.RunAutomaton not found + com.intellij.patterns.StringPatternUtil$1 -> dk.brics.automaton.RunAutomaton not found + com.intellij.platform.diagnostic.telemetry.AggregatedMetricExporter -> io.opentelemetry.sdk.common.CompletableResultCode not found + com.intellij.platform.diagnostic.telemetry.AggregatedMetricExporter -> io.opentelemetry.sdk.metrics.InstrumentType not found + com.intellij.platform.diagnostic.telemetry.AggregatedMetricExporter -> io.opentelemetry.sdk.metrics.data.AggregationTemporality not found + com.intellij.platform.diagnostic.telemetry.AggregatedMetricExporter -> io.opentelemetry.sdk.metrics.data.MetricData not found + com.intellij.platform.diagnostic.telemetry.AggregatedMetricExporter -> io.opentelemetry.sdk.metrics.export.MetricExporter not found + com.intellij.platform.diagnostic.telemetry.AsyncSpanExporter -> io.opentelemetry.sdk.trace.data.SpanData not found + com.intellij.platform.diagnostic.telemetry.FilteredMetricsExporter -> io.opentelemetry.sdk.common.CompletableResultCode not found + com.intellij.platform.diagnostic.telemetry.FilteredMetricsExporter -> io.opentelemetry.sdk.metrics.InstrumentType not found + com.intellij.platform.diagnostic.telemetry.FilteredMetricsExporter -> io.opentelemetry.sdk.metrics.data.AggregationTemporality not found + com.intellij.platform.diagnostic.telemetry.FilteredMetricsExporter -> io.opentelemetry.sdk.metrics.data.MetricData not found + com.intellij.platform.diagnostic.telemetry.FilteredMetricsExporter -> io.opentelemetry.sdk.metrics.export.MetricExporter not found + com.intellij.platform.diagnostic.telemetry.FilteredMetricsExporter$1 -> io.opentelemetry.sdk.metrics.data.MetricData not found com.intellij.platform.diagnostic.telemetry.MetricsExporterEntry -> io.opentelemetry.sdk.metrics.export.MetricExporter not found + com.intellij.platform.diagnostic.telemetry.MetricsExtensionsKt -> io.opentelemetry.sdk.common.InstrumentationScopeInfo not found + com.intellij.platform.diagnostic.telemetry.MetricsExtensionsKt -> io.opentelemetry.sdk.metrics.data.MetricData not found + com.intellij.platform.diagnostic.telemetry.MetricsImporterUtils -> io.opentelemetry.sdk.metrics.data.LongPointData not found + com.intellij.platform.diagnostic.telemetry.MetricsImporterUtils -> io.opentelemetry.sdk.metrics.internal.data.ImmutableLongPointData not found + com.intellij.platform.diagnostic.telemetry.MetricsImporterUtils$fromCsvFile$1$metrics$1 -> io.opentelemetry.sdk.metrics.data.LongPointData not found + com.intellij.platform.diagnostic.telemetry.MetricsImporterUtils$fromCsvFile$2$1 -> io.opentelemetry.sdk.metrics.data.LongPointData not found com.intellij.platform.diagnostic.telemetry.NoopIntelliJTracer -> kotlinx.coroutines.CoroutineName not found + com.intellij.platform.diagnostic.telemetry.OpenTelemetryUtils -> io.opentelemetry.sdk.metrics.data.GaugeData not found + com.intellij.platform.diagnostic.telemetry.OpenTelemetryUtils -> io.opentelemetry.sdk.metrics.data.MetricData not found + com.intellij.platform.diagnostic.telemetry.OpenTelemetryUtils -> io.opentelemetry.sdk.metrics.data.MetricDataType not found + com.intellij.platform.diagnostic.telemetry.OpenTelemetryUtils -> io.opentelemetry.sdk.metrics.data.SumData not found + com.intellij.platform.diagnostic.telemetry.OpenTelemetryUtils$WhenMappings -> io.opentelemetry.sdk.metrics.data.MetricDataType not found + com.intellij.platform.diagnostic.telemetry.OpenTelemetryUtils$toCsvStream$1 -> io.opentelemetry.sdk.metrics.data.LongPointData not found + com.intellij.platform.diagnostic.telemetry.OpenTelemetryUtils$toCsvStream$1 -> io.opentelemetry.sdk.metrics.data.MetricData not found + com.intellij.platform.diagnostic.telemetry.OpenTelemetryUtils$toCsvStream$2 -> io.opentelemetry.sdk.metrics.data.DoublePointData not found + com.intellij.platform.diagnostic.telemetry.OpenTelemetryUtils$toCsvStream$2 -> io.opentelemetry.sdk.metrics.data.MetricData not found + com.intellij.platform.diagnostic.telemetry.OpenTelemetryUtils$toCsvStream$3 -> io.opentelemetry.sdk.metrics.data.LongPointData not found + com.intellij.platform.diagnostic.telemetry.OpenTelemetryUtils$toCsvStream$3 -> io.opentelemetry.sdk.metrics.data.MetricData not found + com.intellij.platform.diagnostic.telemetry.OpenTelemetryUtils$toCsvStream$4 -> io.opentelemetry.sdk.metrics.data.DoublePointData not found + com.intellij.platform.diagnostic.telemetry.OpenTelemetryUtils$toCsvStream$4 -> io.opentelemetry.sdk.metrics.data.MetricData not found com.intellij.platform.diagnostic.telemetry.TelemetryManager -> kotlinx.coroutines.BuildersKt not found com.intellij.platform.diagnostic.telemetry.TelemetryManager$forceFlushMetricsBlocking$1 -> kotlinx.coroutines.CoroutineScope not found + com.intellij.platform.diagnostic.telemetry.helpers.SharedMetrics -> io.opentelemetry.context.Context not found + com.intellij.platform.diagnostic.telemetry.helpers.SharedMetrics -> io.opentelemetry.context.ImplicitContextKeyed not found com.intellij.platform.diagnostic.telemetry.helpers.TraceKt -> io.opentelemetry.context.Context not found com.intellij.platform.diagnostic.telemetry.helpers.TraceKt -> io.opentelemetry.context.ImplicitContextKeyed not found com.intellij.platform.diagnostic.telemetry.helpers.TraceKt -> io.opentelemetry.context.Scope not found @@ -182,49 +295,32 @@ kotlin-analysis-api-2.0.255-SNAPSHOT.jar -> not found com.intellij.platform.diagnostic.telemetry.helpers.TraceKt -> kotlinx.coroutines.CoroutineScope not found com.intellij.platform.diagnostic.telemetry.helpers.TraceKt$useWithScope$2 -> io.opentelemetry.semconv.SemanticAttributes not found com.intellij.platform.diagnostic.telemetry.helpers.TraceKt$useWithScope$2 -> kotlinx.coroutines.CoroutineScope not found - com.intellij.psi.controlFlow.ControlFlowAnalyzer -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.impl.ConstantExpressionVisitor -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.impl.ElementPresentationUtil -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.impl.InheritanceImplUtil -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.impl.IsConstantExpressionVisitor -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.impl.PsiClassImplUtil -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.impl.PsiElementFactoryImpl -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.impl.PsiImplUtil -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.impl.PsiSubstitutorImpl$SubstitutionVisitor -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.impl.PsiSuperMethodImplUtil -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.impl.cache.TypeInfo -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.impl.cache.TypeInfo$TypeKind -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.impl.compiled.ClsAnonymousClass -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.impl.compiled.ClsClassImpl -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.impl.compiled.ClsReferenceListImpl -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.impl.source.JavaVarTypeUtil$UpwardProjectionTypeVisitor -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.impl.source.PsiImplicitClassImpl -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.impl.source.PsiJavaFileBaseImpl -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.impl.source.javadoc.PsiDocMethodOrFieldRef$2 -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.impl.source.resolve.ClassResolverProcessor -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.impl.source.resolve.JavaResolveUtil -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.impl.source.resolve.PsiOldInferenceHelper -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.impl.source.resolve.graphInference.InferenceIncorporationPhase -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.impl.source.resolve.graphInference.InferenceSession -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.impl.source.resolve.graphInference.constraints.StrictSubtypingConstraint -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.impl.source.tree.injected.StringLiteralEscaper -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.impl.source.tree.java.PsiSuperExpressionImpl -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.impl.source.tree.java.PsiTemplateExpressionImpl -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.scope.conflictResolvers.JavaMethodsConflictResolver -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.scope.util.PsiScopesUtil -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.util.InheritanceUtil -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.util.JavaPsiSwitchUtil -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.util.PropertyUtilBase -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.util.PsiMethodUtil -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.util.PsiTypesUtil -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.util.PsiUtil -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.util.TypeConversionUtil -> com.intellij.psi.CommonClassNames not found - com.intellij.psi.util.TypesDistinctProver -> com.intellij.psi.CommonClassNames not found + com.intellij.platform.diagnostic.telemetry.helpers.TraceUtil -> io.opentelemetry.context.Context not found + com.intellij.platform.diagnostic.telemetry.helpers.TraceUtil -> io.opentelemetry.context.Scope not found + com.intellij.util.CoroutineScopeKt -> kotlinx.coroutines.DisposableHandle not found + com.intellij.util.CoroutineScopeKt -> kotlinx.coroutines.Job not found + com.intellij.util.CoroutineScopeKt -> kotlinx.coroutines.JobKt not found + com.intellij.util.CoroutineScopeKt$cancelOnDispose$1 -> kotlinx.coroutines.Job not found + com.intellij.util.CoroutinesKt -> com.intellij.platform.util.coroutines.CoroutineScopeKt not found + com.intellij.util.CoroutinesKt -> kotlinx.coroutines.BuildersKt not found + com.intellij.util.CoroutinesKt -> kotlinx.coroutines.CoroutineScope not found + com.intellij.util.CoroutinesKt -> kotlinx.coroutines.CoroutineStart not found + com.intellij.util.CoroutinesKt -> kotlinx.coroutines.Job not found + com.intellij.util.CoroutinesKt$awaitCancellationAndInvoke$1 -> kotlinx.coroutines.BuildersKt not found + com.intellij.util.CoroutinesKt$awaitCancellationAndInvoke$1 -> kotlinx.coroutines.CoroutineScope not found + com.intellij.util.CoroutinesKt$awaitCancellationAndInvoke$1 -> kotlinx.coroutines.DelayKt not found + com.intellij.util.CoroutinesKt$awaitCancellationAndInvoke$1 -> kotlinx.coroutines.NonCancellable not found + com.intellij.util.CoroutinesKt$awaitCancellationAndInvoke$1$1 -> kotlinx.coroutines.CoroutineScope not found + com.intellij.util.CoroutinesKt$awaitCancellationAndInvoke$1$1 -> kotlinx.coroutines.YieldKt not found com.intellij.util.EnvironmentUtil -> kotlinx.coroutines.CompletableDeferred not found com.intellij.util.EnvironmentUtil -> kotlinx.coroutines.CompletableDeferredKt not found com.intellij.util.EnvironmentUtil -> kotlinx.coroutines.Deferred not found com.intellij.util.EnvironmentUtil -> kotlinx.coroutines.Job not found com.intellij.util.EnvironmentUtil -> kotlinx.coroutines.future.FutureKt not found + com.intellij.util.JContinuationImpl -> kotlinx.coroutines.CancellableContinuation not found + com.intellij.util.JContinuationImpl -> kotlinx.coroutines.CancellableContinuation$DefaultImpls not found + com.intellij.util.JavaCoroutines -> kotlinx.coroutines.CancellableContinuation not found + com.intellij.util.JavaCoroutines -> kotlinx.coroutines.CancellableContinuationImpl not found com.intellij.util.concurrency.BlockingJob -> kotlinx.coroutines.Job not found com.intellij.util.concurrency.CancellationFutureTask -> kotlinx.coroutines.Job not found com.intellij.util.concurrency.CancellationScheduledFutureTask -> kotlinx.coroutines.Job not found @@ -248,6 +344,14 @@ kotlin-analysis-api-2.0.255-SNAPSHOT.jar -> not found com.intellij.util.concurrency.Propagation$childContinuation$1 -> kotlinx.coroutines.CoroutineScope not found com.intellij.util.concurrency.Propagation$childContinuation$1 -> kotlinx.coroutines.Job not found com.intellij.util.concurrency.Propagation$runAsCoroutine$deferred$1 -> kotlinx.coroutines.CoroutineScope not found + com.intellij.util.io.BlockingKt -> kotlinx.coroutines.CoroutineDispatcher not found + com.intellij.util.io.BlockingKt -> kotlinx.coroutines.Dispatchers not found + com.intellij.util.io.BlockingKt -> kotlinx.coroutines.InterruptibleKt not found + com.intellij.util.io.Compressor$Tar -> org.apache.commons.compress.archivers.tar.TarArchiveEntry not found + com.intellij.util.io.Compressor$Tar -> org.apache.commons.compress.archivers.tar.TarArchiveOutputStream not found + com.intellij.util.io.Compressor$Tar -> org.apache.commons.compress.archivers.tar.TarConstants not found + com.intellij.util.io.Compressor$Tar -> org.apache.commons.compress.compressors.bzip2.BZip2CompressorOutputStream not found + com.intellij.util.io.Compressor$Tar -> org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream not found com.intellij.util.io.Decompressor$Tar -> org.apache.commons.compress.archivers.tar.TarArchiveEntry not found com.intellij.util.io.Decompressor$Tar -> org.apache.commons.compress.archivers.tar.TarArchiveInputStream not found com.intellij.util.io.Decompressor$Tar -> org.apache.commons.compress.compressors.CompressorException not found @@ -255,24 +359,61 @@ kotlin-analysis-api-2.0.255-SNAPSHOT.jar -> not found com.intellij.util.io.Decompressor$Tar -> org.apache.commons.compress.compressors.CompressorStreamFactory not found com.intellij.util.io.Decompressor$Zip$ExtZip -> org.apache.commons.compress.archivers.zip.ZipArchiveEntry not found com.intellij.util.io.Decompressor$Zip$ExtZip -> org.apache.commons.compress.archivers.zip.ZipFile not found + com.intellij.util.io.IoKt -> kotlinx.coroutines.CoroutineName not found + com.intellij.util.io.IoKt$copyToAsync$2 -> kotlinx.coroutines.CoroutineScope not found + com.intellij.util.io.IoKt$copyToAsync$2 -> kotlinx.coroutines.YieldKt not found + com.intellij.util.io.ProcessKt -> kotlinx.coroutines.BuildersKt not found + com.intellij.util.io.ProcessKt -> kotlinx.coroutines.CoroutineDispatcher not found + com.intellij.util.io.ProcessKt -> kotlinx.coroutines.CoroutineScope not found + com.intellij.util.io.ProcessKt -> kotlinx.coroutines.CoroutineStart not found + com.intellij.util.io.ProcessKt -> kotlinx.coroutines.Deferred not found + com.intellij.util.io.ProcessKt -> kotlinx.coroutines.GlobalScope not found + com.intellij.util.io.ProcessKt$readLineAsync$2 -> kotlinx.coroutines.CoroutineDispatcher not found + com.intellij.util.io.ProcessKt$readLineAsync$2 -> kotlinx.coroutines.CoroutineScope not found + com.intellij.util.io.ProcessKt$readLineAsync$2 -> kotlinx.coroutines.InterruptibleKt not found com.intellij.util.io.WalRecord$Companion -> org.apache.commons.compress.utils.IOUtils not found com.intellij.util.messages.MessageBus -> kotlinx.coroutines.CoroutineScope not found + com.intellij.util.messages.impl.MessageBusCoroutinesKt -> kotlinx.coroutines.channels.ProducerScope not found + com.intellij.util.messages.impl.MessageBusCoroutinesKt -> kotlinx.coroutines.flow.Flow not found + com.intellij.util.messages.impl.MessageBusCoroutinesKt -> kotlinx.coroutines.flow.FlowKt not found + com.intellij.util.messages.impl.MessageBusCoroutinesKt$subscribeAsFlow$1 -> kotlinx.coroutines.channels.ProduceKt not found + com.intellij.util.messages.impl.MessageBusCoroutinesKt$subscribeAsFlow$1 -> kotlinx.coroutines.channels.ProducerScope not found + com.intellij.util.messages.impl.MessageBusCoroutinesKt$subscribeAsFlow$1 -> kotlinx.coroutines.flow.Flow not found com.intellij.util.messages.impl.MessageBusImpl -> kotlinx.coroutines.CoroutineScope not found com.intellij.util.messages.impl.MessageBusImpl -> kotlinx.coroutines.DisposableHandle not found com.intellij.util.messages.impl.MessageBusImpl -> kotlinx.coroutines.Job not found com.intellij.util.messages.impl.MessageBusImpl -> kotlinx.coroutines.JobKt not found com.intellij.util.messages.impl.MessageBusImpl$connect$1 -> kotlinx.coroutines.CoroutineScope not found + com.intellij.util.progress.CancellationUtil$getCancellable$1 -> kotlinx.coroutines.CoroutineScope not found + com.intellij.util.progress.CancellationUtil$getCancellable$2 -> kotlinx.coroutines.CoroutineScope not found + com.intellij.util.progress.CancellationUtil$getCancellable$2 -> kotlinx.coroutines.Deferred not found + com.intellij.util.progress.CancellationUtil$getCancellable$2 -> kotlinx.coroutines.future.FutureKt not found + com.intellij.util.progress.CancellationUtil$getMaybeCancellable$1 -> kotlinx.coroutines.CoroutineScope not found + com.intellij.util.progress.CancellationUtil$getMaybeCancellable$2 -> kotlinx.coroutines.CoroutineScope not found + com.intellij.util.progress.CancellationUtil$getMaybeCancellable$2 -> kotlinx.coroutines.Deferred not found + com.intellij.util.progress.CancellationUtil$getMaybeCancellable$2 -> kotlinx.coroutines.future.FutureKt not found + com.intellij.util.progress.CancellationUtil$pollCancellable$1 -> kotlinx.coroutines.CoroutineScope not found + com.intellij.util.progress.CancellationUtil$pollCancellable$1 -> kotlinx.coroutines.DelayKt not found + com.intellij.util.progress.CancellationUtil$pollCancellable$1 -> kotlinx.coroutines.InterruptibleKt not found + com.intellij.util.progress.CancellationUtil$sleepCancellable$1 -> kotlinx.coroutines.CoroutineScope not found + com.intellij.util.progress.CancellationUtil$sleepCancellable$1 -> kotlinx.coroutines.DelayKt not found + com.intellij.util.progress.CancellationUtil$waitForCancellable$1 -> kotlinx.coroutines.CoroutineScope not found + com.intellij.util.progress.CancellationUtil$waitForMaybeCancellable$1 -> kotlinx.coroutines.CoroutineScope not found io.opentelemetry.api.DefaultOpenTelemetry -> io.opentelemetry.context.propagation.ContextPropagators not found io.opentelemetry.api.GlobalOpenTelemetry -> io.opentelemetry.context.propagation.ContextPropagators not found io.opentelemetry.api.GlobalOpenTelemetry$ObfuscatedOpenTelemetry -> io.opentelemetry.context.propagation.ContextPropagators not found io.opentelemetry.api.OpenTelemetry -> io.opentelemetry.context.propagation.ContextPropagators not found - io.opentelemetry.api.baggage.package-info -> javax.annotation.ParametersAreNonnullByDefault not found - io.opentelemetry.api.baggage.propagation.package-info -> javax.annotation.ParametersAreNonnullByDefault not found - io.opentelemetry.api.common.package-info -> javax.annotation.ParametersAreNonnullByDefault not found - io.opentelemetry.api.internal.package-info -> javax.annotation.ParametersAreNonnullByDefault not found + io.opentelemetry.api.baggage.Baggage -> io.opentelemetry.context.Context not found + io.opentelemetry.api.baggage.Baggage -> io.opentelemetry.context.ContextKey not found + io.opentelemetry.api.baggage.Baggage -> io.opentelemetry.context.ImplicitContextKeyed not found + io.opentelemetry.api.baggage.BaggageContextKey -> io.opentelemetry.context.ContextKey not found + io.opentelemetry.api.baggage.propagation.W3CBaggagePropagator -> io.opentelemetry.context.Context not found + io.opentelemetry.api.baggage.propagation.W3CBaggagePropagator -> io.opentelemetry.context.ImplicitContextKeyed not found + io.opentelemetry.api.baggage.propagation.W3CBaggagePropagator -> io.opentelemetry.context.propagation.TextMapGetter not found + io.opentelemetry.api.baggage.propagation.W3CBaggagePropagator -> io.opentelemetry.context.propagation.TextMapPropagator not found + io.opentelemetry.api.baggage.propagation.W3CBaggagePropagator -> io.opentelemetry.context.propagation.TextMapSetter not found io.opentelemetry.api.logs.DefaultLogger$NoopLogRecordBuilder -> io.opentelemetry.context.Context not found io.opentelemetry.api.logs.LogRecordBuilder -> io.opentelemetry.context.Context not found - io.opentelemetry.api.logs.package-info -> javax.annotation.ParametersAreNonnullByDefault not found io.opentelemetry.api.metrics.DefaultMeter$NoopDoubleCounter -> io.opentelemetry.context.Context not found io.opentelemetry.api.metrics.DefaultMeter$NoopDoubleHistogram -> io.opentelemetry.context.Context not found io.opentelemetry.api.metrics.DefaultMeter$NoopDoubleUpDownCounter -> io.opentelemetry.context.Context not found @@ -285,27 +426,47 @@ kotlin-analysis-api-2.0.255-SNAPSHOT.jar -> not found io.opentelemetry.api.metrics.LongCounter -> io.opentelemetry.context.Context not found io.opentelemetry.api.metrics.LongHistogram -> io.opentelemetry.context.Context not found io.opentelemetry.api.metrics.LongUpDownCounter -> io.opentelemetry.context.Context not found - io.opentelemetry.api.metrics.package-info -> javax.annotation.ParametersAreNonnullByDefault not found - io.opentelemetry.api.package-info -> javax.annotation.ParametersAreNonnullByDefault not found io.opentelemetry.api.trace.DefaultTracer$NoopSpanBuilder -> io.opentelemetry.context.Context not found io.opentelemetry.api.trace.Span -> io.opentelemetry.context.Context not found io.opentelemetry.api.trace.Span -> io.opentelemetry.context.ContextKey not found io.opentelemetry.api.trace.Span -> io.opentelemetry.context.ImplicitContextKeyed not found io.opentelemetry.api.trace.SpanBuilder -> io.opentelemetry.context.Context not found io.opentelemetry.api.trace.SpanContextKey -> io.opentelemetry.context.ContextKey not found - io.opentelemetry.api.trace.package-info -> javax.annotation.ParametersAreNonnullByDefault not found - io.opentelemetry.api.trace.propagation.internal.package-info -> javax.annotation.ParametersAreNonnullByDefault not found - io.opentelemetry.api.trace.propagation.package-info -> javax.annotation.ParametersAreNonnullByDefault not found - org.jetbrains.kotlin.analysis.api.fir.components.KaFirInternalCacheStorage$softCachedValueWithPsiKey$$inlined$softCachedValue$1 -> org.jetbrains.kotlin.analysis.utils.caches.SoftCachedValueKt not found - org.jetbrains.kotlin.analysis.api.impl.base.java.KaBaseKotlinJavaPsiFacade$findClass$$inlined$withRestrictedDataAccess$1 -> org.jetbrains.kotlin.analysis.api.platform.restrictedAnalysis.KotlinRestrictedAnalysisServiceKt not found - org.jetbrains.kotlin.analysis.api.impl.base.java.KaBaseKotlinJavaPsiFacade$findClasses$$inlined$withRestrictedDataAccess$1 -> org.jetbrains.kotlin.analysis.api.platform.restrictedAnalysis.KotlinRestrictedAnalysisServiceKt not found - org.jetbrains.kotlin.analysis.api.impl.base.java.KaBaseKotlinJavaPsiFacade$findPackage$$inlined$withRestrictedDataAccess$1 -> org.jetbrains.kotlin.analysis.api.platform.restrictedAnalysis.KotlinRestrictedAnalysisServiceKt not found - org.jetbrains.kotlin.analysis.api.impl.base.java.KaBaseKotlinJavaPsiFacade$knownClassNamesInPackage$$inlined$withRestrictedDataAccess$1 -> org.jetbrains.kotlin.analysis.api.platform.restrictedAnalysis.KotlinRestrictedAnalysisServiceKt not found - org.jetbrains.kotlin.analysis.api.standalone.base.declarations.KotlinStandaloneDeclarationProviderMerger$merge$$inlined$mergeSpecificProviders$1 -> org.jetbrains.kotlin.analysis.api.platform.KotlinCompositeProviderFactoryKt not found + io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator -> io.opentelemetry.context.Context not found + io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator -> io.opentelemetry.context.ImplicitContextKeyed not found + io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator -> io.opentelemetry.context.propagation.TextMapGetter not found + io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator -> io.opentelemetry.context.propagation.TextMapPropagator not found + io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator -> io.opentelemetry.context.propagation.TextMapSetter not found + org.apache.log4j.or.jms.MessageRenderer -> javax.jms.Destination not found + org.apache.log4j.or.jms.MessageRenderer -> javax.jms.JMSException not found + org.apache.log4j.or.jms.MessageRenderer -> javax.jms.Message not found + org.jdom.xpath.jaxen.JDOMCoreNavigator -> org.jaxen.BaseXPath not found + org.jdom.xpath.jaxen.JDOMCoreNavigator -> org.jaxen.DefaultNavigator not found + org.jdom.xpath.jaxen.JDOMCoreNavigator -> org.jaxen.FunctionCallException not found + org.jdom.xpath.jaxen.JDOMCoreNavigator -> org.jaxen.JaxenConstants not found + org.jdom.xpath.jaxen.JDOMCoreNavigator -> org.jaxen.Navigator not found + org.jdom.xpath.jaxen.JDOMCoreNavigator -> org.jaxen.UnsupportedAxisException not found + org.jdom.xpath.jaxen.JDOMCoreNavigator -> org.jaxen.XPath not found + org.jdom.xpath.jaxen.JDOMCoreNavigator -> org.jaxen.saxpath.SAXPathException not found + org.jdom.xpath.jaxen.JDOMCoreNavigator -> org.jaxen.util.SingleObjectIterator not found + org.jdom.xpath.jaxen.JDOMNavigator -> org.jaxen.NamespaceContext not found + org.jdom.xpath.jaxen.JDOMXPath -> org.jaxen.BaseXPath not found + org.jdom.xpath.jaxen.JDOMXPath -> org.jaxen.JaxenException not found + org.jdom.xpath.jaxen.JDOMXPath -> org.jaxen.NamespaceContext not found + org.jdom.xpath.jaxen.JDOMXPath -> org.jaxen.Navigator not found + org.jdom.xpath.jaxen.JDOMXPath -> org.jaxen.SimpleVariableContext not found + org.jdom.xpath.jaxen.JDOMXPath -> org.jaxen.VariableContext not found + org.jdom.xpath.jaxen.JDOMXPath -> org.jaxen.XPath not found + org.jdom.xpath.jaxen.JaxenCompiled -> org.jaxen.BaseXPath not found + org.jdom.xpath.jaxen.JaxenCompiled -> org.jaxen.JaxenException not found + org.jdom.xpath.jaxen.JaxenCompiled -> org.jaxen.NamespaceContext not found + org.jdom.xpath.jaxen.JaxenCompiled -> org.jaxen.Navigator not found + org.jdom.xpath.jaxen.JaxenCompiled -> org.jaxen.UnresolvableException not found + org.jdom.xpath.jaxen.JaxenCompiled -> org.jaxen.VariableContext not found + org.jdom.xpath.jaxen.JaxenCompiled -> org.jaxen.XPath not found org.jetbrains.kotlin.analysis.api.symbols.DebugSymbolRenderer -> kotlin.reflect.full.KClasses not found org.jetbrains.kotlin.analysis.api.symbols.DebugSymbolRenderer -> kotlin.reflect.jvm.KCallablesJvm not found org.jetbrains.kotlin.analysis.api.utils.ApiUtilsKt -> kotlin.reflect.full.KClasses not found - org.jetbrains.kotlin.analysis.low.level.api.fir.caches.LLFirSoftLazyValue$special$$inlined$softCachedValue$1 -> org.jetbrains.kotlin.analysis.utils.caches.SoftCachedValueKt not found org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.FirScriptingCompilerExtensionIdeRegistrar -> kotlin.script.experimental.host.ScriptingHostConfiguration not found org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.FirScriptingCompilerExtensionIdeRegistrar -> org.jetbrains.kotlin.scripting.compiler.plugin.services.FirScriptConfiguratorExtensionImpl not found org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.FirScriptingCompilerExtensionIdeRegistrar -> org.jetbrains.kotlin.scripting.compiler.plugin.services.FirScriptConfiguratorExtensionImpl$Companion not found @@ -333,19 +494,707 @@ kotlin-analysis-api-2.0.255-SNAPSHOT.jar -> not found org.jetbrains.kotlin.analysis.utils.relfection.ToStringDataClassLikeKt -> kotlin.reflect.jvm.KCallablesJvm not found org.jetbrains.kotlin.backend.common.serialization.IrBodyDeserializer -> kotlin.reflect.full.KClasses not found org.jetbrains.kotlin.backend.common.serialization.IrDeclarationDeserializer -> kotlin.reflect.full.KClasses not found + org.jetbrains.kotlin.backend.wasm.LoweredIrWithExtraArtifacts -> org.jetbrains.kotlin.ir.backend.js.tsexport.TypeScriptFragment not found + org.jetbrains.kotlin.backend.wasm.WasmCompilerKt -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportModelToTsDeclarations not found + org.jetbrains.kotlin.backend.wasm.WasmCompilerKt -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportedModule not found + org.jetbrains.kotlin.backend.wasm.WasmCompilerKt -> org.jetbrains.kotlin.ir.backend.js.tsexport.TypeScriptFragment not found + org.jetbrains.kotlin.backend.wasm.WasmCompilerKt -> org.jetbrains.kotlin.wasm.ir.WasmExport not found + org.jetbrains.kotlin.backend.wasm.WasmCompilerKt -> org.jetbrains.kotlin.wasm.ir.WasmModule not found + org.jetbrains.kotlin.backend.wasm.WasmCompilerKt -> org.jetbrains.kotlin.wasm.ir.WasmSymbol not found + org.jetbrains.kotlin.backend.wasm.WasmCompilerKt -> org.jetbrains.kotlin.wasm.ir.convertors.WasmIrToBinary not found + org.jetbrains.kotlin.backend.wasm.WasmCompilerKt -> org.jetbrains.kotlin.wasm.ir.convertors.WasmIrToText not found + org.jetbrains.kotlin.backend.wasm.WasmCompilerKt -> org.jetbrains.kotlin.wasm.ir.debug.DebugInformationGenerator not found + org.jetbrains.kotlin.backend.wasm.WasmCompilerKt -> org.jetbrains.kotlin.wasm.ir.debug.DebugInformationGeneratorImpl not found + org.jetbrains.kotlin.backend.wasm.WasmCompilerKt -> org.jetbrains.kotlin.wasm.ir.debug.DebugInformationGeneratorImpl$Companion not found + org.jetbrains.kotlin.backend.wasm.dwarf.Abbreviation -> org.jetbrains.kotlin.wasm.ir.convertors.ByteWriter not found + org.jetbrains.kotlin.backend.wasm.dwarf.Abbreviation -> org.jetbrains.kotlin.wasm.ir.convertors.ByteWriter$OutputStream not found + org.jetbrains.kotlin.backend.wasm.dwarf.Abbreviation$Specification -> org.jetbrains.kotlin.wasm.ir.convertors.ByteWriter not found + org.jetbrains.kotlin.backend.wasm.dwarf.Abbreviation$Specification -> org.jetbrains.kotlin.wasm.ir.convertors.ByteWriter$OutputStream not found + org.jetbrains.kotlin.backend.wasm.dwarf.AbbreviationTable -> org.jetbrains.kotlin.wasm.ir.convertors.ByteWriter not found + org.jetbrains.kotlin.backend.wasm.dwarf.AbbreviationTable -> org.jetbrains.kotlin.wasm.ir.convertors.ByteWriter$OutputStream not found + org.jetbrains.kotlin.backend.wasm.dwarf.DebuggingSection -> org.jetbrains.kotlin.wasm.ir.convertors.ByteWriter not found + org.jetbrains.kotlin.backend.wasm.dwarf.DebuggingSection -> org.jetbrains.kotlin.wasm.ir.convertors.ByteWriter$OutputStream not found + org.jetbrains.kotlin.backend.wasm.dwarf.LineProgram -> org.jetbrains.kotlin.wasm.ir.convertors.ByteWriter not found + org.jetbrains.kotlin.backend.wasm.dwarf.LineProgram -> org.jetbrains.kotlin.wasm.ir.convertors.ByteWriter$OutputStream not found + org.jetbrains.kotlin.backend.wasm.dwarf.entries.CompileUnit -> org.jetbrains.kotlin.wasm.ir.convertors.ByteWriter not found + org.jetbrains.kotlin.backend.wasm.dwarf.entries.CompileUnit -> org.jetbrains.kotlin.wasm.ir.convertors.ByteWriter$OutputStream not found + org.jetbrains.kotlin.backend.wasm.dwarf.entries.Subprogram -> org.jetbrains.kotlin.wasm.ir.convertors.ByteWriter not found + org.jetbrains.kotlin.backend.wasm.dwarf.entries.Subprogram -> org.jetbrains.kotlin.wasm.ir.convertors.ByteWriter$OutputStream not found + org.jetbrains.kotlin.backend.wasm.dwarf.entries.Subprogram -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation not found + org.jetbrains.kotlin.backend.wasm.dwarf.entries.Subprogram -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation$DefinedLocation not found + org.jetbrains.kotlin.backend.wasm.dwarf.entries.Subprogram -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocationMapping not found + org.jetbrains.kotlin.backend.wasm.dwarf.lines.LineInstruction -> org.jetbrains.kotlin.wasm.ir.convertors.ByteWriter not found + org.jetbrains.kotlin.backend.wasm.dwarf.lines.LineInstruction$AdvanceLine -> org.jetbrains.kotlin.wasm.ir.convertors.ByteWriter not found + org.jetbrains.kotlin.backend.wasm.dwarf.lines.LineInstruction$AdvancePC -> org.jetbrains.kotlin.wasm.ir.convertors.ByteWriter not found + org.jetbrains.kotlin.backend.wasm.dwarf.lines.LineInstruction$EndSequence -> org.jetbrains.kotlin.wasm.ir.convertors.ByteWriter not found + org.jetbrains.kotlin.backend.wasm.dwarf.lines.LineInstruction$SetAddress -> org.jetbrains.kotlin.wasm.ir.convertors.ByteWriter not found + org.jetbrains.kotlin.backend.wasm.dwarf.lines.LineInstruction$SetColumn -> org.jetbrains.kotlin.wasm.ir.convertors.ByteWriter not found + org.jetbrains.kotlin.backend.wasm.dwarf.lines.LineInstruction$SetFile -> org.jetbrains.kotlin.wasm.ir.convertors.ByteWriter not found + org.jetbrains.kotlin.backend.wasm.dwarf.utils.StringTable -> org.jetbrains.kotlin.wasm.ir.convertors.ByteWriter not found + org.jetbrains.kotlin.backend.wasm.dwarf.utils.StringTable -> org.jetbrains.kotlin.wasm.ir.convertors.ByteWriter$OutputStream not found + org.jetbrains.kotlin.backend.wasm.export.ExportModelGenerator -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportedClass not found + org.jetbrains.kotlin.backend.wasm.export.ExportModelGenerator -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportedConstructor not found + org.jetbrains.kotlin.backend.wasm.export.ExportModelGenerator -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportedDeclaration not found + org.jetbrains.kotlin.backend.wasm.export.ExportModelGenerator -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportedFunction not found + org.jetbrains.kotlin.backend.wasm.export.ExportModelGenerator -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportedModule not found + org.jetbrains.kotlin.backend.wasm.export.ExportModelGenerator -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportedNamespace not found + org.jetbrains.kotlin.backend.wasm.export.ExportModelGenerator -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportedObject not found + org.jetbrains.kotlin.backend.wasm.export.ExportModelGenerator -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportedParameter not found + org.jetbrains.kotlin.backend.wasm.export.ExportModelGenerator -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportedProperty not found + org.jetbrains.kotlin.backend.wasm.export.ExportModelGenerator -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportedRegularClass not found + org.jetbrains.kotlin.backend.wasm.export.ExportModelGenerator -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportedType not found + org.jetbrains.kotlin.backend.wasm.export.ExportModelGenerator -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportedType$ClassType not found + org.jetbrains.kotlin.backend.wasm.export.ExportModelGenerator -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportedType$ErrorType not found + org.jetbrains.kotlin.backend.wasm.export.ExportModelGenerator -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportedType$Function not found + org.jetbrains.kotlin.backend.wasm.export.ExportModelGenerator -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportedType$IntersectionType not found + org.jetbrains.kotlin.backend.wasm.export.ExportModelGenerator -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportedType$Primitive not found + org.jetbrains.kotlin.backend.wasm.export.ExportModelGenerator -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportedType$Primitive$BigInt not found + org.jetbrains.kotlin.backend.wasm.export.ExportModelGenerator -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportedType$Primitive$Boolean not found + org.jetbrains.kotlin.backend.wasm.export.ExportModelGenerator -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportedType$Primitive$Nothing not found + org.jetbrains.kotlin.backend.wasm.export.ExportModelGenerator -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportedType$Primitive$Number not found + org.jetbrains.kotlin.backend.wasm.export.ExportModelGenerator -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportedType$Primitive$String not found + org.jetbrains.kotlin.backend.wasm.export.ExportModelGenerator -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportedType$Primitive$Unit not found + org.jetbrains.kotlin.backend.wasm.export.ExportModelGenerator -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportedType$Primitive$Unknown not found + org.jetbrains.kotlin.backend.wasm.export.ExportModelGenerator -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportedType$TypeOf not found + org.jetbrains.kotlin.backend.wasm.export.ExportModelGenerator -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportedType$TypeParameter not found + org.jetbrains.kotlin.backend.wasm.export.ExportModelGenerator -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportedVisibility not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.TypesKt not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmAnyRef not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmExnRefType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmExpressionBuilder not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmExternRef not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmHeapType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$Any not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$NoExtern not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$None not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Type not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmI16 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmI32 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmI64 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmI8 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmImmediate not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$BlockType$Value not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$Catch not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$ConstI32 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$ConstString not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$DataIdx not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$GcType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$HeapType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$LabelIdx not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$MemArg not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$MemoryIdx not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$StructFieldIdx not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$TypeIdx not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmImmediateKind not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmLocal not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmOp not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmSymbol not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmSymbolReadOnly not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.WasmTypeDeclaration not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation$Companion not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation$DefinedLocation not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation$NextLocation not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation$NoLocation not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator$Companion -> org.jetbrains.kotlin.wasm.ir.WasmSymbol not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.BodyGenerator$WhenMappings -> org.jetbrains.kotlin.wasm.ir.WasmImmediateKind not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.ConstantDataCharArray -> org.jetbrains.kotlin.wasm.ir.WasmSymbol not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.ConstantDataCharField -> org.jetbrains.kotlin.wasm.ir.WasmSymbol not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.ConstantDataIntArray -> org.jetbrains.kotlin.wasm.ir.WasmSymbol not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.ConstantDataIntField -> org.jetbrains.kotlin.wasm.ir.WasmSymbol not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.JsBuiltinDescriptor not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmArrayDeclaration not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmExport not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmExport$Function not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmExpressionBuilder not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmFunction not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmFunction$Defined not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmFunction$Imported not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmFunctionType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmGlobal not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmHeapType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$Any not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$NoFunc not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$None not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Type not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmImmediate not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$ConstI32 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$FuncIdx not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$GcType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmImportDescriptor not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmLocal not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmOp not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmRefNullType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmRefType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmStructDeclaration not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmStructFieldDeclaration not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmSymbol not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmSymbolReadOnly not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.WasmTypeDeclaration not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGenerator -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation$Companion not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmAnyRef not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmExpressionBuilder not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmExternRef not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmF32 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmF64 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmHeapType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$Any not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$Extern not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$NoExtern not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$None not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmI32 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmI64 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmImmediate not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$ConstString not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$HeapType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmOp not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmRefNullExternrefType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmRefNullType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmRefNullrefType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmRefType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmSymbol not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmUnreachableType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGeneratorKt -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.DeclarationGeneratorKt -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation$Companion not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.LocationUtilsKt -> org.jetbrains.kotlin.wasm.ir.WasmExpressionBuilder not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.LocationUtilsKt -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.LocationUtilsKt -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation$Companion not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.LocationUtilsKt -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation$DefinedLocation not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.LocationUtilsKt -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation$IgnoredLocation not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.OptimisedWhenGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmExpressionBuilder not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.OptimisedWhenGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmI32 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.OptimisedWhenGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmImmediate not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.OptimisedWhenGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$BlockType$Value not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.OptimisedWhenGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$LabelIdx not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.OptimisedWhenGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$LabelIdxVector not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.OptimisedWhenGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmLocal not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.OptimisedWhenGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmOp not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.OptimisedWhenGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.OptimisedWhenGeneratorKt -> org.jetbrains.kotlin.wasm.ir.WasmUnreachableType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.OptimisedWhenGeneratorKt -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.OptimisedWhenGeneratorKt -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation$Companion not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.OptimisedWhenGeneratorKt$createBinaryTable$$inlined$sortBy$1 -> org.jetbrains.kotlin.wasm.ir.WasmLocal not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.OptimisedWhenGeneratorKt$createBinaryTable$$inlined$sortBy$2 -> org.jetbrains.kotlin.wasm.ir.WasmLocal not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.OptimisedWhenGeneratorKt$createBinaryTable$$inlined$sortBy$2 -> org.jetbrains.kotlin.wasm.ir.WasmType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt -> org.jetbrains.kotlin.wasm.ir.TypesKt not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt -> org.jetbrains.kotlin.wasm.ir.WasmAnyRef not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt -> org.jetbrains.kotlin.wasm.ir.WasmArrayDeclaration not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt -> org.jetbrains.kotlin.wasm.ir.WasmExternRef not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt -> org.jetbrains.kotlin.wasm.ir.WasmF32 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt -> org.jetbrains.kotlin.wasm.ir.WasmF64 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt -> org.jetbrains.kotlin.wasm.ir.WasmFuncRef not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt -> org.jetbrains.kotlin.wasm.ir.WasmFunctionType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt -> org.jetbrains.kotlin.wasm.ir.WasmHeapType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Type not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt -> org.jetbrains.kotlin.wasm.ir.WasmI16 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt -> org.jetbrains.kotlin.wasm.ir.WasmI31Ref not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt -> org.jetbrains.kotlin.wasm.ir.WasmI32 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt -> org.jetbrains.kotlin.wasm.ir.WasmI64 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt -> org.jetbrains.kotlin.wasm.ir.WasmI8 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt -> org.jetbrains.kotlin.wasm.ir.WasmRefNullType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt -> org.jetbrains.kotlin.wasm.ir.WasmRefType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt -> org.jetbrains.kotlin.wasm.ir.WasmStructDeclaration not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt -> org.jetbrains.kotlin.wasm.ir.WasmStructFieldDeclaration not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt -> org.jetbrains.kotlin.wasm.ir.WasmStructRef not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt -> org.jetbrains.kotlin.wasm.ir.WasmSymbolReadOnly not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt -> org.jetbrains.kotlin.wasm.ir.WasmType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt -> org.jetbrains.kotlin.wasm.ir.WasmTypeDeclaration not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt -> org.jetbrains.kotlin.wasm.ir.WasmV128 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt$createRecursiveTypeGroups$componentFinder$1 -> org.jetbrains.kotlin.wasm.ir.WasmTypeDeclaration not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt$createRecursiveTypeGroups$lambda$0$$inlined$sortBy$1 -> org.jetbrains.kotlin.wasm.ir.WasmTypeDeclaration not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt$dependencyTypes$1 -> org.jetbrains.kotlin.wasm.ir.WasmArrayDeclaration not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt$dependencyTypes$1 -> org.jetbrains.kotlin.wasm.ir.WasmFunctionType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt$dependencyTypes$1 -> org.jetbrains.kotlin.wasm.ir.WasmStructDeclaration not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt$dependencyTypes$1 -> org.jetbrains.kotlin.wasm.ir.WasmStructFieldDeclaration not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt$dependencyTypes$1 -> org.jetbrains.kotlin.wasm.ir.WasmSymbolReadOnly not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt$dependencyTypes$1 -> org.jetbrains.kotlin.wasm.ir.WasmType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RecursiveTypesUtilsKt$dependencyTypes$1 -> org.jetbrains.kotlin.wasm.ir.WasmTypeDeclaration not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RttiElements -> org.jetbrains.kotlin.wasm.ir.WasmGlobal not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RttiElements -> org.jetbrains.kotlin.wasm.ir.WasmStructDeclaration not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RttiElements -> org.jetbrains.kotlin.wasm.ir.WasmSymbol not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.RttiGlobal -> org.jetbrains.kotlin.wasm.ir.WasmGlobal not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.SpecialITableTypes -> org.jetbrains.kotlin.wasm.ir.WasmArrayDeclaration not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.SpecialITableTypes -> org.jetbrains.kotlin.wasm.ir.WasmStructDeclaration not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.SpecialITableTypes -> org.jetbrains.kotlin.wasm.ir.WasmSymbol not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledFileFragment -> org.jetbrains.kotlin.wasm.ir.WasmExport not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledFileFragment -> org.jetbrains.kotlin.wasm.ir.WasmFunction not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledFileFragment -> org.jetbrains.kotlin.wasm.ir.WasmFunctionType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledFileFragment -> org.jetbrains.kotlin.wasm.ir.WasmGlobal not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledFileFragment -> org.jetbrains.kotlin.wasm.ir.WasmType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledFileFragment -> org.jetbrains.kotlin.wasm.ir.WasmTypeDeclaration not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.TypesKt not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.UtilsKt not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmAnyRef not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmArrayDeclaration not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmData not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmDataMode not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmDataMode$Passive not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmElement not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmElement$Mode not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmElement$Mode$Declarative not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmExport not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmExport$Function not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmExport$Memory not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmExpressionBuilder not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmExternRef not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmFuncRef not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmFunction not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmFunction$Defined not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmFunction$Imported not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmFunctionType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmGlobal not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmHeapType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$Any not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$None not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Type not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmI16 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmI32 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmI64 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmI8 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmImmediate not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$BlockType$Value not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$ConstI32 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$DataIdx not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$FuncIdx not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$GcType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$HeapType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$TypeIdx not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmImportDescriptor not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmInstrWithLocation not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmLimits not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmLocal not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmMemory not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmModule not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmNamedModuleField not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmOp not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmRefNullType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmRefNullrefType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmRefType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmStructDeclaration not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmStructFieldDeclaration not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmSymbol not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmSymbolReadOnly not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmTable not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmTable$Value not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmTable$Value$Function not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmTag not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.WasmTypeDeclaration not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation$Companion not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment$JsCodeSnippet -> org.jetbrains.kotlin.wasm.ir.WasmSymbol not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment$ReferencableAndDefinable -> org.jetbrains.kotlin.wasm.ir.WasmSymbol not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragment$ReferencableElements -> org.jetbrains.kotlin.wasm.ir.WasmSymbol not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmCompiledModuleFragmentKt -> org.jetbrains.kotlin.wasm.ir.WasmSymbol not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmFileCodegenContext -> org.jetbrains.kotlin.wasm.ir.WasmExport not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmFileCodegenContext -> org.jetbrains.kotlin.wasm.ir.WasmFunction not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmFileCodegenContext -> org.jetbrains.kotlin.wasm.ir.WasmFunctionType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmFileCodegenContext -> org.jetbrains.kotlin.wasm.ir.WasmGlobal not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmFileCodegenContext -> org.jetbrains.kotlin.wasm.ir.WasmStructDeclaration not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmFileCodegenContext -> org.jetbrains.kotlin.wasm.ir.WasmSymbol not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmFileCodegenContext -> org.jetbrains.kotlin.wasm.ir.WasmType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmFileCodegenContext -> org.jetbrains.kotlin.wasm.ir.WasmTypeDeclaration not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmFunctionCodegenContext -> org.jetbrains.kotlin.wasm.ir.WasmExpressionBuilder not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmFunctionCodegenContext -> org.jetbrains.kotlin.wasm.ir.WasmFunction not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmFunctionCodegenContext -> org.jetbrains.kotlin.wasm.ir.WasmFunction$Defined not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmFunctionCodegenContext -> org.jetbrains.kotlin.wasm.ir.WasmHeapType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmFunctionCodegenContext -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Type not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmFunctionCodegenContext -> org.jetbrains.kotlin.wasm.ir.WasmI32 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmFunctionCodegenContext -> org.jetbrains.kotlin.wasm.ir.WasmLocal not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmFunctionCodegenContext -> org.jetbrains.kotlin.wasm.ir.WasmRefNullType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmFunctionCodegenContext -> org.jetbrains.kotlin.wasm.ir.WasmSymbol not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmFunctionCodegenContext -> org.jetbrains.kotlin.wasm.ir.WasmSymbolReadOnly not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmFunctionCodegenContext -> org.jetbrains.kotlin.wasm.ir.WasmType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmModuleTypeTransformer -> org.jetbrains.kotlin.wasm.ir.WasmType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmStringsElements -> org.jetbrains.kotlin.wasm.ir.WasmFunction not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmStringsElements -> org.jetbrains.kotlin.wasm.ir.WasmFunctionType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmStringsElements -> org.jetbrains.kotlin.wasm.ir.WasmSymbol not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmTypeTransformer -> org.jetbrains.kotlin.wasm.ir.WasmAnyRef not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmTypeTransformer -> org.jetbrains.kotlin.wasm.ir.WasmEqRef not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmTypeTransformer -> org.jetbrains.kotlin.wasm.ir.WasmExternRef not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmTypeTransformer -> org.jetbrains.kotlin.wasm.ir.WasmF32 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmTypeTransformer -> org.jetbrains.kotlin.wasm.ir.WasmF64 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmTypeTransformer -> org.jetbrains.kotlin.wasm.ir.WasmHeapType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmTypeTransformer -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmTypeTransformer -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$Extern not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmTypeTransformer -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$Func not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmTypeTransformer -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$Struct not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmTypeTransformer -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Type not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmTypeTransformer -> org.jetbrains.kotlin.wasm.ir.WasmI16 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmTypeTransformer -> org.jetbrains.kotlin.wasm.ir.WasmI31Ref not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmTypeTransformer -> org.jetbrains.kotlin.wasm.ir.WasmI32 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmTypeTransformer -> org.jetbrains.kotlin.wasm.ir.WasmI64 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmTypeTransformer -> org.jetbrains.kotlin.wasm.ir.WasmI8 not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmTypeTransformer -> org.jetbrains.kotlin.wasm.ir.WasmRefNullType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmTypeTransformer -> org.jetbrains.kotlin.wasm.ir.WasmRefNullrefType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmTypeTransformer -> org.jetbrains.kotlin.wasm.ir.WasmRefType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmTypeTransformer -> org.jetbrains.kotlin.wasm.ir.WasmSymbol not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmTypeTransformer -> org.jetbrains.kotlin.wasm.ir.WasmSymbolReadOnly not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmTypeTransformer -> org.jetbrains.kotlin.wasm.ir.WasmType not found + org.jetbrains.kotlin.backend.wasm.ir2wasm.WasmTypeTransformer -> org.jetbrains.kotlin.wasm.ir.WasmUnreachableType not found + org.jetbrains.kotlin.backend.wasm.lower.ComplexExternalDeclarationsToTopLevelFunctionsLowering -> org.jetbrains.kotlin.wasm.ir.JsBuiltinDescriptor not found + org.jetbrains.kotlin.backend.wasm.lower.ComplexExternalDeclarationsToTopLevelFunctionsLowering -> org.jetbrains.kotlin.wasm.ir.WasmImportDescriptor not found + org.jetbrains.kotlin.backend.wasm.lower.JsInteropFunctionsLowering -> org.jetbrains.kotlin.wasm.ir.JsBuiltinDescriptor not found + org.jetbrains.kotlin.backend.wasm.lower.JsInteropFunctionsLowering -> org.jetbrains.kotlin.wasm.ir.WasmImportDescriptor not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmAnyRef not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmArrayDeclaration not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmElement not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmElement$Mode not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmElement$Mode$Active not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmElement$Mode$Declarative not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmElement$Mode$Passive not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmEqRef not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmExnRefType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmExport not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmExport$Function not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmExport$Global not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmExport$Memory not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmExport$Table not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmExport$Tag not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmExternRef not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmF32 not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmF64 not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmFuncRef not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmFunction not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmFunction$Defined not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmFunction$Imported not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmFunctionType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmGlobal not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmHeapType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$Any not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$Eq not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$Extern not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$Func not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$NoExtern not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$None not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$Struct not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Type not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmI16 not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmI31Ref not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmI32 not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmI64 not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmI8 not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$BlockType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$BlockType$Function not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$BlockType$Value not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$Catch not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$Catch$CatchType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$ConstF32 not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$ConstF64 not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$ConstI32 not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$ConstI64 not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$ConstString not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$ConstU8 not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$DataIdx not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$ElemIdx not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$FuncIdx not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$GcType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$GlobalIdx not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$HeapType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$LabelIdx not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$LabelIdxVector not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$LocalIdx not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$MemArg not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$MemoryIdx not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$StructFieldIdx not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$SymbolI32 not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$TableIdx not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$TagIdx not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$TypeIdx not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$ValTypeVector not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmImportDescriptor not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmInstr not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmInstrWithLocation not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmInstrWithoutLocation not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmLimits not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmLocal not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmMemory not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmNamedModuleField not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmNullExnRefType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmOp not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmRefNullExternrefType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmRefNullType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmRefNullrefType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmRefType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmStructDeclaration not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmStructFieldDeclaration not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmStructRef not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmSymbol not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmSymbolReadOnly not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmTable not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmTable$Value not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmTable$Value$Expression not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmTable$Value$Function not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmTag not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmTypeDeclaration not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmUnreachableType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.WasmV128 not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.convertors.MyByteReader not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation$DefinedLocation not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation$IgnoredLocation not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation$NextLocation not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation$NoLocation not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmDeserializer$Companion -> org.jetbrains.kotlin.wasm.ir.WasmOp not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmAnyRef not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmArrayDeclaration not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmElement not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmElement$Mode not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmElement$Mode$Active not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmElement$Mode$Declarative not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmElement$Mode$Passive not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmEqRef not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmExnRefType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmExport not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmExport$Function not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmExport$Global not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmExport$Memory not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmExport$Table not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmExport$Tag not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmExternRef not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmF32 not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmF64 not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmFuncRef not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmFunction not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmFunction$Defined not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmFunction$Imported not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmFunctionType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmGlobal not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmHeapType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$Any not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$Eq not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$Extern not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$Func not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$NoExtern not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$NoFunc not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$None not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Simple$Struct not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmHeapType$Type not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmI16 not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmI31Ref not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmI32 not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmI64 not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmI8 not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$BlockType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$BlockType$Function not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$BlockType$Value not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$Catch not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$Catch$CatchType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$ConstF32 not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$ConstF64 not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$ConstI32 not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$ConstI64 not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$ConstString not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$ConstU8 not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$DataIdx not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$ElemIdx not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$FuncIdx not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$GcType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$GlobalIdx not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$HeapType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$LabelIdx not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$LabelIdxVector not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$LocalIdx not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$MemArg not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$MemoryIdx not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$StructFieldIdx not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$SymbolI32 not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$TableIdx not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$TagIdx not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$TypeIdx not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$ValTypeVector not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmImportDescriptor not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmInstr not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmInstrWithLocation not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmInstrWithoutLocation not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmLimits not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmLocal not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmMemory not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmNamedModuleField not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmNullExnRefType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmOp not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmRefNullExternrefType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmRefNullType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmRefNullrefType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmRefType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmStructDeclaration not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmStructFieldDeclaration not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmStructRef not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmSymbol not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmSymbolReadOnly not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmTable not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmTable$Value not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmTable$Value$Expression not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmTable$Value$Function not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmTag not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmTypeDeclaration not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmUnreachableType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.WasmV128 not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.convertors.ByteWriter not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.convertors.ByteWriter$OutputStream not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation$DefinedLocation not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation$IgnoredLocation not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation$NextLocation not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation$NoLocation not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$WhenMappings -> org.jetbrains.kotlin.wasm.ir.WasmImmediate not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$WhenMappings -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$Catch not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$WhenMappings -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$Catch$CatchType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$WhenMappings -> org.jetbrains.kotlin.wasm.ir.WasmOp not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeCatchImmediate$1$1 -> org.jetbrains.kotlin.wasm.ir.WasmImmediate not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeCatchImmediate$1$1 -> org.jetbrains.kotlin.wasm.ir.WasmImmediate$Catch not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeCompiledFileFragment$1$11 -> org.jetbrains.kotlin.wasm.ir.WasmFunctionType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeCompiledFileFragment$1$13 -> org.jetbrains.kotlin.wasm.ir.WasmTypeDeclaration not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeCompiledFileFragment$1$15 -> org.jetbrains.kotlin.wasm.ir.WasmTypeDeclaration not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeCompiledFileFragment$1$18$2 -> org.jetbrains.kotlin.wasm.ir.WasmType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeCompiledFileFragment$1$26 -> org.jetbrains.kotlin.wasm.ir.WasmExport not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeCompiledFileFragment$1$3 -> org.jetbrains.kotlin.wasm.ir.WasmFunction not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeCompiledFileFragment$1$5 -> org.jetbrains.kotlin.wasm.ir.WasmGlobal not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeCompiledFileFragment$1$7 -> org.jetbrains.kotlin.wasm.ir.WasmGlobal not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeCompiledFileFragment$1$9 -> org.jetbrains.kotlin.wasm.ir.WasmGlobal not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeInterfaceTableTypes$1 -> org.jetbrains.kotlin.wasm.ir.WasmArrayDeclaration not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeInterfaceTableTypes$2 -> org.jetbrains.kotlin.wasm.ir.WasmTypeDeclaration not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeRttiElements$3 -> org.jetbrains.kotlin.wasm.ir.WasmGlobal not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeRttiElements$4 -> org.jetbrains.kotlin.wasm.ir.WasmStructDeclaration not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmElement$1$1 -> org.jetbrains.kotlin.wasm.ir.WasmElement not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmElement$1$1 -> org.jetbrains.kotlin.wasm.ir.WasmTable not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmElement$1$1 -> org.jetbrains.kotlin.wasm.ir.WasmTable$Value not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmElementMode$1$1 -> org.jetbrains.kotlin.wasm.ir.WasmElement not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmElementMode$1$1 -> org.jetbrains.kotlin.wasm.ir.WasmElement$Mode not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmElementMode$1$1 -> org.jetbrains.kotlin.wasm.ir.WasmInstr not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmFunction$1$1 -> org.jetbrains.kotlin.wasm.ir.WasmFunction not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmFunction$1$1 -> org.jetbrains.kotlin.wasm.ir.WasmFunctionType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmFunction$1$2$1 -> org.jetbrains.kotlin.wasm.ir.WasmFunction not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmFunction$1$2$1 -> org.jetbrains.kotlin.wasm.ir.WasmLocal not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmFunction$1$2$2 -> org.jetbrains.kotlin.wasm.ir.WasmFunction not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmFunction$1$2$2 -> org.jetbrains.kotlin.wasm.ir.WasmInstr not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmFunctionType$1$1 -> org.jetbrains.kotlin.wasm.ir.WasmFunctionType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmFunctionType$1$1 -> org.jetbrains.kotlin.wasm.ir.WasmType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmFunctionType$1$2 -> org.jetbrains.kotlin.wasm.ir.WasmFunctionType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmFunctionType$1$2 -> org.jetbrains.kotlin.wasm.ir.WasmType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmGlobal$1$1 -> org.jetbrains.kotlin.wasm.ir.WasmGlobal not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmGlobal$1$1 -> org.jetbrains.kotlin.wasm.ir.WasmInstr not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmImmediate$1$1 -> org.jetbrains.kotlin.wasm.ir.WasmFunctionType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmImmediate$1$1 -> org.jetbrains.kotlin.wasm.ir.WasmImmediate not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmImmediate$26$1 -> org.jetbrains.kotlin.wasm.ir.WasmImmediate not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmImmediate$26$1 -> org.jetbrains.kotlin.wasm.ir.WasmType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmImportDescriptor$1 -> org.jetbrains.kotlin.wasm.ir.WasmImportDescriptor not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmInstr$1$1 -> org.jetbrains.kotlin.wasm.ir.WasmImmediate not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmInstr$1$1 -> org.jetbrains.kotlin.wasm.ir.WasmInstr not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmInstr$2$1 -> org.jetbrains.kotlin.wasm.ir.WasmImmediate not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmInstr$2$1 -> org.jetbrains.kotlin.wasm.ir.WasmInstr not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmStringsElements$1 -> org.jetbrains.kotlin.wasm.ir.WasmFunction not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmStringsElements$2 -> org.jetbrains.kotlin.wasm.ir.WasmFunction not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmStringsElements$3 -> org.jetbrains.kotlin.wasm.ir.WasmFunctionType not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmStructDeclaration$1$1 -> org.jetbrains.kotlin.wasm.ir.WasmStructDeclaration not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmStructDeclaration$1$1 -> org.jetbrains.kotlin.wasm.ir.WasmStructFieldDeclaration not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmStructDeclaration$1$2$1 -> org.jetbrains.kotlin.wasm.ir.WasmStructDeclaration not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmStructDeclaration$1$2$1 -> org.jetbrains.kotlin.wasm.ir.WasmTypeDeclaration not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmTableValue$1$1 -> org.jetbrains.kotlin.wasm.ir.WasmInstr not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmTableValue$1$1 -> org.jetbrains.kotlin.wasm.ir.WasmTable not found + org.jetbrains.kotlin.backend.wasm.serialization.WasmSerializer$serializeWasmTableValue$1$1 -> org.jetbrains.kotlin.wasm.ir.WasmTable$Value not found + org.jetbrains.kotlin.backend.wasm.utils.AnnotationsKt -> org.jetbrains.kotlin.wasm.ir.JsBuiltinDescriptor not found + org.jetbrains.kotlin.backend.wasm.utils.AnnotationsKt -> org.jetbrains.kotlin.wasm.ir.WasmImportDescriptor not found + org.jetbrains.kotlin.backend.wasm.utils.AnnotationsKt -> org.jetbrains.kotlin.wasm.ir.WasmSymbol not found + org.jetbrains.kotlin.backend.wasm.utils.AnnotationsKt -> org.jetbrains.kotlin.wasm.ir.WasmSymbolReadOnly not found + org.jetbrains.kotlin.backend.wasm.utils.DwarfGenerator -> org.jetbrains.kotlin.wasm.ir.debug.DebugData not found + org.jetbrains.kotlin.backend.wasm.utils.DwarfGenerator -> org.jetbrains.kotlin.wasm.ir.debug.DebugData$RawBytes not found + org.jetbrains.kotlin.backend.wasm.utils.DwarfGenerator -> org.jetbrains.kotlin.wasm.ir.debug.DebugInformationGenerator not found + org.jetbrains.kotlin.backend.wasm.utils.DwarfGenerator -> org.jetbrains.kotlin.wasm.ir.debug.DebugSection not found + org.jetbrains.kotlin.backend.wasm.utils.DwarfGenerator -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation not found + org.jetbrains.kotlin.backend.wasm.utils.DwarfGenerator -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation$DefinedLocation not found + org.jetbrains.kotlin.backend.wasm.utils.DwarfGenerator -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocationMapping not found + org.jetbrains.kotlin.backend.wasm.utils.DwarfGenerator$SourceLocationMappingWithPositionInFunction -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocationMapping not found + org.jetbrains.kotlin.backend.wasm.utils.SourceMapGenerator -> org.jetbrains.kotlin.wasm.ir.debug.DebugData not found + org.jetbrains.kotlin.backend.wasm.utils.SourceMapGenerator -> org.jetbrains.kotlin.wasm.ir.debug.DebugData$StringData not found + org.jetbrains.kotlin.backend.wasm.utils.SourceMapGenerator -> org.jetbrains.kotlin.wasm.ir.debug.DebugInformationGenerator not found + org.jetbrains.kotlin.backend.wasm.utils.SourceMapGenerator -> org.jetbrains.kotlin.wasm.ir.debug.DebugSection not found + org.jetbrains.kotlin.backend.wasm.utils.SourceMapGenerator -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation not found + org.jetbrains.kotlin.backend.wasm.utils.SourceMapGenerator -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation$DefinedLocation not found + org.jetbrains.kotlin.backend.wasm.utils.SourceMapGenerator -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation$IgnoredLocation not found + org.jetbrains.kotlin.backend.wasm.utils.SourceMapGenerator -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation$NextLocation not found + org.jetbrains.kotlin.backend.wasm.utils.SourceMapGenerator -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation$NoLocation not found + org.jetbrains.kotlin.backend.wasm.utils.SourceMapGenerator -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocation$WithFileAndLineNumberInformation not found + org.jetbrains.kotlin.backend.wasm.utils.SourceMapGenerator -> org.jetbrains.kotlin.wasm.ir.source.location.SourceLocationMapping not found + org.jetbrains.kotlin.build.SerializationUtilsKt -> kotlin.reflect.full.KClasses not found + org.jetbrains.kotlin.build.report.statistics.HttpReportService -> com.google.gson.Gson not found + org.jetbrains.kotlin.build.report.statistics.JsonReportService -> com.google.gson.Gson not found + org.jetbrains.kotlin.build.report.statistics.JsonReportService -> com.google.gson.GsonBuilder not found + org.jetbrains.kotlin.build.report.statistics.JsonReportService$gson$1 -> com.google.gson.JsonElement not found + org.jetbrains.kotlin.build.report.statistics.JsonReportService$gson$1 -> com.google.gson.JsonNull not found + org.jetbrains.kotlin.build.report.statistics.JsonReportService$gson$1 -> com.google.gson.JsonPrimitive not found + org.jetbrains.kotlin.build.report.statistics.JsonReportService$gson$1 -> com.google.gson.JsonSerializationContext not found + org.jetbrains.kotlin.build.report.statistics.JsonReportService$gson$1 -> com.google.gson.JsonSerializer not found + org.jetbrains.kotlin.cfg.ControlFlowInfo -> io.vavr.Tuple2 not found + org.jetbrains.kotlin.cfg.ControlFlowInfo -> io.vavr.Value not found + org.jetbrains.kotlin.cfg.ControlFlowInfo -> io.vavr.collection.CharSeq not found + org.jetbrains.kotlin.cfg.ControlFlowInfo -> io.vavr.collection.HashMap not found + org.jetbrains.kotlin.cfg.ControlFlowInfo -> io.vavr.collection.Iterator not found + org.jetbrains.kotlin.cfg.ControlFlowInfo -> io.vavr.collection.Map not found + org.jetbrains.kotlin.cfg.ControlFlowInfo -> io.vavr.collection.Seq not found + org.jetbrains.kotlin.cfg.ControlFlowInfo -> io.vavr.collection.Set not found + org.jetbrains.kotlin.cfg.ControlFlowInfo -> io.vavr.collection.Traversable not found + org.jetbrains.kotlin.cfg.ControlFlowInfo -> io.vavr.control.Option not found + org.jetbrains.kotlin.cfg.ReadOnlyControlFlowInfo -> io.vavr.collection.Map not found + org.jetbrains.kotlin.cfg.variable.PseudocodeVariablesData -> io.vavr.Tuple2 not found + org.jetbrains.kotlin.cfg.variable.PseudocodeVariablesData -> io.vavr.collection.HashSet not found + org.jetbrains.kotlin.cfg.variable.PseudocodeVariablesData -> io.vavr.collection.Iterator not found + org.jetbrains.kotlin.cfg.variable.PseudocodeVariablesData -> io.vavr.collection.Map not found + org.jetbrains.kotlin.cfg.variable.PseudocodeVariablesData -> io.vavr.collection.Set not found + org.jetbrains.kotlin.cfg.variable.PseudocodeVariablesData$Companion -> io.vavr.collection.Set not found + org.jetbrains.kotlin.cfg.variable.PseudocodeVariablesData$ReadOnlyInitVariableControlFlowInfoImpl -> io.vavr.collection.HashMap not found + org.jetbrains.kotlin.cfg.variable.PseudocodeVariablesData$ReadOnlyInitVariableControlFlowInfoImpl -> io.vavr.collection.Map not found + org.jetbrains.kotlin.cfg.variable.PseudocodeVariablesData$ReadOnlyInitVariableControlFlowInfoImpl -> io.vavr.collection.Set not found + org.jetbrains.kotlin.cfg.variable.PseudocodeVariablesData$ReadOnlyUseControlFlowInfoImpl -> io.vavr.collection.HashMap not found + org.jetbrains.kotlin.cfg.variable.PseudocodeVariablesData$ReadOnlyUseControlFlowInfoImpl -> io.vavr.collection.Map not found + org.jetbrains.kotlin.cfg.variable.UsageVariableControlFlowInfo -> io.vavr.collection.HashMap not found + org.jetbrains.kotlin.cfg.variable.UsageVariableControlFlowInfo -> io.vavr.collection.Map not found + org.jetbrains.kotlin.cfg.variable.VariableInitControlFlowInfo -> io.vavr.Tuple2 not found + org.jetbrains.kotlin.cfg.variable.VariableInitControlFlowInfo -> io.vavr.collection.HashMap not found + org.jetbrains.kotlin.cfg.variable.VariableInitControlFlowInfo -> io.vavr.collection.Iterator not found + org.jetbrains.kotlin.cfg.variable.VariableInitControlFlowInfo -> io.vavr.collection.Map not found org.jetbrains.kotlin.cli.common.arguments.ArgumentUtilsKt -> kotlin.reflect.full.KClasses not found org.jetbrains.kotlin.cli.common.arguments.ArgumentUtilsKt -> kotlin.reflect.jvm.ReflectJvmMapping not found + org.jetbrains.kotlin.cli.common.repl.KotlinJsr223JvmInvocableScriptEngine -> kotlin.reflect.full.KClasses not found + org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM -> org.jetbrains.kotlin.javac.components.JavacBasedClassFinder not found + org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM -> org.jetbrains.kotlin.javac.components.JavacBasedSourceElementFactory not found + org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM -> org.jetbrains.kotlin.javac.components.StubJavaResolverCache not found org.jetbrains.kotlin.cli.jvm.javac.JavacWrapperKotlinResolverImpl -> org.jetbrains.kotlin.javac.JavacWrapperKotlinResolver not found org.jetbrains.kotlin.cli.jvm.javac.JavacWrapperKotlinResolverImpl -> org.jetbrains.kotlin.javac.resolve.MockKotlinField not found org.jetbrains.kotlin.cli.jvm.javac.JavacWrapperRegistrar -> org.jetbrains.kotlin.javac.JavacWrapper not found org.jetbrains.kotlin.cli.jvm.javac.JavacWrapperRegistrar -> org.jetbrains.kotlin.javac.JavacWrapperKotlinResolver not found - org.jetbrains.kotlin.codegen.DescriptorAsmUtil -> org.jetbrains.kotlin.codegen.intrinsics.IntrinsicMethods not found - org.jetbrains.kotlin.codegen.JvmCodegenUtil -> org.jetbrains.kotlin.builtins.functions.BuiltInFunctionArity not found + org.jetbrains.kotlin.compilerRunner.ArgumentsToStrings -> kotlin.reflect.full.KClasses not found + org.jetbrains.kotlin.compilerRunner.ArgumentsToStrings -> kotlin.reflect.jvm.ReflectJvmMapping not found + org.jetbrains.kotlin.fir.pipeline.FirUtilsKt -> org.jetbrains.kotlin.fir.lightTree.LightTree2Fir not found + org.jetbrains.kotlin.idea.ExplicitDefaultSubstitutor -> kotlin.reflect.jvm.ReflectJvmMapping not found + org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.CompilationOutputs -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportModelToTsDeclarationsKt not found + org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.CompilationOutputs -> org.jetbrains.kotlin.ir.backend.js.tsexport.TypeScriptFragment not found + org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.CompilationOutputsCached -> org.jetbrains.kotlin.ir.backend.js.tsexport.TypeScriptFragment not found + org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrModuleToJsTransformer -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportModelToTsDeclarationsKt not found + org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrModuleToJsTransformer -> org.jetbrains.kotlin.ir.backend.js.tsexport.TypeScriptFragment not found + org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrModuleToJsTransformer$generateExportWithExternals$1$tsDeclarations$1 -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportedDeclaration not found + org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrModuleToJsTransformerKt -> org.jetbrains.kotlin.ir.backend.js.tsexport.ExportModelToTsDeclarationsKt not found + org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrModuleToJsTransformerKt -> org.jetbrains.kotlin.ir.backend.js.tsexport.TypeScriptFragment not found + org.jetbrains.kotlin.ir.backend.js.utils.serialization.JsIrAstDeserializer -> org.jetbrains.kotlin.ir.backend.js.tsexport.TypeScriptFragment not found + org.jetbrains.kotlin.ir.backend.js.utils.serialization.JsIrAstSerializer -> org.jetbrains.kotlin.ir.backend.js.tsexport.TypeScriptFragment not found + org.jetbrains.kotlin.ir.inline.konan.NativeFirstPhaseLoweringPhasesKt -> org.jetbrains.kotlin.backend.konan.serialization.KonanManglerIr not found org.jetbrains.kotlin.load.java.structure.impl.classFiles.ClassifierResolutionContext -> io.vavr.collection.HashMap not found org.jetbrains.kotlin.load.java.structure.impl.classFiles.ClassifierResolutionContext -> io.vavr.collection.Map not found - org.jetbrains.kotlin.psi.stubs.elements.KtFileElementType -> org.jetbrains.kotlin.psi.stubs.KotlinStubVersions not found - org.jetbrains.kotlin.psi2ir.generators.ArgumentsGenerationUtilsKt$generateReceiverForCalleeImportedFromObject$$inlined$generateExpressionValue$1 -> org.jetbrains.kotlin.psi2ir.intermediate.OnceExpressionValueKt not found - org.jetbrains.kotlin.psi2ir.generators.DelegatedPropertyGenerator$createThisValueForDelegate$lambda$12$$inlined$generateExpressionValue$1 -> org.jetbrains.kotlin.psi2ir.intermediate.OnceExpressionValueKt not found org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo -> io.vavr.collection.Map not found org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo -> io.vavr.collection.Set not found org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfoImpl -> io.vavr.Tuple2 not found @@ -364,8 +1213,10 @@ kotlin-analysis-api-2.0.255-SNAPSHOT.jar -> not found org.jetbrains.kotlin.types.expressions.PreliminaryLoopVisitor -> io.vavr.Tuple2 not found org.jetbrains.kotlin.types.expressions.PreliminaryLoopVisitor -> io.vavr.collection.Iterator not found org.jetbrains.kotlin.types.expressions.PreliminaryLoopVisitor -> io.vavr.collection.Map not found - org.jetbrains.kotlin.util.ConstUtils -> com.intellij.psi.CommonClassNames not found - org.jetbrains.kotlin.util.IsConstantExpressionVisitor -> com.intellij.psi.CommonClassNames not found org.jetbrains.kotlin.util.vavr.VavrAdaptersKt -> io.vavr.Tuple2 not found org.jetbrains.kotlin.util.vavr.VavrAdaptersKt -> io.vavr.collection.Map not found org.jetbrains.kotlin.util.vavr.VavrAdaptersKt -> io.vavr.control.Option not found + org.jetbrains.kotlin.utils.AnyArgsConverter -> kotlin.reflect.full.KClasses not found + org.jetbrains.kotlin.utils.AnyArgsConverter -> kotlin.reflect.jvm.KTypesJvm not found + org.jetbrains.kotlin.utils.ParametersMapKt -> kotlin.reflect.jvm.KTypesJvm not found + org.jetbrains.kotlin.utils.StringArgsConverter -> kotlin.reflect.jvm.KTypesJvm not found diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/cmdline/KSPJvmMain.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/cmdline/KSPJvmMain.kt index 24a131aad2..269a847098 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/cmdline/KSPJvmMain.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/cmdline/KSPJvmMain.kt @@ -34,7 +34,19 @@ internal fun printHelpMsg(optionsList: String) { } internal fun runWithArgs(args: Array, parse: (Array) -> Pair>) { - val logger = KspGradleLogger(KspGradleLogger.LOGGING_LEVEL_WARN) + + val loggingVerbosity = System.getProperty("ksp.logging", "warn") + val loggingLevel = when (loggingVerbosity.lowercase()) { + "error" -> KspGradleLogger.LOGGING_LEVEL_ERROR + "warn" -> KspGradleLogger.LOGGING_LEVEL_WARN + "warning" -> KspGradleLogger.LOGGING_LEVEL_WARN + "info" -> KspGradleLogger.LOGGING_LEVEL_INFO + "debug" -> KspGradleLogger.LOGGING_LEVEL_LOGGING + else -> KspGradleLogger.LOGGING_LEVEL_WARN + } + + val logger = KspGradleLogger(loggingLevel) + val (config, classpath) = parse(args) val processorClassloader = URLClassLoader(classpath.map { File(it).toURI().toURL() }.toTypedArray()) diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/KotlinSymbolProcessing.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/KotlinSymbolProcessing.kt index 2e673eedef..933f385e00 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/KotlinSymbolProcessing.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/KotlinSymbolProcessing.kt @@ -60,6 +60,7 @@ import com.intellij.util.ui.EDT import org.jetbrains.kotlin.analysis.api.KaExperimentalApi import org.jetbrains.kotlin.analysis.api.KaIdeApi import org.jetbrains.kotlin.analysis.api.KaImplementationDetail +import org.jetbrains.kotlin.analysis.api.fir.utils.KaFirCacheCleaner import org.jetbrains.kotlin.analysis.api.platform.KotlinMessageBusProvider import org.jetbrains.kotlin.analysis.api.platform.KotlinPlatformSettings import org.jetbrains.kotlin.analysis.api.platform.KotlinProjectMessageBusProvider @@ -331,7 +332,7 @@ class KotlinSymbolProcessing( ) registerService( KotlinDeclarationProviderFactory::class.java, - IncrementalKotlinDeclarationProviderFactory(this) + IncrementalKotlinDeclarationProviderFactory(this, kotlinCoreProjectEnvironment.environment) ) registerService( KotlinDirectInheritorsProvider::class.java, @@ -357,6 +358,9 @@ class KotlinSymbolProcessing( KotlinPlatformSettings::class.java, KotlinStandalonePlatformSettings() ) + // replace KaFirStopWorldCacheCleaner with no op implementation + @OptIn(KaImplementationDetail::class) + registerService(KaFirCacheCleaner::class.java, NoOpCacheCleaner::class.java) } } @@ -651,56 +655,6 @@ fun String?.toKotlinVersion(): KotlinVersion { } } -// Workaround for ShadowJar's minimize, whose configuration isn't very flexible. -/* ktlint-disable */ -@Suppress("unused") -@OptIn(KaImplementationDetail::class) -internal val DEAR_SHADOW_JAR_PLEASE_DO_NOT_REMOVE_THESE = listOf( - it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap::class.java, - it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap::class.java, - org.jetbrains.kotlin.analysis.api.impl.base.java.source.JavaElementSourceWithSmartPointerFactory::class.java, - org.jetbrains.kotlin.analysis.api.impl.base.projectStructure.KaBaseModuleProvider::class.java, - org.jetbrains.kotlin.analysis.api.impl.base.references.HLApiReferenceProviderService::class.java, - org.jetbrains.kotlin.analysis.api.fir.KaFirDefaultImportsProvider::class.java, - org.jetbrains.kotlin.analysis.api.fir.KaFirSessionProvider::class.java, - org.jetbrains.kotlin.analysis.api.fir.references.ReadWriteAccessCheckerFirImpl::class.java, - org.jetbrains.kotlin.analysis.api.standalone.base.declarations.KotlinStandaloneFirDirectInheritorsProvider::class.java, - org.jetbrains.kotlin.analysis.low.level.api.fir.services.LLRealFirElementByPsiElementChooser::class.java, - org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionInvalidationService::class.java, - org.jetbrains.kotlin.analysis.low.level.api.fir.symbolProviders.factories.LLStubOriginLibrarySymbolProviderFactory::class.java, - org.jetbrains.kotlin.analysis.api.impl.base.java.KaBaseJavaModuleResolver::class.java, - org.jetbrains.kotlin.analysis.api.impl.base.java.KaBaseKotlinJavaPsiFacade::class.java, - org.jetbrains.kotlin.analysis.api.impl.base.permissions.KaBaseAnalysisPermissionChecker::class.java, - org.jetbrains.kotlin.analysis.api.impl.base.permissions.KaBaseAnalysisPermissionRegistry::class.java, - org.jetbrains.kotlin.analysis.api.impl.base.projectStructure.KaBaseContentScopeProvider::class.java, - org.jetbrains.kotlin.analysis.api.impl.base.projectStructure.KaBaseResolutionScopeProvider::class.java, - org.jetbrains.kotlin.analysis.api.impl.base.projectStructure.KotlinOptimizingGlobalSearchScopeMerger::class.java, - org.jetbrains.kotlin.analysis.api.permissions.KaAnalysisPermissionRegistry::class.java, - org.jetbrains.kotlin.analysis.api.platform.KotlinProjectMessageBusProvider::class.java, - org.jetbrains.kotlin.analysis.api.platform.permissions.KaAnalysisPermissionChecker::class.java, - org.jetbrains.kotlin.analysis.api.fir.modification.KaFirSourceModificationService::class.java, - org.jetbrains.kotlin.analysis.api.fir.references.KotlinFirReferenceContributor::class.java, - org.jetbrains.kotlin.analysis.api.fir.statistics.KaFirStatisticsService::class.java, - org.jetbrains.kotlin.light.classes.symbol.SymbolKotlinAsJavaSupport::class.java, - org.jetbrains.kotlin.load.java.ErasedOverridabilityCondition::class.java, - org.jetbrains.kotlin.load.java.FieldOverridabilityCondition::class.java, - org.jetbrains.kotlin.plugin.references.SimpleNameReferenceExtension::class.java, - org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInsLoaderImpl::class.java, - com.fasterxml.aalto.AaltoInputProperties::class.java, - com.google.errorprone.annotations.CheckReturnValue::class.java, - com.intellij.diagnostic.ActivityCategory::class.java, - com.intellij.openapi.application.JetBrainsProtocolHandler::class.java, - com.intellij.openapi.editor.impl.EditorDocumentPriorities::class.java, - com.intellij.platform.diagnostic.telemetry.TelemetryManager::class.java, - com.intellij.psi.impl.PsiSubstitutorImpl::class.java, - com.intellij.psi.tree.ChildRoleBase::class.java, - com.intellij.util.xmlb.Constants::class.java, - com.intellij.xml.CommonXmlStrings::class.java, - org.codehaus.stax2.XMLInputFactory2::class.java, - org.codehaus.stax2.XMLStreamProperties::class.java, -) -/* ktlint-enable */ - fun TargetPlatform.getPlatformInfo(kspConfig: KSPConfig): List = componentPlatforms.map { platform -> when (platform) { @@ -734,3 +688,16 @@ private fun maybeRunInWriteAction(f: () -> R) { } } } + +/* +* NoOp implementation of the KaFirCacheCleaner +* +* The stop world cache cleaner that is registered by default [KaFirStopWorldCacheCleaner] can +* get analysis session into an invalid state which leads to build failures. +*/ +@OptIn(KaImplementationDetail::class) +class NoOpCacheCleaner : KaFirCacheCleaner { + override fun enterAnalysis() {} + override fun exitAnalysis() {} + override fun scheduleCleanup() {} +} diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/ResolverAAImpl.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/ResolverAAImpl.kt index fdac145a0d..0708abfa1e 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/ResolverAAImpl.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/ResolverAAImpl.kt @@ -412,7 +412,8 @@ class ResolverAAImpl( override fun getJvmCheckedException(function: KSFunctionDeclaration): Sequence { return when (function.origin) { Origin.JAVA -> { - val psi = (function as KSFunctionDeclarationImpl).ktFunctionSymbol.psi as PsiMethod + val psi = ((function as KSFunctionDeclarationImpl).ktFunctionSymbol.psi as? PsiMethod) + ?: return emptySequence() psi.throwsList.referencedTypes.asSequence().mapNotNull { analyze { it.asKaType(psi)?.let { KSTypeImpl.getCached(it) } diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/java/KSAnnotationJavaImpl.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/java/KSAnnotationJavaImpl.kt index 15da9a7dfe..b9c04819e7 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/java/KSAnnotationJavaImpl.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/java/KSAnnotationJavaImpl.kt @@ -112,7 +112,8 @@ class KSAnnotationJavaImpl private constructor(private val psi: PsiAnnotation, o ?.let { symbol -> // ClsClassImpl means psi is decompiled psi. if ( - symbol.origin == KaSymbolOrigin.JAVA_SOURCE && symbol.psi != null && symbol.psi !is ClsClassImpl + symbol.origin == KaSymbolOrigin.JAVA_SOURCE && symbol.psi != null && + symbol.psi !is ClsClassImpl && symbol.psi is PsiClass ) { (symbol.psi as PsiClass).allMethods.filterIsInstance() .mapNotNull { annoMethod -> diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/AbstractKSDeclarationImpl.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/AbstractKSDeclarationImpl.kt index 527fadaaeb..ecb3a6f2ed 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/AbstractKSDeclarationImpl.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/AbstractKSDeclarationImpl.kt @@ -125,7 +125,10 @@ abstract class AbstractKSDeclarationImpl(val ktDeclarationSymbol: KaDeclarationS internal open val originalAnnotations: Sequence by lazyMemoizedSequence { if (ktDeclarationSymbol.psi is KtAnnotated) { (ktDeclarationSymbol.psi as KtAnnotated).annotations(ktDeclarationSymbol, this) - } else if (ktDeclarationSymbol.origin == KaSymbolOrigin.JAVA_SOURCE && ktDeclarationSymbol.psi != null) { + } else if ( + ktDeclarationSymbol.origin == KaSymbolOrigin.JAVA_SOURCE && + ktDeclarationSymbol.psi is PsiJvmModifiersOwner + ) { (ktDeclarationSymbol.psi as PsiJvmModifiersOwner) .annotations.map { KSAnnotationJavaImpl.getCached(it, this) }.asSequence() } else { diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSAnnotationImpl.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSAnnotationImpl.kt index 359cfa2106..748c1425e7 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSAnnotationImpl.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSAnnotationImpl.kt @@ -81,7 +81,10 @@ class KSAnnotationImpl private constructor( override val defaultArguments: List by lazy { analyze { annotationApplication.classId?.toKtClassSymbol()?.let { symbol -> - if (symbol.origin == KaSymbolOrigin.JAVA_SOURCE && symbol.psi != null && symbol.psi !is ClsClassImpl) { + if ( + symbol.origin == KaSymbolOrigin.JAVA_SOURCE && symbol.psi != null && + symbol.psi !is ClsClassImpl && symbol.psi is PsiClass + ) { (symbol.psi as PsiClass).allMethods.filterIsInstance() .mapNotNull { annoMethod -> annoMethod.defaultValue?.let { value -> diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/resolved/KSAnnotationResolvedImpl.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/resolved/KSAnnotationResolvedImpl.kt index 722aa6a301..f7c475d399 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/resolved/KSAnnotationResolvedImpl.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/resolved/KSAnnotationResolvedImpl.kt @@ -78,7 +78,10 @@ class KSAnnotationResolvedImpl private constructor( override val defaultArguments: List by lazy { analyze { annotationApplication.classId?.toKtClassSymbol()?.let { symbol -> - if (symbol.origin == KaSymbolOrigin.JAVA_SOURCE && symbol.psi != null && symbol.psi !is ClsClassImpl) { + if ( + symbol.origin == KaSymbolOrigin.JAVA_SOURCE && symbol.psi != null && + symbol.psi !is ClsClassImpl && symbol.psi is PsiClass + ) { (symbol.psi as PsiClass).allMethods.filterIsInstance() .mapNotNull { annoMethod -> annoMethod.defaultValue?.let { value -> diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/util.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/util.kt index 436634f5e9..1eab9f0b24 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/util.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/util.kt @@ -54,12 +54,12 @@ import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap import org.jetbrains.kotlin.codegen.state.InfoForMangling import org.jetbrains.kotlin.codegen.state.collectFunctionSignatureForManglingSuffix import org.jetbrains.kotlin.codegen.state.md5base64 -import org.jetbrains.kotlin.fir.analysis.checkers.getContainingClassSymbol import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.utils.moduleName import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack import org.jetbrains.kotlin.fir.java.toFirExpression +import org.jetbrains.kotlin.fir.resolve.getContainingClassSymbol import org.jetbrains.kotlin.fir.symbols.SymbolInternals import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase import org.jetbrains.kotlin.fir.types.* @@ -98,15 +98,7 @@ internal fun mapAAOrigin(ktSymbol: KaSymbol): Origin { return if (symbolOrigin == Origin.JAVA && ktSymbol.psi?.containingFile?.fileType?.isBinary == true) { Origin.JAVA_LIB } else { - if (ktSymbol.psi == null) { - if (analyze { ktSymbol.containingModule is KaLibraryModule }) { - Origin.KOTLIN_LIB - } else { - Origin.SYNTHETIC - } - } else { - symbolOrigin - } + symbolOrigin } } diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/util/BinaryUtils.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/util/BinaryUtils.kt index 8bea012752..8659a8541c 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/util/BinaryUtils.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/util/BinaryUtils.kt @@ -40,6 +40,8 @@ import org.jetbrains.org.objectweb.asm.ClassVisitor import org.jetbrains.org.objectweb.asm.FieldVisitor import org.jetbrains.org.objectweb.asm.MethodVisitor import org.jetbrains.org.objectweb.asm.Opcodes +import java.nio.ByteBuffer +import java.nio.ByteOrder import java.util.IdentityHashMap data class BinaryClassInfo( @@ -96,11 +98,25 @@ fun KSAnnotated.hasAnnotation(fqn: String): Boolean = it.annotationType.resolve().declaration.qualifiedName?.asString() == fqn } +// Validate classfile formate. May throw. +private fun validateClassfileFormat(content: ByteArray) { + if (content.size < 4) { + throw IllegalArgumentException("Invalid bytecode format") + } + val magic = ByteBuffer.wrap(content, 0, 4) + .order(ByteOrder.BIG_ENDIAN).int + if (magic != 0xCAFEBABE.toInt()) { + throw IllegalArgumentException("Invalid bytecode format: $magic") + } +} + fun Resolver.extractThrowsFromClassFile( virtualFileContent: ByteArray, jvmDesc: String?, simpleName: String? ): Sequence { + validateClassfileFormat(virtualFileContent) + val exceptionNames = mutableListOf() ClassReader(virtualFileContent).accept( object : ClassVisitor(Opcodes.API_VERSION) { diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/standalone/IncrementalKotlinDeclarationProviderFactory.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/standalone/IncrementalKotlinDeclarationProviderFactory.kt index 1b664ebb5d..512645cd89 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/standalone/IncrementalKotlinDeclarationProviderFactory.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/standalone/IncrementalKotlinDeclarationProviderFactory.kt @@ -1,5 +1,6 @@ package com.google.devtools.ksp.standalone +import com.intellij.core.CoreApplicationEnvironment import com.intellij.openapi.project.Project import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.analysis.api.platform.declarations.KotlinCompositeDeclarationProvider @@ -14,6 +15,7 @@ import org.jetbrains.kotlin.psi.KtTypeAlias class IncrementalKotlinDeclarationProviderFactory( private val project: Project, + private val environment: CoreApplicationEnvironment, ) : KotlinDeclarationProviderFactory { private val staticFactories: MutableList = mutableListOf() @@ -27,7 +29,12 @@ class IncrementalKotlinDeclarationProviderFactory( fun update(files: Collection) { val skipBuiltIns = staticFactories.isNotEmpty() - val staticFactory = KotlinStandaloneDeclarationProviderFactory(project, files, skipBuiltins = skipBuiltIns) + val staticFactory = KotlinStandaloneDeclarationProviderFactory( + project, + environment, + files, + skipBuiltins = skipBuiltIns + ) staticFactories.add(staticFactory) } diff --git a/kotlin-analysis-api/testData/libOrigins.kt b/kotlin-analysis-api/testData/libOrigins.kt index 26e7e933d6..901d9b0eef 100644 --- a/kotlin-analysis-api/testData/libOrigins.kt +++ b/kotlin-analysis-api/testData/libOrigins.kt @@ -22,12 +22,22 @@ // Validating Anno3 // Validating Anno4 // Validating Anno5 +// Validating Foo +// Validating FooProvider2 // Validating JavaLib // Validating KotlinLibClass // Exception: [KotlinLibClass, T1, Any?]: SYNTHETIC // Exception: [KotlinLibClass, T1, Any?]: SYNTHETIC // Validating kotlinLibFuntion // Validating kotlinLibProperty +// Validating File: App.java +// Exception: [File: App.java, App, foo, getFoo, Foo]: SYNTHETIC +// Exception: [File: App.java, App, foo, getFoo]: SYNTHETIC +// Validating File: FooProvider1.kt +// Exception: [File: FooProvider1.kt, FooProvider1, Any]: SYNTHETIC +// Exception: [File: FooProvider1.kt, FooProvider1, foo, foo.getter(), Foo, Foo]: SYNTHETIC +// Exception: [File: FooProvider1.kt, FooProvider1, foo, foo.getter(), Foo]: SYNTHETIC +// Exception: [File: FooProvider1.kt, FooProvider1, foo, foo.getter()]: SYNTHETIC // Validating File: JavaSrc.java // Exception: [File: JavaSrc.java, JavaSrc, synthetic constructor for JavaSrc, JavaSrc]: SYNTHETIC // Exception: [File: JavaSrc.java, JavaSrc, synthetic constructor for JavaSrc]: SYNTHETIC @@ -89,6 +99,15 @@ class JavaLib { } } +// FILE: FooProvider2.kt +package foo.bar + +interface Foo + +interface FooProvider2 { + fun getFoo(): Foo +} + // MODULE: main(module1) // FILE: KotlinSrc.kt package foo.bar @@ -103,6 +122,13 @@ class KotlinSrcClass(val q1: Set, val q2: Short) { fun g3(q6: Set): Short = 0 } +// FILE: FooProvider1.kt +package foo.bar + +interface FooProvider1 { + val foo: Foo +} + // FILE: JavaSrc.java package foo.bar; @@ -123,3 +149,8 @@ public @interface JavaAnno1 { @Anno5(p1 = 1, p2 = "a2") String value (); } + +// FILE: App.java +package foo.bar; +import foo.bar.FooProvider2; +interface App extends FooProvider1, FooProvider2 {} diff --git a/kotlin-analysis-api/testData/parent.kt b/kotlin-analysis-api/testData/parent.kt index a08ea92a1f..0a458ddf35 100644 --- a/kotlin-analysis-api/testData/parent.kt +++ b/kotlin-analysis-api/testData/parent.kt @@ -59,7 +59,6 @@ // parent of RGB.B: RGB // parent of Array: values // parent of values: RGB -// parent of String: String // parent of String: value // parent of value: valueOf // parent of RGB: valueOf @@ -232,16 +231,10 @@ // parent of HSV.H: HSV // parent of HSV.S: HSV // parent of HSV.V: HSV -// parent of HSV: HSV -// parent of HSV: INVARIANT HSV -// parent of INVARIANT HSV: Array -// parent of Array: Array // parent of Array: values // parent of values: HSV -// parent of String: String // parent of String: value // parent of value: valueOf -// parent of HSV: HSV // parent of HSV: valueOf // parent of valueOf: HSV // parent of HSV: HSV diff --git a/kotlin-analysis-api/testData/resolveJavaType.kt b/kotlin-analysis-api/testData/resolveJavaType.kt index 7a6d1de25d..ef2a2f28f8 100644 --- a/kotlin-analysis-api/testData/resolveJavaType.kt +++ b/kotlin-analysis-api/testData/resolveJavaType.kt @@ -54,7 +54,6 @@ // kotlin.Unit // kotlin.Int // JavaEnum -// kotlin.String // END // FILE: dummy.kt diff --git a/symbol-processing-aa-embeddable/build.gradle.kts b/symbol-processing-aa-embeddable/build.gradle.kts index 2aabbfe262..691a3dcae3 100644 --- a/symbol-processing-aa-embeddable/build.gradle.kts +++ b/symbol-processing-aa-embeddable/build.gradle.kts @@ -44,6 +44,7 @@ val prefixesToRelocate = listOf( "com.google.errorprone.", "com.google.gwt.", "com.google.j2objc.", + "com.google.thirdparty.", "com.intellij.", "com.sun.jna.", "gnu.trove.", diff --git a/test-utils/build.gradle.kts b/test-utils/build.gradle.kts index 4165a7b6a8..8c21c32363 100644 --- a/test-utils/build.gradle.kts +++ b/test-utils/build.gradle.kts @@ -2,7 +2,7 @@ plugins { kotlin("jvm") } -version = "2.0.255-SNAPSHOT" +version = rootProject.extra.get("kspVersion") as String repositories { maven("https://redirector.kotlinlang.org/maven/kotlin-ide-plugin-dependencies")