[FIR] Support IntegerLiteralTypes
This commit is contained in:
@@ -222,7 +222,7 @@ private fun ConeKotlinType.mapToCanonicalString(session: FirSession): String {
|
||||
return when (this) {
|
||||
is ConeClassLikeType -> mapToCanonicalString(session)
|
||||
is ConeTypeVariableType, is ConeFlexibleType, is ConeCapturedType,
|
||||
is ConeDefinitelyNotNullType, is ConeIntersectionType, is ConeStubType ->
|
||||
is ConeDefinitelyNotNullType, is ConeIntersectionType, is ConeStubType, is ConeIntegerLiteralType ->
|
||||
error("Unexpected type: $this [${this::class}]")
|
||||
is ConeLookupTagBasedType -> lookupTag.name.asString()
|
||||
}
|
||||
|
||||
@@ -222,7 +222,7 @@ private fun ConeKotlinType.mapToCanonicalString(session: FirSession): String {
|
||||
return when (this) {
|
||||
is ConeClassLikeType -> mapToCanonicalString(session)
|
||||
is ConeTypeVariableType, is ConeFlexibleType, is ConeCapturedType,
|
||||
is ConeDefinitelyNotNullType, is ConeIntersectionType, is ConeStubType ->
|
||||
is ConeDefinitelyNotNullType, is ConeIntersectionType, is ConeStubType, is ConeIntegerLiteralType ->
|
||||
error("Unexpected type: $this [${this::class}]")
|
||||
is ConeLookupTagBasedType -> lookupTag.name.asString()
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
|
||||
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
|
||||
import org.jetbrains.kotlin.fir.types.jvm.FirJavaTypeRef
|
||||
import org.jetbrains.kotlin.ir.expressions.IrConstKind
|
||||
import org.jetbrains.kotlin.fir.expressions.FirConstKind
|
||||
import org.jetbrains.kotlin.load.java.structure.*
|
||||
import org.jetbrains.kotlin.load.java.structure.impl.JavaElementImpl
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
@@ -275,7 +275,7 @@ private fun JavaAnnotationArgument.toFirExpression(
|
||||
}
|
||||
|
||||
// TODO: use kind here
|
||||
private fun <T> List<T>.createArrayOfCall(session: FirSession, @Suppress("UNUSED_PARAMETER") kind: IrConstKind<T>): FirArrayOfCall {
|
||||
private fun <T> List<T>.createArrayOfCall(session: FirSession, @Suppress("UNUSED_PARAMETER") kind: FirConstKind<T>): FirArrayOfCall {
|
||||
return FirArrayOfCallImpl(null).apply {
|
||||
for (element in this@createArrayOfCall) {
|
||||
arguments += element.createConstant(session)
|
||||
@@ -285,24 +285,24 @@ private fun <T> List<T>.createArrayOfCall(session: FirSession, @Suppress("UNUSED
|
||||
|
||||
internal fun Any?.createConstant(session: FirSession): FirExpression {
|
||||
return when (this) {
|
||||
is Byte -> FirConstExpressionImpl(null, IrConstKind.Byte, this)
|
||||
is Short -> FirConstExpressionImpl(null, IrConstKind.Short, this)
|
||||
is Int -> FirConstExpressionImpl(null, IrConstKind.Int, this)
|
||||
is Long -> FirConstExpressionImpl(null, IrConstKind.Long, this)
|
||||
is Char -> FirConstExpressionImpl(null, IrConstKind.Char, this)
|
||||
is Float -> FirConstExpressionImpl(null, IrConstKind.Float, this)
|
||||
is Double -> FirConstExpressionImpl(null, IrConstKind.Double, this)
|
||||
is Boolean -> FirConstExpressionImpl(null, IrConstKind.Boolean, this)
|
||||
is String -> FirConstExpressionImpl(null, IrConstKind.String, this)
|
||||
is ByteArray -> toList().createArrayOfCall(session, IrConstKind.Byte)
|
||||
is ShortArray -> toList().createArrayOfCall(session, IrConstKind.Short)
|
||||
is IntArray -> toList().createArrayOfCall(session, IrConstKind.Int)
|
||||
is LongArray -> toList().createArrayOfCall(session, IrConstKind.Long)
|
||||
is CharArray -> toList().createArrayOfCall(session, IrConstKind.Char)
|
||||
is FloatArray -> toList().createArrayOfCall(session, IrConstKind.Float)
|
||||
is DoubleArray -> toList().createArrayOfCall(session, IrConstKind.Double)
|
||||
is BooleanArray -> toList().createArrayOfCall(session, IrConstKind.Boolean)
|
||||
null -> FirConstExpressionImpl(null, IrConstKind.Null, null)
|
||||
is Byte -> FirConstExpressionImpl(null, FirConstKind.Byte, this)
|
||||
is Short -> FirConstExpressionImpl(null, FirConstKind.Short, this)
|
||||
is Int -> FirConstExpressionImpl(null, FirConstKind.Int, this)
|
||||
is Long -> FirConstExpressionImpl(null, FirConstKind.Long, this)
|
||||
is Char -> FirConstExpressionImpl(null, FirConstKind.Char, this)
|
||||
is Float -> FirConstExpressionImpl(null, FirConstKind.Float, this)
|
||||
is Double -> FirConstExpressionImpl(null, FirConstKind.Double, this)
|
||||
is Boolean -> FirConstExpressionImpl(null, FirConstKind.Boolean, this)
|
||||
is String -> FirConstExpressionImpl(null, FirConstKind.String, this)
|
||||
is ByteArray -> toList().createArrayOfCall(session, FirConstKind.Byte)
|
||||
is ShortArray -> toList().createArrayOfCall(session, FirConstKind.Short)
|
||||
is IntArray -> toList().createArrayOfCall(session, FirConstKind.Int)
|
||||
is LongArray -> toList().createArrayOfCall(session, FirConstKind.Long)
|
||||
is CharArray -> toList().createArrayOfCall(session, FirConstKind.Char)
|
||||
is FloatArray -> toList().createArrayOfCall(session, FirConstKind.Float)
|
||||
is DoubleArray -> toList().createArrayOfCall(session, FirConstKind.Double)
|
||||
is BooleanArray -> toList().createArrayOfCall(session, FirConstKind.Boolean)
|
||||
null -> FirConstExpressionImpl(null, FirConstKind.Null, null)
|
||||
|
||||
else -> FirErrorExpressionImpl(null, FirSimpleDiagnostic("Unknown value in JavaLiteralAnnotationArgument: $this", DiagnosticKind.Java))
|
||||
}
|
||||
|
||||
@@ -111,4 +111,8 @@ class FirJavaField(
|
||||
get() = null
|
||||
|
||||
override var containerSource: DeserializedContainerSource? = null
|
||||
|
||||
override fun <D> transformInitializer(transformer: FirTransformer<D>, data: D): FirField {
|
||||
return this
|
||||
}
|
||||
}
|
||||
@@ -10,10 +10,7 @@ import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.classId
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirConstExpressionImpl
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirQualifiedAccessExpressionImpl
|
||||
import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack
|
||||
@@ -35,7 +32,6 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||
import org.jetbrains.kotlin.fir.typeContext
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
|
||||
import org.jetbrains.kotlin.ir.expressions.IrConstKind
|
||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.DEFAULT_NULL_FQ_NAME
|
||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.DEFAULT_VALUE_FQ_NAME
|
||||
import org.jetbrains.kotlin.load.java.descriptors.AnnotationDefaultValue
|
||||
@@ -391,15 +387,15 @@ internal fun ConeKotlinType.lexicalCastFrom(session: FirSession, value: String):
|
||||
|
||||
val (number, radix) = extractRadix(value)
|
||||
return when (classId.relativeClassName.asString()) {
|
||||
"Boolean" -> FirConstExpressionImpl(null, IrConstKind.Boolean, value.toBoolean())
|
||||
"Char" -> FirConstExpressionImpl(null, IrConstKind.Char, value.singleOrNull() ?: return null)
|
||||
"Byte" -> FirConstExpressionImpl(null, IrConstKind.Byte, number.toByteOrNull(radix) ?: return null)
|
||||
"Short" -> FirConstExpressionImpl(null, IrConstKind.Short, number.toShortOrNull(radix) ?: return null)
|
||||
"Int" -> FirConstExpressionImpl(null, IrConstKind.Int, number.toIntOrNull(radix) ?: return null)
|
||||
"Long" -> FirConstExpressionImpl(null, IrConstKind.Long, number.toLongOrNull(radix) ?: return null)
|
||||
"Float" -> FirConstExpressionImpl(null, IrConstKind.Float, value.toFloatOrNull() ?: return null)
|
||||
"Double" -> FirConstExpressionImpl(null, IrConstKind.Double, value.toDoubleOrNull() ?: return null)
|
||||
"String" -> FirConstExpressionImpl(null, IrConstKind.String, value)
|
||||
"Boolean" -> FirConstExpressionImpl(null, FirConstKind.Boolean, value.toBoolean())
|
||||
"Char" -> FirConstExpressionImpl(null, FirConstKind.Char, value.singleOrNull() ?: return null)
|
||||
"Byte" -> FirConstExpressionImpl(null, FirConstKind.Byte, number.toByteOrNull(radix) ?: return null)
|
||||
"Short" -> FirConstExpressionImpl(null, FirConstKind.Short, number.toShortOrNull(radix) ?: return null)
|
||||
"Int" -> FirConstExpressionImpl(null, FirConstKind.Int, number.toIntOrNull(radix) ?: return null)
|
||||
"Long" -> FirConstExpressionImpl(null, FirConstKind.Long, number.toLongOrNull(radix) ?: return null)
|
||||
"Float" -> FirConstExpressionImpl(null, FirConstKind.Float, value.toFloatOrNull() ?: return null)
|
||||
"Double" -> FirConstExpressionImpl(null, FirConstKind.Double, value.toDoubleOrNull() ?: return null)
|
||||
"String" -> FirConstExpressionImpl(null, FirConstKind.String, value)
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.FirAnnotationContainer
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.*
|
||||
import org.jetbrains.kotlin.fir.expressions.FirConstKind
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirConstExpressionImpl
|
||||
import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack
|
||||
@@ -24,7 +25,6 @@ import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.ir.expressions.IrConstKind
|
||||
import org.jetbrains.kotlin.load.java.AnnotationTypeQualifierResolver
|
||||
import org.jetbrains.kotlin.load.java.descriptors.NullDefaultValue
|
||||
import org.jetbrains.kotlin.load.java.descriptors.StringDefaultValue
|
||||
@@ -276,7 +276,7 @@ class JavaClassEnhancementScope(
|
||||
).enhance(session, jsr305State, predefinedEnhancementInfo?.parametersInfo?.getOrNull(index))
|
||||
val firResolvedTypeRef = signatureParts.type
|
||||
val defaultValueExpression = when (val defaultValue = ownerParameter.getDefaultValueFromAnnotation()) {
|
||||
NullDefaultValue -> FirConstExpressionImpl(null, IrConstKind.Null, null)
|
||||
NullDefaultValue -> FirConstExpressionImpl(null, FirConstKind.Null, null)
|
||||
is StringDefaultValue -> firResolvedTypeRef.type.lexicalCastFrom(session, defaultValue.value)
|
||||
null -> null
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user