FIR: Explicitlty separate static and member scopes

For Java, they have rather different semantics considering "overrides"
and obtaining functions/properties from supertypes

See the Java statics implementation
This commit is contained in:
Denis Zharkov
2020-06-25 12:28:16 +03:00
parent e058c578a8
commit 9668a60151
15 changed files with 363 additions and 129 deletions
@@ -36,4 +36,11 @@ abstract class FirTypeScope : FirScope() {
return baseScope.processOverriddenFunctions(functionSymbol, processor)
}
object Empty : FirTypeScope() {
override fun processOverriddenFunctions(
functionSymbol: FirFunctionSymbol<*>,
processor: (FirFunctionSymbol<*>) -> ProcessorAction
): ProcessorAction = ProcessorAction.NEXT
}
}
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.fir.symbols.impl
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.CallableId
@@ -16,6 +17,8 @@ abstract class FirCallableSymbol<D : FirCallableDeclaration<D>> : AbstractFirBas
get() = null
}
val FirCallableSymbol<*>.isStatic: Boolean get() = (fir as? FirMemberDeclaration)?.status?.isStatic == true
inline fun <reified E : FirCallableSymbol<*>> E.unwrapSubstitutionOverrides(): E {
var current = this
while (current.overriddenSymbol != null) {