diff --git a/compiler/testData/cli/jvm/wrongAbiVersion.out b/compiler/testData/cli/jvm/wrongAbiVersion.out index f3655702809..552859abfe0 100644 --- a/compiler/testData/cli/jvm/wrongAbiVersion.out +++ b/compiler/testData/cli/jvm/wrongAbiVersion.out @@ -1,5 +1,5 @@ compiler/testData/cli/jvm/wrongAbiVersionLib/bin/ClassWithWrongAbiVersion.class: error: class 'ClassWithWrongAbiVersion' was compiled with an incompatible version of Kotlin. Its ABI version is unknown, expected ABI version is $ABI_VERSION$ -compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/Wrong_packageKt.class: error: class 'wrong/Wrong_packageKt' was compiled with an incompatible version of Kotlin. Its ABI version is unknown, expected ABI version is $ABI_VERSION$ +compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/WrongPackage.class: error: class 'wrong/WrongPackage' was compiled with an incompatible version of Kotlin. Its ABI version is unknown, expected ABI version is $ABI_VERSION$ compiler/testData/cli/jvm/wrongAbiVersion.kt:4:3: error: unresolved reference: bar bar() ^ diff --git a/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/ClassWithWrongAbiVersion.class b/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/ClassWithWrongAbiVersion.class index ff9873566e4..8e0d4bc08c8 100644 Binary files a/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/ClassWithWrongAbiVersion.class and b/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/ClassWithWrongAbiVersion.class differ diff --git a/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/META-INF/main.kotlin_module b/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/META-INF/main.kotlin_module deleted file mode 100644 index f64daa520df..00000000000 Binary files a/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/META-INF/main.kotlin_module and /dev/null differ diff --git a/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/ClassWithInnerLambda$other$1.class b/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/ClassWithInnerLambda$other$1.class index 39f58523039..896ff63760d 100644 Binary files a/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/ClassWithInnerLambda$other$1.class and b/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/ClassWithInnerLambda$other$1.class differ diff --git a/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/ClassWithInnerLambda.class b/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/ClassWithInnerLambda.class index b5d555021b9..7ac96fb92a3 100644 Binary files a/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/ClassWithInnerLambda.class and b/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/ClassWithInnerLambda.class differ diff --git a/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/TraitWithDefault$$TImpl.class b/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/TraitWithDefault$$TImpl.class index 3ddf539b800..8e4640ad252 100644 Binary files a/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/TraitWithDefault$$TImpl.class and b/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/TraitWithDefault$$TImpl.class differ diff --git a/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/TraitWithDefault.class b/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/TraitWithDefault.class index f7d41776df4..ac6e941f3b7 100644 Binary files a/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/TraitWithDefault.class and b/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/TraitWithDefault.class differ diff --git a/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/WrongPackage$wrong-package$0984b5e5.class b/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/WrongPackage$wrong-package$0984b5e5.class new file mode 100644 index 00000000000..fe19324995c Binary files /dev/null and b/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/WrongPackage$wrong-package$0984b5e5.class differ diff --git a/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/WrongPackage.class b/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/WrongPackage.class index af5f5018642..816be83a03e 100644 Binary files a/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/WrongPackage.class and b/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/WrongPackage.class differ diff --git a/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/Wrong_packageKt.class b/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/Wrong_packageKt.class deleted file mode 100644 index 62816038963..00000000000 Binary files a/compiler/testData/cli/jvm/wrongAbiVersionLib/bin/wrong/Wrong_packageKt.class and /dev/null differ diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageScope.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageScope.kt index b8d73eadf9d..a6aefe8857b 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageScope.kt @@ -28,6 +28,7 @@ import org.jetbrains.kotlin.load.java.lazy.LazyJavaResolverContext import org.jetbrains.kotlin.load.java.lazy.resolveKotlinBinaryClass import org.jetbrains.kotlin.load.java.structure.JavaClass import org.jetbrains.kotlin.load.java.structure.JavaPackage +import org.jetbrains.kotlin.load.kotlin.DeserializedDescriptorResolver import org.jetbrains.kotlin.load.kotlin.PackageClassUtils import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader import org.jetbrains.kotlin.name.ClassId @@ -76,8 +77,16 @@ public class LazyJavaPackageScope( partToFacade()[partName] private val deserializedPackageScope = c.storageManager.createLazyValue { - if (kotlinBinaryClasses().isEmpty()) + if (kotlinBinaryClasses().isEmpty()) { + // If the scope is queried but no package parts are found, there's a possibility that we're trying to load symbols + // from an old package with the binary-incompatible facade. + // We try to read the old package facade if there is one, to report the "incompatible ABI version" message. + packageFragment.oldPackageFacade?.let { binaryClass -> + c.components.deserializedDescriptorResolver.readData(binaryClass, DeserializedDescriptorResolver.KOTLIN_PACKAGE_FACADE) + } + JetScope.Empty + } else { c.components.deserializedDescriptorResolver.createKotlinPackageScope(packageFragment, kotlinBinaryClasses()) } diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializedDescriptorResolver.java b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializedDescriptorResolver.java index 804b8577fcc..993fc8c23f3 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializedDescriptorResolver.java +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializedDescriptorResolver.java @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.load.kotlin; -import kotlin.KotlinPackage; import kotlin.jvm.functions.Function0; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -37,16 +36,16 @@ import org.jetbrains.kotlin.serialization.jvm.JvmProtoBufUtil; import javax.inject.Inject; import java.util.*; -import static org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader.Kind.CLASS; -import static org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader.Kind.MULTIFILE_CLASS_PART; +import static kotlin.KotlinPackage.setOf; +import static org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader.Kind.*; public final class DeserializedDescriptorResolver { private final ErrorReporter errorReporter; private DeserializationComponents components; - public static final Set KOTLIN_CLASS = KotlinPackage.setOf(CLASS); - public static final Set KOTLIN_FILE_FACADE_OR_MULTIFILE_CLASS_PART = - KotlinPackage.setOf(KotlinClassHeader.Kind.FILE_FACADE, MULTIFILE_CLASS_PART); + public static final Set KOTLIN_CLASS = setOf(CLASS); + public static final Set KOTLIN_FILE_FACADE_OR_MULTIFILE_CLASS_PART = setOf(FILE_FACADE, MULTIFILE_CLASS_PART); + public static final Set KOTLIN_PACKAGE_FACADE = setOf(PACKAGE_FACADE); public DeserializedDescriptorResolver(@NotNull ErrorReporter errorReporter) { this.errorReporter = errorReporter;