Skip to content

Commit 3d042b6

Browse files
koperagenSpace Team
authored andcommitted
[KDF] Refactor ConeClassLikeTypeImpl -> constructClassLikeType
1 parent 0fa9409 commit 3d042b6

File tree

6 files changed

+48
-102
lines changed

6 files changed

+48
-102
lines changed

plugins/kotlin-dataframe/kotlin-dataframe.k2/src/org/jetbrains/kotlinx/dataframe/plugin/extensions/FunctionCallTransformer.kt

Lines changed: 31 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ import org.jetbrains.kotlin.fir.resolve.toClassSymbol
5252
import org.jetbrains.kotlin.fir.resolve.toRegularClassSymbol
5353
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider
5454
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
55-
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
5655
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagWithFixedSymbol
5756
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousFunctionSymbol
5857
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
@@ -66,14 +65,16 @@ import org.jetbrains.kotlin.fir.types.ConeTypeProjection
6665
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
6766
import org.jetbrains.kotlin.fir.types.builder.buildTypeProjectionWithVariance
6867
import org.jetbrains.kotlin.fir.types.classId
69-
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
68+
import org.jetbrains.kotlin.fir.types.constructClassLikeType
69+
import org.jetbrains.kotlin.fir.types.constructClassType
7070
import org.jetbrains.kotlin.fir.types.impl.FirImplicitAnyTypeRef
7171
import org.jetbrains.kotlin.fir.types.resolvedType
7272
import org.jetbrains.kotlin.fir.visitors.FirTransformer
7373
import org.jetbrains.kotlin.name.CallableId
7474
import org.jetbrains.kotlin.name.ClassId
7575
import org.jetbrains.kotlin.name.FqName
7676
import org.jetbrains.kotlin.name.Name
77+
import org.jetbrains.kotlin.name.StandardClassIds
7778
import org.jetbrains.kotlin.text
7879
import org.jetbrains.kotlin.types.Variance
7980
import org.jetbrains.kotlinx.dataframe.plugin.DataFramePlugin
@@ -179,33 +180,29 @@ class FunctionCallTransformer(
179180
return newType?.generatedClasses?.get(name)
180181
}
181182

