[FIR] introduce FirValueParameter.containingFunctionSymbol
^KT-55034 fixed
This commit is contained in:
@@ -468,6 +468,7 @@ abstract class FirJavaFacade(
|
||||
|
||||
javaClass.recordComponents.mapTo(valueParameters) { component ->
|
||||
buildJavaValueParameter {
|
||||
containingFunctionSymbol = this@buildJavaConstructor.symbol
|
||||
source = component.toSourceElement(KtFakeSourceElementKind.ImplicitRecordConstructorParameter)
|
||||
this.moduleData = moduleData
|
||||
isFromSource = component.isFromSource
|
||||
@@ -578,7 +579,7 @@ abstract class FirJavaFacade(
|
||||
isStatic = javaMethod.isStatic
|
||||
typeParameters += javaMethod.typeParameters.convertTypeParameters(javaTypeParameterStack, methodSymbol, moduleData)
|
||||
for ((index, valueParameter) in javaMethod.valueParameters.withIndex()) {
|
||||
valueParameters += valueParameter.toFirValueParameter(session, moduleData, index, javaTypeParameterStack)
|
||||
valueParameters += valueParameter.toFirValueParameter(session, methodSymbol, moduleData, index, javaTypeParameterStack)
|
||||
}
|
||||
annotationBuilder = { javaMethod.convertAnnotationsToFir(session, javaTypeParameterStack) }
|
||||
status = FirResolvedDeclarationStatusImpl(
|
||||
@@ -623,6 +624,7 @@ abstract class FirJavaFacade(
|
||||
this.moduleData = moduleData
|
||||
isFromSource = javaMethod.isFromSource
|
||||
returnTypeRef = firJavaMethod.returnTypeRef
|
||||
containingFunctionSymbol = firJavaMethod.symbol
|
||||
name = javaMethod.name
|
||||
isVararg = javaMethod.returnType is JavaArrayType && javaMethod.name == VALUE_METHOD_NAME
|
||||
annotationBuilder = { emptyList() }
|
||||
@@ -669,7 +671,7 @@ abstract class FirJavaFacade(
|
||||
this.typeParameters += javaConstructor.typeParameters.convertTypeParameters(javaTypeParameterStack, constructorSymbol, moduleData)
|
||||
annotationBuilder = { javaConstructor.convertAnnotationsToFir(session, javaTypeParameterStack) }
|
||||
for ((index, valueParameter) in javaConstructor.valueParameters.withIndex()) {
|
||||
valueParameters += valueParameter.toFirValueParameter(session, moduleData, index, javaTypeParameterStack)
|
||||
valueParameters += valueParameter.toFirValueParameter(session, constructorSymbol, moduleData, index, javaTypeParameterStack)
|
||||
}
|
||||
} else {
|
||||
annotationBuilder = { emptyList() }
|
||||
|
||||
+5
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusIm
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
|
||||
import org.jetbrains.kotlin.fir.types.ConeSimpleKotlinType
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
@@ -40,6 +41,7 @@ class FirJavaValueParameter @FirImplementationDetail constructor(
|
||||
override val symbol: FirValueParameterSymbol,
|
||||
annotationBuilder: () -> List<FirAnnotation>,
|
||||
override var defaultValue: FirExpression?,
|
||||
override val containingFunctionSymbol: FirFunctionSymbol<*>,
|
||||
override val isVararg: Boolean,
|
||||
) : FirValueParameter() {
|
||||
init {
|
||||
@@ -197,6 +199,7 @@ class FirJavaValueParameterBuilder {
|
||||
lateinit var name: Name
|
||||
lateinit var annotationBuilder: () -> List<FirAnnotation>
|
||||
var defaultValue: FirExpression? = null
|
||||
lateinit var containingFunctionSymbol: FirFunctionSymbol<*>
|
||||
var isVararg: Boolean by Delegates.notNull()
|
||||
var isFromSource: Boolean by Delegates.notNull()
|
||||
|
||||
@@ -213,6 +216,7 @@ class FirJavaValueParameterBuilder {
|
||||
symbol = FirValueParameterSymbol(name),
|
||||
annotationBuilder,
|
||||
defaultValue,
|
||||
containingFunctionSymbol,
|
||||
isVararg,
|
||||
)
|
||||
}
|
||||
@@ -237,6 +241,7 @@ inline fun buildJavaValueParameterCopy(original: FirValueParameter, init: FirJav
|
||||
val annotations = original.annotations
|
||||
copyBuilder.annotationBuilder = { annotations }
|
||||
copyBuilder.defaultValue = original.defaultValue
|
||||
copyBuilder.containingFunctionSymbol = original.containingFunctionSymbol
|
||||
copyBuilder.isVararg = original.isVararg
|
||||
return copyBuilder.apply(init).build()
|
||||
}
|
||||
|
||||
+23
-22
@@ -236,29 +236,12 @@ class FirSignatureEnhancement(
|
||||
)
|
||||
}
|
||||
|
||||
val newValueParameters = firMethod.valueParameters.zip(enhancedValueParameterTypes) { valueParameter, enhancedReturnType ->
|
||||
valueParameter.defaultValue?.replaceTypeRef(enhancedReturnType)
|
||||
|
||||
buildValueParameter {
|
||||
source = valueParameter.source
|
||||
moduleData = this@FirSignatureEnhancement.moduleData
|
||||
origin = FirDeclarationOrigin.Enhancement
|
||||
returnTypeRef = enhancedReturnType
|
||||
this.name = valueParameter.name
|
||||
symbol = FirValueParameterSymbol(this.name)
|
||||
defaultValue = valueParameter.defaultValue
|
||||
isCrossinline = valueParameter.isCrossinline
|
||||
isNoinline = valueParameter.isNoinline
|
||||
isVararg = valueParameter.isVararg
|
||||
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
|
||||
annotations += valueParameter.annotations
|
||||
}
|
||||
}
|
||||
val functionSymbol: FirFunctionSymbol<*>
|
||||
var isJavaRecordComponent = false
|
||||
|
||||
val function = when (firMethod) {
|
||||
is FirJavaConstructor -> {
|
||||
val symbol = FirConstructorSymbol(methodId)
|
||||
val symbol = FirConstructorSymbol(methodId).also { functionSymbol = it }
|
||||
if (firMethod.isPrimary) {
|
||||
FirPrimaryConstructorBuilder().apply {
|
||||
returnTypeRef = newReturnTypeRef
|
||||
@@ -294,7 +277,6 @@ class FirSignatureEnhancement(
|
||||
moduleData = this@FirSignatureEnhancement.moduleData
|
||||
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
|
||||
origin = FirDeclarationOrigin.Enhancement
|
||||
this.valueParameters += newValueParameters
|
||||
this.typeParameters += firMethod.typeParameters
|
||||
}
|
||||
}
|
||||
@@ -315,9 +297,8 @@ class FirSignatureEnhancement(
|
||||
|
||||
this.name = name!!
|
||||
status = firMethod.status
|
||||
symbol = FirNamedFunctionSymbol(methodId)
|
||||
symbol = FirNamedFunctionSymbol(methodId).also { functionSymbol = it }
|
||||
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
|
||||
valueParameters += newValueParameters
|
||||
typeParameters += firMethod.typeParameters
|
||||
dispatchReceiverType = firMethod.dispatchReceiverType
|
||||
attributes = firMethod.attributes.copy()
|
||||
@@ -325,6 +306,26 @@ class FirSignatureEnhancement(
|
||||
}
|
||||
else -> throw AssertionError("Unknown Java method to enhance: ${firMethod.render()}")
|
||||
}.apply {
|
||||
val newValueParameters = firMethod.valueParameters.zip(enhancedValueParameterTypes) { valueParameter, enhancedReturnType ->
|
||||
valueParameter.defaultValue?.replaceTypeRef(enhancedReturnType)
|
||||
|
||||
buildValueParameter {
|
||||
source = valueParameter.source
|
||||
containingFunctionSymbol = functionSymbol
|
||||
moduleData = this@FirSignatureEnhancement.moduleData
|
||||
origin = FirDeclarationOrigin.Enhancement
|
||||
returnTypeRef = enhancedReturnType
|
||||
this.name = valueParameter.name
|
||||
symbol = FirValueParameterSymbol(this.name)
|
||||
defaultValue = valueParameter.defaultValue
|
||||
isCrossinline = valueParameter.isCrossinline
|
||||
isNoinline = valueParameter.isNoinline
|
||||
isVararg = valueParameter.isVararg
|
||||
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
|
||||
annotations += valueParameter.annotations
|
||||
}
|
||||
}
|
||||
this.valueParameters += newValueParameters
|
||||
annotations += firMethod.annotations
|
||||
deprecationsProvider = annotations.getDeprecationsProviderFromAnnotations(fromJava = true, session.firCachesFactory)
|
||||
}.build().apply {
|
||||
|
||||
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
|
||||
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.expressions.builder.*
|
||||
import org.jetbrains.kotlin.fir.java.declarations.FirJavaMethod
|
||||
import org.jetbrains.kotlin.fir.java.declarations.buildJavaValueParameter
|
||||
import org.jetbrains.kotlin.fir.references.builder.buildErrorNamedReference
|
||||
import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference
|
||||
@@ -22,6 +23,7 @@ import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedReferenceError
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.getClassDeclaredPropertySymbols
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
import org.jetbrains.kotlin.fir.types.builder.buildErrorTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
|
||||
@@ -53,12 +55,17 @@ internal fun MutableList<FirAnnotation>.addFromJava(
|
||||
}
|
||||
|
||||
internal fun JavaValueParameter.toFirValueParameter(
|
||||
session: FirSession, moduleData: FirModuleData, index: Int, javaTypeParameterStack: JavaTypeParameterStack
|
||||
session: FirSession,
|
||||
functionSymbol: FirFunctionSymbol<*>,
|
||||
moduleData: FirModuleData,
|
||||
index: Int,
|
||||
javaTypeParameterStack: JavaTypeParameterStack,
|
||||
): FirValueParameter {
|
||||
return buildJavaValueParameter {
|
||||
source = (this@toFirValueParameter as? JavaElementImpl<*>)?.psi?.toKtPsiSourceElement()
|
||||
isFromSource = this@toFirValueParameter.isFromSource
|
||||
this.moduleData = moduleData
|
||||
containingFunctionSymbol = functionSymbol
|
||||
name = this@toFirValueParameter.name ?: Name.identifier("p$index")
|
||||
returnTypeRef = type.toFirJavaTypeRef(session, javaTypeParameterStack)
|
||||
isVararg = this@toFirValueParameter.isVararg
|
||||
|
||||
Reference in New Issue
Block a user