LV 2.0: drop reporting FIR_COMPILED_CLASS and relevant stuff

#KT-62056 Fixed
Related to KT-59171, KT-61951
This commit is contained in:
Mikhail Glukhikh
2023-09-15 18:04:57 +02:00
committed by Space Team
parent d4640cb576
commit a77b758efa
18 changed files with 13 additions and 93 deletions
@@ -29,8 +29,7 @@ object FirDiagnosticsCompilerResultsReporter {
AnalyzerWithCompilerReport.reportSpecialErrors(
diagnosticsCollector.diagnostics.any { it.factory == FirErrors.INCOMPATIBLE_CLASS },
diagnosticsCollector.diagnostics.any { it.factory == FirErrors.PRE_RELEASE_CLASS },
hasUnstableClasses = false, // TODO (KT-61598): report FIR_COMPILED_CLASS and IR_WITH_UNSTABLE_ABI_COMPILED_CLASS
hasFirUnstableClasses = false, // TODO (KT-61598): report FIR_COMPILED_CLASS and IR_WITH_UNSTABLE_ABI_COMPILED_CLASS
hasUnstableClasses = false, // TODO (KT-61598): report IR_WITH_UNSTABLE_ABI_COMPILED_CLASS
messageCollector,
)
}
@@ -185,7 +185,6 @@ class AnalyzerWithCompilerReport(
diagnostics.any { it.factory == Errors.INCOMPATIBLE_CLASS },
diagnostics.any { it.factory == Errors.PRE_RELEASE_CLASS },
diagnostics.any { it.factory == Errors.IR_WITH_UNSTABLE_ABI_COMPILED_CLASS },
diagnostics.any { it.factory == Errors.FIR_COMPILED_CLASS },
messageCollector,
)
}
@@ -195,7 +194,6 @@ class AnalyzerWithCompilerReport(
hasIncompatibleClasses: Boolean,
hasPrereleaseClasses: Boolean,
hasUnstableClasses: Boolean,
hasFirUnstableClasses: Boolean,
messageCollector: MessageCollector,
) {
if (hasIncompatibleClasses) {
@@ -222,14 +220,6 @@ class AnalyzerWithCompilerReport(
"Remove them from the classpath or use '-Xallow-unstable-dependencies' to suppress errors"
)
}
if (hasFirUnstableClasses) {
messageCollector.report(
ERROR,
"Classes compiled by the new Kotlin compiler frontend were found in dependencies. " +
"Remove them from the classpath or use '-Xallow-unstable-dependencies' to suppress errors"
)
}
}
fun reportSyntaxErrors(file: PsiElement, reporter: DiagnosticMessageReporter): SyntaxErrorReport {
@@ -44,7 +44,6 @@ class FirJvmBackendExtension(
companion object {
fun generateMetadataExtraFlags(abiStability: JvmAbiStability?): Int =
JvmAnnotationNames.METADATA_JVM_IR_FLAG or
JvmAnnotationNames.METADATA_FIR_FLAG or
(if (abiStability == JvmAbiStability.STABLE) JvmAnnotationNames.METADATA_JVM_IR_STABLE_ABI_FLAG else 0)
(if (abiStability != JvmAbiStability.UNSTABLE) JvmAnnotationNames.METADATA_JVM_IR_STABLE_ABI_FLAG else 0)
}
}
@@ -136,7 +136,6 @@ class JvmClassFileBasedSymbolProvider(
private val KotlinJvmBinaryClass.abiStability: DeserializedContainerAbiStability
get() = when {
session.languageVersionSettings.getFlag(AnalysisFlags.allowUnstableDependencies) -> DeserializedContainerAbiStability.STABLE
classHeader.isUnstableFirBinary -> DeserializedContainerAbiStability.FIR_UNSTABLE
classHeader.isUnstableJvmIrBinary -> DeserializedContainerAbiStability.IR_UNSTABLE
else -> DeserializedContainerAbiStability.STABLE
}
@@ -59,9 +59,6 @@ object MissingDependencyClassChecker : CallChecker {
if (source.isPreReleaseInvisible) {
return PRE_RELEASE_CLASS.on(reportOn, source.presentableString)
}
if (source.abiStability == DeserializedContainerAbiStability.FIR_UNSTABLE) {
return FIR_COMPILED_CLASS.on(reportOn, source.presentableString)
}
if (source.abiStability == DeserializedContainerAbiStability.IR_UNSTABLE) {
return IR_WITH_UNSTABLE_ABI_COMPILED_CLASS.on(reportOn, source.presentableString)
}
@@ -1 +0,0 @@
OK
@@ -1,8 +1 @@
error: classes compiled by the new Kotlin compiler frontend were found in dependencies. Remove them from the classpath or use '-Xallow-unstable-dependencies' to suppress errors
compiler/testData/compileKotlinAgainstCustomBinaries/againstFir/source.kt:4:5: error: class 'lib.AKt' is compiled by the new Kotlin compiler frontend and cannot be loaded by the old compiler
get { Box("OK").value }
^
compiler/testData/compileKotlinAgainstCustomBinaries/againstFir/source.kt:4:11: error: class 'lib.Box' is compiled by the new Kotlin compiler frontend and cannot be loaded by the old compiler
get { Box("OK").value }
^
COMPILATION_ERROR
OK
@@ -1,8 +1,8 @@
error: classes compiled by the new Kotlin compiler frontend were found in dependencies. Remove them from the classpath or use '-Xallow-unstable-dependencies' to suppress errors
compiler/testData/compileKotlinAgainstCustomBinaries/againstFirWithUnstableAbi/source.kt:4:5: error: class 'lib.AKt' is compiled by the new Kotlin compiler frontend and cannot be loaded by the old compiler
error: classes compiled by an unstable version of the Kotlin compiler were found in dependencies. Remove them from the classpath or use '-Xallow-unstable-dependencies' to suppress errors
compiler/testData/compileKotlinAgainstCustomBinaries/againstFirWithUnstableAbi/source.kt:4:5: error: class 'lib.AKt' is compiled by an unstable version of the Kotlin compiler and cannot be loaded by this compiler
get { Box("OK").value }
^
compiler/testData/compileKotlinAgainstCustomBinaries/againstFirWithUnstableAbi/source.kt:4:11: error: class 'lib.Box' is compiled by the new Kotlin compiler frontend and cannot be loaded by the old compiler
compiler/testData/compileKotlinAgainstCustomBinaries/againstFirWithUnstableAbi/source.kt:4:11: error: class 'lib.Box' is compiled by an unstable version of the Kotlin compiler and cannot be loaded by this compiler
get { Box("OK").value }
^
COMPILATION_ERROR
@@ -1,26 +1 @@
error: classes compiled by the new Kotlin compiler frontend were found in dependencies. Remove them from the classpath or use '-Xallow-unstable-dependencies' to suppress errors
compiler/testData/compileKotlinAgainstCustomBinaries/releaseCompilerAgainstPreReleaseLibrarySkipMetadataVersionCheck/source.kt:6:16: error: class 'a.A' is compiled by the new Kotlin compiler frontend and cannot be loaded by the old compiler
fun baz(param: A) {
^
compiler/testData/compileKotlinAgainstCustomBinaries/releaseCompilerAgainstPreReleaseLibrarySkipMetadataVersionCheck/source.kt:7:23: error: class 'a.A' is compiled by the new Kotlin compiler frontend and cannot be loaded by the old compiler
val constructor = A()
^
compiler/testData/compileKotlinAgainstCustomBinaries/releaseCompilerAgainstPreReleaseLibrarySkipMetadataVersionCheck/source.kt:8:22: error: class 'a.A' is compiled by the new Kotlin compiler frontend and cannot be loaded by the old compiler
val methodCall = param.hashCode()
^
compiler/testData/compileKotlinAgainstCustomBinaries/releaseCompilerAgainstPreReleaseLibrarySkipMetadataVersionCheck/source.kt:9:30: error: class 'a.A' is compiled by the new Kotlin compiler frontend and cannot be loaded by the old compiler
val supertype = object : A() {}
^
compiler/testData/compileKotlinAgainstCustomBinaries/releaseCompilerAgainstPreReleaseLibrarySkipMetadataVersionCheck/source.kt:11:13: error: class 'a.AKt' is compiled by the new Kotlin compiler frontend and cannot be loaded by the old compiler
val x = foo()
^
compiler/testData/compileKotlinAgainstCustomBinaries/releaseCompilerAgainstPreReleaseLibrarySkipMetadataVersionCheck/source.kt:12:13: error: class 'a.AKt' is compiled by the new Kotlin compiler frontend and cannot be loaded by the old compiler
val y = bar
^
compiler/testData/compileKotlinAgainstCustomBinaries/releaseCompilerAgainstPreReleaseLibrarySkipMetadataVersionCheck/source.kt:13:5: error: class 'a.AKt' is compiled by the new Kotlin compiler frontend and cannot be loaded by the old compiler
bar = 239
^
compiler/testData/compileKotlinAgainstCustomBinaries/releaseCompilerAgainstPreReleaseLibrarySkipMetadataVersionCheck/source.kt:14:12: error: class 'a.AKt' is compiled by the new Kotlin compiler frontend and cannot be loaded by the old compiler
val z: TA = ""
^
COMPILATION_ERROR
OK
@@ -1,26 +1 @@
error: classes compiled by the new Kotlin compiler frontend were found in dependencies. Remove them from the classpath or use '-Xallow-unstable-dependencies' to suppress errors
compiler/testData/compileKotlinAgainstCustomBinaries/releaseCompilerAgainstPreReleaseLibrarySkipPrereleaseCheck/source.kt:6:16: error: class 'a.A' is compiled by the new Kotlin compiler frontend and cannot be loaded by the old compiler
fun baz(param: A) {
^
compiler/testData/compileKotlinAgainstCustomBinaries/releaseCompilerAgainstPreReleaseLibrarySkipPrereleaseCheck/source.kt:7:23: error: class 'a.A' is compiled by the new Kotlin compiler frontend and cannot be loaded by the old compiler
val constructor = A()
^
compiler/testData/compileKotlinAgainstCustomBinaries/releaseCompilerAgainstPreReleaseLibrarySkipPrereleaseCheck/source.kt:8:22: error: class 'a.A' is compiled by the new Kotlin compiler frontend and cannot be loaded by the old compiler
val methodCall = param.hashCode()
^
compiler/testData/compileKotlinAgainstCustomBinaries/releaseCompilerAgainstPreReleaseLibrarySkipPrereleaseCheck/source.kt:9:30: error: class 'a.A' is compiled by the new Kotlin compiler frontend and cannot be loaded by the old compiler
val supertype = object : A() {}
^
compiler/testData/compileKotlinAgainstCustomBinaries/releaseCompilerAgainstPreReleaseLibrarySkipPrereleaseCheck/source.kt:11:13: error: class 'a.AKt' is compiled by the new Kotlin compiler frontend and cannot be loaded by the old compiler
val x = foo()
^
compiler/testData/compileKotlinAgainstCustomBinaries/releaseCompilerAgainstPreReleaseLibrarySkipPrereleaseCheck/source.kt:12:13: error: class 'a.AKt' is compiled by the new Kotlin compiler frontend and cannot be loaded by the old compiler
val y = bar
^
compiler/testData/compileKotlinAgainstCustomBinaries/releaseCompilerAgainstPreReleaseLibrarySkipPrereleaseCheck/source.kt:13:5: error: class 'a.AKt' is compiled by the new Kotlin compiler frontend and cannot be loaded by the old compiler
bar = 239
^
compiler/testData/compileKotlinAgainstCustomBinaries/releaseCompilerAgainstPreReleaseLibrarySkipPrereleaseCheck/source.kt:14:12: error: class 'a.AKt' is compiled by the new Kotlin compiler frontend and cannot be loaded by the old compiler
val z: TA = ""
^
COMPILATION_ERROR
OK
@@ -31,6 +31,7 @@ public final class JvmAnnotationNames {
public static final int METADATA_STRICT_VERSION_SEMANTICS_FLAG = 1 << 3;
public static final int METADATA_JVM_IR_FLAG = 1 << 4;
public static final int METADATA_JVM_IR_STABLE_ABI_FLAG = 1 << 5;
@SuppressWarnings("unused")
public static final int METADATA_FIR_FLAG = 1 << 6;
public static final int METADATA_PUBLIC_ABI_FLAG = 1 << 7;
@@ -27,12 +27,10 @@ enum class DeserializedContainerAbiStability {
// Either the container is stable, or this compiler is configured to ignore ABI stability of dependencies.
STABLE,
// The container is unstable because it is compiled with FIR, and this compiler is _not_ configured to ignore that.
FIR_UNSTABLE,
// The container is unstable because either:
// 1) it is compiled with JVM IR prior to 1.4.30, or
// 2) it is compiled with JVM IR >= 1.4.30 with the `-Xabi-stability=unstable` compiler option,
// 3) it is compiled with FIR prior to 2.0.0,
// and this compiler is _not_ configured to ignore that.
IR_UNSTABLE,
}
@@ -112,7 +112,6 @@ class DeserializedDescriptorResolver {
private val KotlinJvmBinaryClass.abiStability: DeserializedContainerAbiStability
get() = when {
components.configuration.allowUnstableDependencies -> DeserializedContainerAbiStability.STABLE
classHeader.isUnstableFirBinary -> DeserializedContainerAbiStability.FIR_UNSTABLE
classHeader.isUnstableJvmIrBinary -> DeserializedContainerAbiStability.IR_UNSTABLE
else -> DeserializedContainerAbiStability.STABLE
}
@@ -62,9 +62,6 @@ class KotlinClassHeader(
val isUnstableJvmIrBinary: Boolean
get() = extraInt.has(METADATA_JVM_IR_FLAG) && !extraInt.has(METADATA_JVM_IR_STABLE_ABI_FLAG)
val isUnstableFirBinary: Boolean
get() = extraInt.has(METADATA_FIR_FLAG) && !extraInt.has(METADATA_JVM_IR_STABLE_ABI_FLAG)
val isPreRelease: Boolean
get() = extraInt.has(METADATA_PRE_RELEASE_FLAG)
@@ -75,7 +75,8 @@ public annotation class Metadata(
* * 4 - this class file is compiled with the new Kotlin compiler backend (JVM IR) introduced in Kotlin 1.4.
* * 5 - this class file has stable metadata and ABI. This is used only for class files compiled with JVM IR (see flag #4) or FIR (#6),
* and prevents metadata incompatibility diagnostics from being reported where the class is used.
* * 6 - this class file is compiled with the new Kotlin compiler frontend (FIR).
* * 6 - this class file is compiled with the K2 compiler frontend (FIR). Only valid before metadata version 2.0.0.
* Starting from metadata version 2.0.0, this flag is not set anymore, even though FIR is always used.
* * 7 - this class is used in the scope of an inline function and implicitly part of the public ABI. Only valid from
* metadata version 1.6.0.
*/
@@ -965,7 +965,7 @@ internal class Kapt4StubGenerator {
data1 = lightClass.files.map {
JvmFileClassUtil.manglePartName(qualifiedName.replace('.', '/'), it.name)
}.toTypedArray(),
extraInt = METADATA_JVM_IR_FLAG or METADATA_FIR_FLAG or METADATA_JVM_IR_STABLE_ABI_FLAG
extraInt = METADATA_JVM_IR_FLAG or METADATA_JVM_IR_STABLE_ABI_FLAG
)
private fun elementMapping(lightClass: PsiClass): Multimap<KtElement, PsiElement> =