[FIR] Use builder to create synthetic properties
This commit is contained in:
+7
-5
@@ -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.builder.buildValueParameter
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.*
|
import org.jetbrains.kotlin.fir.declarations.impl.*
|
||||||
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.expressions.FirConstKind
|
import org.jetbrains.kotlin.fir.expressions.FirConstKind
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.builder.buildConstExpression
|
import org.jetbrains.kotlin.fir.expressions.builder.buildConstExpression
|
||||||
@@ -110,11 +111,12 @@ class JavaClassEnhancementScope(
|
|||||||
val enhancedFunctionSymbol = enhanceMethod(
|
val enhancedFunctionSymbol = enhanceMethod(
|
||||||
firElement.getter.delegate, accessorSymbol.accessorId, accessorSymbol.accessorId.callableName
|
firElement.getter.delegate, accessorSymbol.accessorId, accessorSymbol.accessorId.callableName
|
||||||
)
|
)
|
||||||
val enhancedProperty = FirSyntheticProperty(
|
return buildSyntheticProperty {
|
||||||
session, name, FirAccessorSymbol(accessorSymbol.callableId, accessorSymbol.accessorId),
|
session = this@JavaClassEnhancementScope.session
|
||||||
enhancedFunctionSymbol.fir as FirSimpleFunction
|
this.name = name
|
||||||
)
|
symbol = FirAccessorSymbol(accessorSymbol.callableId, accessorSymbol.accessorId)
|
||||||
return enhancedProperty.symbol
|
delegateGetter = enhancedFunctionSymbol.fir as FirSimpleFunction
|
||||||
|
}.symbol
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
if (original is FirPropertySymbol || original is FirAccessorSymbol) return original
|
if (original is FirPropertySymbol || original is FirAccessorSymbol) return original
|
||||||
|
|||||||
+6
-5
@@ -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.FirSimpleFunctionBuilder
|
||||||
import org.jetbrains.kotlin.fir.declarations.builder.FirValueParameterBuilder
|
import org.jetbrains.kotlin.fir.declarations.builder.FirValueParameterBuilder
|
||||||
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.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack
|
import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack
|
||||||
import org.jetbrains.kotlin.fir.java.declarations.*
|
import org.jetbrains.kotlin.fir.java.declarations.*
|
||||||
@@ -66,15 +67,15 @@ class JavaClassUseSiteMemberScope(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
overrideCandidates += functionSymbol
|
overrideCandidates += functionSymbol
|
||||||
val accessorProperty = FirSyntheticProperty(
|
return buildSyntheticProperty {
|
||||||
session, syntheticPropertyName,
|
session = this@JavaClassUseSiteMemberScope.session
|
||||||
|
name = syntheticPropertyName
|
||||||
symbol = FirAccessorSymbol(
|
symbol = FirAccessorSymbol(
|
||||||
accessorId = functionSymbol.callableId,
|
accessorId = functionSymbol.callableId,
|
||||||
callableId = CallableId(functionSymbol.callableId.packageName, functionSymbol.callableId.className, syntheticPropertyName)
|
callableId = CallableId(functionSymbol.callableId.packageName, functionSymbol.callableId.className, syntheticPropertyName)
|
||||||
),
|
)
|
||||||
delegateGetter = fir
|
delegateGetter = fir
|
||||||
)
|
}.symbol
|
||||||
return accessorProperty.symbol
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun processAccessorFunctionsAndPropertiesByName(
|
private fun processAccessorFunctionsAndPropertiesByName(
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.fir.FirSession
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
||||||
import org.jetbrains.kotlin.fir.declarations.isStatic
|
import org.jetbrains.kotlin.fir.declarations.isStatic
|
||||||
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.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.symbols.CallableId
|
import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||||
import org.jetbrains.kotlin.fir.symbols.StandardClassIds
|
import org.jetbrains.kotlin.fir.symbols.StandardClassIds
|
||||||
@@ -65,15 +66,16 @@ class FirSyntheticPropertiesScope(
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
val property = FirSyntheticProperty(
|
val property = buildSyntheticProperty {
|
||||||
session, propertyName,
|
session = this@FirSyntheticPropertiesScope.session
|
||||||
|
name = propertyName
|
||||||
symbol = SyntheticPropertySymbol(
|
symbol = SyntheticPropertySymbol(
|
||||||
accessorId = getterSymbol.callableId,
|
accessorId = getterSymbol.callableId,
|
||||||
callableId = CallableId(getterSymbol.callableId.packageName, getterSymbol.callableId.className, propertyName)
|
callableId = CallableId(getterSymbol.callableId.packageName, getterSymbol.callableId.className, propertyName)
|
||||||
),
|
)
|
||||||
delegateGetter = getter,
|
delegateGetter = getter
|
||||||
delegateSetter = matchingSetter
|
delegateSetter = matchingSetter
|
||||||
)
|
}
|
||||||
processor(property.symbol)
|
processor(property.symbol)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+7
-4
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
|
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
|
||||||
import org.jetbrains.kotlin.fir.declarations.builder.*
|
import org.jetbrains.kotlin.fir.declarations.builder.*
|
||||||
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.resolve.ScopeSession
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
import org.jetbrains.kotlin.fir.resolve.substitution.ChainedSubstitutor
|
import org.jetbrains.kotlin.fir.resolve.substitution.ChainedSubstitutor
|
||||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||||
@@ -333,10 +334,12 @@ class FirClassSubstitutionScope(
|
|||||||
val function = createFakeOverrideFunction(
|
val function = createFakeOverrideFunction(
|
||||||
functionSymbol, session, baseProperty.getter.delegate, null, newReturnType, newParameterTypes
|
functionSymbol, session, baseProperty.getter.delegate, null, newReturnType, newParameterTypes
|
||||||
)
|
)
|
||||||
val property = FirSyntheticProperty(
|
return buildSyntheticProperty {
|
||||||
session, baseProperty.name, FirAccessorSymbol(baseSymbol.callableId, baseSymbol.accessorId), function
|
this.session = session
|
||||||
)
|
name = baseProperty.name
|
||||||
return property.symbol
|
symbol = FirAccessorSymbol(baseSymbol.callableId, baseSymbol.accessorId)
|
||||||
|
delegateGetter = function
|
||||||
|
}.symbol
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-15
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
|||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
||||||
|
|
||||||
class FirSyntheticProperty private constructor(
|
class FirSyntheticProperty(
|
||||||
override val session: FirSession,
|
override val session: FirSession,
|
||||||
override val returnTypeRef: FirTypeRef,
|
override val returnTypeRef: FirTypeRef,
|
||||||
override val name: Name,
|
override val name: Name,
|
||||||
@@ -37,20 +37,6 @@ class FirSyntheticProperty private constructor(
|
|||||||
symbol.bind(this)
|
symbol.bind(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(
|
|
||||||
session: FirSession,
|
|
||||||
name: Name,
|
|
||||||
symbol: FirAccessorSymbol,
|
|
||||||
delegateGetter: FirSimpleFunction,
|
|
||||||
delegateSetter: FirSimpleFunction? = null
|
|
||||||
) : this(
|
|
||||||
session, delegateGetter.returnTypeRef, name, isVar = delegateSetter != null, symbol = symbol,
|
|
||||||
status = FirDeclarationStatusImpl(delegateGetter.visibility, delegateGetter.modality),
|
|
||||||
resolvePhase = delegateGetter.resolvePhase,
|
|
||||||
getter = FirSyntheticPropertyAccessor(delegateGetter, isGetter = true),
|
|
||||||
setter = delegateSetter?.let { FirSyntheticPropertyAccessor(it, isGetter = false) }
|
|
||||||
)
|
|
||||||
|
|
||||||
override val source: FirSourceElement?
|
override val source: FirSourceElement?
|
||||||
get() = null
|
get() = null
|
||||||
|
|
||||||
|
|||||||
+33
@@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.fir.declarations.synthetic
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.modality
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.visibility
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirAccessorSymbol
|
||||||
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
|
class FirSyntheticPropertyBuilder {
|
||||||
|
lateinit var session: FirSession
|
||||||
|
lateinit var name: Name
|
||||||
|
lateinit var symbol: FirAccessorSymbol
|
||||||
|
lateinit var delegateGetter: FirSimpleFunction
|
||||||
|
var delegateSetter: FirSimpleFunction? = null
|
||||||
|
|
||||||
|
fun build(): FirSyntheticProperty = FirSyntheticProperty(
|
||||||
|
session, delegateGetter.returnTypeRef, name, isVar = delegateSetter != null, symbol = symbol,
|
||||||
|
status = FirDeclarationStatusImpl(delegateGetter.visibility, delegateGetter.modality),
|
||||||
|
resolvePhase = delegateGetter.resolvePhase,
|
||||||
|
getter = FirSyntheticPropertyAccessor(delegateGetter, isGetter = true),
|
||||||
|
setter = delegateSetter?.let { FirSyntheticPropertyAccessor(it, isGetter = false) }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun buildSyntheticProperty(f: FirSyntheticPropertyBuilder.() -> Unit): FirSyntheticProperty =
|
||||||
|
FirSyntheticPropertyBuilder().apply { f() }.build()
|
||||||
Reference in New Issue
Block a user