X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-model-export%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fmodel%2Fexport%2FStatementPrefixResolver.java;fp=yang%2Fyang-model-export%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fmodel%2Fexport%2FStatementPrefixResolver.java;h=bf242599c7d6c6e2d71bee55597da98f0c91ad10;hb=d0065308ebab7840ccd320435368a0bf1db3282f;hp=34332c7b66f4ee35de28e5a990942eb612f05e0b;hpb=17939d2f813abcafe3501afbc4259d2e42180fe7;p=yangtools.git diff --git a/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/StatementPrefixResolver.java b/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/StatementPrefixResolver.java index 34332c7b66..bf242599c7 100644 --- a/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/StatementPrefixResolver.java +++ b/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/StatementPrefixResolver.java @@ -12,6 +12,7 @@ import static com.google.common.base.Verify.verify; import static java.util.Objects.requireNonNull; import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.HashMultimap; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap.Builder; import com.google.common.collect.Maps; @@ -42,7 +43,7 @@ final class StatementPrefixResolver { private final Collection, String>> statements; Conflict(final Collection, String>> entries) { - this.statements = requireNonNull(entries); + statements = requireNonNull(entries); } @Nullable String findPrefix(final DeclaredStatement stmt) { @@ -66,11 +67,11 @@ final class StatementPrefixResolver { private final Map lookup; private StatementPrefixResolver(final Map map) { - this.lookup = ImmutableMap.copyOf(map); + lookup = ImmutableMap.copyOf(map); } private StatementPrefixResolver(final ImmutableMap map) { - this.lookup = requireNonNull(map); + lookup = requireNonNull(map); } static StatementPrefixResolver forModule(final ModuleEffectiveStatement module) { @@ -89,7 +90,15 @@ final class StatementPrefixResolver { indexPrefixes(prefixToNamespaces, submodule.getAll(QNameModuleToPrefixNamespace.class), submodule); } - // Stage two: resolve first order of conflicts, potentially completely resolving mappings... + // Stage two: see what QNameModule -> prefix mappings there are. We will need to understand this in step three + final Multimap namespaceToPrefixes = HashMultimap.create(); + for (Entry>> entry : prefixToNamespaces.entrySet()) { + for (QNameModule namespace : entry.getValue().keySet()) { + namespaceToPrefixes.put(namespace, entry.getKey()); + } + } + + // Stage three: resolve first order of conflicts, potentially completely resolving mappings... final Builder builder = ImmutableMap.builderWithExpectedSize(prefixToNamespaces.size()); // ... first resolve unambiguous mappings ... @@ -99,8 +108,12 @@ final class StatementPrefixResolver { final Entry>> entry = it.next(); final Multimap> modules = entry.getValue(); if (modules.size() == 1) { - builder.put(modules.keys().iterator().next(), entry.getKey()); - it.remove(); + // Careful now: the namespace needs to be unambiguous + final QNameModule namespace = modules.keys().iterator().next(); + if (namespaceToPrefixes.get(namespace).size() == 1) { + builder.put(namespace, entry.getKey()); + it.remove(); + } } }