[decompiler] get rid of indexers in decompiled text
diff --git a/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/file/KtDecompiledFile.kt b/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/file/KtDecompiledFile.kt
index 76c0dc2..725b307 100644
--- a/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/file/KtDecompiledFile.kt
+++ b/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/file/KtDecompiledFile.kt
@@ -3,11 +3,8 @@
 package org.jetbrains.kotlin.analysis.decompiler.psi.file
 
 import com.intellij.openapi.vfs.VirtualFile
-import com.intellij.psi.util.PsiTreeUtil
 import org.jetbrains.kotlin.analysis.decompiler.psi.KotlinDecompiledFileViewProvider
 import org.jetbrains.kotlin.analysis.decompiler.psi.text.DecompiledText
-import org.jetbrains.kotlin.analysis.decompiler.psi.text.DecompiledTextIndexer
-import org.jetbrains.kotlin.psi.KtDeclaration
 import org.jetbrains.kotlin.psi.KtFile
 import org.jetbrains.kotlin.utils.concurrent.block.LockedClearableLazyValue
 
diff --git a/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/text/ByDescriptorIndexer.kt b/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/text/ByDescriptorIndexer.kt
index b7d89d6..0285a58 100644
--- a/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/text/ByDescriptorIndexer.kt
+++ b/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/text/ByDescriptorIndexer.kt
@@ -28,11 +28,7 @@
 import org.jetbrains.kotlin.utils.addIfNotNull
 
 
