Skip to content

Commit 791abcb

Browse files
committed
fix(bulk-model-sync-lib): only iterate once over model for import size logging
1 parent 4c0ad5a commit 791abcb

File tree

1 file changed

+28
-28
lines changed
  • bulk-model-sync-lib/src/commonMain/kotlin/org/modelix/model/sync/bulk

1 file changed

+28
-28
lines changed

bulk-model-sync-lib/src/commonMain/kotlin/org/modelix/model/sync/bulk/Util.kt

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ package org.modelix.model.sync.bulk
1818

1919
import mu.KLogger
2020
import org.modelix.model.api.BuiltinLanguages
21-
import org.modelix.model.api.SimpleConcept
2221
import org.modelix.model.data.ModelData
2322
import org.modelix.model.data.NodeData
2423

@@ -27,38 +26,39 @@ fun mergeModelData(vararg models: ModelData): ModelData {
2726
}
2827

2928
internal fun logImportSize(nodeData: NodeData, logger: KLogger) {
30-
logger.debug { "Number of modules: ${countMpsModules(nodeData)}" }
31-
logger.debug { "Number of models: ${countMpsModels(nodeData)}" }
32-
logger.debug { "Number of concepts: ${countConcepts(nodeData)}" }
33-
logger.debug { "Number of properties: ${countProperties(nodeData)}" }
34-
logger.debug { "Number of references: ${countReferences(nodeData)}" }
29+
logger.debug { measureImportSize(nodeData).toString() }
3530
}
3631

37-
private fun countProperties(data: NodeData): Int =
38-
data.properties.size + data.children.sumOf { countProperties(it) }
39-
40-
private fun countReferences(data: NodeData): Int =
41-
data.references.size + data.children.sumOf { countReferences(it) }
42-
43-
private fun countConcepts(data: NodeData): Int {
44-
val set = mutableSetOf<String>()
45-
countConceptsRec(data, set)
46-
return set.size
32+
private data class ImportSizeMetrics(
33+
var numModules: Int = 0,
34+
var numModels: Int = 0,
35+
val concepts: MutableSet<String> = mutableSetOf(),
36+
var numProperties: Int = 0,
37+
var numReferences: Int = 0,
38+
) {
39+
override fun toString(): String {
40+
return """
41+
[Bulk Model Sync Import Size]
42+
number of modules: $numModules
43+
number of models: $numModels
44+
number of concepts: ${concepts.size}
45+
number of properties: $numProperties
46+
number of references: $numReferences
47+
""".trimIndent()
48+
}
4749
}
4850

49-
private fun countConceptsRec(data: NodeData, set: MutableSet<String>) {
50-
data.concept?.let { set.add(it) }
51-
data.children.forEach { countConceptsRec(it, set) }
52-
}
51+
private fun measureImportSize(data: NodeData, metrics: ImportSizeMetrics = ImportSizeMetrics()): ImportSizeMetrics {
52+
data.concept?.let { metrics.concepts.add(it) }
5353

54-
private fun countMpsModels(data: NodeData) =
55-
countSpecificConcept(data, BuiltinLanguages.MPSRepositoryConcepts.Model)
54+
when (data.concept) {
55+
BuiltinLanguages.MPSRepositoryConcepts.Module.getUID() -> metrics.numModules++
56+
BuiltinLanguages.MPSRepositoryConcepts.Model.getUID() -> metrics.numModels++
57+
}
5658

57-
private fun countMpsModules(data: NodeData) =
58-
countSpecificConcept(data, BuiltinLanguages.MPSRepositoryConcepts.Module)
59+
metrics.numProperties += data.properties.size
60+
metrics.numReferences += data.references.size
5961

60-
private fun countSpecificConcept(data: NodeData, concept: SimpleConcept): Int {
61-
var count = if (data.concept == concept.getUID()) 1 else 0
62-
count += data.children.sumOf { countSpecificConcept(it, concept) }
63-
return count
62+
data.children.forEach { measureImportSize(it, metrics) }
63+
return metrics
6464
}

0 commit comments

Comments
 (0)