FIR: transform types inside functions & properties
This commit is contained in:
@@ -28,3 +28,7 @@ fun <T : FirElement, D> MutableList<T>.transformInplace(transformer: FirTransfor
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun <T : FirElement, D> T.transformSingle(transformer: FirTransformer<D>, data: D): T {
|
||||
return this.transform<T, D>(transformer, data).single
|
||||
}
|
||||
+14
-3
@@ -8,9 +8,12 @@ package org.jetbrains.kotlin.fir.declarations.impl
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirCallableMember
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.types.FirType
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
abstract class FirAbstractCallableMember(
|
||||
@@ -20,6 +23,14 @@ abstract class FirAbstractCallableMember(
|
||||
visibility: Visibility,
|
||||
modality: Modality,
|
||||
final override val isOverride: Boolean,
|
||||
final override val receiverType: FirType?,
|
||||
final override val returnType: FirType
|
||||
) : FirAbstractMemberDeclaration(session, psi, name, visibility, modality), FirCallableMember
|
||||
final override var receiverType: FirType?,
|
||||
final override var returnType: FirType
|
||||
) : FirAbstractMemberDeclaration(session, psi, name, visibility, modality), FirCallableMember {
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
receiverType = receiverType?.transformSingle(transformer, data)
|
||||
returnType = returnType.transformSingle(transformer, data)
|
||||
|
||||
return this
|
||||
}
|
||||
}
|
||||
+9
@@ -6,10 +6,13 @@
|
||||
package org.jetbrains.kotlin.fir.declarations.impl
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBody
|
||||
import org.jetbrains.kotlin.fir.transformInplace
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
|
||||
abstract class FirAbstractFunction(
|
||||
session: FirSession,
|
||||
@@ -17,4 +20,10 @@ abstract class FirAbstractFunction(
|
||||
final override val body: FirBody?
|
||||
) : FirAbstractAnnotatedDeclaration(session, psi), FirFunction {
|
||||
final override val valueParameters = mutableListOf<FirValueParameter>()
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
valueParameters.transformInplace(transformer, data)
|
||||
|
||||
return this
|
||||
}
|
||||
}
|
||||
+44
-14
@@ -7,32 +7,62 @@ package org.jetbrains.kotlin.fir.declarations.impl
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
|
||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBody
|
||||
import org.jetbrains.kotlin.fir.transformInplace
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.types.FirType
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirUnitType
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
|
||||
class FirDefaultPropertyAccessor(
|
||||
override val session: FirSession,
|
||||
override val psi: PsiElement?,
|
||||
override val isGetter: Boolean,
|
||||
propertyType: FirType
|
||||
abstract class FirDefaultPropertyAccessor(
|
||||
final override val session: FirSession,
|
||||
final override val psi: PsiElement?,
|
||||
final override val isGetter: Boolean
|
||||
) : FirPropertyAccessor {
|
||||
override val visibility =
|
||||
final override val visibility =
|
||||
Visibilities.UNKNOWN
|
||||
|
||||
override val valueParameters: List<FirValueParameter> =
|
||||
if (isGetter) emptyList() else listOf(FirDefaultSetterValueParameter(session, psi, propertyType))
|
||||
|
||||
override val returnType: FirType =
|
||||
if (isGetter) propertyType else FirUnitType(session, psi)
|
||||
|
||||
override val body: FirBody? =
|
||||
final override val body: FirBody? =
|
||||
null
|
||||
|
||||
override val annotations: List<FirAnnotationCall>
|
||||
final override val annotations: List<FirAnnotationCall>
|
||||
get() = emptyList()
|
||||
}
|
||||
|
||||
class FirDefaultPropertyGetter(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
propertyType: FirType
|
||||
): FirDefaultPropertyAccessor(session, psi, isGetter = true) {
|
||||
override val valueParameters: List<FirValueParameter> = emptyList()
|
||||
|
||||
override var returnType: FirType = propertyType
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
returnType = returnType.transformSingle(transformer, data)
|
||||
|
||||
return this
|
||||
}
|
||||
}
|
||||
|
||||
class FirDefaultPropertySetter(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
propertyType: FirType
|
||||
): FirDefaultPropertyAccessor(session, psi, isGetter = false) {
|
||||
override val valueParameters = mutableListOf(FirDefaultSetterValueParameter(session, psi, propertyType))
|
||||
|
||||
override var returnType: FirType = FirUnitType(session, psi)
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
valueParameters.transformInplace(transformer, data)
|
||||
returnType = returnType.transformSingle(transformer, data)
|
||||
|
||||
return this
|
||||
}
|
||||
}
|
||||
+10
-1
@@ -6,16 +6,19 @@
|
||||
package org.jetbrains.kotlin.fir.declarations.impl
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.types.FirType
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
class FirDefaultSetterValueParameter(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
override val returnType: FirType
|
||||
override var returnType: FirType
|
||||
) : FirAbstractNamedAnnotatedDeclaration(session, psi, name), FirValueParameter {
|
||||
override val isCrossinline = false
|
||||
|
||||
@@ -25,6 +28,12 @@ class FirDefaultSetterValueParameter(
|
||||
|
||||
override val defaultValue: FirExpression? = null
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
returnType = returnType.transformSingle(transformer, data)
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
companion object {
|
||||
val name = Name.identifier("value")
|
||||
}
|
||||
|
||||
+9
@@ -8,11 +8,14 @@ package org.jetbrains.kotlin.fir.declarations.impl
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirNamedFunction
|
||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBody
|
||||
import org.jetbrains.kotlin.fir.transformInplace
|
||||
import org.jetbrains.kotlin.fir.types.FirType
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
class FirMemberFunctionImpl(
|
||||
@@ -33,4 +36,10 @@ class FirMemberFunctionImpl(
|
||||
) : FirAbstractCallableMember(session, psi, name, visibility, modality, isOverride, receiverType, returnType),
|
||||
FirNamedFunction {
|
||||
override val valueParameters = mutableListOf<FirValueParameter>()
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
valueParameters.transformInplace(transformer, data)
|
||||
|
||||
return super<FirAbstractCallableMember>.transformChildren(transformer, data)
|
||||
}
|
||||
}
|
||||
+13
-3
@@ -8,11 +8,14 @@ package org.jetbrains.kotlin.fir.declarations.impl
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.types.FirType
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
class FirMemberPropertyImpl(
|
||||
@@ -27,8 +30,15 @@ class FirMemberPropertyImpl(
|
||||
returnType: FirType,
|
||||
override val isVar: Boolean,
|
||||
override val initializer: FirExpression?,
|
||||
override val getter: FirPropertyAccessor,
|
||||
override val setter: FirPropertyAccessor,
|
||||
override var getter: FirPropertyAccessor,
|
||||
override var setter: FirPropertyAccessor,
|
||||
override val delegate: FirExpression?
|
||||
) : FirAbstractCallableMember(session, psi, name, visibility, modality, isOverride, receiverType, returnType),
|
||||
FirProperty
|
||||
FirProperty {
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
getter = getter.transformSingle(transformer, data)
|
||||
setter = setter.transformSingle(transformer, data)
|
||||
|
||||
return super<FirAbstractCallableMember>.transformChildren(transformer, data)
|
||||
}
|
||||
}
|
||||
+11
-2
@@ -7,16 +7,25 @@ package org.jetbrains.kotlin.fir.declarations.impl
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBody
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.types.FirType
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
|
||||
class FirPropertyAccessorImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
override val isGetter: Boolean,
|
||||
override val visibility: Visibility,
|
||||
override val returnType: FirType,
|
||||
override var returnType: FirType,
|
||||
body: FirBody?
|
||||
) : FirAbstractFunction(session, psi, body), FirPropertyAccessor
|
||||
) : FirAbstractFunction(session, psi, body), FirPropertyAccessor {
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
returnType = returnType.transformSingle(transformer, data)
|
||||
|
||||
return super<FirAbstractFunction>.transformChildren(transformer, data)
|
||||
}
|
||||
}
|
||||
+11
-2
@@ -6,20 +6,29 @@
|
||||
package org.jetbrains.kotlin.fir.declarations.impl
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.types.FirType
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
|
||||
class FirValueParameterImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
val isProperty: Boolean,
|
||||
name: Name,
|
||||
override val returnType: FirType,
|
||||
override var returnType: FirType,
|
||||
override val defaultValue: FirExpression?,
|
||||
override val isCrossinline: Boolean,
|
||||
override val isNoinline: Boolean,
|
||||
override val isVararg: Boolean
|
||||
) : FirAbstractNamedAnnotatedDeclaration(session, psi, name), FirValueParameter
|
||||
) : FirAbstractNamedAnnotatedDeclaration(session, psi, name), FirValueParameter {
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
returnType = returnType.transformSingle(transformer, data)
|
||||
|
||||
return this
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user