From 8f720ad24b11bc771209039a9cfe4101a0446187 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 11 Aug 2023 18:43:19 +0200 Subject: [PATCH] K2: support -Xskip-metadata-version-check #KT-60795 --- .../deserialization/JvmClassFileBasedSymbolProvider.kt | 9 +++++++-- .../AbstractCompileKotlinAgainstCustomBinariesTest.kt | 3 +-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/JvmClassFileBasedSymbolProvider.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/JvmClassFileBasedSymbolProvider.kt index e10c07af359..1bf8e7c8c3a 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/JvmClassFileBasedSymbolProvider.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/JvmClassFileBasedSymbolProvider.kt @@ -5,13 +5,17 @@ package org.jetbrains.kotlin.fir.java.deserialization +import org.jetbrains.kotlin.config.AnalysisFlags import org.jetbrains.kotlin.descriptors.SourceElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.ThreadSafeMutableState import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.getDeprecationsProvider -import org.jetbrains.kotlin.fir.deserialization.* +import org.jetbrains.kotlin.fir.deserialization.AbstractFirDeserializedSymbolProvider +import org.jetbrains.kotlin.fir.deserialization.FirDeserializationContext +import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider +import org.jetbrains.kotlin.fir.deserialization.PackagePartsCacheData import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.java.FirJavaFacade import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass @@ -101,7 +105,8 @@ class JvmClassFileBasedSymbolProvider( private val KotlinJvmBinaryClass.incompatibility: IncompatibleVersionErrorData? get() { - // TODO: skipMetadataVersionCheck + if (session.languageVersionSettings.getFlag(AnalysisFlags.skipMetadataVersionCheck)) return null + if (classHeader.metadataVersion.isCompatible(ownMetadataVersion)) return null return IncompatibleVersionErrorData( actualVersion = classHeader.metadataVersion, diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractCompileKotlinAgainstCustomBinariesTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractCompileKotlinAgainstCustomBinariesTest.kt index 573b04275da..012e63deb86 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractCompileKotlinAgainstCustomBinariesTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractCompileKotlinAgainstCustomBinariesTest.kt @@ -306,8 +306,7 @@ abstract class AbstractCompileKotlinAgainstCustomBinariesTest : AbstractKotlinCo }) } - // KT-60795 K2: missing INCOMPATIBLE_CLASS and corresponding CLI error - fun testWrongMetadataVersionSkipVersionCheck() = muteForK2 { + fun testWrongMetadataVersionSkipVersionCheck() { doTestKotlinLibraryWithWrongMetadataVersion("library", null, "-Xskip-metadata-version-check") }