FIR: Require FirJavaClass in JavaScopeProvider

This commit is contained in:
Denis.Zharkov
2021-02-03 20:41:27 +03:00
parent 04f53d6a23
commit 5d5228cfc5
2 changed files with 12 additions and 22 deletions
@@ -11,13 +11,10 @@ import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass
import org.jetbrains.kotlin.fir.java.scopes.* import org.jetbrains.kotlin.fir.java.scopes.*
import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.*
import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.*
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
import org.jetbrains.kotlin.fir.scopes.impl.* import org.jetbrains.kotlin.fir.scopes.impl.*
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.StandardClassIds
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.fir.types.ConeClassErrorType
import org.jetbrains.kotlin.utils.DFS import org.jetbrains.kotlin.utils.DFS
import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult
@@ -54,10 +51,14 @@ class JavaScopeProvider(
scopeSession: ScopeSession scopeSession: ScopeSession
): JavaClassMembersEnhancementScope { ): JavaClassMembersEnhancementScope {
return scopeSession.getOrBuild(symbol, JAVA_ENHANCEMENT) { return scopeSession.getOrBuild(symbol, JAVA_ENHANCEMENT) {
val firJavaClass = symbol.fir
require(firJavaClass is FirJavaClass) {
"${firJavaClass.classId} is expected to be FirJavaClass, but ${firJavaClass::class} found"
}
JavaClassMembersEnhancementScope( JavaClassMembersEnhancementScope(
useSiteSession, useSiteSession,
symbol, symbol,
buildUseSiteMemberScopeWithJavaTypes(symbol.fir, useSiteSession, scopeSession) buildUseSiteMemberScopeWithJavaTypes(firJavaClass, useSiteSession, scopeSession)
) )
} }
} }
@@ -71,7 +72,7 @@ class JavaScopeProvider(
} }
private fun buildUseSiteMemberScopeWithJavaTypes( private fun buildUseSiteMemberScopeWithJavaTypes(
regularClass: FirRegularClass, regularClass: FirJavaClass,
useSiteSession: FirSession, useSiteSession: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
): JavaClassUseSiteMemberScope { ): JavaClassUseSiteMemberScope {
@@ -93,8 +94,7 @@ class JavaScopeProvider(
useSiteSession, useSiteSession,
JavaOverrideChecker( JavaOverrideChecker(
useSiteSession, useSiteSession,
if (regularClass is FirJavaClass) regularClass.javaTypeParameterStack regularClass.javaTypeParameterStack
else JavaTypeParameterStack.EMPTY
), ),
superTypeScopes, superTypeScopes,
regularClass.defaultType(), regularClass.defaultType(),
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
import org.jetbrains.kotlin.fir.declarations.synthetic.buildSyntheticProperty import org.jetbrains.kotlin.fir.declarations.synthetic.buildSyntheticProperty
import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack
import org.jetbrains.kotlin.fir.java.declarations.* import org.jetbrains.kotlin.fir.java.declarations.*
import org.jetbrains.kotlin.fir.resolve.FirJavaSyntheticNamesProvider import org.jetbrains.kotlin.fir.resolve.FirJavaSyntheticNamesProvider
import org.jetbrains.kotlin.fir.resolve.calls.syntheticNamesProvider import org.jetbrains.kotlin.fir.resolve.calls.syntheticNamesProvider
@@ -28,18 +27,16 @@ import org.jetbrains.kotlin.load.java.structure.impl.JavaPrimitiveTypeImpl
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
class JavaClassUseSiteMemberScope( class JavaClassUseSiteMemberScope(
klass: FirRegularClass, klass: FirJavaClass,
session: FirSession, session: FirSession,
superTypesScope: FirTypeScope, superTypesScope: FirTypeScope,
declaredMemberScope: FirScope declaredMemberScope: FirScope
) : AbstractFirUseSiteMemberScope( ) : AbstractFirUseSiteMemberScope(
session, session,
JavaOverrideChecker(session, if (klass is FirJavaClass) klass.javaTypeParameterStack else JavaTypeParameterStack.EMPTY), JavaOverrideChecker(session, klass.javaTypeParameterStack),
superTypesScope, superTypesScope,
declaredMemberScope declaredMemberScope
) { ) {
internal val symbol = klass.symbol
internal fun bindOverrides(name: Name) { internal fun bindOverrides(name: Name) {
val overrideCandidates = mutableSetOf<FirNamedFunctionSymbol>() val overrideCandidates = mutableSetOf<FirNamedFunctionSymbol>()
declaredMemberScope.processFunctionsByName(name) { declaredMemberScope.processFunctionsByName(name) {
@@ -141,18 +138,11 @@ class JavaClassUseSiteMemberScope(
} }
override fun processPropertiesByName(name: Name, processor: (FirVariableSymbol<*>) -> Unit) { override fun processPropertiesByName(name: Name, processor: (FirVariableSymbol<*>) -> Unit) {
val getterNames = if (symbol.fir is FirJavaClass) { val getterNames = FirJavaSyntheticNamesProvider.possibleGetterNamesByPropertyName(name)
FirJavaSyntheticNamesProvider.possibleGetterNamesByPropertyName(name)
} else {
emptyList()
}
return processAccessorFunctionsAndPropertiesByName(name, getterNames, processor) return processAccessorFunctionsAndPropertiesByName(name, getterNames, processor)
} }
override fun processFunctionsByName(name: Name, processor: (FirNamedFunctionSymbol) -> Unit) { override fun processFunctionsByName(name: Name, processor: (FirNamedFunctionSymbol) -> Unit) {
if (symbol.fir !is FirJavaClass) {
return super.processFunctionsByName(name, processor)
}
val potentialPropertyNames = session.syntheticNamesProvider.possiblePropertyNamesByAccessorName(name) val potentialPropertyNames = session.syntheticNamesProvider.possiblePropertyNamesByAccessorName(name)
val accessors = mutableListOf<FirAccessorSymbol>() val accessors = mutableListOf<FirAccessorSymbol>()
val getterName by lazy { session.syntheticNamesProvider.getterNameBySetterName(name) ?: name } val getterName by lazy { session.syntheticNamesProvider.getterNameBySetterName(name) ?: name }