[FIR] introduce FirValueParameter.containingFunctionSymbol

^KT-55034 fixed
This commit is contained in:
Ilya Kirillov
2022-07-20 16:01:48 +02:00
parent c8e3103af9
commit 7781ad67d4
39 changed files with 175 additions and 76 deletions
@@ -16,10 +16,7 @@ import org.jetbrains.kotlin.fir.declarations.utils.isInner
import org.jetbrains.kotlin.fir.java.declarations.*
import org.jetbrains.kotlin.fir.resolve.defaultType
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.toEffectiveVisibility
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
import org.jetbrains.kotlin.fir.types.jvm.FirJavaTypeRef
@@ -47,11 +44,12 @@ abstract class AbstractConstructorGeneratorPart<T : ConeLombokAnnotations.Constr
val staticName = constructorInfo.staticName?.let { Name.identifier(it) }
val substitutor: JavaTypeSubstitutor
val constructorSymbol: FirFunctionSymbol<*>
val builder = if (staticName == null) {
FirJavaConstructorBuilder().apply {
symbol = FirConstructorSymbol(classSymbol.classId.callableIdForConstructor())
symbol = FirConstructorSymbol(classSymbol.classId.callableIdForConstructor()).also { constructorSymbol = it }
classSymbol.fir.typeParameters.mapTo(typeParameters) {
buildConstructedClassTypeParameterRef { symbol = it.symbol }
buildConstructedClassTypeParameterRef { this.symbol = it.symbol }
}
substitutor = JavaTypeSubstitutor.Empty
returnTypeRef = buildResolvedTypeRef {
@@ -65,13 +63,13 @@ abstract class AbstractConstructorGeneratorPart<T : ConeLombokAnnotations.Constr
} else {
FirJavaMethodBuilder().apply {
name = staticName
val methodSymbol = FirNamedFunctionSymbol(CallableId(classSymbol.classId, staticName))
val methodSymbol = FirNamedFunctionSymbol(CallableId(classSymbol.classId, staticName)).also { constructorSymbol = it }
symbol = methodSymbol
val classTypeParameterSymbols = classSymbol.fir.typeParameters.map { it.symbol }
classTypeParameterSymbols.mapTo(typeParameters) {
buildTypeParameterCopy(it.fir) {
symbol = FirTypeParameterSymbol()
this.symbol = FirTypeParameterSymbol()
containingDeclarationSymbol = methodSymbol
}
}
@@ -128,6 +126,7 @@ abstract class AbstractConstructorGeneratorPart<T : ConeLombokAnnotations.Constr
}
else -> typeRef
}
containingFunctionSymbol = constructorSymbol
name = field.name
annotationBuilder = { emptyList() }
isVararg = false
@@ -314,6 +314,7 @@ fun FirClassSymbol<*>.createJavaMethod(
this.valueParameters += buildJavaValueParameter {
moduleData = this@createJavaMethod.moduleData
this.returnTypeRef = valueParameter.typeRef
containingFunctionSymbol = this@buildJavaMethod.symbol
this.name = valueParameter.name
annotationBuilder = { emptyList() }
isVararg = false
@@ -83,6 +83,7 @@ class SetterGenerator(session: FirSession) : FirDeclarationGenerationExtension(s
valueParameters += buildJavaValueParameter {
moduleData = field.moduleData
containingFunctionSymbol = this@buildJavaMethod.symbol
returnTypeRef = field.returnTypeRef
name = field.name
annotationBuilder = { emptyList() }
@@ -73,6 +73,7 @@ class WithGenerator(session: FirSession) : FirDeclarationGenerationExtension(ses
valueParameters += buildJavaValueParameter {
moduleData = field.moduleData
containingFunctionSymbol = this@buildJavaMethod.symbol
returnTypeRef = field.returnTypeRef
name = field.name
annotationBuilder = { emptyList() }