Skip to content

Commit 65c53e0

Browse files
committed
[Compiler plugin] Avoid throwing debugging exceptions in user projects because of false positives
1 parent 86d8d63 commit 65c53e0

File tree

6 files changed

+24
-15
lines changed

6 files changed

+24
-15
lines changed

plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/FirDataFrameComponentRegistrar.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,19 +63,20 @@ class DataFrameCommandLineProcessor : CommandLineProcessor {
6363

6464
class FirDataFrameExtensionRegistrar(
6565
private val path: String?,
66-
val schemasDirectory: String?
66+
val schemasDirectory: String?,
67+
val isTest: Boolean,
6768
) : FirExtensionRegistrar() {
6869
@OptIn(FirExtensionApiInternals::class)
6970
override fun ExtensionRegistrarContext.configurePlugin() {
7071
+::ExtensionsGenerator
7172
+::ReturnTypeBasedReceiverInjector
7273
+{ it: FirSession ->
73-
FunctionCallTransformer(path, it, jsonCache(it), schemasDirectory)
74+
FunctionCallTransformer(path, it, jsonCache(it), schemasDirectory, isTest)
7475
}
7576
+::TokenGenerator
7677
+::DataRowSchemaSupertype
7778
+{ it: FirSession ->
78-
ExpressionAnalysisAdditionalChecker(it, jsonCache(it), schemasDirectory)
79+
ExpressionAnalysisAdditionalChecker(it, jsonCache(it), schemasDirectory, isTest)
7980
}
8081
}
8182

@@ -92,7 +93,7 @@ class FirDataFrameComponentRegistrar : CompilerPluginRegistrar() {
9293
override fun ExtensionStorage.registerExtensions(configuration: CompilerConfiguration) {
9394
val schemasDirectory = configuration.get(SCHEMAS)
9495
val path = configuration.get(PATH)
95-
FirExtensionRegistrarAdapter.registerExtension(FirDataFrameExtensionRegistrar(path, schemasDirectory))
96+
FirExtensionRegistrarAdapter.registerExtension(FirDataFrameExtensionRegistrar(path, schemasDirectory, isTest = false))
9697
IrGenerationExtension.registerExtension(IrBodyFiller(path, schemasDirectory))
9798
}
9899

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

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,19 @@ import org.jetbrains.kotlinx.dataframe.plugin.impl.type
4242
class ExpressionAnalysisAdditionalChecker(
4343
session: FirSession,
4444
cache: FirCache<String, PluginDataFrameSchema, KotlinTypeFacade>,
45-
schemasDirectory: String?
45+
schemasDirectory: String?,
46+
isTest: Boolean,
4647
) : FirAdditionalCheckersExtension(session) {
4748
override val expressionCheckers: ExpressionCheckers = object : ExpressionCheckers() {
48-
override val functionCallCheckers: Set<FirFunctionCallChecker> = setOf(Checker(cache, schemasDirectory))
49+
override val functionCallCheckers: Set<FirFunctionCallChecker> = setOf(Checker(cache, schemasDirectory, isTest))
4950
}
5051
}
5152

52-
private class Checker(val cache: FirCache<String, PluginDataFrameSchema, KotlinTypeFacade>, val schemasDirectory: String?) : FirFunctionCallChecker(mppKind = MppCheckerKind.Common) {
53+
private class Checker(
54+
val cache: FirCache<String, PluginDataFrameSchema, KotlinTypeFacade>,
55+
val schemasDirectory: String?,
56+
val isTest: Boolean,
57+
) : FirFunctionCallChecker(mppKind = MppCheckerKind.Common) {
5358
companion object {
5459
val ERROR by error1<KtElement, String>(SourceElementPositioningStrategies.DEFAULT)
5560
val CAST_ERROR by error1<KtElement, String>(SourceElementPositioningStrategies.CALL_ELEMENT_WITH_DOT)
@@ -58,7 +63,7 @@ private class Checker(val cache: FirCache<String, PluginDataFrameSchema, KotlinT
5863
}
5964

6065
override fun check(expression: FirFunctionCall, context: CheckerContext, reporter: DiagnosticReporter) {
61-
with(KotlinTypeFacadeImpl(context.session, cache, schemasDirectory)) {
66+
with(KotlinTypeFacadeImpl(context.session, cache, schemasDirectory, isTest)) {
6267
analyzeCast(expression, reporter, context)
6368
// analyzeRefinedCallShape(expression, reporter = object : InterpretationErrorReporter {
6469
// override var errorReported: Boolean = false

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ class FunctionCallTransformer(
8383
session: FirSession,
8484
override val cache: FirCache<String, PluginDataFrameSchema, KotlinTypeFacade>,
8585
override val schemasDirectory: String?,
86+
override val isTest: Boolean,
8687
) : FirFunctionCallRefinementExtension(session), KotlinTypeFacade {
8788
companion object {
8889
const val DEFAULT_NAME = "DataFrameType"

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ interface KotlinTypeFacade {
3232
val resolutionPath: String? get() = null
3333
val cache: FirCache<String, PluginDataFrameSchema, KotlinTypeFacade>
3434
val schemasDirectory: String?
35+
val isTest: Boolean
3536

3637
fun Marker.type() = type
3738

@@ -110,8 +111,8 @@ private fun String.collectionsId() = ClassId(StandardClassIds.BASE_COLLECTIONS_P
110111
class KotlinTypeFacadeImpl(
111112
override val session: FirSession,
112113
override val cache: FirCache<String, PluginDataFrameSchema, KotlinTypeFacade>,
113-
override val schemasDirectory: String?
114-
114+
override val schemasDirectory: String?,
115+
override val isTest: Boolean
115116
) : KotlinTypeFacade
116117

117118
class Marker private constructor(internal val type: ConeKotlinType) {

plugins/kotlin-dataframe/src/org/jetbrains/kotlinx/dataframe/plugin/interpret.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,15 +90,15 @@ fun <T> KotlinTypeFacade.interpret(
9090
val defaultArguments = processor.expectedArguments.filter { it.defaultValue is Present }.map { it.name }.toSet()
9191
val actualArgsMap = refinedArguments.associateBy { it.name.identifier }.toSortedMap()
9292
val conflictingKeys = additionalArguments.keys intersect actualArgsMap.keys
93-
if (conflictingKeys.isNotEmpty()) {
93+
if (conflictingKeys.isNotEmpty() && isTest) {
9494
interpretationFrameworkError("Conflicting keys: $conflictingKeys")
9595
}
9696
val expectedArgsMap = processor.expectedArguments
9797
.filterNot { it.name.startsWith("typeArg") }
9898
.associateBy { it.name }.toSortedMap().minus(additionalArguments.keys)
9999

100100
val unexpectedArguments = expectedArgsMap.keys - defaultArguments != actualArgsMap.keys - defaultArguments
101-
if (unexpectedArguments) {
101+
if (unexpectedArguments && isTest) {
102102
val message = buildString {
103103
appendLine("ERROR: Different set of arguments")
104104
appendLine("Implementation class: $processor")

plugins/kotlin-dataframe/tests/org/jetbrains/kotlin/fir/dataframe/services/ExtensionRegistrarConfigurators.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,10 @@ class ExperimentalExtensionRegistrarConfigurator(testServices: TestServices) : E
2828
) {
2929
FirExtensionRegistrarAdapter.registerExtension(
3030
FirDataFrameExtensionRegistrar(
31-
configuration.get(PATH)!!,
32-
null
33-
)
31+
configuration.get(PATH)!!,
32+
null,
33+
isTest = true
34+
)
3435
)
3536
IrGenerationExtension.registerExtension(IrBodyFiller(configuration.get(PATH), null))
3637
}

0 commit comments

Comments
 (0)