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=1f02d8b98a356d031e8e7cfdf246c6b67d51e33f;hb=80b2a1b0f1fd86816047487fc97e1da5f3188ea4;hp=b186450f6f23356751491c373e9cf33f755a1be8;hpb=68de0c7ba2ad3c837b933602d1d124bf74b077d0;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 b186450f6f..1f02d8b98a 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; @@ -38,17 +40,11 @@ final class UnrecognizedEffectiveStatementImpl extends UnknownEffectiveStatement // FIXME: Remove following section after fixing 4380 final UnknownSchemaNode original = (UnknownSchemaNode) ctx.getOriginalCtx().map(StmtContext::buildEffective) .orElse(null); - if (original != null) { - this.maybeQNameArgument = original.getQName(); + if (original == null) { + final QName qname = qnameFromArgument(ctx); + maybeQNameArgument = qname != null ? qname : getNodeType(); } else { - QName maybeQNameArgumentInit = null; - try { - maybeQNameArgumentInit = StmtContextUtils.qnameFromArgument(ctx, argument()); - } catch (SourceException e) { - LOG.debug("Not constructing QName from {}", argument(), e); - maybeQNameArgumentInit = getNodeType(); - } - this.maybeQNameArgument = maybeQNameArgumentInit; + maybeQNameArgument = original.getQName(); } SchemaPath maybePath; @@ -77,4 +73,28 @@ final class UnrecognizedEffectiveStatementImpl extends UnknownEffectiveStatement public StatementDefinition statementDefinition() { return getDeclared().statementDefinition(); } + + private static QName qnameFromArgument(final StmtContext stmt) { + final String value = stmt.getStatementArgument(); + if (value == null || value.isEmpty()) { + return stmt.getPublicDefinition().getStatementName(); + } + + final int colon = value.indexOf(':'); + if (colon == -1) { + if (AbstractQName.isValidLocalName(value)) { + return QName.unsafeOf(StmtContextUtils.getRootModuleQName(stmt), value).intern(); + } + return null; + } + + final QNameModule qnameModule = StmtContextUtils.getModuleQNameByPrefix(stmt, 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(); + } }