@@ -24,12 +24,16 @@ import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
24
24
import org.jetbrains.kotlin.fir.declarations.hasAnnotation
25
25
import org.jetbrains.kotlin.diagnostics.KtDiagnosticsContainer
26
26
import org.jetbrains.kotlin.diagnostics.reportOn
27
+ import org.jetbrains.kotlin.fir.declarations.utils.isInline
27
28
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
28
29
import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression
30
+ import org.jetbrains.kotlin.fir.expressions.toResolvedCallableReference
29
31
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
30
32
import org.jetbrains.kotlin.fir.references.toResolvedCallableSymbol
33
+ import org.jetbrains.kotlin.fir.references.toResolvedNamedFunctionSymbol
31
34
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
32
35
import org.jetbrains.kotlin.fir.resolve.toSymbol
36
+ import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
33
37
import org.jetbrains.kotlin.fir.types.*
34
38
import org.jetbrains.kotlin.name.CallableId
35
39
import org.jetbrains.kotlin.name.ClassId
@@ -38,6 +42,7 @@ import org.jetbrains.kotlin.name.Name
38
42
import org.jetbrains.kotlin.psi.KtElement
39
43
import org.jetbrains.kotlinx.dataframe.plugin.extensions.FirDataFrameErrors.CAST_ERROR
40
44
import org.jetbrains.kotlinx.dataframe.plugin.extensions.FirDataFrameErrors.CAST_TARGET_WARNING
45
+ import org.jetbrains.kotlinx.dataframe.plugin.extensions.FirDataFrameErrors.DATAFRAME_PLUGIN_NOT_YET_SUPPORTED_IN_INLINE
41
46
import org.jetbrains.kotlinx.dataframe.plugin.extensions.FirDataFrameErrors.ERROR
42
47
import org.jetbrains.kotlinx.dataframe.plugin.impl.PluginDataFrameSchema
43
48
import org.jetbrains.kotlinx.dataframe.plugin.impl.SimpleColumnGroup
@@ -57,7 +62,9 @@ class ExpressionAnalysisAdditionalChecker(
57
62
) : FirAdditionalCheckersExtension(session) {
58
63
override val expressionCheckers: ExpressionCheckers = object : ExpressionCheckers () {
59
64
override val functionCallCheckers: Set <FirFunctionCallChecker > = setOfNotNull(
60
- Checker (isTest), FunctionCallSchemaReporter .takeIf { dumpSchemas }
65
+ Checker (isTest),
66
+ FunctionCallSchemaReporter .takeIf { dumpSchemas },
67
+ InlineDataFrameLocalClassesChecker ,
61
68
)
62
69
override val propertyAccessExpressionCheckers: Set <FirPropertyAccessExpressionChecker > = setOfNotNull(
63
70
PropertyAccessSchemaReporter .takeIf { dumpSchemas }
@@ -74,6 +81,7 @@ object FirDataFrameErrors : KtDiagnosticsContainer() {
74
81
val ERROR by error1<KtElement , String >(SourceElementPositioningStrategies .DEFAULT )
75
82
val CAST_ERROR by error1<KtElement , String >(SourceElementPositioningStrategies .CALL_ELEMENT_WITH_DOT )
76
83
val CAST_TARGET_WARNING by warning1<KtElement , String >(SourceElementPositioningStrategies .CALL_ELEMENT_WITH_DOT )
84
+ val DATAFRAME_PLUGIN_NOT_YET_SUPPORTED_IN_INLINE by warning1<KtElement , String >(SourceElementPositioningStrategies .REFERENCED_NAME_BY_QUALIFIED )
77
85
78
86
override fun getRendererFactory (): BaseDiagnosticRendererFactory = DataFrameDiagnosticMessages
79
87
}
@@ -83,6 +91,7 @@ object DataFrameDiagnosticMessages : BaseDiagnosticRendererFactory() {
83
91
map.put(ERROR , " {0}" , TO_STRING )
84
92
map.put(CAST_ERROR , " {0}" , TO_STRING )
85
93
map.put(CAST_TARGET_WARNING , " {0}" , TO_STRING )
94
+ map.put(DATAFRAME_PLUGIN_NOT_YET_SUPPORTED_IN_INLINE , " {0}" , TO_STRING )
86
95
}
87
96
}
88
97
@@ -178,6 +187,24 @@ private data object PropertySchemaReporter : FirPropertyChecker(mppKind = MppChe
178
187
}
179
188
}
180
189
190
+ private data object InlineDataFrameLocalClassesChecker : FirFunctionCallChecker (mppKind = MppCheckerKind .Common ) {
191
+ context(context: CheckerContext , reporter: DiagnosticReporter )
192
+ override fun check (expression : FirFunctionCall ) {
193
+ expression.toResolvedCallableReference()?.toResolvedNamedFunctionSymbol()?.let { symbol ->
194
+ if (
195
+ FunctionCallTransformer .shouldRefine(expression.annotations, symbol, context.session) &&
196
+ context.containingDeclarations.any { it is FirNamedFunctionSymbol && it.isInline }
197
+ ) {
198
+ reporter.reportOn(
199
+ expression.source,
200
+ DATAFRAME_PLUGIN_NOT_YET_SUPPORTED_IN_INLINE ,
201
+ " DataFrame compiler plugin is not yet supported in inline functions"
202
+ )
203
+ }
204
+ }
205
+ }
206
+ }
207
+
181
208
private data object FunctionCallSchemaReporter : FirFunctionCallChecker (mppKind = MppCheckerKind .Common ) {
182
209
context(context: CheckerContext , reporter: DiagnosticReporter )
183
210
override fun check (expression : FirFunctionCall ) {
0 commit comments