From dc1e3ae44119027ae165d13f8f9a8c3239261207 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Fri, 25 Nov 2016 22:26:42 +0300 Subject: [PATCH] Allow to search builtins descriptors in stubs by name --- .../navigation/findDecompiledDeclaration.kt | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/findDecompiledDeclaration.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/findDecompiledDeclaration.kt index 35b241b8715..e9cf452320a 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/findDecompiledDeclaration.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/findDecompiledDeclaration.kt @@ -150,8 +150,10 @@ object ByDescriptorIndexer : DecompiledTextIndexer { val descriptorKey = original.toStringKey() - if (!file.isContentsLoaded) { - if (original is MemberDescriptor && file.hasDeclarationWithKey(this, descriptorKey)) { + if (!file.isContentsLoaded && original is MemberDescriptor) { + val hasDeclarationByKey = file.hasDeclarationWithKey(this, descriptorKey) || + (getBuiltinsDescriptorKey(descriptor)?.let { file.hasDeclarationWithKey(this, it) } ?: false) + if (hasDeclarationByKey) { val declarationContainer: KtDeclarationContainer? = when { DescriptorUtils.isTopLevelDeclaration(original) -> file original.containingDeclaration is ClassDescriptor -> @@ -170,18 +172,21 @@ object ByDescriptorIndexer : DecompiledTextIndexer { } return file.getDeclaration(this, descriptorKey) ?: run { - if (descriptor !is ClassDescriptor) return null - - val classFqName = descriptor.fqNameUnsafe - if (JvmBuiltInsSettings.isSerializableInJava(classFqName)) { - val builtInDescriptor = - DefaultBuiltIns.Instance.builtInsModule.resolveTopLevelClass(classFqName.toSafe(), NoLookupLocation.FROM_IDE) - return builtInDescriptor?.let { file.getDeclaration(this, it.toStringKey()) } - } - return null + return getBuiltinsDescriptorKey(descriptor)?.let { file.getDeclaration(this, it) } } } + fun getBuiltinsDescriptorKey(descriptor: DeclarationDescriptor): String? { + if (descriptor !is ClassDescriptor) return null + + val classFqName = descriptor.fqNameUnsafe + if (!JvmBuiltInsSettings.isSerializableInJava(classFqName)) return null + + val builtInDescriptor = + DefaultBuiltIns.Instance.builtInsModule.resolveTopLevelClass(classFqName.toSafe(), NoLookupLocation.FROM_IDE) + return builtInDescriptor?.toStringKey() + } + private fun DeclarationDescriptor.toStringKey(): String { return descriptorRendererForKeys.render(this) }