@@ -125,24 +125,27 @@ private data class OutputGroupTargetConfigFileSets(
125125/* *
126126 * A data structure allowing to associate file set names with output group, targets and configs and allowing to retrieve them efficiently
127127 * at each level of the hierarchy.
128+ *
129+ * For each config, the file set names are stored as <aspect, List<file set name>> map to avoid duplicate file set names for the same
130+ * config but different aspects. While retrieving, a flatmap for the given config is returned.
128131 */
129132private class OutputGroupTargetConfigFileSetMap {
130- private val data: MutableMap <String , MutableMap <String , MutableMap <String , List <String >>>> = mutableMapOf ()
133+ private val data: MutableMap <String , MutableMap <String , MutableMap <String , MutableMap < String , List <String > >>>> = mutableMapOf ()
131134
132- private fun getOutputGroup (outputGroup : String ): MutableMap <String , MutableMap <String , List <String >>> {
135+ private fun getOutputGroup (outputGroup : String ): MutableMap <String , MutableMap <String , MutableMap < String , List <String > >>> {
133136 return data.computeIfAbsent(outputGroup) { mutableMapOf () }
134137 }
135138
136- private fun getOutputGroupTarget (outputGroup : String , target : String ): MutableMap <String , List <String >> {
139+ private fun getOutputGroupTarget (outputGroup : String , target : String ): MutableMap <String , MutableMap < String , List <String > >> {
137140 return getOutputGroup(outputGroup).computeIfAbsent(target) { mutableMapOf () }
138141 }
139142
140- private fun getOutputGroupTargetConfig (outputGroup : String , target : String , config : String ): List <String > {
141- return getOutputGroupTarget(outputGroup, target)[ config] ? : emptyList()
143+ private fun getOutputGroupTargetConfig (outputGroup : String , target : String , config : String ): MutableMap < String , List <String > > {
144+ return getOutputGroupTarget(outputGroup, target).computeIfAbsent( config){ mutableMapOf ()}
142145 }
143146
144- fun setOutputGroupTargetConfig (outputGroup : String , target : String , config : String , fileSetNames : List <String >) {
145- val previous = getOutputGroupTarget (outputGroup, target).put(config , fileSetNames.toList())
147+ fun setOutputGroupTargetConfigAspect (outputGroup : String , target : String , config : String , aspect : String , fileSetNames : List <String >) {
148+ val previous = getOutputGroupTargetConfig (outputGroup, target, config ).put(aspect , fileSetNames.toList())
146149 if (previous != null ) {
147150 error(" $outputGroup :$target :$config already present" )
148151 }
@@ -153,7 +156,7 @@ private class OutputGroupTargetConfigFileSetMap {
153156 outputGroup.value.entries.asSequence().flatMap { target ->
154157 target.value.entries.asSequence().map { config ->
155158 OutputGroupTargetConfigFileSets (outputGroup.key, target.key,
156- config.key, config.value)
159+ config.key, config.value.entries.flatMap { it.value } )
157160 }
158161 }
159162 }
@@ -164,7 +167,7 @@ private class OutputGroupTargetConfigFileSetMap {
164167 return outputGroupData.entries.asSequence().flatMap { target ->
165168 target.value.entries.asSequence().map { config ->
166169 OutputGroupTargetConfigFileSets (outputGroup, target.key,
167- config.key, config.value)
170+ config.key, config.value.entries.flatMap { it.value } )
168171 }
169172 }
170173 }
@@ -174,7 +177,7 @@ private class OutputGroupTargetConfigFileSetMap {
174177 val outputGroupTargetData = outputGroupData[target] ? : return emptySequence()
175178 return outputGroupTargetData.entries.asSequence().map { config ->
176179 OutputGroupTargetConfigFileSets (outputGroup, target,
177- config.key, config.value)
180+ config.key, config.value.entries.flatMap { it.value } )
178181 }
179182 }
180183}
@@ -316,11 +319,16 @@ private fun parseBep(stream: BuildEventStreamProvider, nullableInterner: Interne
316319 TARGET_COMPLETED -> {
317320 val label = event.id.targetCompleted.label
318321 val configId = event.id.targetCompleted.configuration.id
322+ val aspect = event.id.targetCompleted.aspect
319323
320324 for (o in event.completed.outputGroupList) {
321325 val fileSetNames = getFileSets(o, interner)
322- state.outputs.setOutputGroupTargetConfig(interner.intern(o.name), interner.intern(label), interner.intern(configId),
323- fileSetNames)
326+ state.outputs.setOutputGroupTargetConfigAspect(
327+ interner.intern(o.name),
328+ interner.intern(label),
329+ interner.intern(configId),
330+ interner.intern(aspect),
331+ fileSetNames)
324332 }
325333 }
326334
0 commit comments