[FIR] Use builder to create synthetic properties

This commit is contained in:
Mikhail Glukhikh
2020-02-10 12:32:27 +03:00
parent 9a80850700
commit d19d52292e
6 changed files with 61 additions and 34 deletions
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.fir.declarations.builder.FirSimpleFunctionBuilder
import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter
import org.jetbrains.kotlin.fir.declarations.impl.*
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
import org.jetbrains.kotlin.fir.declarations.synthetic.buildSyntheticProperty
import org.jetbrains.kotlin.fir.expressions.FirConstKind
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.builder.buildConstExpression
@@ -110,11 +111,12 @@ class JavaClassEnhancementScope(
val enhancedFunctionSymbol = enhanceMethod(
firElement.getter.delegate, accessorSymbol.accessorId, accessorSymbol.accessorId.callableName
)
val enhancedProperty = FirSyntheticProperty(
session, name, FirAccessorSymbol(accessorSymbol.callableId, accessorSymbol.accessorId),
enhancedFunctionSymbol.fir as FirSimpleFunction
)
return enhancedProperty.symbol
return buildSyntheticProperty {
session = this@JavaClassEnhancementScope.session
this.name = name
symbol = FirAccessorSymbol(accessorSymbol.callableId, accessorSymbol.accessorId)
delegateGetter = enhancedFunctionSymbol.fir as FirSimpleFunction
}.symbol
}
else -> {
if (original is FirPropertySymbol || original is FirAccessorSymbol) return original
@@ -10,6 +10,7 @@ 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.declarations.synthetic.buildSyntheticProperty
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack
import org.jetbrains.kotlin.fir.java.declarations.*
@@ -66,15 +67,15 @@ class JavaClassUseSiteMemberScope(
}
}
overrideCandidates += functionSymbol
val accessorProperty = FirSyntheticProperty(
session, syntheticPropertyName,
return buildSyntheticProperty {
session = this@JavaClassUseSiteMemberScope.session
name = syntheticPropertyName
symbol = FirAccessorSymbol(
accessorId = functionSymbol.callableId,
callableId = CallableId(functionSymbol.callableId.packageName, functionSymbol.callableId.className, syntheticPropertyName)
),
)
delegateGetter = fir
)
return accessorProperty.symbol
}.symbol
}
private fun processAccessorFunctionsAndPropertiesByName(