From b587d3a78d040e3f49a367bbfb7c996f3efdfa4f Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 13 Jan 2016 21:24:20 +0300 Subject: [PATCH] Use JvmMetadataVersion where appropriate instead of bytecode version --- .../kotlin/codegen/ClassFileFactory.java | 4 ++-- .../kotlin/codegen/JvmCodegenUtil.java | 6 ++--- .../messages/AnalyzerWithCompilerReport.java | 23 ++++++++++--------- .../components/TraceBasedErrorReporter.kt | 12 ++++++---- compiler/testData/cli/jvm/wrongAbiVersion.out | 2 +- .../org/jetbrains/kotlin/cli/CliBaseTest.java | 4 ++-- .../KotlinSyntheticClassAnnotationTest.java | 4 ++-- .../kotlin/load/java/lazy/resolvers.kt | 2 +- .../DeserializedDescriptorResolver.java | 2 +- .../kotlin/load/kotlin/ModuleMapping.kt | 15 ++++++------ .../java/components/RuntimeErrorReporter.kt | 10 ++++---- .../deserialization/ErrorReporter.java | 4 ++-- .../classFile/KotlinClassFileDecompiler.kt | 4 ++-- .../textBuilder/LoggingErrorReporter.kt | 2 +- idea/src/META-INF/plugin.xml | 2 +- ...Index.kt => KotlinMetadataVersionIndex.kt} | 12 +++++----- .../versions/KotlinRuntimeLibraryUtil.java | 2 +- .../versions/KotlinUpdatePluginComponent.kt | 2 +- .../kotlin/jps/incremental/CacheVersion.kt | 9 +++++++- 19 files changed, 65 insertions(+), 56 deletions(-) rename idea/src/org/jetbrains/kotlin/idea/versions/{KotlinAbiVersionIndex.kt => KotlinMetadataVersionIndex.kt} (87%) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassFileFactory.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassFileFactory.java index 78f654c9b15..ba2d3b8c85e 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassFileFactory.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassFileFactory.java @@ -29,7 +29,7 @@ import org.jetbrains.annotations.TestOnly; import org.jetbrains.kotlin.backend.common.output.OutputFile; import org.jetbrains.kotlin.backend.common.output.OutputFileCollection; import org.jetbrains.kotlin.codegen.state.GenerationState; -import org.jetbrains.kotlin.load.java.JvmBytecodeBinaryVersion; +import org.jetbrains.kotlin.load.kotlin.JvmMetadataVersion; import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils; import org.jetbrains.kotlin.load.kotlin.PackageParts; import org.jetbrains.kotlin.name.FqName; @@ -123,7 +123,7 @@ public class ClassFileFactory implements OutputFileCollection { try { ByteArrayOutputStream moduleMapping = new ByteArrayOutputStream(4096); DataOutputStream dataOutStream = new DataOutputStream(moduleMapping); - int[] version = JvmBytecodeBinaryVersion.INSTANCE.toArray(); + int[] version = JvmMetadataVersion.INSTANCE.toArray(); dataOutStream.writeInt(version.length); for (int number : version) { dataOutStream.writeInt(number); diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/JvmCodegenUtil.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/JvmCodegenUtil.java index 7023e2a87bc..ff11d70615e 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/JvmCodegenUtil.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/JvmCodegenUtil.java @@ -19,8 +19,8 @@ package org.jetbrains.kotlin.codegen; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import kotlin.collections.CollectionsKt; -import kotlin.text.StringsKt; import kotlin.jvm.functions.Function1; +import kotlin.text.StringsKt; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.codegen.binding.CalculatedClosure; @@ -33,7 +33,7 @@ import org.jetbrains.kotlin.codegen.state.JetTypeMapper; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.load.java.JvmAbi; import org.jetbrains.kotlin.load.java.JvmAnnotationNames; -import org.jetbrains.kotlin.load.java.JvmBytecodeBinaryVersion; +import org.jetbrains.kotlin.load.kotlin.JvmMetadataVersion; import org.jetbrains.kotlin.load.kotlin.ModuleMapping; import org.jetbrains.kotlin.load.kotlin.ModuleVisibilityUtilsKt; import org.jetbrains.kotlin.psi.KtFile; @@ -224,7 +224,7 @@ public class JvmCodegenUtil { } public static void writeAbiVersion(@NotNull AnnotationVisitor av) { - av.visit(JvmAnnotationNames.VERSION_FIELD_NAME, JvmBytecodeBinaryVersion.INSTANCE.toArray()); + av.visit(JvmAnnotationNames.VERSION_FIELD_NAME, JvmMetadataVersion.INSTANCE.toArray()); } public static void writeModuleName(@NotNull AnnotationVisitor av, @NotNull GenerationState state) { diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/common/messages/AnalyzerWithCompilerReport.java b/compiler/cli/src/org/jetbrains/kotlin/cli/common/messages/AnalyzerWithCompilerReport.java index 3f4753721f3..b23fc13a66f 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/messages/AnalyzerWithCompilerReport.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/messages/AnalyzerWithCompilerReport.java @@ -31,9 +31,9 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor; import org.jetbrains.kotlin.diagnostics.*; import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages; import org.jetbrains.kotlin.load.java.JavaBindingContext; -import org.jetbrains.kotlin.load.java.JvmBytecodeBinaryVersion; import org.jetbrains.kotlin.load.java.components.TraceBasedErrorReporter; -import org.jetbrains.kotlin.load.java.components.TraceBasedErrorReporter.AbiVersionErrorData; +import org.jetbrains.kotlin.load.java.components.TraceBasedErrorReporter.MetadataVersionErrorData; +import org.jetbrains.kotlin.load.kotlin.JvmMetadataVersion; import org.jetbrains.kotlin.psi.KtFile; import org.jetbrains.kotlin.resolve.AnalyzingUtils; import org.jetbrains.kotlin.resolve.BindingContext; @@ -146,26 +146,27 @@ public final class AnalyzerWithCompilerReport { } @NotNull - private List getAbiVersionErrors() { + private List getAbiVersionErrors() { assert analysisResult != null; BindingContext bindingContext = analysisResult.getBindingContext(); - Collection errorClasses = bindingContext.getKeys(TraceBasedErrorReporter.ABI_VERSION_ERRORS); - List result = new ArrayList(errorClasses.size()); + Collection errorClasses = bindingContext.getKeys(TraceBasedErrorReporter.METADATA_VERSION_ERRORS); + List result = new ArrayList(errorClasses.size()); for (String kotlinClass : errorClasses) { - result.add(bindingContext.get(TraceBasedErrorReporter.ABI_VERSION_ERRORS, kotlinClass)); + result.add(bindingContext.get(TraceBasedErrorReporter.METADATA_VERSION_ERRORS, kotlinClass)); } return result; } - private void reportAbiVersionErrors(@NotNull List errors) { - for (AbiVersionErrorData data : errors) { + private void reportMetadataVersionErrors(@NotNull List errors) { + for (MetadataVersionErrorData data : errors) { String path = toSystemDependentName(data.getFilePath()); messageCollector.report( CompilerMessageSeverity.ERROR, "Class '" + JvmClassName.byClassId(data.getClassId()) + "' was compiled with an incompatible version of Kotlin. " + - "Its ABI version is " + data.getActualVersion() + ", expected ABI version is " + JvmBytecodeBinaryVersion.INSTANCE, + "The binary version of its metadata is " + data.getActualVersion() + + ", expected version is " + JvmMetadataVersion.INSTANCE, CompilerMessageLocation.create(path, -1, -1, null) ); } @@ -265,10 +266,10 @@ public final class AnalyzerWithCompilerReport { public void analyzeAndReport(@NotNull Collection files, @NotNull Function0 analyzer) { analysisResult = analyzer.invoke(); reportSyntaxErrors(files); - List abiVersionErrors = getAbiVersionErrors(); + List abiVersionErrors = getAbiVersionErrors(); reportDiagnostics(analysisResult.getBindingContext().getDiagnostics(), messageCollector, !abiVersionErrors.isEmpty()); if (hasErrors()) { - reportAbiVersionErrors(abiVersionErrors); + reportMetadataVersionErrors(abiVersionErrors); } reportIncompleteHierarchies(); reportAlternativeSignatureErrors(); diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/components/TraceBasedErrorReporter.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/components/TraceBasedErrorReporter.kt index 07cfea96e29..eeb795c833a 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/components/TraceBasedErrorReporter.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/components/TraceBasedErrorReporter.kt @@ -32,20 +32,22 @@ class TraceBasedErrorReporter(private val trace: BindingTrace) : ErrorReporter { companion object { private val LOG = Logger.getInstance(TraceBasedErrorReporter::class.java) - @JvmField val ABI_VERSION_ERRORS: WritableSlice = Slices.createCollectiveSlice() + @JvmField + val METADATA_VERSION_ERRORS: WritableSlice = Slices.createCollectiveSlice() // TODO: MutableList is a workaround for KT-5792 Covariant types in Kotlin translated to wildcard types in Java - @JvmField val INCOMPLETE_HIERARCHY: WritableSlice> = Slices.createCollectiveSlice() + @JvmField + val INCOMPLETE_HIERARCHY: WritableSlice> = Slices.createCollectiveSlice() } - data class AbiVersionErrorData( + data class MetadataVersionErrorData( val actualVersion: BinaryVersion, val filePath: String, val classId: ClassId ) - override fun reportIncompatibleAbiVersion(classId: ClassId, filePath: String, actualVersion: BinaryVersion) { - trace.record(ABI_VERSION_ERRORS, filePath, AbiVersionErrorData(actualVersion, filePath, classId)) + override fun reportIncompatibleMetadataVersion(classId: ClassId, filePath: String, actualVersion: BinaryVersion) { + trace.record(METADATA_VERSION_ERRORS, filePath, MetadataVersionErrorData(actualVersion, filePath, classId)) } override fun reportIncompleteHierarchy(descriptor: ClassDescriptor, unresolvedSuperClasses: List) { diff --git a/compiler/testData/cli/jvm/wrongAbiVersion.out b/compiler/testData/cli/jvm/wrongAbiVersion.out index 0445963d6be..463d2ccb291 100644 --- a/compiler/testData/cli/jvm/wrongAbiVersion.out +++ b/compiler/testData/cli/jvm/wrongAbiVersion.out @@ -9,5 +9,5 @@ public fun kotlin.Throwable.printStackTrace(writer: java.io.PrintWriter): kotlin (note: this may be caused by the fact that some classes compiled with an incompatible version of Kotlin were found in the classpath. Such classes cannot be loaded properly by this version of Kotlin compiler. See below for more information) 1.printStackTrace(2, 3) ^ -compiler/testData/cli/jvm/wrongAbiVersionLib/bin/ClassWithWrongAbiVersion.class: error: class 'ClassWithWrongAbiVersion' was compiled with an incompatible version of Kotlin. Its ABI version is 0.30.0, expected ABI version is $ABI_VERSION$ +compiler/testData/cli/jvm/wrongAbiVersionLib/bin/ClassWithWrongAbiVersion.class: error: class 'ClassWithWrongAbiVersion' was compiled with an incompatible version of Kotlin. The binary version of its metadata is 0.30.0, expected version is $ABI_VERSION$ COMPILATION_ERROR \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/cli/CliBaseTest.java b/compiler/tests/org/jetbrains/kotlin/cli/CliBaseTest.java index 7611cf861c7..c4773f617a8 100644 --- a/compiler/tests/org/jetbrains/kotlin/cli/CliBaseTest.java +++ b/compiler/tests/org/jetbrains/kotlin/cli/CliBaseTest.java @@ -29,7 +29,7 @@ import org.jetbrains.kotlin.cli.common.ExitCode; import org.jetbrains.kotlin.cli.common.KotlinVersion; import org.jetbrains.kotlin.cli.js.K2JSCompiler; import org.jetbrains.kotlin.cli.jvm.K2JVMCompiler; -import org.jetbrains.kotlin.load.java.JvmBytecodeBinaryVersion; +import org.jetbrains.kotlin.load.kotlin.JvmMetadataVersion; import org.jetbrains.kotlin.test.KotlinTestUtils; import org.jetbrains.kotlin.test.Tmpdir; import org.jetbrains.kotlin.utils.ExceptionUtilsKt; @@ -72,7 +72,7 @@ public class CliBaseTest { public static String getNormalizedCompilerOutput(@NotNull String pureOutput, @NotNull ExitCode exitCode, @NotNull String testDataDir) { String normalizedOutputWithoutExitCode = pureOutput .replace(new File(testDataDir).getAbsolutePath(), "$TESTDATA_DIR$") - .replace("expected ABI version is " + JvmBytecodeBinaryVersion.INSTANCE, "expected ABI version is $ABI_VERSION$") + .replace("expected version is " + JvmMetadataVersion.INSTANCE, "expected version is $ABI_VERSION$") .replace("\\", "/") .replace(KotlinVersion.VERSION, "$VERSION$"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/KotlinSyntheticClassAnnotationTest.java b/compiler/tests/org/jetbrains/kotlin/codegen/KotlinSyntheticClassAnnotationTest.java index 2c5fbba49e4..02438600e6e 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/KotlinSyntheticClassAnnotationTest.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/KotlinSyntheticClassAnnotationTest.java @@ -21,7 +21,7 @@ import com.google.common.collect.Collections2; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.backend.common.output.OutputFile; import org.jetbrains.kotlin.load.java.JvmAbi; -import org.jetbrains.kotlin.load.java.JvmBytecodeBinaryVersion; +import org.jetbrains.kotlin.load.kotlin.JvmMetadataVersion; import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.test.ConfigurationKind; @@ -146,6 +146,6 @@ public class KotlinSyntheticClassAnnotationTest extends CodegenTestCase { int[] version = (int[]) CodegenTestUtil.getAnnotationAttribute(annotation, VERSION_FIELD_NAME); assertNotNull(version); assertTrue("Annotation " + annotationFqName + " is written with an unsupported format", - JvmBytecodeBinaryVersion.create(version).isCompatible()); + JvmMetadataVersion.create(version).isCompatible()); } } diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/resolvers.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/resolvers.kt index 590697fa71d..0f5960d41b7 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/resolvers.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/resolvers.kt @@ -71,7 +71,7 @@ fun LazyJavaResolverContext.resolveKotlinBinaryClass(kotlinClass: KotlinJvmBinar val header = kotlinClass.classHeader return when { !header.metadataVersion.isCompatible() -> { - components.errorReporter.reportIncompatibleAbiVersion(kotlinClass.classId, kotlinClass.location, header.metadataVersion) + components.errorReporter.reportIncompatibleMetadataVersion(kotlinClass.classId, kotlinClass.location, header.metadataVersion) KotlinClassLookupResult.NotFound } header.kind == KotlinClassHeader.Kind.CLASS -> { 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 c391f2d6c4b..ba09b6a8a15 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 @@ -116,7 +116,7 @@ public final class DeserializedDescriptorResolver { public String[] readData(@NotNull KotlinJvmBinaryClass kotlinClass, @NotNull Set expectedKinds) { KotlinClassHeader header = kotlinClass.getClassHeader(); if (!header.getMetadataVersion().isCompatible()) { - errorReporter.reportIncompatibleAbiVersion(kotlinClass.getClassId(), kotlinClass.getLocation(), header.getMetadataVersion()); + errorReporter.reportIncompatibleMetadataVersion(kotlinClass.getClassId(), kotlinClass.getLocation(), header.getMetadataVersion()); } else if (expectedKinds.contains(header.getKind())) { return header.getAnnotationData(); diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/ModuleMapping.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/ModuleMapping.kt index 82cb85604fa..32b4efa9ed9 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/ModuleMapping.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/ModuleMapping.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.load.kotlin -import org.jetbrains.kotlin.load.java.JvmBytecodeBinaryVersion import org.jetbrains.kotlin.serialization.jvm.JvmPackageTable import java.io.ByteArrayInputStream import java.io.DataInputStream @@ -28,22 +27,22 @@ class ModuleMapping private constructor(val packageFqName2Parts: Map() parseFrom.packagePartsList.forEach { diff --git a/core/descriptors.runtime/src/org/jetbrains/kotlin/load/java/components/RuntimeErrorReporter.kt b/core/descriptors.runtime/src/org/jetbrains/kotlin/load/java/components/RuntimeErrorReporter.kt index dafca0012c9..e221614df03 100644 --- a/core/descriptors.runtime/src/org/jetbrains/kotlin/load/java/components/RuntimeErrorReporter.kt +++ b/core/descriptors.runtime/src/org/jetbrains/kotlin/load/java/components/RuntimeErrorReporter.kt @@ -18,7 +18,7 @@ package org.jetbrains.kotlin.load.java.components import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.load.java.JvmBytecodeBinaryVersion +import org.jetbrains.kotlin.load.kotlin.JvmMetadataVersion import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.serialization.deserialization.BinaryVersion import org.jetbrains.kotlin.serialization.deserialization.ErrorReporter @@ -29,14 +29,14 @@ object RuntimeErrorReporter : ErrorReporter { throw IllegalStateException("Incomplete hierarchy for class ${descriptor.name}, unresolved classes $unresolvedSuperClasses") } - override fun reportIncompatibleAbiVersion(classId: ClassId, filePath: String, actualVersion: BinaryVersion) { - throw IllegalStateException("Incompatible ABI version of $classId: $actualVersion " + - "(expected version is ${JvmBytecodeBinaryVersion.INSTANCE})") + override fun reportIncompatibleMetadataVersion(classId: ClassId, filePath: String, actualVersion: BinaryVersion) { + throw IllegalStateException("Incompatible binary version of $classId: $actualVersion " + + "(expected version is ${JvmMetadataVersion.INSTANCE})") } override fun reportCannotInferVisibility(descriptor: CallableMemberDescriptor) { // TODO: use DescriptorRenderer - throw IllegalStateException("Cannot infer visibility for class ${descriptor.name}") + throw IllegalStateException("Cannot infer visibility for $descriptor") } override fun reportLoadingError(message: String, exception: Exception?) { diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/ErrorReporter.java b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/ErrorReporter.java index dd34c2da1e3..2cb9ece77a5 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/ErrorReporter.java +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/ErrorReporter.java @@ -25,7 +25,7 @@ import org.jetbrains.kotlin.name.ClassId; import java.util.List; public interface ErrorReporter { - void reportIncompatibleAbiVersion(@NotNull ClassId classId, @NotNull String filePath, @NotNull BinaryVersion actualVersion); + void reportIncompatibleMetadataVersion(@NotNull ClassId classId, @NotNull String filePath, @NotNull BinaryVersion actualVersion); void reportIncompleteHierarchy(@NotNull ClassDescriptor descriptor, @NotNull List unresolvedSuperClasses); @@ -35,7 +35,7 @@ public interface ErrorReporter { ErrorReporter DO_NOTHING = new ErrorReporter() { @Override - public void reportIncompatibleAbiVersion( + public void reportIncompatibleMetadataVersion( @NotNull ClassId classId, @NotNull String filePath, @NotNull BinaryVersion actualVersion ) { } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/classFile/KotlinClassFileDecompiler.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/classFile/KotlinClassFileDecompiler.kt index 8ad7369e4f0..5f09d830ef3 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/classFile/KotlinClassFileDecompiler.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/classFile/KotlinClassFileDecompiler.kt @@ -28,7 +28,7 @@ import org.jetbrains.kotlin.idea.decompiler.textBuilder.DecompiledText import org.jetbrains.kotlin.idea.decompiler.textBuilder.ResolverForDecompiler import org.jetbrains.kotlin.idea.decompiler.textBuilder.buildDecompiledText import org.jetbrains.kotlin.idea.decompiler.textBuilder.defaultDecompilerRendererOptions -import org.jetbrains.kotlin.load.java.JvmBytecodeBinaryVersion +import org.jetbrains.kotlin.load.kotlin.JvmMetadataVersion import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.types.flexibility @@ -83,7 +83,7 @@ fun buildDecompiledTextForClassFile( if (!classHeader.metadataVersion.isCompatible()) { return DecompiledText( INCOMPATIBLE_ABI_VERSION_COMMENT - .replace(CURRENT_ABI_VERSION_MARKER, JvmBytecodeBinaryVersion.INSTANCE.toString()) + .replace(CURRENT_ABI_VERSION_MARKER, JvmMetadataVersion.INSTANCE.toString()) .replace(FILE_ABI_VERSION_MARKER, classHeader.metadataVersion.toString()), mapOf() ) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/LoggingErrorReporter.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/LoggingErrorReporter.kt index a92385bcdf5..0a0cd2f1fec 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/LoggingErrorReporter.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/LoggingErrorReporter.kt @@ -36,7 +36,7 @@ class LoggingErrorReporter(private val log: Logger) : ErrorReporter { log.error("Could not infer visibility for $descriptor") } - override fun reportIncompatibleAbiVersion(classId: ClassId, filePath: String, actualVersion: BinaryVersion) { + override fun reportIncompatibleMetadataVersion(classId: ClassId, filePath: String, actualVersion: BinaryVersion) { log.error("Incompatible ABI version for class $classId, actual version: $actualVersion") } } diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 5e0a9ff0c42..9c5bd36cbe4 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -567,7 +567,7 @@ - + diff --git a/idea/src/org/jetbrains/kotlin/idea/versions/KotlinAbiVersionIndex.kt b/idea/src/org/jetbrains/kotlin/idea/versions/KotlinMetadataVersionIndex.kt similarity index 87% rename from idea/src/org/jetbrains/kotlin/idea/versions/KotlinAbiVersionIndex.kt rename to idea/src/org/jetbrains/kotlin/idea/versions/KotlinMetadataVersionIndex.kt index 2ea1bb1d8cb..b66eb4d70d4 100644 --- a/idea/src/org/jetbrains/kotlin/idea/versions/KotlinAbiVersionIndex.kt +++ b/idea/src/org/jetbrains/kotlin/idea/versions/KotlinMetadataVersionIndex.kt @@ -22,15 +22,15 @@ import com.intellij.util.indexing.FileBasedIndex import com.intellij.util.indexing.FileContent import org.jetbrains.kotlin.codegen.AsmUtil.asmDescByFqNameWithoutInnerClasses import org.jetbrains.kotlin.load.java.JvmAnnotationNames.* -import org.jetbrains.kotlin.load.java.JvmBytecodeBinaryVersion +import org.jetbrains.kotlin.load.kotlin.JvmMetadataVersion import org.jetbrains.kotlin.serialization.deserialization.BinaryVersion import org.jetbrains.org.objectweb.asm.AnnotationVisitor import org.jetbrains.org.objectweb.asm.ClassReader import org.jetbrains.org.objectweb.asm.ClassVisitor import org.jetbrains.org.objectweb.asm.Opcodes -object KotlinAbiVersionIndex : KotlinAbiVersionIndexBase( - KotlinAbiVersionIndex::class.java, { JvmBytecodeBinaryVersion.create(it) } +object KotlinMetadataVersionIndex : KotlinAbiVersionIndexBase( + KotlinMetadataVersionIndex::class.java, { JvmMetadataVersion.create(it) } ) { override fun getIndexer() = INDEXER @@ -38,7 +38,7 @@ object KotlinAbiVersionIndex : KotlinAbiVersionIndexBase( override fun getVersion() = VERSION - private val VERSION = 2 + private val VERSION = 3 private val kotlinAnnotationsDesc = setOf( KOTLIN_CLASS, @@ -61,7 +61,7 @@ object KotlinAbiVersionIndex : KotlinAbiVersionIndexBase( return object : AnnotationVisitor(Opcodes.ASM5) { override fun visit(name: String, value: Any) { if (name == VERSION_FIELD_NAME && value is IntArray) { - version = JvmBytecodeBinaryVersion.create(value) + version = JvmMetadataVersion.create(value) } } } @@ -71,7 +71,7 @@ object KotlinAbiVersionIndex : KotlinAbiVersionIndexBase( if (annotationPresent && version == null) { // No version at all because the class is too old, or version is set to something weird - version = JvmBytecodeBinaryVersion.INVALID_VERSION + version = JvmMetadataVersion.INVALID_VERSION } if (version != null) mapOf(version!! to null) else mapOf() diff --git a/idea/src/org/jetbrains/kotlin/idea/versions/KotlinRuntimeLibraryUtil.java b/idea/src/org/jetbrains/kotlin/idea/versions/KotlinRuntimeLibraryUtil.java index 9248364cef5..d35c8e5f782 100644 --- a/idea/src/org/jetbrains/kotlin/idea/versions/KotlinRuntimeLibraryUtil.java +++ b/idea/src/org/jetbrains/kotlin/idea/versions/KotlinRuntimeLibraryUtil.java @@ -69,7 +69,7 @@ public class KotlinRuntimeLibraryUtil { @NotNull public static Collection getLibraryRootsWithAbiIncompatibleKotlinClasses(@NotNull Project project) { return getLibraryRootsWithAbiIncompatibleVersion( - project, KotlinAbiVersionIndex.INSTANCE, + project, KotlinMetadataVersionIndex.INSTANCE, new Function1() { @Override public Boolean invoke(@Nullable Module module) { diff --git a/idea/src/org/jetbrains/kotlin/idea/versions/KotlinUpdatePluginComponent.kt b/idea/src/org/jetbrains/kotlin/idea/versions/KotlinUpdatePluginComponent.kt index 7a227c38932..c86f00f7cd9 100644 --- a/idea/src/org/jetbrains/kotlin/idea/versions/KotlinUpdatePluginComponent.kt +++ b/idea/src/org/jetbrains/kotlin/idea/versions/KotlinUpdatePluginComponent.kt @@ -62,7 +62,7 @@ class KotlinUpdatePluginComponent : ApplicationComponent { // Force update indices for files under config directory val fileBasedIndex = FileBasedIndex.getInstance() - fileBasedIndex.requestRebuild(KotlinAbiVersionIndex.name) + fileBasedIndex.requestRebuild(KotlinMetadataVersionIndex.name) fileBasedIndex.requestRebuild(KotlinJavaScriptAbiVersionIndex.name) fileBasedIndex.requestRebuild(KotlinClassFileIndex.KEY) fileBasedIndex.requestRebuild(KotlinJavaScriptMetaFileIndex.KEY) diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/CacheVersion.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/CacheVersion.kt index cad343f160a..a2abb79eceb 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/CacheVersion.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/CacheVersion.kt @@ -23,6 +23,7 @@ import org.jetbrains.jps.incremental.ModuleBuildTarget import org.jetbrains.kotlin.config.IncrementalCompilation import org.jetbrains.kotlin.jps.incremental.CacheVersion.Action import org.jetbrains.kotlin.load.java.JvmBytecodeBinaryVersion +import org.jetbrains.kotlin.load.kotlin.JvmMetadataVersion import java.io.File private val NORMAL_VERSION = 8 @@ -47,7 +48,13 @@ class CacheVersion( get() = versionFile.readText().toInt() private val expectedVersion: Int - get() = ownVersion * 1000000 + JvmBytecodeBinaryVersion.INSTANCE.major * 1000 + JvmBytecodeBinaryVersion.INSTANCE.minor + get() { + val metadata = JvmMetadataVersion.INSTANCE + val bytecode = JvmBytecodeBinaryVersion.INSTANCE + return ownVersion * 1000000 + + bytecode.major * 10000 + bytecode.minor * 100 + + metadata.major * 1000 + metadata.minor + } fun checkVersion(): Action = when (versionFile.exists() to isEnabled) {