[Analysis API] KTIJ-24107 Small cleanup in FirReferenceResolveHelper.kt
This commit is contained in:
+11
-13
@@ -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(
|
||||||
|
|||||||
Reference in New Issue
Block a user