diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/KtDecompiledFileBase.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/KtDecompiledFileBase.kt index 3620cf739f3..da24e997b43 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/KtDecompiledFileBase.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/KtDecompiledFileBase.kt @@ -31,7 +31,11 @@ import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.utils.concurrent.block.LockedClearableLazyValue public abstract class KtDecompiledFileBase(val provider: KotlinDecompiledFileViewProviderBase) : KtFile(provider, true) { - protected abstract val decompiledText: LockedClearableLazyValue + abstract fun buildDecompiledText(): DecompiledText + + private val decompiledText = LockedClearableLazyValue(Any()) { + buildDecompiledText() + } public fun getDeclarationForDescriptor(descriptor: DeclarationDescriptor): KtDeclaration? { val original = descriptor.getOriginal() 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 440110b41f0..6a41c3c2c0c 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 @@ -51,11 +51,11 @@ public class DeserializerForClassfileDecompiler( private val classFinder = DirectoryBasedClassFinder(packageDirectory, directoryPackageFqName) - override val classDataFinder = DirectoryBasedDataFinder(classFinder, LOG) + private val classDataFinder = DirectoryBasedDataFinder(classFinder, LOG) private val errorReporter = LoggingErrorReporter(LOG) - override val annotationAndConstantLoader = + private val annotationAndConstantLoader = BinaryClassAnnotationAndConstantLoaderImpl(moduleDescriptor, storageManager, classFinder, errorReporter) override val deserializationComponents: DeserializationComponents = DeserializationComponents( diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/classFile/KtClsFile.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/classFile/KtClsFile.kt index 1a77bf86d0e..85cd0bf3c44 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/classFile/KtClsFile.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/classFile/KtClsFile.kt @@ -36,9 +36,7 @@ import org.jetbrains.kotlin.utils.concurrent.block.LockedClearableLazyValue import java.util.* public class KtClsFile(provider: KotlinDecompiledFileViewProviderBase) : KtDecompiledFileBase(provider) { - protected override val decompiledText: LockedClearableLazyValue = LockedClearableLazyValue(Any()) { - buildDecompiledTextForClassFile(virtualFile) - } + override fun buildDecompiledText() = buildDecompiledTextForClassFile(virtualFile) } private val descriptorRendererForClassFileDecompiler = DescriptorRenderer.withOptions { 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 0a960653172..dee2bb75bb0 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 @@ -20,12 +20,14 @@ import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.vfs.VirtualFile 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.ResolveEverythingToKotlinAnyLocalClassResolver import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.js.resolve.JsPlatform import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.serialization.ClassData import org.jetbrains.kotlin.serialization.ClassDataWithSource import org.jetbrains.kotlin.serialization.deserialization.* import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope @@ -48,13 +50,13 @@ public class KotlinJavaScriptDeserializerForDecompiler( private val metaFileFinder = DirectoryBasedKotlinJavaScriptMetaFileFinder(packageDirectory, directoryPackageFqName, nameResolver) - override val classDataFinder = DirectoryBasedKotlinJavaScriptDataFinder(metaFileFinder, LOG) + private val classDataFinder = DirectoryBasedKotlinJavaScriptDataFinder(metaFileFinder, LOG) - override val annotationAndConstantLoader = KotlinJavascriptAnnotationAndConstantLoader(moduleDescriptor) + private val annotationAndConstantLoader = KotlinJavascriptAnnotationAndConstantLoader(moduleDescriptor) override val deserializationComponents = DeserializationComponents( storageManager, moduleDescriptor, classDataFinder, annotationAndConstantLoader, packageFragmentProvider, - ResolveEverythingToKotlinAnyLocalClassResolver(targetPlatform.builtIns), ErrorReporter.DO_NOTHING, + ResolveEverythingToKotlinAnyLocalClassResolver(targetPlatform.builtIns), LoggingErrorReporter(LOG), LookupTracker.DO_NOTHING, FlexibleTypeCapabilitiesDeserializer.Dynamic, ClassDescriptorFactory.EMPTY ) @@ -70,10 +72,8 @@ public class KotlinJavaScriptDeserializerForDecompiler( } val content = file.contentsToByteArray(false) - val (nameResolver, packageProto) = content.toPackageData(nameResolver) - val membersScope = DeserializedPackageMemberScope( - createDummyPackageFragment(packageFqName), packageProto, nameResolver, deserializationComponents + createDummyPackageFragment(packageFqName), content.toPackageProto(), nameResolver, deserializationComponents ) { emptyList() } return membersScope.getContributedDescriptors() } @@ -87,7 +87,7 @@ class DirectoryBasedKotlinJavaScriptMetaFileFinder( val packageDirectory: VirtualFile, val directoryPackageFqName: FqName, val nameResolver: NameResolver -) { +) { fun findKotlinJavascriptMetaFile(classId: ClassId): VirtualFile? { if (classId.getPackageFqName() != directoryPackageFqName) return null @@ -104,7 +104,6 @@ class DirectoryBasedKotlinJavaScriptDataFinder( val file = classFinder.findKotlinJavascriptMetaFile(classId) ?: return null val content = file.contentsToByteArray(false) - val classData = content.toClassData(classFinder.nameResolver) - return ClassDataWithSource(classData) + return ClassDataWithSource(ClassData(classFinder.nameResolver, content.toClassProto())) } } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/js/KotlinJavaScriptStubBuilder.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/js/KotlinJavaScriptStubBuilder.kt index 3797eb3382a..c2996e02454 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/js/KotlinJavaScriptStubBuilder.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/js/KotlinJavaScriptStubBuilder.kt @@ -31,8 +31,8 @@ import org.jetbrains.kotlin.serialization.deserialization.NameResolver import org.jetbrains.kotlin.serialization.deserialization.NameResolverImpl import org.jetbrains.kotlin.serialization.deserialization.TypeTable import org.jetbrains.kotlin.serialization.js.KotlinJavascriptSerializedResourcePaths -import org.jetbrains.kotlin.serialization.js.toClassData -import org.jetbrains.kotlin.serialization.js.toPackageData +import org.jetbrains.kotlin.serialization.js.toClassProto +import org.jetbrains.kotlin.serialization.js.toPackageProto import java.io.ByteArrayInputStream public class KotlinJavaScriptStubBuilder : ClsStubBuilder() { @@ -61,17 +61,17 @@ public class KotlinJavaScriptStubBuilder : ClsStubBuilder() { val components = createStubBuilderComponents(file, packageFqName, nameResolver) if (isPackageHeader) { - val packageData = content.toPackageData(nameResolver) + val packageProto = content.toPackageProto() val context = components.createContext( - packageData.nameResolver, packageFqName, TypeTable(packageData.packageProto.typeTable) + nameResolver, packageFqName, TypeTable(packageProto.typeTable) ) - return createPackageFacadeStub(packageData.packageProto, packageFqName, context) + return createPackageFacadeStub(packageProto, packageFqName, context) } else { - val classData = content.toClassData(nameResolver) - val context = components.createContext(classData.nameResolver, packageFqName, TypeTable(classData.classProto.typeTable)) + val classProto = content.toClassProto() + val context = components.createContext(nameResolver, packageFqName, TypeTable(classProto.typeTable)) val classId = JsMetaFileUtils.getClassId(file) - return createTopLevelClassStub(classId, classData.classProto, context) + return createTopLevelClassStub(classId, classProto, context) } } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/js/KotlinJavascriptMetaFile.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/js/KotlinJavascriptMetaFile.kt index dece86b90f3..99e45cd7cfe 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/js/KotlinJavascriptMetaFile.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/js/KotlinJavascriptMetaFile.kt @@ -30,9 +30,7 @@ import org.jetbrains.kotlin.utils.concurrent.block.LockedClearableLazyValue import java.util.* public class KotlinJavascriptMetaFile(provider: KotlinJavascriptMetaFileViewProvider) : KtDecompiledFileBase(provider) { - protected override val decompiledText: LockedClearableLazyValue = LockedClearableLazyValue(Any()) { - buildDecompiledTextFromJsMetadata(getVirtualFile()) - } + override fun buildDecompiledText() = buildDecompiledTextFromJsMetadata(virtualFile) } private val descriptorRendererForKotlinJavascriptDecompiler = DescriptorRenderer.withOptions { diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DeserializerForDecompilerBase.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DeserializerForDecompilerBase.kt index 14395cf9114..9360fee9fa5 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DeserializerForDecompilerBase.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DeserializerForDecompilerBase.kt @@ -46,10 +46,6 @@ public abstract class DeserializerForDecompilerBase( protected abstract val targetPlatform: TargetPlatform - protected abstract val classDataFinder: ClassDataFinder - - protected abstract val annotationAndConstantLoader: AnnotationAndConstantLoader, AnnotationWithTarget> - protected val storageManager: StorageManager = LockBasedStorageManager.NO_LOCKS protected val moduleDescriptor: ModuleDescriptorImpl = createDummyModule("module for building decompiled sources") diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/jsProtoBufUtil.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/jsProtoBufUtil.kt index 18b978f5c6f..76c7da6fe53 100644 --- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/jsProtoBufUtil.kt +++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/jsProtoBufUtil.kt @@ -16,21 +16,16 @@ package org.jetbrains.kotlin.serialization.js -import org.jetbrains.kotlin.serialization.ClassData -import org.jetbrains.kotlin.serialization.PackageData import org.jetbrains.kotlin.serialization.ProtoBuf -import org.jetbrains.kotlin.serialization.deserialization.NameResolver import java.io.ByteArrayInputStream -public fun ByteArray.toPackageData(nameResolver: NameResolver): PackageData { +public fun ByteArray.toPackageProto(): ProtoBuf.Package { val registry = KotlinJavascriptSerializedResourcePaths.extensionRegistry - val packageProto = ProtoBuf.Package.parseFrom(ByteArrayInputStream(this), registry) - return PackageData(nameResolver, packageProto) + return ProtoBuf.Package.parseFrom(ByteArrayInputStream(this), registry)!! } -public fun ByteArray.toClassData(nameResolver: NameResolver): ClassData { +public fun ByteArray.toClassProto(): ProtoBuf.Class { val registry = KotlinJavascriptSerializedResourcePaths.extensionRegistry - val classProto = ProtoBuf.Class.parseFrom(ByteArrayInputStream(this), registry) - return ClassData(nameResolver, classProto) + return ProtoBuf.Class.parseFrom(ByteArrayInputStream(this), registry) }