K2 Scripting: do not report import resolution errors on implicit imports

since implicit imports are used in the gradle scripts, where it seems
difficult to precisely control list of import to avoid
unresolved names. And we can relatively safely ignore
unresolved imports there

#KT-62404 fixed
This commit is contained in:
Ilya Chernikov
2023-10-06 14:46:02 +02:00
committed by Space Team
parent 02dc3c4ddb
commit 65d1c8ce7e
3 changed files with 13 additions and 5 deletions
@@ -43,6 +43,7 @@ import org.jetbrains.kotlin.utils.addToStdlib.filterIsInstanceWithChecker
object FirImportsChecker : FirFileChecker() {
override fun check(declaration: FirFile, context: CheckerContext, reporter: DiagnosticReporter) {
declaration.imports.forEach { import ->
if (import.source?.kind?.shouldSkipErrorTypeReporting == true) return@forEach
if (import is FirErrorImport) return@forEach
if (import.isAllUnder) {
if (import is FirResolvedImport) {
@@ -191,6 +192,7 @@ object FirImportsChecker : FirFileChecker() {
val interestingImports = imports
.filterIsInstanceWithChecker<FirResolvedImport> { import ->
!import.isAllUnder &&
import.source?.kind?.shouldSkipErrorTypeReporting != true &&
import.importedName?.identifierOrNullIfSpecial?.isNotEmpty() == true &&
import.resolvesToClass(context)
}.filterNot { (it.source as? KtFakeSourceElement)?.kind == KtFakeSourceElementKind.ImplicitImport }
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.fir.resolve.transformers
import org.jetbrains.kotlin.KtFakeSourceElementKind
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirFile
@@ -76,10 +77,15 @@ open class FirImportResolveTransformer protected constructor(
private fun transformImportForFqName(fqName: FqName, delegate: FirImport): FirImport {
val (packageFqName, relativeClassFqName, classSymbol) = when (val result = resolveToPackageOrClass(symbolProvider, fqName)) {
is PackageResolutionResult.Error -> return buildErrorImport {
this.delegate = delegate
this.diagnostic = result.diagnostic
}
is PackageResolutionResult.Error ->
return if (delegate.source?.kind == KtFakeSourceElementKind.ImplicitImport) {
delegate
} else {
buildErrorImport {
this.delegate = delegate
this.diagnostic = result.diagnostic
}
}
is PackageResolutionResult.PackageOrClass -> result
}
val firClass = classSymbol?.fir as? FirRegularClass
@@ -284,7 +284,7 @@ sealed class KtFakeSourceElementKind(final override val shouldSkipErrorTypeRepor
object PropertyTypeFromGetterReturnType : KtFakeSourceElementKind()
// Scripts get implicit imports from their configurations
object ImplicitImport : KtFakeSourceElementKind()
object ImplicitImport : KtFakeSourceElementKind(shouldSkipErrorTypeReporting = true)
// For provided parameters inside a script
object ScriptParameter : KtFakeSourceElementKind()