182-
inner class DataSchemaLikeCallTransformer(val classId: ClassId) : CallTransformer {
183+
inner class DataSchemaLikeCallTransformer(val dataSchemaLikeClassId: ClassId) : CallTransformer {
183184
override fun interceptOrNull(callInfo: CallInfo, symbol: FirNamedFunctionSymbol, hash: String): CallReturnType? {
184-
if (symbol.resolvedReturnType.fullyExpandedClassId(session) != classId) return null
185+
if (symbol.resolvedReturnType.fullyExpandedClassId(session) != dataSchemaLikeClassId) return null
185186
// possibly null if explicit receiver type is typealias
186187
val argument = (callInfo.explicitReceiver?.resolvedType)?.typeArguments?.getOrNull(0)
187188
val newDataFrameArgument = buildNewTypeArgument(argument, callInfo.name, hash, callInfo.callSite)
188189

189-
val lookupTag = ConeClassLikeLookupTagImpl(classId)
190190
val typeRef = buildResolvedTypeRef {
191-
coneType = ConeClassLikeTypeImpl(
192-
lookupTag,
193-
arrayOf(
194-
ConeClassLikeTypeImpl(
195-
ConeClassLikeLookupTagWithFixedSymbol(newDataFrameArgument.classId, newDataFrameArgument.symbol),
196-
emptyArray(),
197-
isMarkedNullable = false
198-
)
199-
),
200-
isMarkedNullable = false
191+
coneType = dataSchemaLikeClassId.constructClassLikeType(
192+
typeArguments = arrayOf(
193+
ConeClassLikeLookupTagWithFixedSymbol(
194+
newDataFrameArgument.classId,
195+
newDataFrameArgument.symbol
196+
).constructClassType()
197+
)
201198
)
202199
}
203200
return CallReturnType(typeRef)
204201
}
205202

206203
@OptIn(SymbolInternals::class)
207204
override fun transformOrNull(call: FirFunctionCall, originalSymbol: FirNamedFunctionSymbol): FirFunctionCall? {
208-
val callResult = analyzeRefinedCallShape<PluginDataFrameSchema>(call, classId, InterpretationErrorReporter.DEFAULT)
205+
val callResult = analyzeRefinedCallShape<PluginDataFrameSchema>(call, dataSchemaLikeClassId, InterpretationErrorReporter.DEFAULT)
209206
val (tokens, dataFrameSchema) = callResult ?: return null
210207
val token = tokens[0]
211208
val firstSchema = token.toClassSymbol(session)?.resolvedSuperTypes?.get(0)!!.toRegularClassSymbol(session)?.fir!!
@@ -233,23 +230,12 @@ class FunctionCallTransformer(
233230
if (symbol.resolvedReturnType.fullyExpandedClassId(session) != Names.GROUP_BY_CLASS_ID) return null
234231
val keys = buildNewTypeArgument(null, Name.identifier("Key"), hash, callInfo.callSite)
235232
val group = buildNewTypeArgument(null, Name.identifier("Group"), hash, callInfo.callSite)
236-
val lookupTag = ConeClassLikeLookupTagImpl(Names.GROUP_BY_CLASS_ID)
237233
val typeRef = buildResolvedTypeRef {
238-
coneType = ConeClassLikeTypeImpl(
239-
lookupTag,
240-
arrayOf(
241-
ConeClassLikeTypeImpl(
242-
ConeClassLikeLookupTagWithFixedSymbol(keys.classId, keys.symbol),
243-
emptyArray<ConeTypeProjection>(),
244-
isMarkedNullable = false
245-
),
246-
ConeClassLikeTypeImpl(
247-
ConeClassLikeLookupTagWithFixedSymbol(group.classId, group.symbol),
248-
emptyArray<ConeTypeProjection>(),
249-
isMarkedNullable = false
250-
)
251-
),
252-
isMarkedNullable = false
234+
coneType = Names.GROUP_BY_CLASS_ID.constructClassLikeType(
235+
typeArguments = arrayOf(
236+
ConeClassLikeLookupTagWithFixedSymbol(keys.classId, keys.symbol).constructClassType(),
237+
ConeClassLikeLookupTagWithFixedSymbol(group.classId, group.symbol).constructClassType(),
238+
)
253239
)
254240
}
255241
return CallReturnType(typeRef)
@@ -325,11 +311,7 @@ class FunctionCallTransformer(
325311
classKind = ClassKind.CLASS
326312
scopeProvider = FirKotlinScopeProvider()
327313
superTypeRefs += buildResolvedTypeRef {
328-
coneType = ConeClassLikeTypeImpl(
329-
ConeClassLikeLookupTagWithFixedSymbol(tokenId, token.symbol),
330-
emptyArray(),
331-
isMarkedNullable = false
332-
)
314+
coneType = ConeClassLikeLookupTagWithFixedSymbol(tokenId, token.symbol).constructClassType()
333315
}
334316

335317
this.name = dataFrameTypeId.shortClassName
@@ -449,16 +431,12 @@ class FunctionCallTransformer(
449431
hasExplicitParameterList = false
450432
typeRef = buildResolvedTypeRef {
451433
coneType = if (receiverType != null) {
452-
ConeClassLikeTypeImpl(
453-
ConeClassLikeLookupTagImpl(ClassId(FqName("kotlin"), Name.identifier("Function1"))),
454-
typeArguments = arrayOf(receiverType, returnType),
455-
isMarkedNullable = false
434+
StandardClassIds.FunctionN(1).constructClassLikeType(
435+
typeArguments = arrayOf(receiverType, returnType)
456436
)
457437
} else {
458-
ConeClassLikeTypeImpl(
459-
ConeClassLikeLookupTagImpl(ClassId(FqName("kotlin"), Name.identifier("Function0"))),
460-
typeArguments = arrayOf(returnType),
461-
isMarkedNullable = false
438+
StandardClassIds.FunctionN(0).constructClassLikeType(
439+
typeArguments = arrayOf(returnType)
462440
)
463441
}
464442
}
@@ -555,30 +533,22 @@ class FunctionCallTransformer(
555533
is SimpleColumnGroup -> {
556534
val nestedSchema = PluginDataFrameSchema(it.columns()).materialize(it)
557535
val columnsContainerReturnType =
558-
ConeClassLikeTypeImpl(
559-
ConeClassLikeLookupTagImpl(Names.COLUM_GROUP_CLASS_ID),
560-
typeArguments = arrayOf(nestedSchema.schema.defaultType()),
561-
isMarkedNullable = false
536+
Names.COLUM_GROUP_CLASS_ID.constructClassLikeType(
537+
typeArguments = arrayOf(nestedSchema.schema.defaultType())
562538
)
563539

564-
val dataRowReturnType =
565-
ConeClassLikeTypeImpl(
566-
ConeClassLikeLookupTagImpl(Names.DATA_ROW_CLASS_ID),
567-
typeArguments = arrayOf(nestedSchema.schema.defaultType()),
568-
isMarkedNullable = false
569-
)
540+
val dataRowReturnType = Names.DATA_ROW_CLASS_ID.constructClassLikeType(
541+
typeArguments = arrayOf(nestedSchema.schema.defaultType())
542+
)
570543

571544
SchemaProperty(schema.defaultType(), PropertyName.of(it.name), dataRowReturnType, columnsContainerReturnType)
572545
}
573546

574547
is SimpleFrameColumn -> {
575548
val nestedClassMarker = PluginDataFrameSchema(it.columns()).materialize(it)
576-
val frameColumnReturnType =
577-
ConeClassLikeTypeImpl(
578-
ConeClassLikeLookupTagImpl(Names.DF_CLASS_ID),
579-
typeArguments = arrayOf(nestedClassMarker.schema.defaultType()),
580-
isMarkedNullable = false
581-
)
549+
val frameColumnReturnType = Names.DF_CLASS_ID.constructClassLikeType(
550+
typeArguments = arrayOf(nestedClassMarker.schema.defaultType())
551+
)
582552

583553
SchemaProperty(
584554
marker = schema.defaultType(),

plugins/kotlin-dataframe/kotlin-dataframe.k2/src/org/jetbrains/kotlinx/dataframe/plugin/extensions/TokenGenerator.kt

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,12 @@ import org.jetbrains.kotlin.fir.plugin.createConstructor
1919
import org.jetbrains.kotlin.fir.plugin.createMemberProperty
2020
import org.jetbrains.kotlin.fir.resolve.defaultType
2121
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
22-
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
2322
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
2423
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
2524
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
2625
import org.jetbrains.kotlin.fir.types.ConeKotlinType
2726
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
28-
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
27+
import org.jetbrains.kotlin.fir.types.constructClassLikeType
2928
import org.jetbrains.kotlin.name.CallableId
3029
import org.jetbrains.kotlin.name.Name
3130
import org.jetbrains.kotlin.name.SpecialNames
@@ -63,10 +62,8 @@ class TokenGenerator(session: FirSession) : FirDeclarationGenerationExtension(se
6362
val callableId = CallableId(k.classId, propertyName.identifier)
6463
val dataRowExtension = generateExtensionProperty(
6564
callableIdOrSymbol = CallableIdOrSymbol.Id(callableId),
66-
receiverType = ConeClassLikeTypeImpl(
67-
ConeClassLikeLookupTagImpl(Names.DATA_ROW_CLASS_ID),
68-
typeArguments = arrayOf(schemaProperty.marker),
69-
isMarkedNullable = false
65+
receiverType = Names.DATA_ROW_CLASS_ID.constructClassLikeType(
66+
typeArguments = arrayOf(schemaProperty.marker)
7067
),
7168
propertyName = propertyName,
7269
returnType = schemaProperty.dataRowReturnType,
@@ -77,10 +74,8 @@ class TokenGenerator(session: FirSession) : FirDeclarationGenerationExtension(se
7774

7875
val columnContainerExtension = generateExtensionProperty(
7976
callableIdOrSymbol = CallableIdOrSymbol.Id(callableId),
80-
receiverType = ConeClassLikeTypeImpl(
81-
ConeClassLikeLookupTagImpl(Names.COLUMNS_SCOPE_CLASS_ID),
82-
typeArguments = arrayOf(schemaProperty.marker),
83-
isMarkedNullable = false
77+
receiverType = Names.COLUMNS_SCOPE_CLASS_ID.constructClassLikeType(
78+
typeArguments = arrayOf(schemaProperty.marker)
8479
),
8580
propertyName = propertyName,
8681
returnType = schemaProperty.columnContainerReturnType,

plugins/kotlin-dataframe/kotlin-dataframe.k2/src/org/jetbrains/kotlinx/dataframe/plugin/extensions/TopLevelExtensionsGenerator.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,11 @@ import org.jetbrains.kotlin.fir.moduleData
1515
import org.jetbrains.kotlin.fir.resolve.toClassLikeSymbol
1616
import org.jetbrains.kotlin.fir.resolve.toSymbol
1717
import org.jetbrains.kotlin.fir.scopes.impl.toConeType
18-
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
1918
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
2019
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
2120
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularPropertySymbol
2221
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
2322
import org.jetbrains.kotlin.fir.types.*
24-
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
2523
import org.jetbrains.kotlin.name.CallableId
2624
import org.jetbrains.kotlin.name.FqName
2725
import org.jetbrains.kotlin.name.Name
@@ -160,8 +158,7 @@ fun FirDeclarationGenerationExtension.buildExtensionPropertiesApi(
160158
?.hasAnnotation(Names.DATA_SCHEMA_CLASS_ID, session) == true
161159
) {
162160
require(columnGroupProjection == null)
163-
resolvedReturnType = ConeClassLikeTypeImpl(
164-
ConeClassLikeLookupTagImpl(Names.DF_CLASS_ID),
161+
resolvedReturnType = Names.DF_CLASS_ID.constructClassLikeType(
165162
typeArguments = arrayOf(resolvedReturnType.typeArguments[0]),
166163
isMarkedNullable = false
167164
)

plugins/kotlin-dataframe/kotlin-dataframe.k2/src/org/jetbrains/kotlinx/dataframe/plugin/impl/api/select.kt

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
package org.jetbrains.kotlinx.dataframe.plugin.impl.api
22

33
import org.jetbrains.kotlin.fir.FirSession
4-
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
54
import org.jetbrains.kotlin.fir.types.ConeKotlinType
6-
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
5+
import org.jetbrains.kotlin.fir.types.constructClassLikeType
76
import org.jetbrains.kotlin.fir.types.isMarkedNullable
87
import org.jetbrains.kotlin.fir.types.isSubtypeOf
98
import org.jetbrains.kotlinx.dataframe.api.asColumnGroup
@@ -212,15 +211,11 @@ private fun Arguments.colsOf(cols: List<ColumnWithPathApproximation>, type: Cone
212211
fun SimpleCol.isColOf(type: ConeKotlinType, session: FirSession): Boolean {
213212
val columnType = when (this) {
214213
is SimpleDataColumn -> this.type.type
215-
is SimpleColumnGroup -> ConeClassLikeTypeImpl(
216-
ConeClassLikeLookupTagImpl(Names.DATA_ROW_CLASS_ID),
217-
typeArguments = arrayOf(session.builtinTypes.anyType.coneType),
218-
isMarkedNullable = false
214+
is SimpleColumnGroup -> Names.DATA_ROW_CLASS_ID.constructClassLikeType(
215+
typeArguments = arrayOf(session.builtinTypes.anyType.coneType)
219216
)
220-
is SimpleFrameColumn -> ConeClassLikeTypeImpl(
221-
ConeClassLikeLookupTagImpl(Names.DF_CLASS_ID),
222-
typeArguments = arrayOf(session.builtinTypes.anyType.coneType),
223-
isMarkedNullable = false
217+
is SimpleFrameColumn -> Names.DF_CLASS_ID.constructClassLikeType(
218+
typeArguments = arrayOf(session.builtinTypes.anyType.coneType)
224219
)
225220
}
226221
return columnType.isSubtypeOf(type, session)

plugins/kotlin-dataframe/kotlin-dataframe.k2/src/org/jetbrains/kotlinx/dataframe/plugin/utils/firFactories.kt

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.*
1818
import org.jetbrains.kotlin.fir.toFirResolvedTypeRef
1919
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
2020
import org.jetbrains.kotlin.fir.types.ConeKotlinType
21-
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
21+
import org.jetbrains.kotlin.fir.types.constructClassType
2222
import org.jetbrains.kotlin.name.CallableId
2323
import org.jetbrains.kotlinx.dataframe.plugin.DataFramePlugin
2424
import org.jetbrains.kotlinx.dataframe.plugin.extensions.impl.PropertyName
@@ -63,17 +63,9 @@ internal fun FirDeclarationGenerationExtension.generateExtensionProperty(
6363
val classId = firPropertySymbol.callableId.classId
6464
if (classId != null) {
6565
dispatchReceiverType = if (symbol != null) {
66-
ConeClassLikeTypeImpl(
67-
ConeClassLikeLookupTagWithFixedSymbol(classId, symbol),
68-
emptyArray(),
69-
false
70-
)
66+
ConeClassLikeLookupTagWithFixedSymbol(classId, symbol).constructClassType()
7167
} else {
72-
ConeClassLikeTypeImpl(
73-
ConeClassLikeLookupTagImpl(classId),
74-
emptyArray(),
75-
false
76-
)
68+
ConeClassLikeLookupTagImpl(classId).constructClassType()
7769
}
7870
}
7971
val firPropertyAccessorSymbol = FirPropertyAccessorSymbol()

plugins/kotlin-dataframe/kotlin-dataframe.k2/src/org/jetbrains/kotlinx/dataframe/plugin/utils/projectOverDataColumnType.kt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,12 @@
55

66
package org.jetbrains.kotlinx.dataframe.plugin.utils
77

8-
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
98
import org.jetbrains.kotlin.fir.types.ConeKotlinType
10-
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
9+
import org.jetbrains.kotlin.fir.types.constructClassLikeType
1110
import org.jetbrains.kotlin.fir.types.toTypeProjection
1211
import org.jetbrains.kotlin.types.Variance
1312

1413
fun ConeKotlinType.projectOverDataColumnType() =
15-
ConeClassLikeTypeImpl(
16-
ConeClassLikeLookupTagImpl(Names.DATA_COLUMN_CLASS_ID),
17-
arrayOf(this.toTypeProjection(Variance.INVARIANT)),
18-
isMarkedNullable = false
14+
Names.DATA_COLUMN_CLASS_ID.constructClassLikeType(
15+
typeArguments = arrayOf(this.toTypeProjection(Variance.INVARIANT))
1916
)

0 commit comments

Comments
 (0)