@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.ir.expressions.IrConst
30
30
import org.jetbrains.kotlin.ir.expressions.IrErrorCallExpression
31
31
import org.jetbrains.kotlin.ir.expressions.IrExpression
32
32
import org.jetbrains.kotlin.ir.expressions.IrTypeOperator
33
+ import org.jetbrains.kotlin.ir.expressions.IrTypeOperatorCall
33
34
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
34
35
import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl
35
36
import org.jetbrains.kotlin.ir.expressions.impl.IrConstructorCallImpl
@@ -41,6 +42,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrTypeOperatorCallImpl
41
42
import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
42
43
import org.jetbrains.kotlin.ir.symbols.UnsafeDuringIrConstructionAPI
43
44
import org.jetbrains.kotlin.ir.types.IrSimpleType
45
+ import org.jetbrains.kotlin.ir.types.IrType
44
46
import org.jetbrains.kotlin.ir.types.classFqName
45
47
import org.jetbrains.kotlin.ir.types.classOrFail
46
48
import org.jetbrains.kotlin.ir.types.classifierOrNull
@@ -235,16 +237,32 @@ private class DataFrameFileLowering(val context: IrPluginContext) : FileLowering
235
237
return true
236
238
}
237
239
238
- @OptIn(UnsafeDuringIrConstructionAPI ::class )
240
+ // org.jetbrains.kotlin.fir.backend.generators.CallAndReferenceGenerator#applyReceivers
241
+ override fun visitTypeOperator (expression : IrTypeOperatorCall ): IrExpression {
242
+ if (isScope(expression.typeOperand)) {
243
+ return expression.replaceWithConstructorCall()
244
+ }
245
+ return super .visitTypeOperator(expression)
246
+ }
247
+
239
248
override fun visitErrorCallExpression (expression : IrErrorCallExpression ): IrExpression {
240
- val origin = (expression.type.classifierOrNull?.owner as ? IrClass )?.origin ? : return expression
241
- val fromPlugin = origin is IrDeclarationOrigin .GeneratedByPlugin && origin.pluginKey is DataFramePlugin
242
- val scopeReference = expression.type.classFqName?.shortName()?.asString()?.startsWith(" Scope" ) ? : false
243
- if (! (fromPlugin || scopeReference)) {
249
+ if (! isScope(expression.type)) {
244
250
return expression
245
251
}
246
- val constructor = expression.type.getClass()!! .constructors.toList().single()
247
- val type = expression.type
252
+ return expression.replaceWithConstructorCall()
253
+ }
254
+
255
+ @OptIn(UnsafeDuringIrConstructionAPI ::class )
256
+ private fun isScope (type : IrType ): Boolean {
257
+ val origin = (type.classifierOrNull?.owner as ? IrClass )?.origin ? : return false
258
+ val fromPlugin = origin is IrDeclarationOrigin .GeneratedByPlugin && origin.pluginKey is DataFramePlugin
259
+ val scopeReference = type.classFqName?.shortName()?.asString()?.startsWith(" Scope" ) ? : false
260
+ return fromPlugin || scopeReference
261
+ }
262
+
263
+ @OptIn(UnsafeDuringIrConstructionAPI ::class )
264
+ private fun IrExpression.replaceWithConstructorCall (): IrConstructorCallImpl {
265
+ val constructor = type.getClass()!! .constructors.toList().single()
248
266
return IrConstructorCallImpl (- 1 , - 1 , type, constructor .symbol, 0 , 0 , 0 )
249
267
}
250
268
}
0 commit comments