[K2] Allow to evaluate constant property in FIR constant transformer
This commit is contained in:
+8
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.serialization.constant
|
|||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
|
import org.jetbrains.kotlin.fir.declarations.FirEnumEntry
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.utils.isConst
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.builder.buildAnnotationArgumentMapping
|
import org.jetbrains.kotlin.fir.expressions.builder.buildAnnotationArgumentMapping
|
||||||
import org.jetbrains.kotlin.fir.expressions.builder.buildAnnotationCall
|
import org.jetbrains.kotlin.fir.expressions.builder.buildAnnotationCall
|
||||||
@@ -16,6 +17,7 @@ import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol
|
|||||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirArrayOfCallTransformer
|
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirArrayOfCallTransformer
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirArrayOfCallTransformer.Companion.isArrayOfCall
|
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirArrayOfCallTransformer.Companion.isArrayOfCall
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||||
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
||||||
import org.jetbrains.kotlin.fir.types.classId
|
import org.jetbrains.kotlin.fir.types.classId
|
||||||
import org.jetbrains.kotlin.fir.types.coneTypeSafe
|
import org.jetbrains.kotlin.fir.types.coneTypeSafe
|
||||||
@@ -108,6 +110,10 @@ private abstract class FirToConstantValueTransformer(
|
|||||||
EnumValue(classId, (symbol.fir as FirEnumEntry).name)
|
EnumValue(classId, (symbol.fir as FirEnumEntry).name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
symbol is FirPropertySymbol -> {
|
||||||
|
if (symbol.fir.isConst) symbol.fir.initializer?.accept(this, data) else null
|
||||||
|
}
|
||||||
|
|
||||||
symbol is FirConstructorSymbol -> {
|
symbol is FirConstructorSymbol -> {
|
||||||
val constructorCall = qualifiedAccessExpression as FirFunctionCall
|
val constructorCall = qualifiedAccessExpression as FirFunctionCall
|
||||||
val constructedClassSymbol = symbol.containingClassLookupTag()?.toFirRegularClassSymbol(data) ?: return null
|
val constructedClassSymbol = symbol.containingClassLookupTag()?.toFirRegularClassSymbol(data) ?: return null
|
||||||
@@ -220,6 +226,8 @@ internal object FirToConstantValueChecker : FirDefaultVisitor<Boolean, FirSessio
|
|||||||
return when {
|
return when {
|
||||||
symbol.fir is FirEnumEntry -> symbol.fir.returnTypeRef.coneTypeSafe<ConeClassLikeType>()?.classId != null
|
symbol.fir is FirEnumEntry -> symbol.fir.returnTypeRef.coneTypeSafe<ConeClassLikeType>()?.classId != null
|
||||||
|
|
||||||
|
symbol is FirPropertySymbol -> symbol.fir.isConst
|
||||||
|
|
||||||
symbol is FirConstructorSymbol -> {
|
symbol is FirConstructorSymbol -> {
|
||||||
symbol.containingClassLookupTag()?.toFirRegularClassSymbol(data)?.classKind == ClassKind.ANNOTATION_CLASS
|
symbol.containingClassLookupTag()?.toFirRegularClassSymbol(data)?.classKind == ClassKind.ANNOTATION_CLASS
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user