Deserialization/class reading: pass chosen JvmMetadataVersion whenever possible
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
package org.jetbrains.kotlin.build
|
||||
|
||||
import org.jetbrains.kotlin.incremental.LocalFileKotlinClass
|
||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMetadataVersion
|
||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.ModuleMapping
|
||||
import org.jetbrains.kotlin.utils.sure
|
||||
import java.io.File
|
||||
@@ -32,9 +33,10 @@ open class GeneratedFile(
|
||||
|
||||
class GeneratedJvmClass(
|
||||
sourceFiles: Collection<File>,
|
||||
outputFile: File
|
||||
outputFile: File,
|
||||
jvmMetadataVersionFromLanguageVersion: JvmMetadataVersion
|
||||
) : GeneratedFile(sourceFiles, outputFile) {
|
||||
val outputClass = LocalFileKotlinClass.create(outputFile).sure {
|
||||
val outputClass = LocalFileKotlinClass.create(outputFile, jvmMetadataVersionFromLanguageVersion).sure {
|
||||
"Couldn't load KotlinClass from $outputFile; it may happen because class doesn't have valid Kotlin annotations"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,15 +18,16 @@ package org.jetbrains.kotlin.compilerRunner
|
||||
|
||||
import org.jetbrains.kotlin.build.GeneratedFile
|
||||
import org.jetbrains.kotlin.build.GeneratedJvmClass
|
||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMetadataVersion
|
||||
import java.io.File
|
||||
|
||||
data class SimpleOutputItem(val sourceFiles: Collection<File>, val outputFile: File) {
|
||||
override fun toString(): String =
|
||||
"$sourceFiles->$outputFile"
|
||||
"$sourceFiles->$outputFile"
|
||||
}
|
||||
|
||||
fun SimpleOutputItem.toGeneratedFile(): GeneratedFile =
|
||||
when {
|
||||
outputFile.name.endsWith(".class") -> GeneratedJvmClass(sourceFiles, outputFile)
|
||||
else -> GeneratedFile(sourceFiles, outputFile)
|
||||
}
|
||||
fun SimpleOutputItem.toGeneratedFile(jvmMetadataVersionFromLanguageVersion: JvmMetadataVersion): GeneratedFile =
|
||||
when {
|
||||
outputFile.name.endsWith(".class") -> GeneratedJvmClass(sourceFiles, outputFile, jvmMetadataVersionFromLanguageVersion)
|
||||
else -> GeneratedFile(sourceFiles, outputFile)
|
||||
}
|
||||
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.incremental
|
||||
|
||||
import org.jetbrains.kotlin.load.kotlin.FileBasedKotlinClass
|
||||
import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader
|
||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMetadataVersion
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
||||
import java.io.File
|
||||
@@ -32,10 +33,12 @@ class LocalFileKotlinClass private constructor(
|
||||
) : FileBasedKotlinClass(className, classVersion, classHeader, innerClasses) {
|
||||
|
||||
companion object {
|
||||
fun create(file: File): LocalFileKotlinClass? {
|
||||
fun create(file: File, jvmMetadataVersionFromLanguageVersion: JvmMetadataVersion): LocalFileKotlinClass? {
|
||||
val fileContents = file.readBytes()
|
||||
return FileBasedKotlinClass.create(fileContents) {
|
||||
className, classVersion, classHeader, innerClasses ->
|
||||
return FileBasedKotlinClass.create(
|
||||
fileContents,
|
||||
jvmMetadataVersionFromLanguageVersion
|
||||
) { className, classVersion, classHeader, innerClasses ->
|
||||
LocalFileKotlinClass(file, fileContents, className, classVersion, classHeader, innerClasses)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user