From f09fc9a473bea0e18d01cfebdfd58589e23be8c9 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 1 Dec 2021 16:28:13 +0300 Subject: [PATCH] Optimize FirImportsChecker using lazy evaluation --- .../checkers/declaration/FirImportsChecker.kt | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirImportsChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirImportsChecker.kt index b483c59e81f..6692494dce7 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirImportsChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirImportsChecker.kt @@ -79,21 +79,23 @@ object FirImportsChecker : FirFileChecker() { } } } - } else { - val importedClassId = ClassId.topLevel(importedFqName) - val resolvedToClass = importedClassId.resolveToClass(context) != null - val resolvedToSymbols = symbolProvider.getTopLevelCallableSymbols(importedFqName.parent(), importedName).isNotEmpty() - val resolvedToPackages = symbolProvider.getPackage(importedFqName) != null - when { - resolvedToClass || resolvedToSymbols -> return - resolvedToPackages -> reporter.reportOn(import.source, FirErrors.PACKAGE_CANNOT_BE_IMPORTED, context) - else -> reporter.reportOn( - import.source, - FirErrors.UNRESOLVED_IMPORT, - importedName.asString(), - context, - ) - } + return + } + when { + ClassId.topLevel(importedFqName).resolveToClass(context) != null -> return + // Note: two checks below are both heavyweight, so we should do them lazily! + symbolProvider.getTopLevelCallableSymbols(importedFqName.parent(), importedName).isNotEmpty() -> return + symbolProvider.getPackage(importedFqName) != null -> reporter.reportOn( + import.source, + FirErrors.PACKAGE_CANNOT_BE_IMPORTED, + context + ) + else -> reporter.reportOn( + import.source, + FirErrors.UNRESOLVED_IMPORT, + importedName.asString(), + context, + ) } }