diff --git a/plugins/pill/pill-importer/src/ModelParser.kt b/plugins/pill/pill-importer/src/ModelParser.kt index 1fb73321751..87ae5e35616 100644 --- a/plugins/pill/pill-importer/src/ModelParser.kt +++ b/plugins/pill/pill-importer/src/ModelParser.kt @@ -269,17 +269,16 @@ class ModelParser(private val variant: Variant, private val modulePrefix: String method.invoke(kotlinCompileTask) as List } - fun parseBoolean(name: String) = compileArguments.contains("-$name") - fun parseString(name: String) = compileArguments.dropWhile { it != "-$name" }.drop(1).firstOrNull() - - val extraArguments = compileArguments.filter { it.startsWith("-X") && !it.startsWith("-Xplugin=") } + val extraArguments = getExtraArguments(compileArguments) val pluginClasspath = mutableListOf() - if (project.plugins.hasPlugin("org.jetbrains.kotlin.plugin.serialization")) { pluginClasspath += "\$KOTLIN_BUNDLED\$/lib/kotlinx-serialization-compiler-plugin.jar" } + fun parseBoolean(name: String) = compileArguments.contains("-$name") + fun parseString(name: String) = compileArguments.dropWhile { it != "-$name" }.drop(1).firstOrNull() + return PSourceRootKotlinOptions( parseBoolean("no-stdlib"), parseBoolean("no-reflect"), @@ -316,6 +315,34 @@ class ModelParser(private val variant: Variant, private val modulePrefix: String return@map PDependency.ModuleLibrary(library) } } + + private companion object { + private val SKIPPED_STANDALONE_ARGUMENTS = + listOf("-no-stdlib", "-no-reflect", "-Xfriend-paths=", "-Xbuild-file=", "-Xplugin=") + + private val SKIPPED_ARGUMENTS_WITH_VALUE = + listOf("-classpath", "-d", "-module-name", "-api-version", "-language-version", "-jvm-target", "-P") + + private fun getExtraArguments(args: List): List { + val result = mutableListOf() + var index = 0 + while (index < args.size) { + val arg = args[index] + + if (SKIPPED_STANDALONE_ARGUMENTS.any { arg.startsWith(it) }) { + index += 1 + continue + } else if (SKIPPED_ARGUMENTS_WITH_VALUE.any { arg.startsWith(it) }) { + index += 2 // Skip also the value + continue + } + + result += arg + index += 1 + } + return result + } + } } private val SourceSet.isTestSourceSet: Boolean