-object ByDescriptorIndexer : DecompiledTextIndexer<String> {
-    override fun indexDescriptor(descriptor: DeclarationDescriptor): Collection<String> {
-        return listOf(descriptor.toStringKey())
-    }
-
+object ByDescriptorIndexer {
     fun getDeclarationForDescriptor(descriptor: DeclarationDescriptor, file: KtDecompiledFile): KtDeclaration? {
         val original = descriptor.original
 
diff --git a/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/text/ByJvmSignatureIndexer.kt b/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/text/ByJvmSignatureIndexer.kt
deleted file mode 100644
index c4c64b7..0000000
--- a/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/text/ByJvmSignatureIndexer.kt
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
- * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
- */
-
-package org.jetbrains.kotlin.analysis.decompiler.psi.text
-
-import com.intellij.psi.PsiMember
-import com.intellij.psi.impl.compiled.SignatureParsing
-import com.intellij.util.cls.ClsFormatException
-import org.jetbrains.kotlin.descriptors.ClassDescriptor
-import org.jetbrains.kotlin.descriptors.ClassKind
-import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
-import org.jetbrains.kotlin.load.java.JvmAbi
-import org.jetbrains.kotlin.load.kotlin.MemberSignature
-import org.jetbrains.kotlin.metadata.deserialization.getExtensionOrNull
-import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf
-import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil
-import org.jetbrains.kotlin.name.Name
-import org.jetbrains.kotlin.resolve.calls.components.hasDefaultValue
-import org.jetbrains.kotlin.resolve.descriptorUtil.classId
-import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension
-import org.jetbrains.kotlin.resolve.jvm.JvmClassName
-import org.jetbrains.kotlin.resolve.jvm.annotations.findJvmOverloadsAnnotation
-import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassConstructorDescriptor
-import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPropertyDescriptor
-import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedSimpleFunctionDescriptor
-import java.text.CharacterIterator
-import java.text.StringCharacterIterator
-
-private object ByJvmSignatureIndexer : DecompiledTextIndexer<ClassNameAndSignature> {
-    override fun indexDescriptor(descriptor: DeclarationDescriptor): Collection<ClassNameAndSignature> {
-        val signatures = arrayListOf<ClassNameAndSignature>()
-        fun save(id: List<Name>, signature: MemberSignature) {
-            signatures.add(ClassNameAndSignature(id, signature))
-        }
-
-        fun ClassDescriptor.apply() {
-            when (kind) {
-                ClassKind.ENUM_ENTRY -> {
-                    val enumClass = containingDeclaration as ClassDescriptor
-                    val signature = MemberSignature.fromFieldNameAndDesc(name.asString(), enumClass.desc())
-                    save(enumClass.relativeClassName(), signature)
-                }
-                ClassKind.OBJECT -> {
-                    val instanceFieldSignature = MemberSignature.fromFieldNameAndDesc(JvmAbi.INSTANCE_FIELD, desc())
-                    save(relativeClassName(), instanceFieldSignature)
-                    if (isCompanionObject) {
-                        val signature = MemberSignature.fromFieldNameAndDesc(name.asString(), desc())
-                        save((containingDeclaration as? ClassDescriptor)?.relativeClassName().orEmpty(), signature)
-                    }
-                }
-                else -> {
-                }
-            }
-        }
-
-        fun DeserializedClassConstructorDescriptor.apply() {
-            JvmProtoBufUtil.getJvmConstructorSignature(proto, nameResolver, typeTable)?.let {
-                val id = (containingDeclaration as? ClassDescriptor)?.relativeClassName().orEmpty()
-                val signature = MemberSignature.fromJvmMemberSignature(it)
-                save(id, signature)
-            }
-        }
-
-        fun DeserializedSimpleFunctionDescriptor.apply() {
-            JvmProtoBufUtil.getJvmMethodSignature(proto, nameResolver, typeTable)?.let {
-                val id = (containingDeclaration as? ClassDescriptor)?.relativeClassName().orEmpty()
-
-                val signature = MemberSignature.fromJvmMemberSignature(it)
-                save(id, signature)
-
-                if (findJvmOverloadsAnnotation() == null) return
-
-                val extensionShift = if (isExtension) 1 else 0
-
-                val omittedList = mutableListOf<Int>()
-                valueParameters.asReversed().forEach { parameter ->
-                    if (parameter.hasDefaultValue()) {
-                        omittedList.add(parameter.index + extensionShift)
-                        val newDescriptor = excludeParametersFromDescriptor(it.desc, omittedList)
-                        if (newDescriptor != null) {
-                            val overloadedSignature = MemberSignature.fromMethodNameAndDesc(it.name, newDescriptor)
-                            save(id, overloadedSignature)
-                        }
-                    }
-                }
-            }
-        }
-
-        fun DeserializedPropertyDescriptor.apply() {
-            val className = (containingDeclaration as? ClassDescriptor)?.relativeClassName().orEmpty()
-            val signature = proto.getExtensionOrNull(JvmProtoBuf.propertySignature)
-            if (signature != null) {
-                val fieldSignature = JvmProtoBufUtil.getJvmFieldSignature(proto, nameResolver, typeTable)
-                if (fieldSignature != null) {
-                    save(className, MemberSignature.fromJvmMemberSignature(fieldSignature))
-                }
-                if (signature.hasGetter()) {
-                    save(className, MemberSignature.fromMethod(nameResolver, signature.getter))
-                }
-                if (signature.hasSetter()) {
-                    save(className, MemberSignature.fromMethod(nameResolver, signature.setter))
-                }
-            }
-        }
-
-        when (descriptor) {
-            is ClassDescriptor -> descriptor.apply()
-            is DeserializedClassConstructorDescriptor -> descriptor.apply()
-            is DeserializedSimpleFunctionDescriptor -> descriptor.apply()
-            is DeserializedPropertyDescriptor -> descriptor.apply()
-        }
-
-        return signatures
-    }
-}
-
-private fun excludeParametersFromDescriptor(descriptor: String, omittedParameters: List<Int>): String? {
-
-    fun tryParseParametersAndReturnType(): Pair<List<String>, String>? {
-        val iterator = StringCharacterIterator(descriptor)
-
-        fun parseTypeString(): String? {
-            val begin = iterator.index
-            try {
-                SignatureParsing.parseTypeString(iterator) { it }
-            } catch (e: ClsFormatException) {
-                return null
-            }
-            val end = iterator.index
-            return descriptor.substring(begin, end)
-        }
-
-        if (iterator.current() != '(') return null
-        iterator.next()
-
-        if (iterator.current() == ')') {
-            iterator.next()
-            val returnType = parseTypeString() ?: return null
-            return emptyList<String>() to returnType
-        }
-
-        val parameterTypes = mutableListOf<String>()
-        while (iterator.current() != ')' && iterator.current() != CharacterIterator.DONE) {
-            parameterTypes += parseTypeString() ?: return null
-        }
-
-        if (iterator.current() != ')') return null
-        iterator.next()
-
-        val returnType = parseTypeString() ?: return null
-        return parameterTypes to returnType
-    }
-
-    val (parameterTypes, returnType) = tryParseParametersAndReturnType() ?: return null
-
-    val parametersList = parameterTypes
-        .filterIndexed { index, _ -> index !in omittedParameters }
-        .joinToString("")
-
-    return "($parametersList)$returnType"
-}
-
-private fun ClassDescriptor.desc(): String = "L" + JvmClassName.byClassId(classId!!).internalName + ";"
-
-fun PsiMember.relativeClassName(): List<Name> {
-    return generateSequence(this.containingClass) { it.containingClass }.toList().dropLast(1).reversed().map { Name.identifier(it.name!!) }
-}
-
-private fun ClassDescriptor.relativeClassName(): List<Name> {
-    return classId!!.relativeClassName.pathSegments().drop(1)
-}
-
-// every member is represented by its jvm signature and relative class name (which is easy to obtain from descriptors or cls psi)
-
-// relative class name is a path containing inner/nested class names from top level class to the class containing this member (excluding top level class name)
-// Examples: for top level function or function in a top level class relativeClassName is empty
-// For: class TopLevel { class A { class B { fun f() } } }
-// relativeClassName for function 'f' will be [A, B]
-data class ClassNameAndSignature(val relativeClassName: List<Name>, val memberSignature: MemberSignature)
-
-// expose with different type
-val BySignatureIndexer: DecompiledTextIndexer<*> = ByJvmSignatureIndexer
diff --git a/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/text/DecompiledText.kt b/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/text/DecompiledText.kt
index 246eb37..aefdb8e 100644
--- a/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/text/DecompiledText.kt
+++ b/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/text/DecompiledText.kt
@@ -5,33 +5,4 @@
 
 package org.jetbrains.kotlin.analysis.decompiler.psi.text
 
-import com.intellij.openapi.util.TextRange
-import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
-import org.jetbrains.kotlin.utils.keysToMap
-
-data class DecompiledText(val text: String, val index: DecompiledTextIndex)
-
-interface DecompiledTextIndexer<out T : Any> {
-    fun indexDescriptor(descriptor: DeclarationDescriptor): Collection<T>
-}
-
-// In-memory HashMap-based index of decompiled text
-// allows navigation features
-class DecompiledTextIndex(private val indexers: Collection<DecompiledTextIndexer<*>>) {
-    private val indexerToMap: Map<DecompiledTextIndexer<*>, MutableMap<Any, TextRange>> = indexers.keysToMap { hashMapOf<Any, TextRange>() }
-
-    fun addToIndex(descriptor: DeclarationDescriptor, textRange: TextRange) {
-        indexers.forEach { mapper ->
-            val correspondingMap = indexerToMap.getValue(mapper)
-            mapper.indexDescriptor(descriptor).forEach { key ->
-                correspondingMap[key] = textRange
-            }
-        }
-    }
-
-    fun <T : Any> getRange(mapper: DecompiledTextIndexer<T>, key: T): TextRange? = indexerToMap[mapper]?.get(key)
-
-    companion object {
-        val Empty = DecompiledTextIndex(listOf())
-    }
-}
+data class DecompiledText(val text: String)
\ No newline at end of file
diff --git a/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/text/buildDecompiledText.kt b/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/text/buildDecompiledText.kt
index 179c233..1d6943b 100644
--- a/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/text/buildDecompiledText.kt
+++ b/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/text/buildDecompiledText.kt
@@ -61,7 +61,6 @@
     packageFqName: FqName,
     descriptors: List<DeclarationDescriptor>,
     descriptorRenderer: DescriptorRenderer,
-    indexers: Collection<DecompiledTextIndexer<*>> = listOf(ByDescriptorIndexer),
 ): DecompiledText {
     val builder = StringBuilder()
 
@@ -73,14 +72,7 @@
         }
     }
 
-    val textIndex = DecompiledTextIndex(indexers)
-
-    fun indexDescriptor(descriptor: DeclarationDescriptor, startOffset: Int, endOffset: Int) {
-        textIndex.addToIndex(descriptor, TextRange(startOffset, endOffset))
-    }
-
     fun appendDescriptor(descriptor: DeclarationDescriptor, indent: String, lastEnumEntry: Boolean? = null) {
-        val startOffset = builder.length
         if (isEnumEntry(descriptor)) {
             for (annotation in descriptor.annotations) {
                 builder.append(descriptorRenderer.renderAnnotation(annotation))
@@ -91,7 +83,6 @@
         } else {
             builder.append(descriptorRenderer.render(descriptor).replace("= ...", DECOMPILED_COMMENT_FOR_PARAMETER))
         }
-        var endOffset = builder.length
 
         if (descriptor is CallableDescriptor) {
             //NOTE: assuming that only return types can be flexible
@@ -114,7 +105,6 @@
                     // descriptor instanceof PropertyDescriptor
                     builder.append(" ").append(DECOMPILED_CODE_COMMENT)
                 }
-                endOffset = builder.length
             }
             if (descriptor is PropertyDescriptor) {
                 for (accessor in descriptor.accessors) {
@@ -147,7 +137,6 @@
                         builder.append(")")
                         builder.append(" {").append(DECOMPILED_CODE_COMMENT).append(" }")
                     }
-                    endOffset = builder.length
                 }
             }
         } else if (descriptor is ClassDescriptor && !isEnumEntry(descriptor)) {
@@ -196,18 +185,9 @@
             }
 
             builder.append(indent).append("}")
