[AA Standalone] Consider type aliases in direct inheritors search

A type alias may still be inherited from. For example:

```
sealed class MyClass

typealias T = MyClass

class Inheritor : T() // `Inheritor` is a direct inheritor of `MyClass`.
```

The index is a simplified version of the IDE's
`KotlinTypeAliasByExpansionShortNameIndex`, but it should be sufficient
for virtually all cases.

^KT-66013
This commit is contained in:
Marco Pennekamp
2024-02-29 20:18:45 +01:00
committed by Space Team
parent 54f2655b4d
commit a9d7b0c595
8 changed files with 130 additions and 14 deletions
@@ -183,16 +183,7 @@ fun StubBasedPsiElementBase<out KotlinClassOrObjectStub<out KtClassOrObject>>.ge
val file = containingFile
if (file is KtFile) {
val directive = file.findImportByAlias(referencedName)
if (directive != null) {
var reference = directive.importedReference
while (reference is KtDotQualifiedExpression) {
reference = reference.selectorExpression
}
if (reference is KtSimpleNameExpression) {
result.add(reference.getReferencedName())
}
}
getImportedSimpleNameByImportAlias(file, referencedName)?.let(result::add)
}
}
@@ -721,4 +712,18 @@ internal fun isKtFile(parent: PsiElement?): Boolean {
//avoid loading KtFile which depends on java psi, which is not available in some setup
//e.g. remote dev https://youtrack.jetbrains.com/issue/GTW-7554
return parent is PsiFile && parent.language == KotlinLanguage.INSTANCE
}
}
fun getImportedSimpleNameByImportAlias(file: KtFile, aliasName: String): String? {
val directive = file.findImportByAlias(aliasName) ?: return null
var reference = directive.importedReference
while (reference is KtDotQualifiedExpression) {
reference = reference.selectorExpression
}
if (reference is KtSimpleNameExpression) {
return reference.getReferencedName()
}
return null
}