[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. |