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:
committed by
Space Team
parent
02dc3c4ddb
commit
65d1c8ce7e
+2
@@ -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 }
|
||||
|
||||
+10
-4
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user