K2 Scripting: report error on attempt to use scripts in common roots
#KT-65967 fixed
This commit is contained in:
committed by
Space Team
parent
cdf4b17052
commit
10dbe73828
@@ -357,7 +357,7 @@ private inline fun <F> prepareSessions(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val nonScriptSessions =when {
|
val nonScriptSessions = when {
|
||||||
metadataCompilationMode || !isMppEnabled -> {
|
metadataCompilationMode || !isMppEnabled -> {
|
||||||
listOf(
|
listOf(
|
||||||
createSingleSession(
|
createSingleSession(
|
||||||
|
|||||||
+20
-1
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.pipeline.generateCodeFromIr
|
|||||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||||
import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
|
import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
|
||||||
import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
|
import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
|
||||||
|
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
|
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
|
||||||
@@ -56,6 +57,7 @@ import org.jetbrains.kotlin.resolve.multiplatform.hmppModuleName
|
|||||||
import org.jetbrains.kotlin.resolve.multiplatform.isCommonSource
|
import org.jetbrains.kotlin.resolve.multiplatform.isCommonSource
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.runIf
|
import org.jetbrains.kotlin.utils.addToStdlib.runIf
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.runUnless
|
import org.jetbrains.kotlin.utils.addToStdlib.runUnless
|
||||||
|
import org.jetbrains.kotlin.utils.fileUtils.descendantRelativeTo
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
object FirKotlinToJvmBytecodeCompiler {
|
object FirKotlinToJvmBytecodeCompiler {
|
||||||
@@ -194,6 +196,8 @@ object FirKotlinToJvmBytecodeCompiler {
|
|||||||
AnalyzerWithCompilerReport.reportSyntaxErrors(ktFile, messageCollector).isHasErrors or errorsFound
|
AnalyzerWithCompilerReport.reportSyntaxErrors(ktFile, messageCollector).isHasErrors or errorsFound
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val scriptsInCommonSourcesErrors = reportCommonScriptsError(ktFiles)
|
||||||
|
|
||||||
val sourceScope = projectEnvironment.getSearchScopeByPsiFiles(ktFiles) + projectEnvironment.getSearchScopeForProjectJavaSources()
|
val sourceScope = projectEnvironment.getSearchScopeByPsiFiles(ktFiles) + projectEnvironment.getSearchScopeForProjectJavaSources()
|
||||||
|
|
||||||
var librariesScope = projectEnvironment.getSearchScopeForProjectLibraries()
|
var librariesScope = projectEnvironment.getSearchScopeForProjectLibraries()
|
||||||
@@ -224,7 +228,22 @@ object FirKotlinToJvmBytecodeCompiler {
|
|||||||
}
|
}
|
||||||
outputs.runPlatformCheckers(diagnosticsReporter)
|
outputs.runPlatformCheckers(diagnosticsReporter)
|
||||||
|
|
||||||
return runUnless(syntaxErrors || diagnosticsReporter.hasErrors) { FirResult(outputs) }
|
return runUnless(syntaxErrors || scriptsInCommonSourcesErrors || diagnosticsReporter.hasErrors) { FirResult(outputs) }
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun FrontendContext.reportCommonScriptsError(ktFiles: List<KtFile>): Boolean {
|
||||||
|
val lastHmppModule = configuration.get(CommonConfigurationKeys.HMPP_MODULE_STRUCTURE)?.modules?.lastOrNull()
|
||||||
|
val commonScripts = ktFiles.filter { it.isScript() && (it.isCommonSource == true || it.hmppModuleName != lastHmppModule?.name) }
|
||||||
|
if (commonScripts.isNotEmpty()) {
|
||||||
|
val cwd = File(".").absoluteFile
|
||||||
|
fun renderFile(ktFile: KtFile) = File(ktFile.virtualFilePath).descendantRelativeTo(cwd).path
|
||||||
|
messageCollector.report(
|
||||||
|
CompilerMessageSeverity.ERROR,
|
||||||
|
"Script files in common source roots are not supported. Misplaced files:\n ${commonScripts.joinToString("\n ", transform = ::renderFile)}"
|
||||||
|
)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun CompilationContext.runBackend(
|
private fun CompilationContext.runBackend(
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
-Xuse-fir-lt=false
|
||||||
|
-Xallow-any-scripts-in-source-roots
|
||||||
|
$TESTDATA_DIR$/src/a.kt
|
||||||
|
$TESTDATA_DIR$/src/b.kt
|
||||||
|
$TESTDATA_DIR$/src/c.kt
|
||||||
|
$TESTDATA_DIR$/src/s.kts
|
||||||
|
$TESTDATA_DIR$/src/s1.kts
|
||||||
|
$TESTDATA_DIR$/src/s2.kts
|
||||||
|
-d
|
||||||
|
$TEMP_DIR$
|
||||||
|
-language-version
|
||||||
|
2.0
|
||||||
|
-XXLanguage\:+MultiPlatformProjects
|
||||||
|
-Xfragments=a
|
||||||
|
-Xfragments=b
|
||||||
|
-Xfragments=c
|
||||||
|
-Xfragment-sources=a\:$TESTDATA_DIR$/src/a.kt,a\:$TESTDATA_DIR$/src/s1.kts
|
||||||
|
-Xfragment-sources=b\:$TESTDATA_DIR$/src/b.kt,b\:$TESTDATA_DIR$/src/s2.kts
|
||||||
|
-Xfragment-sources=c\:$TESTDATA_DIR$/src/c.kt,c\:$TESTDATA_DIR$/src/s.kts
|
||||||
|
-Xfragment-refines=b\:a
|
||||||
|
-Xfragment-refines=c\:b
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
warning: ATTENTION!
|
||||||
|
This build uses unsafe internal compiler arguments:
|
||||||
|
|
||||||
|
-XXLanguage:+MultiPlatformProjects
|
||||||
|
|
||||||
|
This mode is not recommended for production use,
|
||||||
|
as no stability/compatibility guarantees are given on
|
||||||
|
compiler or generated code. Use it at your own risk!
|
||||||
|
|
||||||
|
error: script files in common source roots are not supported. Misplaced files:
|
||||||
|
compiler/testData/cli/jvm/hmpp/src/s1.kts
|
||||||
|
compiler/testData/cli/jvm/hmpp/src/s2.kts
|
||||||
|
COMPILATION_ERROR
|
||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
|
||||||
|
val x = 42
|
||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
|
||||||
|
val x = 42
|
||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
|
||||||
|
val x = 42
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
-Xuse-fir-lt=false
|
||||||
|
-Xallow-any-scripts-in-source-roots
|
||||||
|
$TESTDATA_DIR$/src/a.kt
|
||||||
|
$TESTDATA_DIR$/src/b.kt
|
||||||
|
$TESTDATA_DIR$/src/c.kt
|
||||||
|
$TESTDATA_DIR$/src/s.kts
|
||||||
|
-d
|
||||||
|
$TEMP_DIR$
|
||||||
|
-language-version
|
||||||
|
2.0
|
||||||
|
-XXLanguage\:+MultiPlatformProjects
|
||||||
|
-Xexpect-actual-classes
|
||||||
|
-Xfragments=a
|
||||||
|
-Xfragments=b
|
||||||
|
-Xfragments=c
|
||||||
|
-Xfragment-sources=a\:$TESTDATA_DIR$/src/a.kt
|
||||||
|
-Xfragment-sources=b\:$TESTDATA_DIR$/src/b.kt
|
||||||
|
-Xfragment-sources=c\:$TESTDATA_DIR$/src/c.kt,c\:$TESTDATA_DIR$/src/s.kts
|
||||||
|
-Xfragment-refines=b\:a
|
||||||
|
-Xfragment-refines=c\:b
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
warning: ATTENTION!
|
||||||
|
This build uses unsafe internal compiler arguments:
|
||||||
|
|
||||||
|
-XXLanguage:+MultiPlatformProjects
|
||||||
|
|
||||||
|
This mode is not recommended for production use,
|
||||||
|
as no stability/compatibility guarantees are given on
|
||||||
|
compiler or generated code. Use it at your own risk!
|
||||||
|
|
||||||
|
OK
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
-Xuse-fir-lt=false
|
||||||
|
-Xallow-any-scripts-in-source-roots
|
||||||
|
$TESTDATA_DIR$/firMultiplatformCompilationWithoutErrors/common.kt
|
||||||
|
$TESTDATA_DIR$/firMultiplatformCompilationWithoutErrors/jvm.kt
|
||||||
|
$TESTDATA_DIR$/scripts/s.kts
|
||||||
|
$TESTDATA_DIR$/scripts/s1.kts
|
||||||
|
-Xcommon-sources=$TESTDATA_DIR$/firMultiplatformCompilationWithoutErrors/common.kt,$TESTDATA_DIR$/scripts/s1.kts
|
||||||
|
-language-version
|
||||||
|
2.0
|
||||||
|
-cp
|
||||||
|
.
|
||||||
|
-d
|
||||||
|
$TEMP_DIR$
|
||||||
|
-XXLanguage\:+MultiPlatformProjects
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
warning: ATTENTION!
|
||||||
|
This build uses unsafe internal compiler arguments:
|
||||||
|
|
||||||
|
-XXLanguage:+MultiPlatformProjects
|
||||||
|
|
||||||
|
This mode is not recommended for production use,
|
||||||
|
as no stability/compatibility guarantees are given on
|
||||||
|
compiler or generated code. Use it at your own risk!
|
||||||
|
|
||||||
|
error: script files in common source roots are not supported. Misplaced files:
|
||||||
|
compiler/testData/cli/jvm/scripts/s1.kts
|
||||||
|
COMPILATION_ERROR
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
-Xuse-fir-lt=false
|
||||||
|
-Xallow-any-scripts-in-source-roots
|
||||||
|
$TESTDATA_DIR$/firMultiplatformCompilationWithoutErrors/common.kt
|
||||||
|
$TESTDATA_DIR$/firMultiplatformCompilationWithoutErrors/jvm.kt
|
||||||
|
$TESTDATA_DIR$/scripts/s.kts
|
||||||
|
-Xcommon-sources
|
||||||
|
$TESTDATA_DIR$/firMultiplatformCompilationWithoutErrors/common.kt
|
||||||
|
-language-version
|
||||||
|
2.0
|
||||||
|
-cp
|
||||||
|
.
|
||||||
|
-d
|
||||||
|
$TEMP_DIR$
|
||||||
|
-XXLanguage\:+MultiPlatformProjects
|
||||||
|
-Xexpect-actual-classes
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
warning: advanced option value is passed in an obsolete form. Please use the '=' character to specify the value: -Xcommon-sources=...
|
||||||
|
warning: ATTENTION!
|
||||||
|
This build uses unsafe internal compiler arguments:
|
||||||
|
|
||||||
|
-XXLanguage:+MultiPlatformProjects
|
||||||
|
|
||||||
|
This mode is not recommended for production use,
|
||||||
|
as no stability/compatibility guarantees are given on
|
||||||
|
compiler or generated code. Use it at your own risk!
|
||||||
|
|
||||||
|
OK
|
||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
|
||||||
|
val x = 42
|
||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
|
||||||
|
val x = 42
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
// TARGET_BACKEND: JVM_IR
|
// TARGET_BACKEND: JVM_IR
|
||||||
// IGNORE_LIGHT_ANALYSIS
|
// IGNORE_LIGHT_ANALYSIS
|
||||||
// JVM_ABI_K1_K2_DIFF:
|
// JVM_ABI_K1_K2_DIFF: KT-62465, KT-63960
|
||||||
// LANGUAGE: +ReferencesToSyntheticJavaProperties
|
// LANGUAGE: +ReferencesToSyntheticJavaProperties
|
||||||
// LANGUAGE: -SkipStandaloneScriptsInSourceRoots
|
// LANGUAGE: -SkipStandaloneScriptsInSourceRoots
|
||||||
// WITH_STDLIB
|
// WITH_STDLIB
|
||||||
|
|||||||
@@ -162,6 +162,11 @@ public class CliTestGenerated extends AbstractCliTest {
|
|||||||
runTest("compiler/testData/cli/jvm/hmpp/sameSourceInDifferentFragments.args");
|
runTest("compiler/testData/cli/jvm/hmpp/sameSourceInDifferentFragments.args");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("scriptInCommonFragment.args")
|
||||||
|
public void testScriptInCommonFragment() {
|
||||||
|
runTest("compiler/testData/cli/jvm/hmpp/scriptInCommonFragment.args");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("sourceNotInAnyFragment.args")
|
@TestMetadata("sourceNotInAnyFragment.args")
|
||||||
public void testSourceNotInAnyFragment() {
|
public void testSourceNotInAnyFragment() {
|
||||||
runTest("compiler/testData/cli/jvm/hmpp/sourceNotInAnyFragment.args");
|
runTest("compiler/testData/cli/jvm/hmpp/sourceNotInAnyFragment.args");
|
||||||
@@ -176,6 +181,11 @@ public class CliTestGenerated extends AbstractCliTest {
|
|||||||
public void testSuccessfulCompilation2() {
|
public void testSuccessfulCompilation2() {
|
||||||
runTest("compiler/testData/cli/jvm/hmpp/successfulCompilation2.args");
|
runTest("compiler/testData/cli/jvm/hmpp/successfulCompilation2.args");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("successfulCompilationWithScript.args")
|
||||||
|
public void testSuccessfulCompilationWithScript() {
|
||||||
|
runTest("compiler/testData/cli/jvm/hmpp/successfulCompilationWithScript.args");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("compiler/testData/cli/jvm")
|
@TestMetadata("compiler/testData/cli/jvm")
|
||||||
@@ -1000,6 +1010,16 @@ public class CliTestGenerated extends AbstractCliTest {
|
|||||||
runTest("compiler/testData/cli/jvm/modulesWithDependencyCycle.args");
|
runTest("compiler/testData/cli/jvm/modulesWithDependencyCycle.args");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("multiplatformCompilationWithCommonScript.args")
|
||||||
|
public void testMultiplatformCompilationWithCommonScript() {
|
||||||
|
runTest("compiler/testData/cli/jvm/multiplatformCompilationWithCommonScript.args");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("multiplatformCompilationWithScript.args")
|
||||||
|
public void testMultiplatformCompilationWithScript() {
|
||||||
|
runTest("compiler/testData/cli/jvm/multiplatformCompilationWithScript.args");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("multipleTextRangesInDiagnosticsOrder.args")
|
@TestMetadata("multipleTextRangesInDiagnosticsOrder.args")
|
||||||
public void testMultipleTextRangesInDiagnosticsOrder() {
|
public void testMultipleTextRangesInDiagnosticsOrder() {
|
||||||
runTest("compiler/testData/cli/jvm/multipleTextRangesInDiagnosticsOrder.args");
|
runTest("compiler/testData/cli/jvm/multipleTextRangesInDiagnosticsOrder.args");
|
||||||
|
|||||||
Reference in New Issue
Block a user