[FIR] optimize direct allocation of empty ConeTypeProjection arrays

On the snapshot from KTIJ-26260 empty ConeTypeProjection arrays take about 10mb
This commit is contained in:
Ilya Kirillov
2023-08-17 16:10:28 +02:00
committed by Space Team
parent 04d330edae
commit bdfc68468f
19 changed files with 35 additions and 24 deletions
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.fir.expressions.builder.buildEmptyExpressionBlock
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
import org.jetbrains.kotlin.fir.types.ConeTypeProjection
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
import org.jetbrains.kotlin.fir.types.toLookupTag
@@ -50,7 +51,11 @@ fun FirRegularClassBuilder.generateValuesFunction(
type = ConeClassLikeTypeImpl(
StandardClassIds.Array.toLookupTag(),
arrayOf(
ConeClassLikeTypeImpl(this@generateValuesFunction.symbol.toLookupTag(), emptyArray(), isNullable = false)
ConeClassLikeTypeImpl(
this@generateValuesFunction.symbol.toLookupTag(),
ConeTypeProjection.EMPTY_ARRAY,
isNullable = false
)
),
isNullable = false
)
@@ -145,7 +150,7 @@ fun FirRegularClassBuilder.generateEntriesGetter(
type = ConeClassLikeTypeImpl(
StandardClassIds.EnumEntries.toLookupTag(),
arrayOf(
ConeClassLikeTypeImpl(this@generateEntriesGetter.symbol.toLookupTag(), emptyArray(), isNullable = false)
ConeClassLikeTypeImpl(this@generateEntriesGetter.symbol.toLookupTag(), ConeTypeProjection.EMPTY_ARRAY, isNullable = false)
),
isNullable = false
)
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.fir.declarations.FirClass
import org.jetbrains.kotlin.fir.declarations.utils.classId
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.fir.types.ConeTypeProjection
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
import org.jetbrains.kotlin.fir.types.toLookupTag
import org.jetbrains.kotlin.name.ClassId
@@ -29,7 +30,7 @@ object StandardTypes {
}
private fun ClassId.createType(isNullable: Boolean = false): ConeClassLikeType =
ConeClassLikeTypeImpl(this.toLookupTag(), emptyArray(), isNullable)
ConeClassLikeTypeImpl(this.toLookupTag(), ConeTypeProjection.EMPTY_ARRAY, isNullable)
fun ConeClassLikeType.isDouble(): Boolean = lookupTag.classId == StandardClassIds.Double
fun ConeClassLikeType.isFloat(): Boolean = lookupTag.classId == StandardClassIds.Float
@@ -84,7 +84,7 @@ class ConeIntegerLiteralConstantTypeImpl(
}
private fun createType(classId: ClassId): ConeClassLikeType {
return ConeClassLikeTypeImpl(classId.toLookupTag(), emptyArray(), false)
return ConeClassLikeTypeImpl(classId.toLookupTag(), EMPTY_ARRAY, false)
}
private val INT_RANGE = Int.MIN_VALUE.toLong()..Int.MAX_VALUE.toLong()
@@ -147,7 +147,7 @@ private object ConeIntegerLiteralTypeExtensions {
}
fun createClassLikeType(classId: ClassId): ConeClassLikeType {
return ConeClassLikeTypeImpl(classId.toLookupTag(), emptyArray(), false)
return ConeClassLikeTypeImpl(classId.toLookupTag(), ConeTypeProjection.EMPTY_ARRAY, false)
}
fun ConeIntegerLiteralType.getApproximatedTypeImpl(expectedType: ConeKotlinType?): ConeClassLikeType {