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=4d3f62d8996026f6b949f9708e2e923bd99e1684;hpb=19efe56f8f20f5692a100e765a581fbc8f0b4aca;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 4d3f62d899..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 @@ -7,15 +7,19 @@ */ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.extension; -import java.util.Objects; +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; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; import org.slf4j.Logger; @@ -28,31 +32,25 @@ final class UnrecognizedEffectiveStatementImpl extends UnknownEffectiveStatement private final QName maybeQNameArgument; private final @NonNull SchemaPath path; - UnrecognizedEffectiveStatementImpl(final StmtContext ctx) { - super(ctx); + UnrecognizedEffectiveStatementImpl(final Current stmt, + final @NonNull ImmutableList> substatements) { + super(stmt, substatements); // 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(); + final UnknownSchemaNode original = (UnknownSchemaNode) stmt.original(); + if (original == null) { + final QName qname = qnameFromArgument(stmt); + 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; try { - maybePath = ctx.coerceParentContext().getSchemaPath() + maybePath = stmt.getEffectiveParent().schemaPath() .map(parentPath -> parentPath.createChild(maybeQNameArgument)).orElse(null); } catch (IllegalArgumentException | SourceException e) { - LOG.debug("Cannot construct path for {}, attempting to recover", ctx, e); + LOG.debug("Cannot construct path for {}, attempting to recover", stmt, e); maybePath = null; } path = maybePath; @@ -64,32 +62,38 @@ final class UnrecognizedEffectiveStatementImpl extends UnknownEffectiveStatement } @Override + @Deprecated public SchemaPath getPath() { return path; } @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + Objects.hashCode(maybeQNameArgument); - result = prime * result + Objects.hashCode(path); - result = prime * result + Objects.hashCode(getNodeType()); - result = prime * result + Objects.hashCode(getNodeParameter()); - return result; + public StatementDefinition statementDefinition() { + return getDeclared().statementDefinition(); } - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; + private static QName qnameFromArgument(final Current stmt) { + final String value = stmt.argument(); + if (value == null || value.isEmpty()) { + return stmt.publicDefinition().getStatementName(); } - if (!(obj instanceof UnrecognizedEffectiveStatementImpl)) { - return false; + + final int colon = value.indexOf(':'); + if (colon == -1) { + if (AbstractQName.isValidLocalName(value)) { + return QName.unsafeOf(StmtContextUtils.getRootModuleQName(stmt.caerbannog()), value).intern(); + } + return null; } - UnrecognizedEffectiveStatementImpl other = (UnrecognizedEffectiveStatementImpl) obj; - return Objects.equals(maybeQNameArgument, other.maybeQNameArgument) && Objects.equals(path, other.path) - && Objects.equals(getNodeType(), other.getNodeType()) - && Objects.equals(getNodeParameter(), other.getNodeParameter()); + + 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(); } }