X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-rfc7950%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Frfc7950%2Fstmt%2Fextension%2FUnrecognizedEffectiveStatementImpl.java;h=bfc11f60beadb91aa90e21d5854558b007c64275;hb=1bbcdd2d6510d420b916c26f54c60a1c2e1607df;hp=31265c83e2f6a850f25c45cc96257ae7aad2fc7a;hpb=dab6e4c7199c91aeac93fca5956a0877bc16dd8e;p=yangtools.git diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedEffectiveStatementImpl.java index 31265c83e2..bfc11f60be 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedEffectiveStatementImpl.java @@ -9,7 +9,9 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.extension; import com.google.common.collect.ImmutableList; import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.yangtools.yang.common.AbstractQName; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -36,17 +38,11 @@ final class UnrecognizedEffectiveStatementImpl extends UnknownEffectiveStatement // FIXME: Remove following section after fixing 4380 final UnknownSchemaNode original = (UnknownSchemaNode) stmt.original(); - if (original != null) { - this.maybeQNameArgument = original.getQName(); + if (original == null) { + final QName qname = qnameFromArgument(stmt); + maybeQNameArgument = qname != null ? qname : getNodeType(); } else { - QName maybeQNameArgumentInit = null; - try { - maybeQNameArgumentInit = StmtContextUtils.qnameFromArgument(stmt.caerbannog(), argument()); - } catch (SourceException e) { - LOG.debug("Not constructing QName from {}", argument(), e); - maybeQNameArgumentInit = getNodeType(); - } - this.maybeQNameArgument = maybeQNameArgumentInit; + maybeQNameArgument = original.getQName(); } SchemaPath maybePath; @@ -75,4 +71,29 @@ final class UnrecognizedEffectiveStatementImpl extends UnknownEffectiveStatement public StatementDefinition statementDefinition() { return getDeclared().statementDefinition(); } + + private static QName qnameFromArgument(final Current stmt) { + final String value = stmt.argument(); + if (value == null || value.isEmpty()) { + return stmt.publicDefinition().getStatementName(); + } + + final int colon = value.indexOf(':'); + if (colon == -1) { + if (AbstractQName.isValidLocalName(value)) { + return QName.unsafeOf(StmtContextUtils.getRootModuleQName(stmt.caerbannog()), value).intern(); + } + return null; + } + + final QNameModule qnameModule = StmtContextUtils.getModuleQNameByPrefix(stmt.caerbannog(), + value.substring(0, colon)); + if (qnameModule == null) { + return null; + } + + final int next = value.indexOf(':', colon + 1); + final String localName = next == -1 ? value.substring(colon + 1) : value.substring(colon + 1, next); + return QName.create(qnameModule, localName).intern(); + } }