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() {
|
object FirImportsChecker : FirFileChecker() {
|
||||||
override fun check(declaration: FirFile, context: CheckerContext, reporter: DiagnosticReporter) {
|
override fun check(declaration: FirFile, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
declaration.imports.forEach { import ->
|
declaration.imports.forEach { import ->
|
||||||
|
if (import.source?.kind?.shouldSkipErrorTypeReporting == true) return@forEach
|
||||||
if (import is FirErrorImport) return@forEach
|
if (import is FirErrorImport) return@forEach
|
||||||
if (import.isAllUnder) {
|
if (import.isAllUnder) {
|
||||||
if (import is FirResolvedImport) {
|
if (import is FirResolvedImport) {
|
||||||
@@ -191,6 +192,7 @@ object FirImportsChecker : FirFileChecker() {
|
|||||||
val interestingImports = imports
|
val interestingImports = imports
|
||||||
.filterIsInstanceWithChecker<FirResolvedImport> { import ->
|
.filterIsInstanceWithChecker<FirResolvedImport> { import ->
|
||||||
!import.isAllUnder &&
|
!import.isAllUnder &&
|
||||||
|
import.source?.kind?.shouldSkipErrorTypeReporting != true &&
|
||||||
import.importedName?.identifierOrNullIfSpecial?.isNotEmpty() == true &&
|
import.importedName?.identifierOrNullIfSpecial?.isNotEmpty() == true &&
|
||||||
import.resolvesToClass(context)
|
import.resolvesToClass(context)
|
||||||
}.filterNot { (it.source as? KtFakeSourceElement)?.kind == KtFakeSourceElementKind.ImplicitImport }
|
}.filterNot { (it.source as? KtFakeSourceElement)?.kind == KtFakeSourceElementKind.ImplicitImport }
|
||||||
|
|||||||
+10
-4
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.resolve.transformers
|
package org.jetbrains.kotlin.fir.resolve.transformers
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.KtFakeSourceElementKind
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
@@ -76,10 +77,15 @@ open class FirImportResolveTransformer protected constructor(
|
|||||||
|
|
||||||
private fun transformImportForFqName(fqName: FqName, delegate: FirImport): FirImport {
|
private fun transformImportForFqName(fqName: FqName, delegate: FirImport): FirImport {
|
||||||
val (packageFqName, relativeClassFqName, classSymbol) = when (val result = resolveToPackageOrClass(symbolProvider, fqName)) {
|
val (packageFqName, relativeClassFqName, classSymbol) = when (val result = resolveToPackageOrClass(symbolProvider, fqName)) {
|
||||||
is PackageResolutionResult.Error -> return buildErrorImport {
|
is PackageResolutionResult.Error ->
|
||||||
this.delegate = delegate
|
return if (delegate.source?.kind == KtFakeSourceElementKind.ImplicitImport) {
|
||||||
this.diagnostic = result.diagnostic
|
delegate
|
||||||
}
|
} else {
|
||||||
|
buildErrorImport {
|
||||||
|
this.delegate = delegate
|
||||||
|
this.diagnostic = result.diagnostic
|
||||||
|
}
|
||||||
|
}
|
||||||
is PackageResolutionResult.PackageOrClass -> result
|
is PackageResolutionResult.PackageOrClass -> result
|
||||||
}
|
}
|
||||||
val firClass = classSymbol?.fir as? FirRegularClass
|
val firClass = classSymbol?.fir as? FirRegularClass
|
||||||
|
|||||||
@@ -284,7 +284,7 @@ sealed class KtFakeSourceElementKind(final override val shouldSkipErrorTypeRepor
|
|||||||
object PropertyTypeFromGetterReturnType : KtFakeSourceElementKind()
|
object PropertyTypeFromGetterReturnType : KtFakeSourceElementKind()
|
||||||
|
|
||||||
// Scripts get implicit imports from their configurations
|
// Scripts get implicit imports from their configurations
|
||||||
object ImplicitImport : KtFakeSourceElementKind()
|
object ImplicitImport : KtFakeSourceElementKind(shouldSkipErrorTypeReporting = true)
|
||||||
|
|
||||||
// For provided parameters inside a script
|
// For provided parameters inside a script
|
||||||
object ScriptParameter : KtFakeSourceElementKind()
|
object ScriptParameter : KtFakeSourceElementKind()
|
||||||
|
|||||||
Reference in New Issue
Block a user