[FIR] Add utility function for collecting overridden tree for debug purposes
This commit is contained in:
@@ -5,13 +5,51 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.scopes
|
||||
|
||||
import org.jetbrains.annotations.TestOnly
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.scope
|
||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||
import org.jetbrains.kotlin.fir.types.classId
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
|
||||
fun ConeClassLikeLookupTag.getNestedClassifierScope(session: FirSession, scopeSession: ScopeSession): FirContainingNamesAwareScope? {
|
||||
val klass = toSymbol(session)?.fir as? FirRegularClass ?: return null
|
||||
return klass.scopeProvider.getNestedClassifierScope(klass, session, scopeSession)
|
||||
}
|
||||
|
||||
/**
|
||||
* Use this function to collect direct overridden tree for debug purposes
|
||||
*/
|
||||
@TestOnly
|
||||
fun debugCollectOverrides(symbol: FirCallableSymbol<*>, session: FirSession, scopeSession: ScopeSession): Map<Any, Any> {
|
||||
val scope = symbol.dispatchReceiverType?.scope(session, scopeSession, FakeOverrideTypeCalculator.DoNothing) ?: return emptyMap()
|
||||
return debugCollectOverrides(symbol, scope)
|
||||
}
|
||||
|
||||
@TestOnly
|
||||
fun debugCollectOverrides(symbol: FirCallableSymbol<*>, scope: FirTypeScope): Map<Any, Any> {
|
||||
fun process(scope: FirTypeScope, symbol: FirCallableSymbol<*>): Map<Any, Any> {
|
||||
val result = mutableMapOf<Any, Any>()
|
||||
val resultList = mutableListOf<Any>()
|
||||
when (symbol) {
|
||||
is FirNamedFunctionSymbol -> scope.processDirectOverriddenFunctionsWithBaseScope(symbol) { baseSymbol, baseScope ->
|
||||
resultList.add(process(baseScope, baseSymbol))
|
||||
ProcessorAction.NEXT
|
||||
}
|
||||
is FirPropertySymbol -> scope.processDirectOverriddenPropertiesWithBaseScope(symbol) { baseSymbol, baseScope ->
|
||||
resultList.add(process(baseScope, baseSymbol))
|
||||
ProcessorAction.NEXT
|
||||
}
|
||||
}
|
||||
result[symbol] = resultList
|
||||
return result
|
||||
}
|
||||
return process(scope, symbol)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user