Optimize FirImportsChecker using lazy evaluation

This commit is contained in:
Mikhail Glukhikh
2021-12-01 16:28:13 +03:00
committed by teamcityserver
parent 18f7a760bb
commit f09fc9a473
@@ -79,14 +79,17 @@ object FirImportsChecker : FirFileChecker() {
} }
} }
} }
} else { return
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 { when {
resolvedToClass || resolvedToSymbols -> return ClassId.topLevel(importedFqName).resolveToClass(context) != null -> return
resolvedToPackages -> reporter.reportOn(import.source, FirErrors.PACKAGE_CANNOT_BE_IMPORTED, context) // 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( else -> reporter.reportOn(
import.source, import.source,
FirErrors.UNRESOLVED_IMPORT, FirErrors.UNRESOLVED_IMPORT,
@@ -95,7 +98,6 @@ object FirImportsChecker : FirFileChecker() {
) )
} }
} }
}
private fun checkConflictingImports(imports: List<FirImport>, context: CheckerContext, reporter: DiagnosticReporter) { private fun checkConflictingImports(imports: List<FirImport>, context: CheckerContext, reporter: DiagnosticReporter) {
val interestingImports = imports val interestingImports = imports