diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassFileFactory.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassFileFactory.java index e4afd9eabf6..de428b07b82 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassFileFactory.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassFileFactory.java @@ -32,11 +32,13 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor; import org.jetbrains.kotlin.descriptors.DescriptorUtilKt; import org.jetbrains.kotlin.descriptors.ModuleDescriptor; import org.jetbrains.kotlin.incremental.components.NoLookupLocation; +import org.jetbrains.kotlin.load.kotlin.JvmMetadataVersion; import org.jetbrains.kotlin.load.kotlin.ModuleMappingUtilKt; import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils; import org.jetbrains.kotlin.metadata.ProtoBuf; import org.jetbrains.kotlin.metadata.jvm.JvmModuleProtoBuf; import org.jetbrains.kotlin.metadata.jvm.deserialization.ModuleMapping; +import org.jetbrains.kotlin.metadata.jvm.deserialization.ModuleMappingKt; import org.jetbrains.kotlin.metadata.jvm.deserialization.PackageParts; import org.jetbrains.kotlin.name.ClassId; import org.jetbrains.kotlin.name.FqName; @@ -124,7 +126,7 @@ public class ClassFileFactory implements OutputFileCollection { generators.put(outputFilePath, new OutAndSourceFileList(CollectionsKt.toList(packagePartSourceFiles)) { @Override public byte[] asBytes(ClassBuilderFactory factory) { - return ClassFileUtilsKt.serializeToByteArray(moduleProto); + return ModuleMappingKt.serializeToByteArray(moduleProto, JvmMetadataVersion.INSTANCE.toArray()); } @Override diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/classFileUtils.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/classFileUtils.kt index bf33b25e5d8..95314bfb374 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/classFileUtils.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/classFileUtils.kt @@ -16,16 +16,12 @@ package org.jetbrains.kotlin.codegen -import com.intellij.util.io.DataOutputStream import org.jetbrains.kotlin.backend.common.output.OutputFile import org.jetbrains.kotlin.codegen.state.GenerationState -import org.jetbrains.kotlin.load.kotlin.JvmMetadataVersion import org.jetbrains.kotlin.load.kotlin.loadModuleMapping -import org.jetbrains.kotlin.metadata.jvm.JvmModuleProtoBuf import org.jetbrains.kotlin.metadata.jvm.deserialization.ModuleMapping import org.jetbrains.kotlin.metadata.jvm.deserialization.PackageParts import org.jetbrains.kotlin.resolve.jvm.JvmClassName -import java.io.ByteArrayOutputStream fun ClassFileFactory.getClassFiles(): Iterable { return asList().filterClassFiles() @@ -57,16 +53,3 @@ private fun Iterable.addCompiledParts(state: GenerationState): Lis } } } - -fun JvmModuleProtoBuf.Module.serializeToByteArray(): ByteArray { - val moduleMapping = ByteArrayOutputStream(4096) - val out = DataOutputStream(moduleMapping) - val version = JvmMetadataVersion.INSTANCE.toArray() - out.writeInt(version.size) - for (number in version) { - out.writeInt(number) - } - writeTo(out) - out.flush() - return moduleMapping.toByteArray() -} diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/MetadataSerializer.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/MetadataSerializer.kt index d7e880575b1..e276c902b32 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/MetadataSerializer.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/MetadataSerializer.kt @@ -23,17 +23,18 @@ import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.codegen.JvmCodegenUtil -import org.jetbrains.kotlin.codegen.serializeToByteArray import org.jetbrains.kotlin.config.CommonConfigurationKeys import org.jetbrains.kotlin.config.languageVersionSettings import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor +import org.jetbrains.kotlin.load.kotlin.JvmMetadataVersion import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.jvm.JvmModuleProtoBuf import org.jetbrains.kotlin.metadata.jvm.deserialization.PackageParts +import org.jetbrains.kotlin.metadata.jvm.deserialization.serializeToByteArray import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name @@ -125,7 +126,7 @@ open class MetadataSerializer(private val dependOnOldBuiltIns: Boolean) { for (table in packageTable.values) { table.addTo(this) } - }.build().serializeToByteArray() + }.build().serializeToByteArray(JvmMetadataVersion.INSTANCE.toArray()) // TODO: use another version here, not JVM kotlinModuleFile.parentFile.mkdirs() kotlinModuleFile.writeBytes(packageTableBytes) diff --git a/core/metadata.jvm/src/org/jetbrains/kotlin/metadata/jvm/deserialization/ModuleMapping.kt b/core/metadata.jvm/src/org/jetbrains/kotlin/metadata/jvm/deserialization/ModuleMapping.kt index f84b6bfd8aa..6cc9f145b7e 100644 --- a/core/metadata.jvm/src/org/jetbrains/kotlin/metadata/jvm/deserialization/ModuleMapping.kt +++ b/core/metadata.jvm/src/org/jetbrains/kotlin/metadata/jvm/deserialization/ModuleMapping.kt @@ -7,9 +7,7 @@ package org.jetbrains.kotlin.metadata.jvm.deserialization import org.jetbrains.kotlin.metadata.deserialization.NameResolverImpl import org.jetbrains.kotlin.metadata.jvm.JvmModuleProtoBuf -import java.io.ByteArrayInputStream -import java.io.DataInputStream -import java.io.IOException +import java.io.* class ModuleMapping private constructor( val packageFqName2Parts: Map, @@ -210,3 +208,15 @@ class PackageParts(val packageFqName: String) { override fun toString() = (parts + metadataParts).toString() } + +fun JvmModuleProtoBuf.Module.serializeToByteArray(versionArray: IntArray): ByteArray { + val moduleMapping = ByteArrayOutputStream(4096) + val out = DataOutputStream(moduleMapping) + out.writeInt(versionArray.size) + for (number in versionArray) { + out.writeInt(number) + } + writeTo(out) + out.flush() + return moduleMapping.toByteArray() +}