Android studio 4.1, Kotlin 1.4.20-RC, incorrect import syntax 错误显示

Android studio 4.1, Kotlin 1.4.20-RC, incorrect import syntax error display

Android Studio 4.1 (AS)

在一个 kotlin 项目中,模块具有 android()、jvm() 和 ios() 多平台目标,我在 commonMain 源集中有一个预期的 class在 androidMain 和 jvmMain 中有实际的 class 实现。 androidMain 实际 class 在 AS 中显示 java 导入错误:

import java.text.DecimalFormat
import java.text.NumberFormat
import java.util.Currency

每一行的“java”是红色的,好像IDE看不到解决这个问题的依赖。因此,当然,所有使用这些导入的相关来源也会在 IDE 中显示为错误。 IDE 显示的错误是错误的,因为 androidMain 源集和 jvmMain 源集所需的依赖项在 build.gradle.kts 中,并且它们在 [=31= 期间解析得很好] 建造。

有趣的是,jvmMain sourseset 中的实际 class 与 AndroidMain 中的来源完全相同,在 AS 中没有显示任何错误。因此 AS 仅在 android 主源集中显示不正确的语法错误。

我只在 kotlin 多平台模块上看到过这个。任何人看到这个并知道如何解决?我不知道 IDE 做了什么可能会导致它错误地解析 gradle 依赖项。

提前感谢任何help/info。

这里是相关模块的 gradle:

import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget

plugins {
    kotlin("multiplatform")
    id("com.android.library")
    id(SrcLibraries.spotless)
}

val moduleName = "monayCommon"
group = App.appId
version = App.appVersionName

kotlin {
    jvm()
    android()
    iosX64("ios") {
        binaries {
            framework {
                baseName = moduleName
            }
        }
    }

    sourceSets {
        val commonMain by getting {
            dependencies {
                implementation(project(":ioCommon"))
                implementation(kotlin("stdlib-common"))
                implementation("com.oldguy.kmpsc:kmp-sc:0.5.0-SNAPSHOT")
                implementation(SrcLibraries.klock)
                implementation(SrcLibraries.bigDecimal)
            }
        }
        val commonTest by getting {
            dependencies {
                implementation(kotlin("test-common"))
                implementation(kotlin("test-annotations-common"))
            }
        }
        val androidMain by getting {
            dependsOn(commonMain)
            dependencies {
                implementation(kotlin("stdlib-jdk8"))
                implementation(SrcLibraries.androidxCoreKtx)
            }
        }
        val androidTest by getting {
            dependsOn(commonMain)
            dependsOn(androidMain)
            dependencies {
                implementation(Kotest.junit5)
                implementation(Kotest.junit5Runtime)
                implementation(Kotest.core)
                implementation(Kotest.assertions)
            }
        }
        val jvmMain by getting {
            dependsOn(commonMain)
            dependencies {
                implementation(kotlin("stdlib-jdk8"))
            }
        }
        val jvmTest by getting {
            dependsOn(commonMain)
            dependsOn(jvmMain)
            dependencies {
                implementation(Kotest.junit5)
                implementation(Kotest.junit5Runtime)
                implementation(Kotest.core)
                implementation(Kotest.assertions)
            }

        }
        val iosMain by getting {
            dependsOn(commonMain)
            dependencies {
                implementation(kotlin("stdlib"))
            }
        }
        val iosTest by getting {
            dependsOn(commonMain)
            dependsOn(iosMain)
        }
        all {
            languageSettings.useExperimentalAnnotation("kotlin.ExperimentalUnsignedTypes")
        }
    }
}

tasks.withType<Test> {
    useJUnitPlatform()
}

android {
    compileSdkVersion(AndroidSDK.compile)
    buildToolsVersion = AndroidSDK.buildToolsVersion
    defaultConfig {
        minSdkVersion(AndroidSDK.min)
        targetSdkVersion(AndroidSDK.compile)
        versionCode = App.appVersion
        versionName = App.appVersionName
    }
    buildTypes {
        getByName("release") {
            isMinifyEnabled = false
        }
    }

    packagingOptions.exclude("META-INF/LICENSE.md")
    packagingOptions.exclude("META-INF/LICENSE-notice.md")

    sourceSets {
        getByName("androidTest") {
            setRoot("src\androidAndroidTest")
            manifest.srcFile("src\androidMain\AndroidManifest.xml")
            java.srcDirs("src\androidAndroidTest\kotlin")
        }
        getByName("test") {
            setRoot("src\androidTest")
            java.srcDirs("src\androidTest\kotlin")
        }
        getByName("main") {
            setRoot("src\androidMain")
            manifest.srcFile("src\androidMain\AndroidManifest.xml")
            java.srcDirs("src\androidMain\kotlin")
        }
    }

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
}

val packForXcode by tasks.creating(Sync::class) {
    group = "build"
    val mode = System.getenv("CONFIGURATION") ?: "DEBUG"
    val framework = kotlin.targets.getByName<KotlinNativeTarget>("ios").binaries.getFramework(mode)
    inputs.property("mode", mode)
    dependsOn(framework.linkTask)
    val targetDir = File(buildDir, "xcode-frameworks")
    from({ framework.outputDirectory })
    into(targetDir)
}

tasks.getByName("build").dependsOn(packForXcode)

通过添加

解决了这个问题
kotlin.mpp.enableGranularSourceSetsMetadata=true

gradle.properties