@@ -62,16 +62,13 @@ import org.jetbrains.kotlin.fir.expressions.FirLiteralExpression
62
62
import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier
63
63
import org.jetbrains.kotlin.fir.expressions.UnresolvedExpressionTypeAccess
64
64
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
65
- import org.jetbrains.kotlin.fir.references.resolved
66
- import org.jetbrains.kotlin.fir.references.symbol
67
- import org.jetbrains.kotlin.fir.references.toResolvedNamedFunctionSymbol
65
+ import org.jetbrains.kotlin.fir.references.toResolvedFunctionSymbol
68
66
import org.jetbrains.kotlin.fir.resolve.fqName
69
67
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
70
68
import org.jetbrains.kotlin.fir.types.classId
71
69
import org.jetbrains.kotlin.fir.types.coneType
72
70
import org.jetbrains.kotlin.name.CallableId
73
71
import org.jetbrains.kotlin.name.ClassId
74
- import org.jetbrains.kotlin.name.FqName
75
72
import org.jetbrains.kotlin.name.Name
76
73
import org.jetbrains.kotlin.name.StandardClassIds
77
74
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.AddDslStringInvoke
@@ -91,25 +88,22 @@ import org.jetbrains.kotlinx.dataframe.plugin.impl.api.FrameCols0
91
88
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.MapToFrame
92
89
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.Move0
93
90
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.PairConstructor
91
+ import org.jetbrains.kotlinx.dataframe.plugin.impl.api.PairToConstructor
94
92
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.ReadExcel
95
93
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.ToDataFrame
96
94
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.ToDataFrameColumn
97
95
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.ToDataFrameDefault
98
96
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.ToDataFrameDsl
99
97
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.ToDataFrameFrom
100
98
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.ToTop
99
+ import org.jetbrains.kotlinx.dataframe.plugin.impl.api.TrimMargin
101
100
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.Update0
102
101
import org.jetbrains.kotlinx.dataframe.plugin.impl.api.UpdateWith0
103
102
import org.jetbrains.kotlinx.dataframe.plugin.utils.Names
104
103
105
- @OptIn(UnresolvedExpressionTypeAccess ::class )
106
104
internal fun FirFunctionCall.loadInterpreter (session : FirSession ): Interpreter <* >? {
107
- if (
108
- calleeReference.toResolvedNamedFunctionSymbol()?.callableId == Names .TO &&
109
- coneTypeOrNull?.classId == Names .PAIR
110
- ) {
111
- return PairConstructor ()
112
- }
105
+ val interpreter = Stdlib .interpreter(this )
106
+ if (interpreter != null ) return interpreter
113
107
val symbol =
114
108
(calleeReference as ? FirResolvedNamedReference )?.resolvedSymbol as ? FirCallableSymbol ? : return null
115
109
val argName = Name .identifier(" interpreter" )
@@ -121,6 +115,32 @@ internal fun FirFunctionCall.loadInterpreter(session: FirSession): Interpreter<*
121
115
}
122
116
}
123
117
118
+ private object Stdlib {
119
+ private val map: MutableMap <Key , Interpreter <* >> = mutableMapOf ()
120
+ init {
121
+ register(Names .TO , Names .PAIR , PairToConstructor ())
122
+ register(Names .PAIR_CONSTRUCTOR , Names .PAIR , PairConstructor ())
123
+ register(Names .TRIM_MARGIN , StandardClassIds .String , TrimMargin ())
124
+ register(Names .TRIM_INDENT , StandardClassIds .String , TrimMargin ())
125
+ }
126
+
127
+ @OptIn(UnresolvedExpressionTypeAccess ::class )
128
+ fun interpreter (call : FirFunctionCall ): Interpreter <* >? {
129
+ val id = call.calleeReference.toResolvedFunctionSymbol()?.callableId ? : return null
130
+ val returnType = call.coneTypeOrNull?.classId ? : return null
131
+ return map[Key (id, returnType)]
132
+ }
133
+
134
+ fun register (id : CallableId , returnType : ClassId , interpreter : Interpreter <* >) {
135
+ map[Key (id, returnType)] = interpreter
136
+ }
137
+ }
138
+
139
+ private data class Key (
140
+ val id : CallableId ,
141
+ val returnType : ClassId ,
142
+ )
143
+
124
144
internal fun FirFunctionCall.interpreterName (session : FirSession ): String? {
125
145
val symbol =
126
146
(calleeReference as ? FirResolvedNamedReference )?.resolvedSymbol as ? FirCallableSymbol ? : return null
0 commit comments