diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/builtIns/KotlinBuiltInDecompiler.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/builtIns/KotlinBuiltInDecompiler.kt index f902299e623..be8adbe3144 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/builtIns/KotlinBuiltInDecompiler.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/builtIns/KotlinBuiltInDecompiler.kt @@ -27,15 +27,18 @@ import org.jetbrains.kotlin.builtins.BuiltInsBinaryVersion import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.idea.decompiler.KotlinDecompiledFileViewProvider import org.jetbrains.kotlin.idea.decompiler.KtDecompiledFile +import org.jetbrains.kotlin.idea.decompiler.common.KotlinMetadataDeserializerForDecompiler import org.jetbrains.kotlin.idea.decompiler.common.createIncompatibleAbiVersionDecompiledText import org.jetbrains.kotlin.idea.decompiler.textBuilder.DecompiledText import org.jetbrains.kotlin.idea.decompiler.textBuilder.buildDecompiledText import org.jetbrains.kotlin.idea.decompiler.textBuilder.defaultDecompilerRendererOptions import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.renderer.DescriptorRenderer +import org.jetbrains.kotlin.resolve.TargetPlatform import org.jetbrains.kotlin.serialization.ProtoBuf import org.jetbrains.kotlin.serialization.builtins.BuiltInsProtoBuf import org.jetbrains.kotlin.serialization.deserialization.ClassDeserializer +import org.jetbrains.kotlin.serialization.deserialization.FlexibleTypeDeserializer import org.jetbrains.kotlin.serialization.deserialization.MetadataPackageFragment import org.jetbrains.kotlin.serialization.deserialization.NameResolverImpl import org.jetbrains.kotlin.utils.addIfNotNull @@ -80,7 +83,10 @@ fun buildDecompiledTextForBuiltIns(builtInFile: VirtualFile): DecompiledText { } is BuiltInDefinitionFile.Compatible -> { val packageFqName = file.packageFqName - val resolver = KotlinBuiltInDeserializerForDecompiler(packageFqName, file.proto, file.nameResolver) + val resolver = KotlinMetadataDeserializerForDecompiler( + packageFqName, file.proto, file.nameResolver, + TargetPlatform.Default, BuiltInSerializerProtocol, FlexibleTypeDeserializer.ThrowException + ) val declarations = arrayListOf() declarations.addAll(resolver.resolveDeclarationsInFacade(packageFqName)) for (classProto in file.classesToDecompile) { 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/common/KotlinMetadataDeserializerForDecompiler.kt similarity index 80% rename from idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/builtIns/KotlinBuiltInDeserializerForDecompiler.kt rename to idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/common/KotlinMetadataDeserializerForDecompiler.kt index 07b37b97db8..6d04e7bf786 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/builtIns/KotlinBuiltInDeserializerForDecompiler.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/common/KotlinMetadataDeserializerForDecompiler.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2016 JetBrains s.r.o. + * Copyright 2010-2017 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. @@ -14,11 +14,9 @@ * limitations under the License. */ -package org.jetbrains.kotlin.idea.decompiler.builtIns +package org.jetbrains.kotlin.idea.decompiler.common import com.intellij.openapi.diagnostic.Logger -import org.jetbrains.kotlin.builtins.BuiltInSerializerProtocol -import org.jetbrains.kotlin.serialization.deserialization.ProtoBasedClassDataFinder import org.jetbrains.kotlin.builtins.DefaultBuiltIns import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.DeclarationDescriptor @@ -29,15 +27,18 @@ import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.resolve.TargetPlatform import org.jetbrains.kotlin.serialization.ProtoBuf +import org.jetbrains.kotlin.serialization.SerializerExtensionProtocol import org.jetbrains.kotlin.serialization.deserialization.* import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope -class KotlinBuiltInDeserializerForDecompiler( +class KotlinMetadataDeserializerForDecompiler( packageFqName: FqName, private val proto: ProtoBuf.PackageFragment, - private val nameResolver: NameResolver + private val nameResolver: NameResolver, + override val targetPlatform: TargetPlatform, + serializerProtocol: SerializerExtensionProtocol, + flexibleTypeDeserializer: FlexibleTypeDeserializer ) : DeserializerForDecompilerBase(packageFqName) { - override val targetPlatform: TargetPlatform get() = TargetPlatform.Default override val builtIns: KotlinBuiltIns get() = DefaultBuiltIns.Instance override val deserializationComponents: DeserializationComponents @@ -47,9 +48,9 @@ class KotlinBuiltInDeserializerForDecompiler( deserializationComponents = DeserializationComponents( storageManager, moduleDescriptor, DeserializationConfiguration.Default, ProtoBasedClassDataFinder(proto, nameResolver), - AnnotationAndConstantLoaderImpl(moduleDescriptor, notFoundClasses, BuiltInSerializerProtocol), packageFragmentProvider, + AnnotationAndConstantLoaderImpl(moduleDescriptor, notFoundClasses, serializerProtocol), packageFragmentProvider, ResolveEverythingToKotlinAnyLocalClassifierResolver(builtIns), LoggingErrorReporter(LOG), - LookupTracker.DO_NOTHING, FlexibleTypeDeserializer.ThrowException, emptyList(), notFoundClasses + LookupTracker.DO_NOTHING, flexibleTypeDeserializer, emptyList(), notFoundClasses ) } @@ -67,6 +68,6 @@ class KotlinBuiltInDeserializerForDecompiler( } companion object { - private val LOG = Logger.getInstance(KotlinBuiltInDeserializerForDecompiler::class.java) + private val LOG = Logger.getInstance(KotlinMetadataDeserializerForDecompiler::class.java) } } 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 deleted file mode 100644 index ade73e8fb4a..00000000000 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/js/KotlinJavaScriptDeserializerForDecompiler.kt +++ /dev/null @@ -1,75 +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.idea.decompiler.js - -import com.intellij.openapi.diagnostic.Logger -import org.jetbrains.kotlin.builtins.DefaultBuiltIns -import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.serialization.deserialization.ProtoBasedClassDataFinder -import org.jetbrains.kotlin.descriptors.DeclarationDescriptor -import org.jetbrains.kotlin.idea.decompiler.textBuilder.DeserializerForDecompilerBase -import org.jetbrains.kotlin.idea.decompiler.textBuilder.LoggingErrorReporter -import org.jetbrains.kotlin.idea.decompiler.textBuilder.ResolveEverythingToKotlinAnyLocalClassifierResolver -import org.jetbrains.kotlin.incremental.components.LookupTracker -import org.jetbrains.kotlin.js.resolve.JsPlatform -import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.resolve.TargetPlatform -import org.jetbrains.kotlin.serialization.ProtoBuf -import org.jetbrains.kotlin.serialization.deserialization.* -import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope -import org.jetbrains.kotlin.serialization.js.DynamicTypeDeserializer -import org.jetbrains.kotlin.serialization.js.JsSerializerProtocol - -// TODO: deduplicate with KotlinBuiltInDeserializerForDecompiler -class KotlinJavaScriptDeserializerForDecompiler( - packageFqName: FqName, - private val proto: ProtoBuf.PackageFragment, - private val nameResolver: NameResolver -) : DeserializerForDecompilerBase(packageFqName) { - override val targetPlatform: TargetPlatform get() = JsPlatform - override val builtIns: KotlinBuiltIns get() = DefaultBuiltIns.Instance - - override val deserializationComponents: DeserializationComponents - - init { - val notFoundClasses = NotFoundClasses(storageManager, moduleDescriptor) - - deserializationComponents = DeserializationComponents( - storageManager, moduleDescriptor, DeserializationConfiguration.Default, ProtoBasedClassDataFinder(proto, nameResolver), - AnnotationAndConstantLoaderImpl(moduleDescriptor, notFoundClasses, JsSerializerProtocol), packageFragmentProvider, - ResolveEverythingToKotlinAnyLocalClassifierResolver(builtIns), LoggingErrorReporter(LOG), - LookupTracker.DO_NOTHING, DynamicTypeDeserializer, emptyList(), notFoundClasses - ) - } - - override fun resolveDeclarationsInFacade(facadeFqName: FqName): List { - assert(facadeFqName == directoryPackageFqName) { - "Was called for $facadeFqName; only members of $directoryPackageFqName package are expected." - } - - val membersScope = DeserializedPackageMemberScope( - createDummyPackageFragment(facadeFqName), proto.`package`, nameResolver, containerSource = null, - components = deserializationComponents - ) { emptyList() } - - return membersScope.getContributedDescriptors().toList() - } - - companion object { - private val LOG = Logger.getInstance(KotlinJavaScriptDeserializerForDecompiler::class.java) - } -} diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/js/KotlinJavaScriptMetaFileDecompiler.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/js/KotlinJavaScriptMetaFileDecompiler.kt index f383b9da340..f3cdc9bc019 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/js/KotlinJavaScriptMetaFileDecompiler.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/js/KotlinJavaScriptMetaFileDecompiler.kt @@ -20,17 +20,23 @@ import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.FileViewProvider import com.intellij.psi.PsiManager import com.intellij.psi.compiled.ClassFileDecompilers +import org.jetbrains.kotlin.builtins.BuiltInSerializerProtocol import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.idea.decompiler.KotlinDecompiledFileViewProvider import org.jetbrains.kotlin.idea.decompiler.KtDecompiledFile +import org.jetbrains.kotlin.idea.decompiler.common.KotlinMetadataDeserializerForDecompiler import org.jetbrains.kotlin.idea.decompiler.common.createIncompatibleAbiVersionDecompiledText import org.jetbrains.kotlin.idea.decompiler.textBuilder.DecompiledText import org.jetbrains.kotlin.idea.decompiler.textBuilder.buildDecompiledText import org.jetbrains.kotlin.idea.decompiler.textBuilder.defaultDecompilerRendererOptions +import org.jetbrains.kotlin.js.resolve.JsPlatform import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.renderer.DescriptorRenderer +import org.jetbrains.kotlin.resolve.TargetPlatform import org.jetbrains.kotlin.serialization.ProtoBuf +import org.jetbrains.kotlin.serialization.deserialization.FlexibleTypeDeserializer import org.jetbrains.kotlin.serialization.deserialization.NameResolverImpl +import org.jetbrains.kotlin.serialization.js.DynamicTypeDeserializer import org.jetbrains.kotlin.serialization.js.JsProtoBuf import org.jetbrains.kotlin.serialization.js.JsSerializerProtocol import org.jetbrains.kotlin.utils.JsMetadataVersion @@ -73,7 +79,10 @@ fun buildDecompiledTextFromJsMetadata(kjsmFile: VirtualFile): DecompiledText { } is KjsmFile.Compatible -> { val packageFqName = file.packageFqName - val resolver = KotlinJavaScriptDeserializerForDecompiler(packageFqName, file.proto, file.nameResolver) + val resolver = KotlinMetadataDeserializerForDecompiler( + packageFqName, file.proto, file.nameResolver, + JsPlatform, JsSerializerProtocol, DynamicTypeDeserializer + ) val declarations = arrayListOf() declarations.addAll(resolver.resolveDeclarationsInFacade(packageFqName)) for (klass in file.classesToDecompile) {