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,21 +79,23 @@ object FirImportsChecker : FirFileChecker() {
} }
} }
} }
} else { return
val importedClassId = ClassId.topLevel(importedFqName) }
val resolvedToClass = importedClassId.resolveToClass(context) != null when {
val resolvedToSymbols = symbolProvider.getTopLevelCallableSymbols(importedFqName.parent(), importedName).isNotEmpty() ClassId.topLevel(importedFqName).resolveToClass(context) != null -> return
val resolvedToPackages = symbolProvider.getPackage(importedFqName) != null // Note: two checks below are both heavyweight, so we should do them lazily!
when { symbolProvider.getTopLevelCallableSymbols(importedFqName.parent(), importedName).isNotEmpty() -> return
resolvedToClass || resolvedToSymbols -> return symbolProvider.getPackage(importedFqName) != null -> reporter.reportOn(
resolvedToPackages -> reporter.reportOn(import.source, FirErrors.PACKAGE_CANNOT_BE_IMPORTED, context) import.source,
else -> reporter.reportOn( FirErrors.PACKAGE_CANNOT_BE_IMPORTED,
import.source, context
FirErrors.UNRESOLVED_IMPORT, )
importedName.asString(), else -> reporter.reportOn(
context, import.source,
) FirErrors.UNRESOLVED_IMPORT,
} importedName.asString(),
context,
)
} }
} }