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.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(),
|
||||||
|
|||||||
+3
-13
@@ -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 }
|
||||||
|
|||||||
Reference in New Issue
Block a user