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=588df62c7b121eeece53e2deab69e53f6b240fc7;hpb=dbd18f394e36f2b49af0a932f897b282779442c0;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 588df62c7b..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,10 +9,13 @@ 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; +import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase; @@ -29,24 +32,19 @@ final class UnrecognizedEffectiveStatementImpl extends UnknownEffectiveStatement private final QName maybeQNameArgument; private final @NonNull SchemaPath path; - UnrecognizedEffectiveStatementImpl(final StmtContext ctx, - final ImmutableList> substatements) { - super(ctx, substatements); + UnrecognizedEffectiveStatementImpl(final @NonNull UnrecognizedStatement declared, + final @NonNull ImmutableList> substatements, + final StmtContext ctx) { + super(ctx.getStatementArgument(), declared, substatements, ctx); // 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; @@ -70,4 +68,33 @@ final class UnrecognizedEffectiveStatementImpl extends UnknownEffectiveStatement public SchemaPath getPath() { return path; } + + @Override + 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(); + } }