Fix NPE from KotlinBuiltInDecompiler

This happened because of bae955aafd: 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
This commit is contained in:
Alexander Udalov
2017-02-16 01:31:44 +03:00
parent 4d4e2c5c94
commit cdeabf26b4
2 changed files with 4 additions and 2 deletions
@@ -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)
}
@@ -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)
}