[FIR] KT-57803: Report the error message for light tree
The renaming prevents the JVM clash. ^KT-57803 Fixed
This commit is contained in:
committed by
Space Team
parent
7f74950993
commit
23f87eda1f
@@ -16,15 +16,18 @@
|
||||
|
||||
package org.jetbrains.kotlin.cli.common
|
||||
|
||||
import org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.KtSourceFileLinesMapping
|
||||
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
|
||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
|
||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
||||
import org.jetbrains.kotlin.cli.common.messages.MessageUtil
|
||||
import org.jetbrains.kotlin.cli.common.messages.*
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.config.IncrementalCompilation
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.packageFqName
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.isSubpackageOf
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.text
|
||||
import org.jetbrains.kotlin.util.Logger
|
||||
import java.io.File
|
||||
import kotlin.system.exitProcess
|
||||
@@ -37,17 +40,23 @@ fun incrementalCompilationIsEnabledForJs(arguments: CommonCompilerArguments): Bo
|
||||
return arguments.incrementalCompilation ?: IncrementalCompilation.isEnabledForJs()
|
||||
}
|
||||
|
||||
fun checkKotlinPackageUsage(configuration: CompilerConfiguration, files: Collection<KtFile>, messageCollector: MessageCollector): Boolean {
|
||||
fun <F> checkKotlinPackageUsage(
|
||||
configuration: CompilerConfiguration,
|
||||
files: Collection<F>,
|
||||
messageCollector: MessageCollector,
|
||||
getPackage: (F) -> FqName,
|
||||
getMessageLocation: (F) -> CompilerMessageSourceLocation?,
|
||||
): Boolean {
|
||||
if (configuration.getBoolean(CLIConfigurationKeys.ALLOW_KOTLIN_PACKAGE)) {
|
||||
return true
|
||||
}
|
||||
val kotlinPackage = FqName("kotlin")
|
||||
for (file in files) {
|
||||
if (file.packageFqName.isSubpackageOf(kotlinPackage)) {
|
||||
if (getPackage(file).isSubpackageOf(kotlinPackage)) {
|
||||
messageCollector.report(
|
||||
CompilerMessageSeverity.ERROR,
|
||||
"Only the Kotlin standard library is allowed to use the 'kotlin' package",
|
||||
MessageUtil.psiElementToMessageLocation(file.packageDirective!!)
|
||||
getMessageLocation(file),
|
||||
)
|
||||
return false
|
||||
}
|
||||
@@ -55,8 +64,46 @@ fun checkKotlinPackageUsage(configuration: CompilerConfiguration, files: Collect
|
||||
return true
|
||||
}
|
||||
|
||||
fun checkKotlinPackageUsage(configuration: CompilerConfiguration, files: Collection<KtFile>): Boolean =
|
||||
checkKotlinPackageUsage(configuration, files, configuration.get(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, MessageCollector.NONE))
|
||||
private val CompilerConfiguration.messageCollector: MessageCollector
|
||||
get() = get(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, MessageCollector.NONE)
|
||||
|
||||
fun checkKotlinPackageUsageForPsi(
|
||||
configuration: CompilerConfiguration,
|
||||
files: Collection<KtFile>,
|
||||
messageCollector: MessageCollector = configuration.messageCollector,
|
||||
) =
|
||||
checkKotlinPackageUsage(
|
||||
configuration, files, messageCollector,
|
||||
getPackage = { it.packageFqName },
|
||||
getMessageLocation = { MessageUtil.psiElementToMessageLocation(it.packageDirective!!) },
|
||||
)
|
||||
|
||||
fun checkKotlinPackageUsageForLightTree(
|
||||
configuration: CompilerConfiguration,
|
||||
files: Collection<FirFile>,
|
||||
messageCollector: MessageCollector = configuration.messageCollector,
|
||||
) =
|
||||
checkKotlinPackageUsage(
|
||||
configuration, files, messageCollector,
|
||||
getPackage = { it.packageFqName },
|
||||
getMessageLocation = { it.packageDirective.source?.getLocationWithin(it) },
|
||||
)
|
||||
|
||||
private fun KtSourceElement.getLocationWithin(file: FirFile): CompilerMessageLocationWithRange? {
|
||||
val sourceFile = file.sourceFile ?: return null
|
||||
val (startLine, startColumn) = file.getLineAndColumnStartingWithOnesAt(startOffset) ?: return null
|
||||
val (endLine, endColumn) = file.getLineAndColumnStartingWithOnesAt(endOffset) ?: return null
|
||||
return CompilerMessageLocationWithRange.create(sourceFile.path, startLine, startColumn, endLine, endColumn, text?.toString())
|
||||
}
|
||||
|
||||
private fun FirFile.getLineAndColumnStartingWithOnesAt(offset: Int?): Pair<Int, Int>? {
|
||||
return offset?.let { sourceFileLinesMapping?.getLineAndColumnByOffsetStartingWithOnes(it) }
|
||||
}
|
||||
|
||||
private fun KtSourceFileLinesMapping.getLineAndColumnByOffsetStartingWithOnes(startOffset: Int): Pair<Int, Int> {
|
||||
val (line, column) = getLineAndColumnByOffset(startOffset)
|
||||
return line + 1 to column + 1
|
||||
}
|
||||
|
||||
fun <PathProvider : Any> getLibraryFromHome(
|
||||
paths: PathProvider?,
|
||||
|
||||
+1
-1
@@ -137,7 +137,7 @@ object FirKotlinToJvmBytecodeCompiler {
|
||||
performanceManager?.notifyAnalysisStarted()
|
||||
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled()
|
||||
|
||||
if (!checkKotlinPackageUsage(moduleConfiguration, allSources)) return null
|
||||
if (!checkKotlinPackageUsageForPsi(moduleConfiguration, allSources)) return null
|
||||
|
||||
val renderDiagnosticNames = moduleConfiguration.getBoolean(CLIConfigurationKeys.RENDER_DIAGNOSTIC_INTERNAL_NAME)
|
||||
|
||||
|
||||
+3
-3
@@ -15,7 +15,7 @@ import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.kotlin.analyzer.AnalysisResult
|
||||
import org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory
|
||||
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
|
||||
import org.jetbrains.kotlin.cli.common.checkKotlinPackageUsage
|
||||
import org.jetbrains.kotlin.cli.common.checkKotlinPackageUsageForPsi
|
||||
import org.jetbrains.kotlin.cli.common.config.addKotlinSourceRoot
|
||||
import org.jetbrains.kotlin.cli.common.fir.FirDiagnosticsCompilerResultsReporter
|
||||
import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
|
||||
@@ -107,7 +107,7 @@ object KotlinToJVMBytecodeCompiler {
|
||||
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled()
|
||||
|
||||
val ktFiles = module.getSourceFiles(environment.getSourceFiles(), localFileSystem, chunk.size > 1, buildFile)
|
||||
if (!checkKotlinPackageUsage(environment.configuration, ktFiles)) return false
|
||||
if (!checkKotlinPackageUsageForPsi(environment.configuration, ktFiles)) return false
|
||||
val moduleConfiguration = projectConfiguration.applyModuleProperties(module, buildFile)
|
||||
|
||||
val backendInput = codegenFactory.getModuleChunkBackendInput(wholeBackendInput, ktFiles)
|
||||
@@ -133,7 +133,7 @@ object KotlinToJVMBytecodeCompiler {
|
||||
moduleVisibilityManager.addFriendPath(path)
|
||||
}
|
||||
|
||||
if (!checkKotlinPackageUsage(environment.configuration, environment.getSourceFiles())) return false
|
||||
if (!checkKotlinPackageUsageForPsi(environment.configuration, environment.getSourceFiles())) return false
|
||||
|
||||
val generationState = analyzeAndGenerate(environment) ?: return false
|
||||
|
||||
|
||||
@@ -117,6 +117,10 @@ fun compileModulesUsingFrontendIrAndLightTree(
|
||||
performanceManager
|
||||
)
|
||||
|
||||
if (!checkKotlinPackageUsageForLightTree(moduleConfiguration, analysisResults.outputs.flatMap { it.fir })) {
|
||||
return false
|
||||
}
|
||||
|
||||
performanceManager?.notifyAnalysisFinished()
|
||||
|
||||
// TODO: consider what to do if many modules has main classes
|
||||
|
||||
@@ -31,7 +31,6 @@ import org.jetbrains.kotlin.codegen.CompilationException
|
||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.config.Services
|
||||
import org.jetbrains.kotlin.config.getModuleNameForSource
|
||||
import org.jetbrains.kotlin.metadata.builtins.BuiltInsBinaryVersion
|
||||
import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion
|
||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil
|
||||
@@ -115,7 +114,7 @@ class K2MetadataCompiler : CLICompiler<K2MetadataCompilerArguments>() {
|
||||
return ExitCode.COMPILATION_ERROR
|
||||
}
|
||||
|
||||
checkKotlinPackageUsage(environment.configuration, environment.getSourceFiles())
|
||||
checkKotlinPackageUsageForPsi(environment.configuration, environment.getSourceFiles())
|
||||
|
||||
try {
|
||||
val useFir = configuration.getBoolean(CommonConfigurationKeys.USE_FIR)
|
||||
|
||||
Reference in New Issue
Block a user