Skip to content

Commit

Permalink
Add debug checks after DefMap built
Browse files Browse the repository at this point in the history
  • Loading branch information
dima74 committed Sep 16, 2020
1 parent 14a4f6d commit aec2b1d
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/main/kotlin/org/rust/lang/core/resolve2/FacadeBuild.kt
Expand Up @@ -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
}

Expand Down
36 changes: 36 additions & 0 deletions 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<Import>, macros: MutableList<MacroCallInfo>) {
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<ModData>
get() = childModules.values.flatMap { it.descendantModules } + this

0 comments on commit aec2b1d

Please sign in to comment.