From aec2b1df2fcb1bf2dd33a0dccc574dc4899cd245 Mon Sep 17 00:00:00 2001 From: Dmitry Murzin Date: Sun, 13 Sep 2020 18:37:35 +0300 Subject: [PATCH] Add debug checks after DefMap built --- .../rust/lang/core/resolve2/FacadeBuild.kt | 1 + .../lang/core/resolve2/FacadeBuildDebug.kt | 36 +++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 src/main/kotlin/org/rust/lang/core/resolve2/FacadeBuildDebug.kt diff --git a/src/main/kotlin/org/rust/lang/core/resolve2/FacadeBuild.kt b/src/main/kotlin/org/rust/lang/core/resolve2/FacadeBuild.kt index 4788769bdc1..d1cbece12dc 100644 --- a/src/main/kotlin/org/rust/lang/core/resolve2/FacadeBuild.kt +++ b/src/main/kotlin/org/rust/lang/core/resolve2/FacadeBuild.kt @@ -41,6 +41,7 @@ import java.util.concurrent.atomic.AtomicInteger DefCollector(project, defMap, context).collect() project.defMapService.afterDefMapBuilt(defMap) defMap.afterBuilt() + afterDefMapBuiltDebug(defMap, context) return defMap } diff --git a/src/main/kotlin/org/rust/lang/core/resolve2/FacadeBuildDebug.kt b/src/main/kotlin/org/rust/lang/core/resolve2/FacadeBuildDebug.kt new file mode 100644 index 00000000000..2f29f224008 --- /dev/null +++ b/src/main/kotlin/org/rust/lang/core/resolve2/FacadeBuildDebug.kt @@ -0,0 +1,36 @@ +/* + * Use of this source code is governed by the MIT license that can be + * found in the LICENSE file. + */ + +package org.rust.lang.core.resolve2 + +import com.intellij.openapiext.isUnitTestMode + +fun afterDefMapBuiltDebug(defMap: CrateDefMap, context: CollectorContext) { + if (!isUnitTestMode) return + checkNoUnresolvedImportsAndMacros2(context.imports, context.macroCalls) + // printStatistics(defMap) +} + +private fun checkNoUnresolvedImportsAndMacros2(imports: MutableList, macros: MutableList) { + val unresolvedImports = imports.filter { it.containingMod.isDeeplyEnabledByCfg } + val unresolvedMacros = macros.filter { it.containingMod.isDeeplyEnabledByCfg } + + if (unresolvedImports.isNotEmpty() || unresolvedMacros.isNotEmpty()) { + check(true) + } + // check(unresolvedImports.isEmpty()) { "Found ${unresolvedImports.size} unresolved imports: $unresolvedImports" } + // check(unresolvedMacros.isEmpty()) { "Found ${unresolvedMacros.size} unresolved macroCalls: $unresolvedMacros" } +} + +private fun printStatistics(defMap: CrateDefMap) { + val modules = defMap.root.descendantModules + val numberVisItems = modules.sumBy { mod -> + mod.visibleItems.values.sumBy { listOfNotNull(it.types, it.values, it.macros).size } + } + println("$defMap stats: ${modules.size} modules, $numberVisItems vis items") +} + +private val ModData.descendantModules: List + get() = childModules.values.flatMap { it.descendantModules } + this