@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.ir.expressions.IrConst
29
29
import org.jetbrains.kotlin.ir.expressions.IrErrorCallExpression
30
30
import org.jetbrains.kotlin.ir.expressions.IrExpression
31
31
import org.jetbrains.kotlin.ir.expressions.IrTypeOperator
32
+ import org.jetbrains.kotlin.ir.expressions.IrTypeOperatorCall
32
33
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
33
34
import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl
34
35
import org.jetbrains.kotlin.ir.expressions.impl.IrConstructorCallImpl
@@ -40,6 +41,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrTypeOperatorCallImpl
40
41
import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
41
42
import org.jetbrains.kotlin.ir.symbols.UnsafeDuringIrConstructionAPI
42
43
import org.jetbrains.kotlin.ir.types.IrSimpleType
44
+ import org.jetbrains.kotlin.ir.types.IrType
43
45
import org.jetbrains.kotlin.ir.types.classFqName
44
46
import org.jetbrains.kotlin.ir.types.classOrFail
45
47
import org.jetbrains.kotlin.ir.types.classifierOrNull
@@ -218,16 +220,33 @@ private class DataFrameFileLowering(val context: IrPluginContext) : FileLowering
218
220
return declaration
219
221
}
220
222
221
- @OptIn(UnsafeDuringIrConstructionAPI ::class )
223
+ // org.jetbrains.kotlin.fir.backend.generators.CallAndReferenceGenerator#applyReceivers
224
+ override fun visitTypeOperator (expression : IrTypeOperatorCall ): IrExpression {
225
+ if (isScope(expression.typeOperand)) {
226
+ return expression.replaceWithConstructorCall()
227
+ }
228
+ return super .visitTypeOperator(expression)
229
+ }
230
+
222
231
override fun visitErrorCallExpression (expression : IrErrorCallExpression ): IrExpression {
223
- val origin = (expression.type.classifierOrNull?.owner as ? IrClass )?.origin ? : return expression
224
- val fromPlugin = origin is IrDeclarationOrigin .GeneratedByPlugin && origin.pluginKey is DataFramePlugin
225
- val scopeReference = expression.type.classFqName?.shortName()?.asString()?.startsWith(" Scope" ) ? : false
226
- if (! (fromPlugin || scopeReference)) {
232
+ if (! isScope(expression.type)) {
227
233
return expression
228
234
}
229
- val constructor = expression.type.getClass()!! .constructors.toList().single()
230
- val type = expression.type
235
+ return expression.replaceWithConstructorCall()
236
+ }
237
+
238
+ @OptIn(UnsafeDuringIrConstructionAPI ::class )
239
+ private fun isScope (type : IrType ): Boolean {
240
+ val origin = (type.classifierOrNull?.owner as ? IrClass )?.origin ? : return false
241
+ val fromPlugin = origin is IrDeclarationOrigin .GeneratedByPlugin && origin.pluginKey is DataFramePlugin
242
+ val scopeReference = type.classFqName?.shortName()?.asString()?.startsWith(" Scope" ) ? : false
243
+ return fromPlugin || scopeReference
244
+ }
245
+
246
+ @OptIn(UnsafeDuringIrConstructionAPI ::class )
247
+ private fun IrExpression.replaceWithConstructorCall (): IrConstructorCallImpl {
248
+ val constructor = type.getClass()!! .constructors.toList().single()
249
+ val type = type
231
250
return IrConstructorCallImpl (- 1 , - 1 , type, constructor .symbol, 0 , 0 , 0 )
232
251
}
233
252
}
0 commit comments