-            endOffset = builder.length
         }
 
         builder.append("\n")
-        indexDescriptor(descriptor, startOffset, endOffset)
-
-        if (descriptor is ClassDescriptor) {
-            val primaryConstructor = descriptor.unsubstitutedPrimaryConstructor
-            if (primaryConstructor != null) {
-                indexDescriptor(primaryConstructor, startOffset, endOffset)
-            }
-        }
     }
 
     appendDecompiledTextAndPackageName()
@@ -216,5 +196,5 @@
         builder.append("\n")
     }
 
-    return DecompiledText(builder.toString(), textIndex)
+    return DecompiledText(builder.toString())
 }
diff --git a/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/text/buildDecompiledTextForClassFile.kt b/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/text/buildDecompiledTextForClassFile.kt
index 0489a81..d5e5ce0 100644
--- a/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/text/buildDecompiledTextForClassFile.kt
+++ b/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/text/buildDecompiledTextForClassFile.kt
@@ -33,7 +33,7 @@
 
     fun buildText(declarations: List<DeclarationDescriptor>) = buildDecompiledText(
         classHeader.packageNameWithFallback,
-        declarations, decompilerRendererForClassFiles, listOf(ByDescriptorIndexer, BySignatureIndexer)
+        declarations, decompilerRendererForClassFiles
     )
 
     return when (classHeader.kind) {
diff --git a/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/text/incompatibleAbiVersion.kt b/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/text/incompatibleAbiVersion.kt
index b36bdd4..9df9cac 100644
--- a/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/text/incompatibleAbiVersion.kt
+++ b/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/text/incompatibleAbiVersion.kt
@@ -17,6 +17,5 @@
 
 fun <V : BinaryVersion> createIncompatibleAbiVersionDecompiledText(expectedVersion: V, actualVersion: V): DecompiledText = DecompiledText(
     INCOMPATIBLE_ABI_VERSION_COMMENT.replace(CURRENT_ABI_VERSION_MARKER, expectedVersion.toString())
-        .replace(FILE_ABI_VERSION_MARKER, actualVersion.toString()),
-    DecompiledTextIndex.Empty
+        .replace(FILE_ABI_VERSION_MARKER, actualVersion.toString())
 )
diff --git a/analysis/decompiled/light-classes-for-decompiled-fe10/src/org/jetbrains/kotlin/analysis/decompiled/light/classes/fe10/KotlinDeclarationInCompiledFileSearcherFE10Impl.kt b/analysis/decompiled/light-classes-for-decompiled-fe10/src/org/jetbrains/kotlin/analysis/decompiled/light/classes/fe10/KotlinDeclarationInCompiledFileSearcherFE10Impl.kt
index 872f48b..50f64330 100644
--- a/analysis/decompiled/light-classes-for-decompiled-fe10/src/org/jetbrains/kotlin/analysis/decompiled/light/classes/fe10/KotlinDeclarationInCompiledFileSearcherFE10Impl.kt
+++ b/analysis/decompiled/light-classes-for-decompiled-fe10/src/org/jetbrains/kotlin/analysis/decompiled/light/classes/fe10/KotlinDeclarationInCompiledFileSearcherFE10Impl.kt
@@ -6,19 +6,16 @@
 package org.jetbrains.kotlin.analysis.decompiled.light.classes.fe10
 
 import com.intellij.psi.PsiMember
-import com.intellij.psi.PsiMethod
 import org.jetbrains.kotlin.analysis.decompiled.light.classes.origin.KotlinDeclarationInCompiledFileSearcher
 import org.jetbrains.kotlin.analysis.decompiler.psi.file.KtClsFile
-import org.jetbrains.kotlin.analysis.decompiler.psi.text.BySignatureIndexer
-import org.jetbrains.kotlin.analysis.decompiler.psi.text.ClassNameAndSignature
-import org.jetbrains.kotlin.analysis.decompiler.psi.text.relativeClassName
 import org.jetbrains.kotlin.load.kotlin.MemberSignature
-import org.jetbrains.kotlin.psi.KtClassOrObject
+import org.jetbrains.kotlin.name.Name
 import org.jetbrains.kotlin.psi.KtDeclaration
 
 class KotlinDeclarationInCompiledFileSearcherFE10Impl : KotlinDeclarationInCompiledFileSearcher() {
     override fun findDeclarationInCompiledFile(file: KtClsFile, member: PsiMember, signature: MemberSignature): KtDeclaration? {
-        val relativeClassName = member.relativeClassName()
+        val relativeClassName = generateSequence(member.containingClass) { it.containingClass }.toList().dropLast(1).reversed()
+            .map { Name.identifier(it.name!!) }
 
         val memberName = member.name ?: return null
         return findByStubs(file, relativeClassName, member, memberName)