diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializationComponentsForJava.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializationComponentsForJava.kt index bf0a438bbde..df186fbd148 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializationComponentsForJava.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializationComponentsForJava.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.load.kotlin import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.load.java.lazy.LazyJavaPackageFragmentProvider +import org.jetbrains.kotlin.load.java.lazy.types.LazyJavaTypeResolver.FlexibleJavaClassifierTypeFactory import org.jetbrains.kotlin.serialization.deserialization.* import org.jetbrains.kotlin.storage.StorageManager @@ -40,7 +41,7 @@ class DeserializationComponentsForJava( val localClassResolver = LocalClassResolverImpl() components = DeserializationComponents( storageManager, moduleDescriptor, classDataFinder, annotationAndConstantLoader, packageFragmentProvider, localClassResolver, - errorReporter, lookupTracker, JavaFlexibleTypeFactoryDeserializer, ClassDescriptorFactory.EMPTY, + errorReporter, lookupTracker, FlexibleJavaClassifierTypeFactory, ClassDescriptorFactory.EMPTY, notFoundClasses, JavaTypeCapabilitiesLoader, additionalSupertypes = BuiltInClassesAreSerializableOnJvm(moduleDescriptor) ) diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/JavaFlexibleTypeFactoryDeserializer.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/JavaFlexibleTypeFactoryDeserializer.kt deleted file mode 100644 index c5f899baaed..00000000000 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/JavaFlexibleTypeFactoryDeserializer.kt +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2010-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.load.kotlin - -import org.jetbrains.kotlin.load.java.lazy.types.LazyJavaTypeResolver -import org.jetbrains.kotlin.serialization.deserialization.FlexibleTypeFactoryDeserializer -import org.jetbrains.kotlin.types.FlexibleTypeFactory - -object JavaFlexibleTypeFactoryDeserializer : FlexibleTypeFactoryDeserializer { - override fun capabilitiesById(id: String): FlexibleTypeFactory? { - return if (id == LazyJavaTypeResolver.FlexibleJavaClassifierTypeFactory.id) - LazyJavaTypeResolver.FlexibleJavaClassifierTypeFactory - else null - } - -} diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/builtInsPackageFragmentProvider.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/builtInsPackageFragmentProvider.kt index 9d45ede95ff..619ddf1371d 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/builtInsPackageFragmentProvider.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/builtInsPackageFragmentProvider.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.serialization.deserialization.* import org.jetbrains.kotlin.storage.StorageManager +import org.jetbrains.kotlin.types.FlexibleTypeFactory import java.io.InputStream fun createBuiltInPackageFragmentProvider( @@ -50,7 +51,7 @@ fun createBuiltInPackageFragmentProvider( localClassResolver, ErrorReporter.DO_NOTHING, LookupTracker.DO_NOTHING, - FlexibleTypeFactoryDeserializer.ThrowException, + FlexibleTypeFactory.ThrowException, classDescriptorFactory, notFoundClasses, additionalSupertypes = additionalSupertypes diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/flexibleTypes.kt b/core/descriptors/src/org/jetbrains/kotlin/types/flexibleTypes.kt index d6b112fa5f7..c9b60c5037f 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/flexibleTypes.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/types/flexibleTypes.kt @@ -22,6 +22,14 @@ interface FlexibleTypeFactory { val id: String fun create(lowerBound: KotlinType, upperBound: KotlinType): KotlinType + + object ThrowException : FlexibleTypeFactory { + private fun error(): Nothing = throw IllegalArgumentException("This factory should not be used.") + override val id: String + get() = error() + + override fun create(lowerBound: KotlinType, upperBound: KotlinType): KotlinType = error() + } } interface Flexibility : TypeCapability, SubtypingRepresentatives { diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/FlexibleTypeFactoryDeserializer.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/FlexibleTypeFactoryDeserializer.kt deleted file mode 100644 index cf716f781f7..00000000000 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/FlexibleTypeFactoryDeserializer.kt +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2010-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.serialization.deserialization - -import org.jetbrains.kotlin.types.DynamicTypeFactory -import org.jetbrains.kotlin.types.FlexibleTypeFactory - -interface FlexibleTypeFactoryDeserializer { - object ThrowException : FlexibleTypeFactoryDeserializer { - override fun capabilitiesById(id: String): FlexibleTypeFactory? { - throw IllegalArgumentException("Capabilities not found by ThrowException manager: $id") - } - } - - object Dynamic : FlexibleTypeFactoryDeserializer { - override fun capabilitiesById(id: String): FlexibleTypeFactory? { - return if (id == DynamicTypeFactory.id) DynamicTypeFactory else null - } - } - - - fun capabilitiesById(id: String): FlexibleTypeFactory? -} diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/TypeDeserializer.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/TypeDeserializer.kt index 505fff402f6..d12534ba645 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/TypeDeserializer.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/TypeDeserializer.kt @@ -56,12 +56,13 @@ class TypeDeserializer( fun type(proto: ProtoBuf.Type, additionalAnnotations: Annotations = Annotations.EMPTY): KotlinType { if (proto.hasFlexibleTypeCapabilitiesId()) { val id = c.nameResolver.getString(proto.flexibleTypeCapabilitiesId) - val capabilities = c.components.flexibleTypeFactoryDeserializer.capabilitiesById(id) ?: - return ErrorUtils.createErrorType("${DeserializedType(c, proto)}: Capabilities not found for id $id") + val flexibleTypeFactory = c.components.flexibleTypeFactory + if (flexibleTypeFactory.id != id) { + return ErrorUtils.createErrorType("${DeserializedType(c, proto)}: " + + "Unexpected flexible type factory. Expected: ${flexibleTypeFactory.id} Actual: $id") + } - return capabilities - .create(DeserializedType(c, proto), - DeserializedType(c, proto.flexibleUpperBound(c.typeTable)!!)) + return flexibleTypeFactory.create(DeserializedType(c, proto), DeserializedType(c, proto.flexibleUpperBound(c.typeTable)!!)) } return DeserializedType(c, proto, additionalAnnotations) diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/context.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/context.kt index 0fd1243f528..28fb0c5ee6d 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/context.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/context.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.resolve.constants.ConstantValue import org.jetbrains.kotlin.serialization.ProtoBuf import org.jetbrains.kotlin.storage.StorageManager +import org.jetbrains.kotlin.types.FlexibleTypeFactory class DeserializationComponents( val storageManager: StorageManager, @@ -34,7 +35,7 @@ class DeserializationComponents( val localClassResolver: LocalClassResolver, val errorReporter: ErrorReporter, val lookupTracker: LookupTracker, - val flexibleTypeFactoryDeserializer: FlexibleTypeFactoryDeserializer, + val flexibleTypeFactory: FlexibleTypeFactory, val fictitiousClassDescriptorFactory: ClassDescriptorFactory, val notFoundClasses: NotFoundClasses, val typeCapabilitiesLoader: TypeCapabilitiesLoader = TypeCapabilitiesLoader.NONE, diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/builtIns/KotlinBuiltInDeserializerForDecompiler.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/builtIns/KotlinBuiltInDeserializerForDecompiler.kt index 2f69e34de33..2f734903bc3 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/builtIns/KotlinBuiltInDeserializerForDecompiler.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/builtIns/KotlinBuiltInDeserializerForDecompiler.kt @@ -30,6 +30,7 @@ import org.jetbrains.kotlin.resolve.TargetPlatform import org.jetbrains.kotlin.serialization.builtins.BuiltInsProtoBuf import org.jetbrains.kotlin.serialization.deserialization.* import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope +import org.jetbrains.kotlin.types.FlexibleTypeFactory class KotlinBuiltInDeserializerForDecompiler( packageDirectory: VirtualFile, @@ -48,7 +49,7 @@ class KotlinBuiltInDeserializerForDecompiler( storageManager, moduleDescriptor, BuiltInsClassDataFinder(proto, nameResolver), AnnotationAndConstantLoaderImpl(moduleDescriptor, notFoundClasses, BuiltInSerializerProtocol), packageFragmentProvider, ResolveEverythingToKotlinAnyLocalClassResolver(targetPlatform.builtIns), LoggingErrorReporter(LOG), - LookupTracker.DO_NOTHING, FlexibleTypeFactoryDeserializer.ThrowException, ClassDescriptorFactory.EMPTY, + LookupTracker.DO_NOTHING, FlexibleTypeFactory.ThrowException, ClassDescriptorFactory.EMPTY, notFoundClasses ) } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/classFile/DeserializerForClassfileDecompiler.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/classFile/DeserializerForClassfileDecompiler.kt index e3a299b79ee..ef3500d3b0b 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/classFile/DeserializerForClassfileDecompiler.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/classFile/DeserializerForClassfileDecompiler.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.idea.decompiler.textBuilder.DeserializerForDecompile import org.jetbrains.kotlin.idea.decompiler.textBuilder.LoggingErrorReporter import org.jetbrains.kotlin.idea.decompiler.textBuilder.ResolveEverythingToKotlinAnyLocalClassResolver import org.jetbrains.kotlin.incremental.components.LookupTracker +import org.jetbrains.kotlin.load.java.lazy.types.LazyJavaTypeResolver.FlexibleJavaClassifierTypeFactory import org.jetbrains.kotlin.load.java.structure.JavaClass import org.jetbrains.kotlin.load.kotlin.* import org.jetbrains.kotlin.name.ClassId @@ -64,7 +65,7 @@ class DeserializerForClassfileDecompiler( deserializationComponents = DeserializationComponents( storageManager, moduleDescriptor, classDataFinder, annotationAndConstantLoader, packageFragmentProvider, ResolveEverythingToKotlinAnyLocalClassResolver(targetPlatform.builtIns), LoggingErrorReporter(LOG), - LookupTracker.DO_NOTHING, JavaFlexibleTypeFactoryDeserializer, ClassDescriptorFactory.EMPTY, notFoundClasses + LookupTracker.DO_NOTHING, FlexibleJavaClassifierTypeFactory, ClassDescriptorFactory.EMPTY, notFoundClasses ) } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/js/KotlinJavaScriptDeserializerForDecompiler.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/js/KotlinJavaScriptDeserializerForDecompiler.kt index 7f68b48bb1a..7136f0a0f78 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/js/KotlinJavaScriptDeserializerForDecompiler.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/js/KotlinJavaScriptDeserializerForDecompiler.kt @@ -32,6 +32,7 @@ import org.jetbrains.kotlin.serialization.deserialization.descriptors.Deserializ import org.jetbrains.kotlin.serialization.js.JsSerializerProtocol import org.jetbrains.kotlin.serialization.js.KotlinJavascriptClassDataFinder import org.jetbrains.kotlin.serialization.js.KotlinJavascriptSerializedResourcePaths +import org.jetbrains.kotlin.types.DynamicTypeFactory import java.io.ByteArrayInputStream class KotlinJavaScriptDeserializerForDecompiler( @@ -61,7 +62,7 @@ class KotlinJavaScriptDeserializerForDecompiler( deserializationComponents = DeserializationComponents( storageManager, moduleDescriptor, classDataFinder, annotationAndConstantLoader, packageFragmentProvider, ResolveEverythingToKotlinAnyLocalClassResolver(targetPlatform.builtIns), LoggingErrorReporter(LOG), - LookupTracker.DO_NOTHING, FlexibleTypeFactoryDeserializer.Dynamic, ClassDescriptorFactory.EMPTY, + LookupTracker.DO_NOTHING, DynamicTypeFactory, ClassDescriptorFactory.EMPTY, notFoundClasses ) } diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/kotlinJavascriptPackageFragmentProvider.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/kotlinJavascriptPackageFragmentProvider.kt index d5028a948fb..fab4100ac28 100644 --- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/kotlinJavascriptPackageFragmentProvider.kt +++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/kotlinJavascriptPackageFragmentProvider.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.serialization.deserialization.* import org.jetbrains.kotlin.storage.StorageManager +import org.jetbrains.kotlin.types.DynamicTypeFactory import java.io.InputStream fun createKotlinJavascriptPackageFragmentProvider( @@ -48,7 +49,7 @@ fun createKotlinJavascriptPackageFragmentProvider( localClassResolver, ErrorReporter.DO_NOTHING, LookupTracker.DO_NOTHING, - FlexibleTypeFactoryDeserializer.Dynamic, + DynamicTypeFactory, ClassDescriptorFactory.EMPTY, notFoundClasses )