Deserialization/class reading: pass chosen JvmMetadataVersion whenever possible
This commit is contained in:
+7
-3
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.compilerRunner.OutputItemsCollector
|
||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.diagnostics.Severity
|
||||
import org.jetbrains.kotlin.incremental.isClassFile
|
||||
@@ -37,6 +38,7 @@ import org.jetbrains.kotlin.resolve.BindingTrace
|
||||
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
||||
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisHandlerExtension
|
||||
import org.jetbrains.kotlin.utils.toMetadataVersion
|
||||
import org.jetbrains.org.objectweb.asm.ClassReader
|
||||
import org.jetbrains.org.objectweb.asm.ClassVisitor
|
||||
import org.jetbrains.org.objectweb.asm.ClassWriter
|
||||
@@ -124,7 +126,7 @@ class JvmAbiAnalysisHandlerExtension(
|
||||
for (output in outputs) {
|
||||
if (!output.file.isClassFile()) continue
|
||||
|
||||
val classData = output.classData() ?: continue
|
||||
val classData = output.classData(compilerConfiguration) ?: continue
|
||||
val header = classData.classHeader
|
||||
val isNeededForAbi = when (header.kind) {
|
||||
KotlinClassHeader.Kind.CLASS -> {
|
||||
@@ -198,11 +200,13 @@ class JvmAbiAnalysisHandlerExtension(
|
||||
// null bytes means that file should not be written
|
||||
private var bytes: ByteArray?
|
||||
) {
|
||||
fun classData(): ClassData? =
|
||||
fun classData(compilerConfiguration: CompilerConfiguration): ClassData? =
|
||||
when {
|
||||
bytes == null -> null
|
||||
!file.isClassFile() -> null
|
||||
else -> FileBasedKotlinClass.create(bytes!!) { classId, classVersion, classHeader, _ ->
|
||||
else -> FileBasedKotlinClass.create(
|
||||
bytes!!, compilerConfiguration.languageVersionSettings.languageVersion.toMetadataVersion()
|
||||
) { classId, classVersion, classHeader, _ ->
|
||||
ClassData(classId, classVersion, classHeader)
|
||||
}
|
||||
}
|
||||
|
||||
+5
-2
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.resolve.BindingTrace
|
||||
import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.PackageFragmentProviderExtension
|
||||
import org.jetbrains.kotlin.storage.StorageManager
|
||||
import org.jetbrains.kotlin.utils.toMetadataVersion
|
||||
import kotlin.script.experimental.api.ScriptCompilationConfiguration
|
||||
import kotlin.script.experimental.jvm.ClassLoaderByConfiguration
|
||||
|
||||
@@ -45,10 +46,11 @@ class PackageFragmentFromClassLoaderProviderExtension(
|
||||
val deserializedDescriptorResolver = DeserializedDescriptorResolver()
|
||||
val singleModuleClassResolver = SingleModuleClassResolver()
|
||||
val notFoundClasses = NotFoundClasses(storageManager, module)
|
||||
val languageVersionSettings = compilerConfiguration.languageVersionSettings
|
||||
val packagePartProvider =
|
||||
PackagePartFromClassLoaderProvider(
|
||||
classLoader,
|
||||
compilerConfiguration.languageVersionSettings,
|
||||
languageVersionSettings,
|
||||
compilerConfiguration[CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY]!!
|
||||
)
|
||||
|
||||
@@ -63,7 +65,8 @@ class PackageFragmentFromClassLoaderProviderExtension(
|
||||
val deserializationComponentsForJava =
|
||||
makeDeserializationComponentsForJava(
|
||||
module, storageManager, notFoundClasses, lazyJavaPackageFragmentProvider,
|
||||
reflectKotlinClassFinder, deserializedDescriptorResolver, RuntimeErrorReporter
|
||||
reflectKotlinClassFinder, deserializedDescriptorResolver, RuntimeErrorReporter,
|
||||
languageVersionSettings.languageVersion.toMetadataVersion()
|
||||
)
|
||||
|
||||
deserializedDescriptorResolver.setComponents(deserializationComponentsForJava)
|
||||
|
||||
+2
-2
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.tryLoadModuleMapping
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.load.kotlin.JvmPackagePartProviderBase
|
||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.ModuleMapping
|
||||
import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration
|
||||
import org.jetbrains.kotlin.resolve.jvm.JvmCompilerDeserializationConfiguration
|
||||
import kotlin.script.experimental.jvm.util.forAllMatchingFiles
|
||||
|
||||
class PackagePartFromClassLoaderProvider(
|
||||
@@ -19,7 +19,7 @@ class PackagePartFromClassLoaderProvider(
|
||||
languageVersionSettings: LanguageVersionSettings,
|
||||
messageCollector: MessageCollector
|
||||
) : JvmPackagePartProviderBase<String>() {
|
||||
override val deserializationConfiguration = CompilerDeserializationConfiguration(languageVersionSettings)
|
||||
override val deserializationConfiguration = JvmCompilerDeserializationConfiguration(languageVersionSettings)
|
||||
|
||||
override val loadedModules: MutableList<ModuleMappingInfo<String>> = SmartList()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user