FIR tree refactoring: move FirElement.session to FirDeclaration
#KT-30275 Fixed
This commit is contained in:
@@ -219,7 +219,7 @@ class JavaSymbolProvider(
|
||||
val firJavaConstructor = FirJavaConstructor(
|
||||
this@JavaSymbolProvider.session, constructorSymbol, visibility, isPrimary,
|
||||
FirResolvedTypeRefImpl(
|
||||
this@JavaSymbolProvider.session, null,
|
||||
null,
|
||||
firSymbol.constructType(
|
||||
classTypeParameters.map { ConeTypeParameterTypeImpl(it.symbol.toLookupTag(), false) }.toTypedArray(),
|
||||
false
|
||||
|
||||
@@ -81,8 +81,8 @@ internal fun JavaType?.toNotNullConeKotlinType(
|
||||
internal fun JavaType.toFirJavaTypeRef(session: FirSession, javaTypeParameterStack: JavaTypeParameterStack): FirJavaTypeRef {
|
||||
val annotations = (this as? JavaClassifierType)?.annotations.orEmpty()
|
||||
return FirJavaTypeRef(
|
||||
session,
|
||||
annotations = annotations.map { it.toFirAnnotationCall(session, javaTypeParameterStack) }, type = this
|
||||
annotations = annotations.map { it.toFirAnnotationCall(session, javaTypeParameterStack) },
|
||||
type = this
|
||||
)
|
||||
}
|
||||
|
||||
@@ -91,7 +91,7 @@ internal fun JavaClassifierType.toFirResolvedTypeRef(
|
||||
): FirResolvedTypeRef {
|
||||
val coneType = this.toConeKotlinTypeWithNullability(session, javaTypeParameterStack, isNullable = false)
|
||||
return FirResolvedTypeRefImpl(
|
||||
session, psi = null, type = coneType,
|
||||
psi = null, type = coneType,
|
||||
annotations = annotations.map { it.toFirAnnotationCall(session, javaTypeParameterStack) }
|
||||
)
|
||||
}
|
||||
@@ -170,9 +170,8 @@ internal fun JavaAnnotation.toFirAnnotationCall(
|
||||
session: FirSession, javaTypeParameterStack: JavaTypeParameterStack
|
||||
): FirAnnotationCall {
|
||||
return FirAnnotationCallImpl(
|
||||
session, psi = null, useSiteTarget = null,
|
||||
psi = null, useSiteTarget = null,
|
||||
annotationTypeRef = FirResolvedTypeRefImpl(
|
||||
session,
|
||||
psi = null,
|
||||
type = ConeClassTypeImpl(FirClassSymbol(classId!!).toLookupTag(), emptyArray(), isNullable = false),
|
||||
annotations = emptyList()
|
||||
@@ -237,13 +236,13 @@ private fun JavaAnnotationArgument.toFirExpression(
|
||||
is JavaLiteralAnnotationArgument -> {
|
||||
value.createConstant(session)
|
||||
}
|
||||
is JavaArrayAnnotationArgument -> FirArrayOfCallImpl(session, null).apply {
|
||||
is JavaArrayAnnotationArgument -> FirArrayOfCallImpl(null).apply {
|
||||
for (element in getElements()) {
|
||||
arguments += element.toFirExpression(session, javaTypeParameterStack)
|
||||
}
|
||||
}
|
||||
is JavaEnumValueAnnotationArgument -> {
|
||||
FirFunctionCallImpl(session, null).apply {
|
||||
FirFunctionCallImpl(null).apply {
|
||||
val classId = this@toFirExpression.enumClassId
|
||||
val entryName = this@toFirExpression.entryName
|
||||
val calleeReference = if (classId != null && entryName != null) {
|
||||
@@ -251,29 +250,29 @@ private fun JavaAnnotationArgument.toFirExpression(
|
||||
classId, entryName
|
||||
).firstOrNull()
|
||||
callableSymbol?.let {
|
||||
FirResolvedCallableReferenceImpl(session, null, entryName, it)
|
||||
FirResolvedCallableReferenceImpl(null, entryName, it)
|
||||
}
|
||||
} else {
|
||||
null
|
||||
}
|
||||
this.calleeReference = calleeReference
|
||||
?: FirErrorNamedReference(session, null, "Strange Java enum value: $classId.$entryName")
|
||||
?: FirErrorNamedReference(null, "Strange Java enum value: $classId.$entryName")
|
||||
}
|
||||
}
|
||||
is JavaClassObjectAnnotationArgument -> FirGetClassCallImpl(session, null).apply {
|
||||
is JavaClassObjectAnnotationArgument -> FirGetClassCallImpl(null).apply {
|
||||
val referencedType = getReferencedType()
|
||||
arguments += FirClassReferenceExpressionImpl(
|
||||
session, null, referencedType.toFirResolvedTypeRef(session, javaTypeParameterStack)
|
||||
null, referencedType.toFirResolvedTypeRef(session, javaTypeParameterStack)
|
||||
)
|
||||
}
|
||||
is JavaAnnotationAsAnnotationArgument -> getAnnotation().toFirAnnotationCall(session, javaTypeParameterStack)
|
||||
else -> FirErrorExpressionImpl(session, null, "Unknown JavaAnnotationArgument: ${this::class.java}")
|
||||
else -> FirErrorExpressionImpl(null, "Unknown JavaAnnotationArgument: ${this::class.java}")
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: use kind here
|
||||
private fun <T> List<T>.createArrayOfCall(session: FirSession, @Suppress("UNUSED_PARAMETER") kind: IrConstKind<T>): FirArrayOfCall {
|
||||
return FirArrayOfCallImpl(session, null).apply {
|
||||
return FirArrayOfCallImpl(null).apply {
|
||||
for (element in this@createArrayOfCall) {
|
||||
arguments += element.createConstant(session)
|
||||
}
|
||||
@@ -282,15 +281,15 @@ private fun <T> List<T>.createArrayOfCall(session: FirSession, @Suppress("UNUSED
|
||||
|
||||
internal fun Any?.createConstant(session: FirSession): FirExpression {
|
||||
return when (this) {
|
||||
is Byte -> FirConstExpressionImpl(session, null, IrConstKind.Byte, this)
|
||||
is Short -> FirConstExpressionImpl(session, null, IrConstKind.Short, this)
|
||||
is Int -> FirConstExpressionImpl(session, null, IrConstKind.Int, this)
|
||||
is Long -> FirConstExpressionImpl(session, null, IrConstKind.Long, this)
|
||||
is Char -> FirConstExpressionImpl(session, null, IrConstKind.Char, this)
|
||||
is Float -> FirConstExpressionImpl(session, null, IrConstKind.Float, this)
|
||||
is Double -> FirConstExpressionImpl(session, null, IrConstKind.Double, this)
|
||||
is Boolean -> FirConstExpressionImpl(session, null, IrConstKind.Boolean, this)
|
||||
is String -> FirConstExpressionImpl(session, null, IrConstKind.String, 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)
|
||||
@@ -299,9 +298,9 @@ internal fun Any?.createConstant(session: FirSession): FirExpression {
|
||||
is FloatArray -> toList().createArrayOfCall(session, IrConstKind.Float)
|
||||
is DoubleArray -> toList().createArrayOfCall(session, IrConstKind.Double)
|
||||
is BooleanArray -> toList().createArrayOfCall(session, IrConstKind.Boolean)
|
||||
null -> FirConstExpressionImpl(session, null, IrConstKind.Null, null)
|
||||
null -> FirConstExpressionImpl(null, IrConstKind.Null, null)
|
||||
|
||||
else -> FirErrorExpressionImpl(session, null, "Unknown value in JavaLiteralAnnotationArgument: $this")
|
||||
else -> FirErrorExpressionImpl(null, "Unknown value in JavaLiteralAnnotationArgument: $this")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -310,7 +309,7 @@ private fun JavaType.toFirResolvedTypeRef(
|
||||
): FirResolvedTypeRef {
|
||||
if (this is JavaClassifierType) return toFirResolvedTypeRef(session, javaTypeParameterStack)
|
||||
return FirResolvedTypeRefImpl(
|
||||
session, psi = null, type = ConeClassErrorType("Unexpected JavaType: $this"),
|
||||
psi = null, type = ConeClassErrorType("Unexpected JavaType: $this"),
|
||||
annotations = emptyList()
|
||||
)
|
||||
}
|
||||
|
||||
+11
-11
@@ -176,10 +176,10 @@ class KotlinDeserializedJvmSymbolsProvider(
|
||||
private fun ConeClassifierSymbol?.toDefaultResolvedTypeRef(classId: ClassId): FirResolvedTypeRef {
|
||||
return this?.let {
|
||||
FirResolvedTypeRefImpl(
|
||||
session, null, it.constructType(emptyList(), isNullable = false),
|
||||
null, it.constructType(emptyList(), isNullable = false),
|
||||
annotations = emptyList()
|
||||
)
|
||||
} ?: FirErrorTypeRefImpl(session, null, "Symbol not found for $classId")
|
||||
} ?: FirErrorTypeRefImpl(null, "Symbol not found for $classId")
|
||||
|
||||
}
|
||||
|
||||
@@ -202,13 +202,13 @@ class KotlinDeserializedJvmSymbolsProvider(
|
||||
val literalLookupTag = ConeClassLikeLookupTagImpl(classId)
|
||||
val literalSymbol = literalLookupTag.toSymbol(this@KotlinDeserializedJvmSymbolsProvider.session)
|
||||
return FirClassReferenceExpressionImpl(
|
||||
this@KotlinDeserializedJvmSymbolsProvider.session, null,
|
||||
null,
|
||||
literalSymbol.toDefaultResolvedTypeRef(classId)
|
||||
)
|
||||
}
|
||||
|
||||
private fun ClassId.toEnumEntryReferenceExpression(name: Name): FirExpression {
|
||||
return FirFunctionCallImpl(session, null).apply {
|
||||
return FirFunctionCallImpl(null).apply {
|
||||
val entryClassId = createNestedClassId(name)
|
||||
val entryLookupTag = ConeClassLikeLookupTagImpl(entryClassId)
|
||||
val entryClassSymbol = entryLookupTag.toSymbol(this@KotlinDeserializedJvmSymbolsProvider.session)
|
||||
@@ -220,17 +220,17 @@ class KotlinDeserializedJvmSymbolsProvider(
|
||||
this.calleeReference = when {
|
||||
entryClassSymbol != null && (entryClassSymbol as? FirClassSymbol)?.fir is FirEnumEntry -> {
|
||||
FirResolvedCallableReferenceImpl(
|
||||
this@KotlinDeserializedJvmSymbolsProvider.session, null, name, entryClassSymbol
|
||||
null, name, entryClassSymbol
|
||||
)
|
||||
}
|
||||
entryCallableSymbol != null -> {
|
||||
FirResolvedCallableReferenceImpl(
|
||||
this@KotlinDeserializedJvmSymbolsProvider.session, null, name, entryCallableSymbol
|
||||
null, name, entryCallableSymbol
|
||||
)
|
||||
}
|
||||
else -> {
|
||||
FirErrorNamedReference(
|
||||
this@KotlinDeserializedJvmSymbolsProvider.session, null,
|
||||
null,
|
||||
errorReason = "Strange deserialized enum value: ${this@toEnumEntryReferenceExpression}.$name"
|
||||
)
|
||||
}
|
||||
@@ -239,7 +239,7 @@ class KotlinDeserializedJvmSymbolsProvider(
|
||||
}
|
||||
|
||||
override fun visitClassLiteral(name: Name, value: ClassLiteralValue) {
|
||||
argumentMap[name] = FirGetClassCallImpl(session, null).apply {
|
||||
argumentMap[name] = FirGetClassCallImpl(null).apply {
|
||||
arguments += value.toFirClassReferenceExpression()
|
||||
}
|
||||
}
|
||||
@@ -265,7 +265,7 @@ class KotlinDeserializedJvmSymbolsProvider(
|
||||
}
|
||||
|
||||
override fun visitEnd() {
|
||||
argumentMap[name] = FirArrayOfCallImpl(session, null).apply {
|
||||
argumentMap[name] = FirArrayOfCallImpl(null).apply {
|
||||
arguments += elements
|
||||
}
|
||||
}
|
||||
@@ -284,10 +284,10 @@ class KotlinDeserializedJvmSymbolsProvider(
|
||||
}
|
||||
|
||||
override fun visitEnd() {
|
||||
result += FirAnnotationCallImpl(session, null, null, symbol.toDefaultResolvedTypeRef(annotationClassId)).apply {
|
||||
result += FirAnnotationCallImpl(null, null, symbol.toDefaultResolvedTypeRef(annotationClassId)).apply {
|
||||
for ((name, expression) in argumentMap) {
|
||||
arguments += FirNamedArgumentExpressionImpl(
|
||||
this@KotlinDeserializedJvmSymbolsProvider.session, null, name, false, expression
|
||||
null, name, false, expression
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,14 +82,14 @@ private fun JavaType?.enhancePossiblyFlexible(
|
||||
)
|
||||
|
||||
FirResolvedTypeRefImpl(
|
||||
session, psi = null,
|
||||
psi = null,
|
||||
type = coneFlexibleOrSimpleType(session, lowerResult, upperResult),
|
||||
annotations = annotations
|
||||
)
|
||||
}
|
||||
else -> {
|
||||
val enhanced = type.toNotNullConeKotlinType(session, javaTypeParameterStack)
|
||||
FirResolvedTypeRefImpl(session, psi = null, type = enhanced, annotations = annotations)
|
||||
FirResolvedTypeRefImpl(psi = null, type = enhanced, annotations = annotations)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -245,18 +245,18 @@ internal fun ConeKotlinType.lexicalCastFrom(session: FirSession, value: String):
|
||||
val name = Name.identifier(value)
|
||||
val firEnumEntry = firElement.declarations.filterIsInstance<FirEnumEntry>().find { it.name == name }
|
||||
|
||||
return if (firEnumEntry != null) FirQualifiedAccessExpressionImpl(session, null).apply {
|
||||
return if (firEnumEntry != null) FirQualifiedAccessExpressionImpl(null).apply {
|
||||
calleeReference = FirSimpleNamedReference(
|
||||
session, null, name // TODO: , firEnumEntry.symbol
|
||||
null, name // TODO: , firEnumEntry.symbol
|
||||
)
|
||||
} else if (firElement is FirJavaClass) {
|
||||
val firStaticProperty = firElement.declarations.filterIsInstance<FirJavaField>().find {
|
||||
it.isStatic && it.modality == Modality.FINAL && it.name == name
|
||||
}
|
||||
if (firStaticProperty != null) {
|
||||
FirQualifiedAccessExpressionImpl(session, null).apply {
|
||||
FirQualifiedAccessExpressionImpl(null).apply {
|
||||
calleeReference = FirResolvedCallableReferenceImpl(
|
||||
session, null, name, firStaticProperty.symbol as ConeCallableSymbol
|
||||
null, name, firStaticProperty.symbol as ConeCallableSymbol
|
||||
)
|
||||
}
|
||||
} else null
|
||||
@@ -269,15 +269,15 @@ internal fun ConeKotlinType.lexicalCastFrom(session: FirSession, value: String):
|
||||
|
||||
val (number, radix) = extractRadix(value)
|
||||
return when (classId.relativeClassName.asString()) {
|
||||
"Boolean" -> FirConstExpressionImpl(session, null, IrConstKind.Boolean, value.toBoolean())
|
||||
"Char" -> FirConstExpressionImpl(session, null, IrConstKind.Char, value.singleOrNull() ?: return null)
|
||||
"Byte" -> FirConstExpressionImpl(session, null, IrConstKind.Byte, number.toByteOrNull(radix) ?: return null)
|
||||
"Short" -> FirConstExpressionImpl(session, null, IrConstKind.Short, number.toShortOrNull(radix) ?: return null)
|
||||
"Int" -> FirConstExpressionImpl(session, null, IrConstKind.Int, number.toIntOrNull(radix) ?: return null)
|
||||
"Long" -> FirConstExpressionImpl(session, null, IrConstKind.Long, number.toLongOrNull(radix) ?: return null)
|
||||
"Float" -> FirConstExpressionImpl(session, null, IrConstKind.Float, value.toFloatOrNull() ?: return null)
|
||||
"Double" -> FirConstExpressionImpl(session, null, IrConstKind.Double, value.toDoubleOrNull() ?: return null)
|
||||
"String" -> FirConstExpressionImpl(session, null, IrConstKind.String, value)
|
||||
"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)
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -302,7 +302,7 @@ class JavaClassEnhancementScope(
|
||||
).enhance(session, jsr305State, predefinedEnhancementInfo?.parametersInfo?.getOrNull(index))
|
||||
val firResolvedTypeRef = signatureParts.type
|
||||
val defaultValueExpression = when (val defaultValue = ownerParameter.getDefaultValueFromAnnotation()) {
|
||||
NullDefaultValue -> FirConstExpressionImpl(session, null, IrConstKind.Null, null)
|
||||
NullDefaultValue -> FirConstExpressionImpl(null, IrConstKind.Null, null)
|
||||
is StringDefaultValue -> firResolvedTypeRef.type.lexicalCastFrom(session, defaultValue.value)
|
||||
null -> null
|
||||
}
|
||||
|
||||
@@ -5,16 +5,14 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.java.types
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirUserTypeRefImpl
|
||||
import org.jetbrains.kotlin.load.java.structure.JavaType
|
||||
|
||||
class FirJavaTypeRef(
|
||||
session: FirSession,
|
||||
annotations: List<FirAnnotationCall>,
|
||||
val type: JavaType
|
||||
) : FirUserTypeRefImpl(session, psi = null, isMarkedNullable = false) {
|
||||
) : FirUserTypeRefImpl(psi = null, isMarkedNullable = false) {
|
||||
init {
|
||||
this.annotations += annotations
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user