From cdeabf26b4be42b567d263f0dd0130f264e9a520 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 16 Feb 2017 01:31:44 +0300 Subject: [PATCH] Fix NPE from KotlinBuiltInDecompiler This happened because of bae955aafdb: similarly to the corresponding code in the compiler, the IDE should also skip the metadata for kotlin.Cloneable when decompiling built-ins because the deserializer is not going to resolve this class from the metadata --- .../kotlin/idea/decompiler/builtIns/KotlinBuiltInDecompiler.kt | 3 ++- .../idea/decompiler/js/KotlinJavaScriptMetaFileDecompiler.kt | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) 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 f18d2d2f9e7..d19c0c4a98b 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 @@ -36,6 +36,7 @@ import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.serialization.builtins.BuiltInsProtoBuf import org.jetbrains.kotlin.serialization.deserialization.MetadataPackageFragment import org.jetbrains.kotlin.serialization.deserialization.NameResolverImpl +import org.jetbrains.kotlin.utils.addIfNotNull import java.io.ByteArrayInputStream class KotlinBuiltInDecompiler : ClassFileDecompilers.Full() { @@ -82,7 +83,7 @@ fun buildDecompiledTextForBuiltIns(builtInFile: VirtualFile): DecompiledText { declarations.addAll(resolver.resolveDeclarationsInFacade(packageFqName)) for (classProto in file.classesToDecompile) { val classId = file.nameResolver.getClassId(classProto.fqName) - declarations.add(resolver.resolveTopLevelClass(classId)!!) + declarations.addIfNotNull(resolver.resolveTopLevelClass(classId)) } return buildDecompiledText(packageFqName, declarations, decompilerRendererForBuiltIns) } 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 21b42846432..90c4a76b67b 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 @@ -33,6 +33,7 @@ import org.jetbrains.kotlin.serialization.deserialization.NameResolverImpl import org.jetbrains.kotlin.serialization.js.JsProtoBuf import org.jetbrains.kotlin.serialization.js.JsSerializerProtocol import org.jetbrains.kotlin.utils.JsMetadataVersion +import org.jetbrains.kotlin.utils.addIfNotNull import java.io.ByteArrayInputStream import java.io.IOException @@ -76,7 +77,7 @@ fun buildDecompiledTextFromJsMetadata(kjsmFile: VirtualFile): DecompiledText { declarations.addAll(resolver.resolveDeclarationsInFacade(packageFqName)) for (klass in file.classesToDecompile) { val classId = file.nameResolver.getClassId(klass.fqName) - declarations.add(resolver.resolveTopLevelClass(classId)!!) + declarations.addIfNotNull(resolver.resolveTopLevelClass(classId)) } return buildDecompiledText(packageFqName, declarations, decompilerRendererForJS) }