[Analysis API] KTIJ-24107 Small cleanup in FirReferenceResolveHelper.kt

This commit is contained in:
Roman Golyshev
2023-01-25 12:08:24 +01:00
committed by teamcity
parent f3c29e1707
commit aab853ad12
@@ -494,7 +494,7 @@ internal object FirReferenceResolveHelper {
} }
val referencedClass = referencedSymbol.fir val referencedClass = referencedSymbol.fir
val referencedSymbolsByFir = listOfNotNull(symbolBuilder.buildSymbol(referencedSymbol)) val referencedSymbolsByFir = listOfNotNull(symbolBuilder.buildSymbol(referencedSymbol))
val firSourcePsi = fir.source.psi ?: referencedSymbolsByFir val firSourcePsi = fir.source.psi
if (firSourcePsi !is KtDotQualifiedExpression) return referencedSymbolsByFir if (firSourcePsi !is KtDotQualifiedExpression) return referencedSymbolsByFir
// When the source of an `FirResolvedQualifier` is a KtDotQualifiedExpression, we need to manually break up the qualified access and // When the source of an `FirResolvedQualifier` is a KtDotQualifiedExpression, we need to manually break up the qualified access and
@@ -536,8 +536,8 @@ internal object FirReferenceResolveHelper {
// -> string.hello (drop the first segment) // -> string.hello (drop the first segment)
// test.pkg.R.string.hello // test.pkg.R.string.hello
// -> string.hello (take last two segments, where the size is determined by the size of qualified access minus 1) // -> string.hello (take last two segments, where the size is determined by the size of qualified access minus 1)
qualifiedAccessSegments.removeAt(0) val fixedQualifiedAccessSegments = qualifiedAccessSegments.drop(1)
assert(referencedClassIdAndQualifiedAccessMatch(qualifiedAccessSegments)) { assert(referencedClassIdAndQualifiedAccessMatch(fixedQualifiedAccessSegments)) {
"Referenced classId $referencedClassId should end with qualifiedAccess expression ${qualifiedAccess.text} " "Referenced classId $referencedClassId should end with qualifiedAccess expression ${qualifiedAccess.text} "
} }
} }
@@ -603,16 +603,14 @@ internal object FirReferenceResolveHelper {
* Returns the segments of a qualified access PSI. For example, given `foo.bar.OuterClass.InnerClass`, this returns `["foo", "bar", * Returns the segments of a qualified access PSI. For example, given `foo.bar.OuterClass.InnerClass`, this returns `["foo", "bar",
* "OuterClass", "InnerClass"]`. * "OuterClass", "InnerClass"]`.
*/ */
private fun KtDotQualifiedExpression.fqNameSegments(): MutableList<String>? { private fun KtDotQualifiedExpression.fqNameSegments(): List<String>? {
val result: MutableList<String> = mutableListOf() val qualifiers = generateSequence(this as KtExpression) { (it as? KtDotQualifiedExpression)?.receiverExpression }
var current: KtExpression = this .map { (it as? KtDotQualifiedExpression)?.selectorExpression ?: it }
while (current is KtDotQualifiedExpression) { .toList()
result += (current.selectorExpression as? KtNameReferenceExpression)?.getReferencedName() ?: return null .asReversed()
current = current.receiverExpression
} val qualifyingReferences = qualifiers.map { it as? KtNameReferenceExpression ?: return null }
result += (current as? KtNameReferenceExpression)?.getReferencedName() ?: return null return qualifyingReferences.map { it.getReferencedName() }
result.reverse()
return result
} }
private fun getSymbolsForAnnotationCall( private fun getSymbolsForAnnotationCall(