FIR: Require FirJavaClass in JavaScopeProvider
This commit is contained in:
@@ -11,13 +11,10 @@ import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass
|
||||
import org.jetbrains.kotlin.fir.java.scopes.*
|
||||
import org.jetbrains.kotlin.fir.resolve.*
|
||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
|
||||
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
||||
import org.jetbrains.kotlin.fir.scopes.*
|
||||
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.types.ConeClassErrorType
|
||||
import org.jetbrains.kotlin.utils.DFS
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult
|
||||
|
||||
@@ -54,10 +51,14 @@ class JavaScopeProvider(
|
||||
scopeSession: ScopeSession
|
||||
): JavaClassMembersEnhancementScope {
|
||||
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(
|
||||
useSiteSession,
|
||||
symbol,
|
||||
buildUseSiteMemberScopeWithJavaTypes(symbol.fir, useSiteSession, scopeSession)
|
||||
buildUseSiteMemberScopeWithJavaTypes(firJavaClass, useSiteSession, scopeSession)
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -71,7 +72,7 @@ class JavaScopeProvider(
|
||||
}
|
||||
|
||||
private fun buildUseSiteMemberScopeWithJavaTypes(
|
||||
regularClass: FirRegularClass,
|
||||
regularClass: FirJavaClass,
|
||||
useSiteSession: FirSession,
|
||||
scopeSession: ScopeSession,
|
||||
): JavaClassUseSiteMemberScope {
|
||||
@@ -93,8 +94,7 @@ class JavaScopeProvider(
|
||||
useSiteSession,
|
||||
JavaOverrideChecker(
|
||||
useSiteSession,
|
||||
if (regularClass is FirJavaClass) regularClass.javaTypeParameterStack
|
||||
else JavaTypeParameterStack.EMPTY
|
||||
regularClass.javaTypeParameterStack
|
||||
),
|
||||
superTypeScopes,
|
||||
regularClass.defaultType(),
|
||||
|
||||
+3
-13
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
|
||||
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.resolve.FirJavaSyntheticNamesProvider
|
||||
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
|
||||
|
||||
class JavaClassUseSiteMemberScope(
|
||||
klass: FirRegularClass,
|
||||
klass: FirJavaClass,
|
||||
session: FirSession,
|
||||
superTypesScope: FirTypeScope,
|
||||
declaredMemberScope: FirScope
|
||||
) : AbstractFirUseSiteMemberScope(
|
||||
session,
|
||||
JavaOverrideChecker(session, if (klass is FirJavaClass) klass.javaTypeParameterStack else JavaTypeParameterStack.EMPTY),
|
||||
JavaOverrideChecker(session, klass.javaTypeParameterStack),
|
||||
superTypesScope,
|
||||
declaredMemberScope
|
||||
) {
|
||||
internal val symbol = klass.symbol
|
||||
|
||||
internal fun bindOverrides(name: Name) {
|
||||
val overrideCandidates = mutableSetOf<FirNamedFunctionSymbol>()
|
||||
declaredMemberScope.processFunctionsByName(name) {
|
||||
@@ -141,18 +138,11 @@ class JavaClassUseSiteMemberScope(
|
||||
}
|
||||
|
||||
override fun processPropertiesByName(name: Name, processor: (FirVariableSymbol<*>) -> Unit) {
|
||||
val getterNames = if (symbol.fir is FirJavaClass) {
|
||||
FirJavaSyntheticNamesProvider.possibleGetterNamesByPropertyName(name)
|
||||
} else {
|
||||
emptyList()
|
||||
}
|
||||
val getterNames = FirJavaSyntheticNamesProvider.possibleGetterNamesByPropertyName(name)
|
||||
return processAccessorFunctionsAndPropertiesByName(name, getterNames, processor)
|
||||
}
|
||||
|
||||
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 accessors = mutableListOf<FirAccessorSymbol>()
|
||||
val getterName by lazy { session.syntheticNamesProvider.getterNameBySetterName(name) ?: name }
|
||||
|
||||
Reference in New Issue
Block a user