[FIR] Accessor symbol is now a property symbol, not a function symbol
This commit is contained in:
+13
-10
@@ -13,7 +13,8 @@ import org.jetbrains.kotlin.fir.declarations.builder.FirConstructorBuilder
|
||||
import org.jetbrains.kotlin.fir.declarations.builder.FirPrimaryConstructorBuilder
|
||||
import org.jetbrains.kotlin.fir.declarations.builder.FirSimpleFunctionBuilder
|
||||
import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.*
|
||||
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
|
||||
import org.jetbrains.kotlin.fir.expressions.FirConstKind
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.builder.buildConstExpression
|
||||
@@ -104,11 +105,16 @@ class JavaClassEnhancementScope(
|
||||
}
|
||||
return symbol
|
||||
}
|
||||
is FirJavaMethod -> {
|
||||
is FirSyntheticProperty -> {
|
||||
original as FirAccessorSymbol
|
||||
return enhanceMethod(
|
||||
firElement, original.accessorId, original.accessorId.callableName, isAccessor = true, propertyId = original.callableId
|
||||
) as FirAccessorSymbol
|
||||
val enhancedFunctionSymbol = enhanceMethod(
|
||||
firElement.getter.delegate, original.accessorId, original.accessorId.callableName
|
||||
)
|
||||
val enhancedProperty = FirSyntheticProperty(
|
||||
session, name, FirAccessorSymbol(original.callableId, original.accessorId),
|
||||
enhancedFunctionSymbol.fir as FirSimpleFunction
|
||||
)
|
||||
return enhancedProperty.symbol
|
||||
}
|
||||
else -> {
|
||||
if (original is FirPropertySymbol || original is FirAccessorSymbol) return original
|
||||
@@ -132,9 +138,7 @@ class JavaClassEnhancementScope(
|
||||
private fun enhanceMethod(
|
||||
firMethod: FirFunction<*>,
|
||||
methodId: CallableId,
|
||||
name: Name,
|
||||
isAccessor: Boolean = false,
|
||||
propertyId: CallableId? = null
|
||||
name: Name
|
||||
): FirFunctionSymbol<*> {
|
||||
val memberContext = context.copyWithNewDefaultTypeQualifiers(typeQualifierResolver, jsr305State, firMethod.annotations)
|
||||
|
||||
@@ -225,8 +229,7 @@ class JavaClassEnhancementScope(
|
||||
receiverTypeRef = newReceiverTypeRef
|
||||
this.name = name
|
||||
status = firMethod.status
|
||||
symbol = if (!isAccessor) FirNamedFunctionSymbol(methodId)
|
||||
else FirAccessorSymbol(callableId = propertyId!!, accessorId = methodId)
|
||||
symbol = FirNamedFunctionSymbol(methodId)
|
||||
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
|
||||
valueParameters += newValueParameters
|
||||
typeParameters += firMethod.typeParameters
|
||||
|
||||
+23
-23
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.builder.FirSimpleFunctionBuilder
|
||||
import org.jetbrains.kotlin.fir.declarations.builder.FirValueParameterBuilder
|
||||
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack
|
||||
import org.jetbrains.kotlin.fir.java.declarations.*
|
||||
@@ -16,10 +17,7 @@ import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticPropertiesScope
|
||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.AbstractFirUseSiteMemberScope
|
||||
import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirAccessorSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||
import org.jetbrains.kotlin.fir.types.jvm.FirJavaTypeRef
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
@@ -51,30 +49,32 @@ class JavaClassUseSiteMemberScope(
|
||||
syntheticPropertyName: Name,
|
||||
overrideCandidates: MutableSet<FirCallableSymbol<*>>,
|
||||
isGetter: Boolean
|
||||
): FirAccessorSymbol? {
|
||||
if (functionSymbol is FirNamedFunctionSymbol) {
|
||||
val fir = functionSymbol.fir
|
||||
if (fir.isStatic) {
|
||||
): FirPropertySymbol? {
|
||||
if (functionSymbol !is FirNamedFunctionSymbol) {
|
||||
return null
|
||||
}
|
||||
val fir = functionSymbol.fir
|
||||
if (fir.isStatic) {
|
||||
return null
|
||||
}
|
||||
when (isGetter) {
|
||||
true -> if (fir.valueParameters.isNotEmpty()) {
|
||||
return null
|
||||
}
|
||||
when (isGetter) {
|
||||
true -> if (fir.valueParameters.isNotEmpty()) {
|
||||
return null
|
||||
}
|
||||
false -> if (fir.valueParameters.size != 1) {
|
||||
return null
|
||||
}
|
||||
false -> if (fir.valueParameters.size != 1) {
|
||||
return null
|
||||
}
|
||||
}
|
||||
overrideCandidates += functionSymbol
|
||||
val accessorSymbol = FirAccessorSymbol(
|
||||
accessorId = functionSymbol.callableId,
|
||||
callableId = CallableId(functionSymbol.callableId.packageName, functionSymbol.callableId.className, syntheticPropertyName)
|
||||
val accessorProperty = FirSyntheticProperty(
|
||||
session, syntheticPropertyName,
|
||||
symbol = FirAccessorSymbol(
|
||||
accessorId = functionSymbol.callableId,
|
||||
callableId = CallableId(functionSymbol.callableId.packageName, functionSymbol.callableId.className, syntheticPropertyName)
|
||||
),
|
||||
delegateGetter = fir
|
||||
)
|
||||
if (functionSymbol is FirNamedFunctionSymbol) {
|
||||
functionSymbol.fir.let { callableMember -> accessorSymbol.bind(callableMember) }
|
||||
}
|
||||
return accessorSymbol
|
||||
return accessorProperty.symbol
|
||||
}
|
||||
|
||||
private fun processAccessorFunctionsAndPropertiesByName(
|
||||
@@ -82,7 +82,7 @@ class JavaClassUseSiteMemberScope(
|
||||
getterNames: List<Name>,
|
||||
setterName: Name?,
|
||||
processor: (FirCallableSymbol<*>) -> Unit
|
||||
): Unit {
|
||||
) {
|
||||
val overrideCandidates = mutableSetOf<FirCallableSymbol<*>>()
|
||||
val klass = symbol.fir
|
||||
declaredMemberScope.processPropertiesByName(propertyName) { variableSymbol ->
|
||||
|
||||
Reference in New Issue
Block a user