Skip to content

Commit 4e91dad

Browse files
committed
Combine decompiler deserializers for built-ins and JS
1 parent bafa0ec commit 4e91dad

File tree

4 files changed

+28
-87
lines changed

4 files changed

+28
-87
lines changed

idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/builtIns/KotlinBuiltInDecompiler.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,18 @@ import org.jetbrains.kotlin.builtins.BuiltInsBinaryVersion
2727
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
2828
import org.jetbrains.kotlin.idea.decompiler.KotlinDecompiledFileViewProvider
2929
import org.jetbrains.kotlin.idea.decompiler.KtDecompiledFile
30+
import org.jetbrains.kotlin.idea.decompiler.common.KotlinMetadataDeserializerForDecompiler
3031
import org.jetbrains.kotlin.idea.decompiler.common.createIncompatibleAbiVersionDecompiledText
3132
import org.jetbrains.kotlin.idea.decompiler.textBuilder.DecompiledText
3233
import org.jetbrains.kotlin.idea.decompiler.textBuilder.buildDecompiledText
3334
import org.jetbrains.kotlin.idea.decompiler.textBuilder.defaultDecompilerRendererOptions
3435
import org.jetbrains.kotlin.name.ClassId
3536
import org.jetbrains.kotlin.renderer.DescriptorRenderer
37+
import org.jetbrains.kotlin.resolve.TargetPlatform
3638
import org.jetbrains.kotlin.serialization.ProtoBuf
3739
import org.jetbrains.kotlin.serialization.builtins.BuiltInsProtoBuf
3840
import org.jetbrains.kotlin.serialization.deserialization.ClassDeserializer
41+
import org.jetbrains.kotlin.serialization.deserialization.FlexibleTypeDeserializer
3942
import org.jetbrains.kotlin.serialization.deserialization.MetadataPackageFragment
4043
import org.jetbrains.kotlin.serialization.deserialization.NameResolverImpl
4144
import org.jetbrains.kotlin.utils.addIfNotNull
@@ -80,7 +83,10 @@ fun buildDecompiledTextForBuiltIns(builtInFile: VirtualFile): DecompiledText {
8083
}
8184
is BuiltInDefinitionFile.Compatible -> {
8285
val packageFqName = file.packageFqName
83-
val resolver = KotlinBuiltInDeserializerForDecompiler(packageFqName, file.proto, file.nameResolver)
86+
val resolver = KotlinMetadataDeserializerForDecompiler(
87+
packageFqName, file.proto, file.nameResolver,
88+
TargetPlatform.Default, BuiltInSerializerProtocol, FlexibleTypeDeserializer.ThrowException
89+
)
8490
val declarations = arrayListOf<DeclarationDescriptor>()
8591
declarations.addAll(resolver.resolveDeclarationsInFacade(packageFqName))
8692
for (classProto in file.classesToDecompile) {
Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2010-2016 JetBrains s.r.o.
2+
* Copyright 2010-2017 JetBrains s.r.o.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -14,11 +14,9 @@
1414
* limitations under the License.
1515
*/
1616

17-
package org.jetbrains.kotlin.idea.decompiler.builtIns
17+
package org.jetbrains.kotlin.idea.decompiler.common
1818

1919
import com.intellij.openapi.diagnostic.Logger
20-
import org.jetbrains.kotlin.builtins.BuiltInSerializerProtocol
21-
import org.jetbrains.kotlin.serialization.deserialization.ProtoBasedClassDataFinder
2220
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
2321
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
2422
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
@@ -29,15 +27,18 @@ import org.jetbrains.kotlin.incremental.components.LookupTracker
2927
import org.jetbrains.kotlin.name.FqName
3028
import org.jetbrains.kotlin.resolve.TargetPlatform
3129
import org.jetbrains.kotlin.serialization.ProtoBuf
30+
import org.jetbrains.kotlin.serialization.SerializerExtensionProtocol
3231
import org.jetbrains.kotlin.serialization.deserialization.*
3332
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope
3433

35-
class KotlinBuiltInDeserializerForDecompiler(
34+
class KotlinMetadataDeserializerForDecompiler(
3635
packageFqName: FqName,
3736
private val proto: ProtoBuf.PackageFragment,
38-
private val nameResolver: NameResolver
37+
private val nameResolver: NameResolver,
38+
override val targetPlatform: TargetPlatform,
39+
serializerProtocol: SerializerExtensionProtocol,
40+
flexibleTypeDeserializer: FlexibleTypeDeserializer
3941
) : DeserializerForDecompilerBase(packageFqName) {
40-
override val targetPlatform: TargetPlatform get() = TargetPlatform.Default
4142
override val builtIns: KotlinBuiltIns get() = DefaultBuiltIns.Instance
4243

4344
override val deserializationComponents: DeserializationComponents
@@ -47,9 +48,9 @@ class KotlinBuiltInDeserializerForDecompiler(
4748

4849
deserializationComponents = DeserializationComponents(
4950
storageManager, moduleDescriptor, DeserializationConfiguration.Default, ProtoBasedClassDataFinder(proto, nameResolver),
50-
AnnotationAndConstantLoaderImpl(moduleDescriptor, notFoundClasses, BuiltInSerializerProtocol), packageFragmentProvider,
51+
AnnotationAndConstantLoaderImpl(moduleDescriptor, notFoundClasses, serializerProtocol), packageFragmentProvider,
5152
ResolveEverythingToKotlinAnyLocalClassifierResolver(builtIns), LoggingErrorReporter(LOG),
52-
LookupTracker.DO_NOTHING, FlexibleTypeDeserializer.ThrowException, emptyList(), notFoundClasses
53+
LookupTracker.DO_NOTHING, flexibleTypeDeserializer, emptyList(), notFoundClasses
5354
)
5455
}
5556

@@ -67,6 +68,6 @@ class KotlinBuiltInDeserializerForDecompiler(
6768
}
6869

6970
companion object {
70-
private val LOG = Logger.getInstance(KotlinBuiltInDeserializerForDecompiler::class.java)
71+
private val LOG = Logger.getInstance(KotlinMetadataDeserializerForDecompiler::class.java)
7172
}
7273
}

idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/js/KotlinJavaScriptDeserializerForDecompiler.kt

Lines changed: 0 additions & 75 deletions
This file was deleted.

idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/js/KotlinJavaScriptMetaFileDecompiler.kt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,23 @@ import com.intellij.openapi.vfs.VirtualFile
2020
import com.intellij.psi.FileViewProvider
2121
import com.intellij.psi.PsiManager
2222
import com.intellij.psi.compiled.ClassFileDecompilers
23+
import org.jetbrains.kotlin.builtins.BuiltInSerializerProtocol
2324
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
2425
import org.jetbrains.kotlin.idea.decompiler.KotlinDecompiledFileViewProvider
2526
import org.jetbrains.kotlin.idea.decompiler.KtDecompiledFile
27+
import org.jetbrains.kotlin.idea.decompiler.common.KotlinMetadataDeserializerForDecompiler
2628
import org.jetbrains.kotlin.idea.decompiler.common.createIncompatibleAbiVersionDecompiledText
2729
import org.jetbrains.kotlin.idea.decompiler.textBuilder.DecompiledText
2830
import org.jetbrains.kotlin.idea.decompiler.textBuilder.buildDecompiledText
2931
import org.jetbrains.kotlin.idea.decompiler.textBuilder.defaultDecompilerRendererOptions
32+
import org.jetbrains.kotlin.js.resolve.JsPlatform
3033
import org.jetbrains.kotlin.name.FqName
3134
import org.jetbrains.kotlin.renderer.DescriptorRenderer
35+
import org.jetbrains.kotlin.resolve.TargetPlatform
3236
import org.jetbrains.kotlin.serialization.ProtoBuf
37+
import org.jetbrains.kotlin.serialization.deserialization.FlexibleTypeDeserializer
3338
import org.jetbrains.kotlin.serialization.deserialization.NameResolverImpl
39+
import org.jetbrains.kotlin.serialization.js.DynamicTypeDeserializer
3440
import org.jetbrains.kotlin.serialization.js.JsProtoBuf
3541
import org.jetbrains.kotlin.serialization.js.JsSerializerProtocol
3642
import org.jetbrains.kotlin.utils.JsMetadataVersion
@@ -73,7 +79,10 @@ fun buildDecompiledTextFromJsMetadata(kjsmFile: VirtualFile): DecompiledText {
7379
}
7480
is KjsmFile.Compatible -> {
7581
val packageFqName = file.packageFqName
76-
val resolver = KotlinJavaScriptDeserializerForDecompiler(packageFqName, file.proto, file.nameResolver)
82+
val resolver = KotlinMetadataDeserializerForDecompiler(
83+
packageFqName, file.proto, file.nameResolver,
84+
JsPlatform, JsSerializerProtocol, DynamicTypeDeserializer
85+
)
7786
val declarations = arrayListOf<DeclarationDescriptor>()
7887
declarations.addAll(resolver.resolveDeclarationsInFacade(packageFqName))
7988
for (klass in file.classesToDecompile) {

0 commit comments

Comments
 (0)