[YANGTOOLS-1313] Error when module is imported with different prefixes Created: 26/Aug/21  Updated: 20/Oct/21  Resolved: 20/Oct/21

Status: Resolved
Project: yangtools
Component/s: None
Affects Version/s: 6.0.6
Fix Version/s: 8.0.0, 7.0.9, 6.0.9

Type: Bug Priority: High
Reporter: Andrej Mak Assignee: Dominik Vrbovský
Resolution: Done Votes: 0
Labels: pt
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Description   

 

There are 2 modules, which import 3rd module. Each of them uses different prefix.

import openconfig-mpls-types { prefix "oc-mplst"; }
import openconfig-mpls-types { prefix "oc-mpls-types"; }

Code generation fails with following error.

Caused by: java.lang.IllegalArgumentException: Multiple entries with same key: QNameModule{ns=http://openconfig.net/yang/mpls-types, rev=2018-11-21}=oc-mplst and QNameModule{ns=http://openconfig.net/yang/mpls-types, rev=2018-11-21}=oc-mpls-types
    at com.google.common.collect.ImmutableMap.conflictException (ImmutableMap.java:215)
    at com.google.common.collect.ImmutableMap.checkNoConflict (ImmutableMap.java:209)
    at com.google.common.collect.RegularImmutableMap.checkNoConflictInKeyBucket (RegularImmutableMap.java:146)
    at com.google.common.collect.RegularImmutableMap.fromEntryArray (RegularImmutableMap.java:109)
    at com.google.common.collect.ImmutableMap$Builder.build (ImmutableMap.java:394)
    at org.opendaylight.yangtools.yang.model.export.StatementPrefixResolver.forModule (StatementPrefixResolver.java:120)
    at org.opendaylight.yangtools.yang.model.export.DeclaredStatementFormatter.toYangTextSnippet (DeclaredStatementFormatter.java:51)
    at org.opendaylight.mdsal.binding.java.api.generator.BaseTemplate.appendYangSnippet (BaseTemplate.java:474)
    at org.opendaylight.mdsal.binding.java.api.generator.BaseTemplate.appendSnippet (BaseTemplate.java:442)
    at org.opendaylight.mdsal.binding.java.api.generator.BaseTemplate.formatDataForJavaDoc (BaseTemplate.java:393)
    at org.opendaylight.mdsal.binding.java.api.generator.InterfaceTemplate.body (InterfaceTemplate.java:87)
    at org.opendaylight.mdsal.binding.java.api.generator.BaseTemplate.generate (BaseTemplate.java:103)
    at org.opendaylight.mdsal.binding.java.api.generator.InterfaceGenerator.generate (InterfaceGenerator.java:34)
    at org.opendaylight.mdsal.binding.java.api.generator.GeneratorJavaFile$GeneratorStringSupplier.get (GeneratorJavaFile.java:52)
    at org.opendaylight.mdsal.binding.java.api.generator.GeneratorJavaFile$GeneratorStringSupplier.get (GeneratorJavaFile.java:41)
    at org.opendaylight.mdsal.binding.maven.api.gen.plugin.CodeGeneratorImpl$GenerationTask.generateFile (CodeGeneratorImpl.java:282)

 



 Comments   
Comment by Robert Varga [ 26/Aug/21 ]

So this needs submodules, actually. The IAE is thrown when two submodules use different prefixes for the same (equal QNameModule) imported module. While we are careful about prefix name conflicts, we then proceed to store a QNameModule->prefix mapping – and ImmutableMap.Builder catches the omission.

I think we need to create an intermediate Multimap<QNameModule, String> index and resolve that before creating the final map, but more investigation is needed.

Generated at Wed Feb 07 20:55:47 UTC 2024 using Jira 8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d.