summaryrefslogtreecommitdiff
path: root/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/findDecompiledDeclaration.kt
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/findDecompiledDeclaration.kt')
-rw-r--r--plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/findDecompiledDeclaration.kt104
1 files changed, 3 insertions, 101 deletions
diff --git a/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/findDecompiledDeclaration.kt b/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/findDecompiledDeclaration.kt
index bd20ecd998b7..038e61fe5928 100644
--- a/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/findDecompiledDeclaration.kt
+++ b/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/findDecompiledDeclaration.kt
@@ -5,32 +5,19 @@ package org.jetbrains.kotlin.idea.decompiler.navigation
import com.intellij.openapi.project.Project
import com.intellij.psi.search.EverythingGlobalScope
import com.intellij.psi.search.GlobalSearchScope
+import org.jetbrains.kotlin.analysis.decompiler.psi.file.KtDecompiledFile
+import org.jetbrains.kotlin.analysis.decompiler.psi.text.ByDescriptorIndexer
import org.jetbrains.kotlin.analyzer.ModuleInfo
-import org.jetbrains.kotlin.builtins.DefaultBuiltIns
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
-import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSignatures
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor
import org.jetbrains.kotlin.idea.caches.project.BinaryModuleInfo
-import org.jetbrains.kotlin.idea.caches.resolve.LOG
-import org.jetbrains.kotlin.idea.decompiler.KtDecompiledFile
-import org.jetbrains.kotlin.idea.decompiler.textBuilder.DecompiledTextIndexer
-import org.jetbrains.kotlin.idea.decompiler.textBuilder.defaultDecompilerRendererOptions
import org.jetbrains.kotlin.idea.stubindex.*
-import org.jetbrains.kotlin.incremental.components.NoLookupLocation
-import org.jetbrains.kotlin.psi.KtCallableDeclaration
-import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.KtDeclaration
-import org.jetbrains.kotlin.psi.KtDeclarationContainer
-import org.jetbrains.kotlin.renderer.DescriptorRenderer
-import org.jetbrains.kotlin.renderer.DescriptorRendererModifier
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
-import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe
import org.jetbrains.kotlin.resolve.descriptorUtil.module
-import org.jetbrains.kotlin.resolve.descriptorUtil.resolveTopLevelClass
-import org.jetbrains.kotlin.types.ErrorUtils
-import java.util.*
+import org.jetbrains.kotlin.types.error.ErrorUtils
fun findDecompiledDeclaration(
project: Project,
@@ -109,88 +96,3 @@ private fun findCandidateDeclarationsInIndex(
else -> error("Referenced non local declaration that is not inside top level function, property, class or typealias:\n $referencedDescriptor")
}
}
-
-object ByDescriptorIndexer : DecompiledTextIndexer<String> {
- override fun indexDescriptor(descriptor: DeclarationDescriptor): Collection<String> {
- return listOf(descriptor.toStringKey())
- }
-
- internal fun getDeclarationForDescriptor(descriptor: DeclarationDescriptor, file: KtDecompiledFile): KtDeclaration? {
- val original = descriptor.original
-
- if (original is TypeAliasConstructorDescriptor) {
- return getDeclarationForDescriptor(original.typeAliasDescriptor, file)
- }
-
- if (original is ValueParameterDescriptor) {
- val callable = original.containingDeclaration
- val callableDeclaration = getDeclarationForDescriptor(callable, file) as? KtCallableDeclaration ?: return null
- if (original.index >= callableDeclaration.valueParameters.size) {
- LOG.error(
- "Parameter count mismatch for ${DescriptorRenderer.DEBUG_TEXT.render(callable)}[${original.index}] vs " +
- callableDeclaration.valueParameterList?.text
- )
- return null
- }
- return callableDeclaration.valueParameters[original.index]
- }
-
- if (original is ConstructorDescriptor && original.isPrimary) {
- val classOrObject = getDeclarationForDescriptor(original.containingDeclaration, file) as? KtClassOrObject
- return classOrObject?.primaryConstructor ?: classOrObject
- }
-
- val descriptorKey = original.toStringKey()
-
- 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 ->
- getDeclarationForDescriptor(original.containingDeclaration as ClassDescriptor, file) as? KtClassOrObject
- else -> null
- }
-
- if (declarationContainer != null) {
- val descriptorName = original.name.asString()
- val singleOrNull = declarationContainer.declarations.singleOrNull { it.name == descriptorName }
- if (singleOrNull != null) {
- return singleOrNull
- }
- }
- }
- }
-
- return file.getDeclaration(this, descriptorKey) ?: run {
- return getBuiltinsDescriptorKey(descriptor)?.let { file.getDeclaration(this, it) }
- }
- }
-
- fun getBuiltinsDescriptorKey(descriptor: DeclarationDescriptor): String? {
- if (descriptor !is ClassDescriptor) return null
-
- val classFqName = descriptor.fqNameUnsafe
- if (!JvmBuiltInsSignatures.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)
- }
-
- private val descriptorRendererForKeys = DescriptorRenderer.withOptions {
- defaultDecompilerRendererOptions()
- withDefinedIn = true
- renderUnabbreviatedType = false
- defaultParameterValueRenderer = null
- }
-}