From e84a603657418c639706b96164457ec5c49a19dc Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 27 Sep 2021 13:38:09 +0200 Subject: [PATCH] Introduce UnresolvedQName Our AbstractQName hierarchy has either a resolved QName, or two unresolved {Qualified,Unqualified}QNames. The quality of being resolved vs. unresolved is not modeled. Introduce UnresolvedQName as the only AbstractQName alternative to QName, so that it can be used to model this distinction. This allows, for example, yang-xpath-api to be specified better. JIRA: YANGTOOLS-1329 Change-Id: I9893850cea27bdd98d08b00ceb8c1f288dcc2778 Signed-off-by: Robert Varga --- .../yangtools/yang/common/AbstractQName.java | 5 +- .../yangtools/yang/common/QQNv1.java | 9 +- .../yangtools/yang/common/QualifiedQName.java | 103 -------- .../yangtools/yang/common/UQNv1.java | 9 +- .../yang/common/UnqualifiedQName.java | 111 -------- .../yang/common/UnresolvedQName.java | 238 ++++++++++++++++++ .../yangtools/yang/common/YangConstants.java | 5 +- .../impl/leafref/LeafRefPathParserImpl.java | 10 +- .../AugmentIdentifierEffectiveStatement.java | 4 +- .../model/api/AugmentIdentifierStatement.java | 4 +- .../model/api/stmt/BodyDeclaredStatement.java | 6 +- .../api/stmt/LinkageDeclaredStatement.java | 4 +- .../api/stmt/ModuleEffectiveStatement.java | 4 +- .../yang/model/api/stmt/ModuleStatement.java | 4 +- .../stmt/RevisionAwareDeclaredStatement.java | 4 +- .../api/stmt/SubmoduleEffectiveStatement.java | 4 +- .../model/api/stmt/SubmoduleStatement.java | 4 +- .../model/ri/stmt/DeclaredStatements.java | 6 +- ...bstractDeclaredEffectiveRootStatement.java | 10 +- .../stmt/impl/decl/ModuleStatementImpl.java | 4 +- .../impl/decl/SubmoduleStatementImpl.java | 4 +- .../ri/stmt/impl/ref/RefModuleStatement.java | 4 +- .../stmt/impl/ref/RefSubmoduleStatement.java | 4 +- .../yang/model/util/SchemaInferenceStack.java | 24 +- ...gmentIdentifierEffectiveStatementImpl.java | 5 +- .../AugmentIdentifierStatementImpl.java | 6 +- .../AugmentIdentifierStatementSupport.java | 14 +- .../parser/RefAugmentIdentifierStatement.java | 4 +- .../rfc7950/stmt/AbstractEffectiveModule.java | 15 +- .../module/ModuleEffectiveStatementImpl.java | 4 +- .../stmt/module/ModuleStatementSupport.java | 21 +- .../stmt/path/PathExpressionParser.java | 9 +- .../SubmoduleEffectiveStatementImpl.java | 6 +- .../submodule/SubmoduleStatementSupport.java | 19 +- .../stmt/path/PathExpressionParserTest.java | 16 +- .../yang/xpath/api/YangLocationPath.java | 9 +- .../yang/xpath/api/YangQNameExpr.java | 10 +- .../yang/xpath/api/YangXPathAxis.java | 6 +- .../yang/xpath/api/YangXPathExpression.java | 17 +- .../yang/xpath/impl/AntlrXPathParser.java | 11 +- .../xpath/impl/InstanceIdentifierParser.java | 8 +- .../yangtools/yang/xpath/impl/Utils.java | 12 +- 42 files changed, 401 insertions(+), 375 deletions(-) delete mode 100644 common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/QualifiedQName.java delete mode 100644 common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/UnqualifiedQName.java create mode 100644 common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/UnresolvedQName.java diff --git a/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/AbstractQName.java b/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/AbstractQName.java index c82e3a02cc..5e4f696b7f 100644 --- a/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/AbstractQName.java +++ b/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/AbstractQName.java @@ -10,7 +10,6 @@ package org.opendaylight.yangtools.yang.common; import static com.google.common.base.Preconditions.checkArgument; import static java.util.Objects.requireNonNull; -import com.google.common.annotations.Beta; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.concepts.Identifier; @@ -18,9 +17,9 @@ import org.opendaylight.yangtools.concepts.WritableObject; /** * Abstract superclass for sharing QName references, which can either be resolved {@link QName}s or unresolved - * {@link UnqualifiedQName} and {@link QualifiedQName}s. + * {@link UnresolvedQName.Unqualified} and {@link UnresolvedQName.Qualified}s. */ -@Beta +// FIXME: sealed to allow QName and UnresolvedQName only when we have JDK17+ @NonNullByDefault public abstract class AbstractQName implements Identifier, WritableObject { private static final long serialVersionUID = 1L; diff --git a/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/QQNv1.java b/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/QQNv1.java index 1623681cfb..8f81ccad40 100644 --- a/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/QQNv1.java +++ b/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/QQNv1.java @@ -14,21 +14,22 @@ import java.io.Externalizable; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Qualified; /** - * Externalizable proxy for {@link QualifiedQName}. + * Externalizable proxy for {@link Qualified}. */ final class QQNv1 implements Externalizable { private static final long serialVersionUID = 1L; - private QualifiedQName qname; + private Qualified qname; @SuppressWarnings("checkstyle:redundantModifier") public QQNv1() { // For Externalizable } - QQNv1(final QualifiedQName qname) { + QQNv1(final Qualified qname) { this.qname = requireNonNull(qname); } @@ -39,7 +40,7 @@ final class QQNv1 implements Externalizable { @Override public void readExternal(final ObjectInput in) throws IOException { - qname = QualifiedQName.readFrom(in); + qname = Qualified.readFrom(in); } Object readResolve() { diff --git a/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/QualifiedQName.java b/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/QualifiedQName.java deleted file mode 100644 index 1c12ecb4cf..0000000000 --- a/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/QualifiedQName.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (c) 2019 PANTHEON.tech, s.r.o. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.common; - -import static java.util.Objects.requireNonNull; - -import com.google.common.annotations.Beta; -import com.google.common.base.MoreObjects; -import com.google.common.collect.Interner; -import com.google.common.collect.Interners; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import java.io.DataInput; -import java.io.DataOutput; -import java.io.IOException; -import java.util.Optional; -import org.eclipse.jdt.annotation.NonNullByDefault; -import org.eclipse.jdt.annotation.Nullable; - -/** - * An unresolved, qualified {@link QName}. It is guaranteed to hold a valid {@link #getLocalName()} bound to a namespace - * identified through a prefix string, but remains unresolved. A resolved {@link QName} can be obtained through - * {@link #bindTo(YangNamespaceContext)}. - */ -@Beta -@NonNullByDefault -public final class QualifiedQName extends AbstractQName implements Comparable { - private static final long serialVersionUID = 1L; - private static final Interner INTERNER = Interners.newWeakInterner(); - - private final String prefix; - - private QualifiedQName(final String prefix, final String localName) { - super(localName); - this.prefix = requireNonNull(prefix); - } - - public static QualifiedQName of(final String prefix, final String localName) { - return new QualifiedQName(checkLocalName(prefix), checkLocalName(localName)); - } - - /** - * Read an QualifiedQName from a DataInput. The format is expected to match the output format of - * {@link #writeTo(DataOutput)}. - * - * @param in DataInput to read - * @return An QualifiedQName instance - * @throws IOException if I/O error occurs - */ - public static QualifiedQName readFrom(final DataInput in) throws IOException { - return of(in.readUTF(), in.readUTF()); - } - - public Optional bindTo(final YangNamespaceContext namespaceContext) { - return namespaceContext.findNamespaceForPrefix(prefix).map(this::bindTo); - } - - @Override - @SuppressFBWarnings(value = "ES_COMPARING_STRINGS_WITH_EQ", justification = "Interning identity check") - public QualifiedQName intern() { - // Make sure to intern the string and check whether it refers to the same name as we are - final String name = getLocalName(); - final String internedName = name.intern(); - final QualifiedQName template = internedName == name ? this : new QualifiedQName(prefix.intern(), internedName); - return INTERNER.intern(template); - } - - @Override - @SuppressWarnings("checkstyle:parameterName") - public int compareTo(final QualifiedQName o) { - return getLocalName().compareTo(o.getLocalName()); - } - - @Override - public void writeTo(final DataOutput out) throws IOException { - out.writeUTF(getLocalName()); - } - - @Override - public int hashCode() { - return getLocalName().hashCode(); - } - - @Override - public boolean equals(final @Nullable Object obj) { - return this == obj || obj instanceof QualifiedQName - && getLocalName().equals(((AbstractQName) obj).getLocalName()); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this).add("localName", getLocalName()).toString(); - } - - @Override - Object writeReplace() { - return new QQNv1(this); - } -} diff --git a/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/UQNv1.java b/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/UQNv1.java index a0955ae922..f1e1441177 100644 --- a/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/UQNv1.java +++ b/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/UQNv1.java @@ -14,21 +14,22 @@ import java.io.Externalizable; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; /** - * Externalizable proxy for {@link UnqualifiedQName}. + * Externalizable proxy for {@link Unqualified}. */ final class UQNv1 implements Externalizable { private static final long serialVersionUID = 1L; - private UnqualifiedQName qname; + private Unqualified qname; @SuppressWarnings("checkstyle:redundantModifier") public UQNv1() { // For Externalizable } - UQNv1(final UnqualifiedQName qname) { + UQNv1(final Unqualified qname) { this.qname = requireNonNull(qname); } @@ -39,7 +40,7 @@ final class UQNv1 implements Externalizable { @Override public void readExternal(final ObjectInput in) throws IOException { - qname = UnqualifiedQName.readFrom(in); + qname = Unqualified.readFrom(in); } Object readResolve() { diff --git a/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/UnqualifiedQName.java b/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/UnqualifiedQName.java deleted file mode 100644 index 821bc910a1..0000000000 --- a/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/UnqualifiedQName.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (c) 2019 PANTHEON.tech, s.r.o. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.common; - -import com.google.common.annotations.Beta; -import com.google.common.base.MoreObjects; -import com.google.common.collect.Interner; -import com.google.common.collect.Interners; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import java.io.DataInput; -import java.io.DataOutput; -import java.io.IOException; -import org.eclipse.jdt.annotation.NonNullByDefault; -import org.eclipse.jdt.annotation.Nullable; - -/** - * An unresolved, unqualified {@link QName}. It is guaranteed to hold a valid {@link #getLocalName()}, in the default - * namespace, which is not resolved. A resolved {@link QName} can be constructed through {@link #bindTo(QNameModule)}. - */ -@Beta -@NonNullByDefault -public final class UnqualifiedQName extends AbstractQName implements Comparable { - private static final long serialVersionUID = 1L; - private static final Interner INTERNER = Interners.newWeakInterner(); - - private UnqualifiedQName(final String localName) { - super(localName); - } - - /** - * Create a new unqualified QName. - * - * @param localName The local name of this unqualified QName - * @return An UnqualifiedQName instance - * @throws NullPointerException if localName is null - * @throws IllegalArgumentException if localName is not a valid YANG identifier - */ - public static UnqualifiedQName of(final String localName) { - return new UnqualifiedQName(checkLocalName(localName)); - } - - /** - * Create a new unqualified QName. - * - * @param localName The local name of this unqualified QName - * @return An UnqualifiedQName instance, or null if localName is not valid - */ - @SuppressFBWarnings(value = "NP_NONNULL_RETURN_VIOLATION", justification = "Non-grok of @Nullable") - public static @Nullable UnqualifiedQName tryCreate(final String localName) { - return isValidLocalName(localName) ? new UnqualifiedQName(localName) : null; - } - - /** - * Read an UnqualifiedQName from a DataInput. The format is expected to match the output format of - * {@link #writeTo(DataOutput)}. - * - * @param in DataInput to read - * @return An UnqualifiedQName instance - * @throws IOException if I/O error occurs - */ - public static UnqualifiedQName readFrom(final DataInput in) throws IOException { - return of(in.readUTF()); - } - - @Override - @SuppressFBWarnings(value = "ES_COMPARING_STRINGS_WITH_EQ", justification = "Interning identity check") - public UnqualifiedQName intern() { - // Make sure to intern the string and check whether it refers to the same name as we are - final String name = getLocalName(); - final String internedName = name.intern(); - final UnqualifiedQName template = internedName == name ? this : new UnqualifiedQName(internedName); - return INTERNER.intern(template); - } - - @Override - @SuppressWarnings("checkstyle:parameterName") - public int compareTo(final UnqualifiedQName o) { - return getLocalName().compareTo(o.getLocalName()); - } - - @Override - public void writeTo(final DataOutput out) throws IOException { - out.writeUTF(getLocalName()); - } - - @Override - public int hashCode() { - return getLocalName().hashCode(); - } - - @Override - public boolean equals(final @Nullable Object obj) { - return this == obj || obj instanceof UnqualifiedQName - && getLocalName().equals(((AbstractQName) obj).getLocalName()); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this).add("localName", getLocalName()).toString(); - } - - @Override - Object writeReplace() { - return new UQNv1(this); - } -} diff --git a/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/UnresolvedQName.java b/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/UnresolvedQName.java new file mode 100644 index 0000000000..58ea59f8b7 --- /dev/null +++ b/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/UnresolvedQName.java @@ -0,0 +1,238 @@ +/* + * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.yangtools.yang.common; + +import static java.util.Objects.requireNonNull; + +import com.google.common.base.MoreObjects; +import com.google.common.collect.Interner; +import com.google.common.collect.Interners; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.util.Optional; +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; + +/** + * A {@link QName} equivalent which has not been resolved. There are two subclasses: + *
    + *
  1. {@link Unqualified}, which holds only a local name available through {@link #getLocalName()}.
  2. + *
  3. {@link Qualified}, which also holds a string prefix available via {@link Qualified#getPrefix()}.
  4. + *
+ */ +// FIXME: sealed to allow Qualified and Unqualified only when we have JDK17+ +@NonNullByDefault +public abstract class UnresolvedQName extends AbstractQName { + /** + * An unresolved, qualified {@link QName}. It is guaranteed to hold a valid {@link #getLocalName()} bound to a + * namespace identified through a prefix string, but remains unresolved. A resolved {@link QName} can be obtained + * through {@link #bindTo(YangNamespaceContext)}. + */ + public static final class Qualified extends UnresolvedQName implements Comparable { + private static final long serialVersionUID = 1L; + private static final Interner INTERNER = Interners.newWeakInterner(); + + private final String prefix; + + private Qualified(final String prefix, final String localName) { + super(localName); + this.prefix = requireNonNull(prefix); + } + + /** + * Read an QualifiedQName from a DataInput. The format is expected to match the output format of + * {@link #writeTo(DataOutput)}. + * + * @param in DataInput to read + * @return An QualifiedQName instance + * @throws IOException if I/O error occurs + */ + public static Qualified readFrom(final DataInput in) throws IOException { + return qualified(in.readUTF(), in.readUTF()); + } + + @Override + public @NonNull String getPrefix() { + return prefix; + } + + public Optional bindTo(final YangNamespaceContext namespaceContext) { + return namespaceContext.findNamespaceForPrefix(prefix).map(this::bindTo); + } + + @Override + @SuppressFBWarnings(value = "ES_COMPARING_STRINGS_WITH_EQ", justification = "Interning identity check") + public Qualified intern() { + // Make sure to intern the string and check whether it refers to the same name as we are + final String name = getLocalName(); + final String internedName = name.intern(); + final Qualified template = internedName == name ? this : new Qualified(prefix.intern(), internedName); + return INTERNER.intern(template); + } + + @Override + @SuppressWarnings("checkstyle:parameterName") + public int compareTo(final Qualified o) { + return getLocalName().compareTo(o.getLocalName()); + } + + @Override + public void writeTo(final DataOutput out) throws IOException { + out.writeUTF(getLocalName()); + } + + @Override + public int hashCode() { + return getLocalName().hashCode(); + } + + @Override + public boolean equals(final @Nullable Object obj) { + return this == obj || obj instanceof Qualified && getLocalName().equals(((Qualified) obj).getLocalName()); + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this).add("localName", getLocalName()).toString(); + } + + @Override + Object writeReplace() { + return new QQNv1(this); + } + } + + /** + * An unresolved, unqualified {@link QName}. It is guaranteed to hold a valid {@link #getLocalName()}, in the + * default namespace, which is not resolved. A resolved {@link QName} can be constructed through + * {@link #bindTo(QNameModule)}. + */ + public static final class Unqualified extends UnresolvedQName implements Comparable { + private static final long serialVersionUID = 1L; + private static final Interner INTERNER = Interners.newWeakInterner(); + + private Unqualified(final String localName) { + super(localName); + } + + /** + * Read an UnqualifiedQName from a DataInput. The format is expected to match the output format of + * {@link #writeTo(DataOutput)}. + * + * @param in DataInput to read + * @return An UnqualifiedQName instance + * @throws IOException if I/O error occurs + */ + public static Unqualified readFrom(final DataInput in) throws IOException { + return unqualified(in.readUTF()); + } + + @Override + @SuppressFBWarnings(value = "ES_COMPARING_STRINGS_WITH_EQ", justification = "Interning identity check") + public Unqualified intern() { + // Make sure to intern the string and check whether it refers to the same name as we are + final String name = getLocalName(); + final String internedName = name.intern(); + final Unqualified template = internedName == name ? this : new Unqualified(internedName); + return INTERNER.intern(template); + } + + @Override + @SuppressFBWarnings(value = "NP_NONNULL_RETURN_VIOLATION", justification = "Non-grok of @Nullable") + public @Nullable String getPrefix() { + return null; + } + + @Override + @SuppressWarnings("checkstyle:parameterName") + public int compareTo(final Unqualified o) { + return getLocalName().compareTo(o.getLocalName()); + } + + @Override + public void writeTo(final DataOutput out) throws IOException { + out.writeUTF(getLocalName()); + } + + @Override + public int hashCode() { + return getLocalName().hashCode(); + } + + @Override + public boolean equals(final @Nullable Object obj) { + return this == obj || obj instanceof Unqualified + && getLocalName().equals(((AbstractQName) obj).getLocalName()); + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this).add("localName", getLocalName()).toString(); + } + + @Override + Object writeReplace() { + return new UQNv1(this); + } + } + + private static final long serialVersionUID = 1L; + + private UnresolvedQName(final String localName) { + super(localName); + } + + /** + * Create a new qualified unresolved QName. + * + * @param prefix The prefix on this qualified QName + * @param localName The local name of this qualified QName + * @return An UnqualifiedQName instance + * @throws NullPointerException if any argument is {@code null} + * @throws IllegalArgumentException if {@code localName} is not a valid YANG identifier + */ + public static Qualified qualified(final String prefix, final String localName) { + return new Qualified(checkLocalName(prefix), checkLocalName(localName)); + } + + /** + * Create a new unqualified unresolved QName. + * + * @param localName The local name of this unqualified QName + * @return An UnqualifiedQName instance + * @throws NullPointerException if localName is {@code null} + * @throws IllegalArgumentException if {@code localName} is not a valid YANG identifier + */ + public static Unqualified unqualified(final String localName) { + return new Unqualified(checkLocalName(localName)); + } + + /** + * Try to create a new unqualified QName. + * + * @param localName The local name of this unqualified QName + * @return An UnqualifiedQName instance, or null if localName is not valid + */ + @SuppressFBWarnings(value = "NP_NONNULL_RETURN_VIOLATION", justification = "Non-grok of @Nullable") + public static @Nullable Unqualified tryLocalName(final String localName) { + return isValidLocalName(localName) ? new Unqualified(localName) : null; + } + + @Override + public abstract UnresolvedQName intern(); + + /** + * Return the prefix of this unresolved QName. + * + * @return This QName's prefix + */ + public abstract @Nullable String getPrefix(); +} diff --git a/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/YangConstants.java b/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/YangConstants.java index d6b83a3bda..eb6b00618f 100644 --- a/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/YangConstants.java +++ b/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/YangConstants.java @@ -9,6 +9,7 @@ package org.opendaylight.yangtools.yang.common; import java.net.URI; import org.eclipse.jdt.annotation.NonNullByDefault; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; /** * Constant definitions present in RFC documents related to the YANG language. @@ -141,8 +142,8 @@ public final class YangConstants { // Dummy template UnqualifiedQName. These are never leaked, but are used for efficient instantiation via // UnqualifiedQName#bindTo() - private static final UnqualifiedQName DUMMY_OPERATION_INPUT = UnqualifiedQName.of("input"); - private static final UnqualifiedQName DUMMY_OPERATION_OUTPUT = UnqualifiedQName.of("output"); + private static final Unqualified DUMMY_OPERATION_INPUT = UnresolvedQName.unqualified("input"); + private static final Unqualified DUMMY_OPERATION_OUTPUT = UnresolvedQName.unqualified("output"); private YangConstants() { // Hidden on purpose diff --git a/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/LeafRefPathParserImpl.java b/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/LeafRefPathParserImpl.java index 2e763958b7..f3545ac731 100644 --- a/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/LeafRefPathParserImpl.java +++ b/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/leafref/LeafRefPathParserImpl.java @@ -16,7 +16,7 @@ import java.util.Set; 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.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.PathExpression; import org.opendaylight.yangtools.yang.model.api.PathExpression.DerefSteps; import org.opendaylight.yangtools.yang.model.api.PathExpression.LocationPathSteps; @@ -65,8 +65,8 @@ final class LeafRefPathParserImpl { // where the typedef is referenced. If a typedef is defined and // referenced within a grouping, the namespace is affected by where // the grouping is used (see Section 7.13). - this.leafrefModule = getBaseModule(leafrefType); - this.nodeModule = currentNode.getQName().getModule(); + leafrefModule = getBaseModule(leafrefType); + nodeModule = currentNode.getQName().getModule(); } LeafRefPath parseLeafRefPath(final PathExpression path) { @@ -155,9 +155,9 @@ final class LeafRefPathParserImpl { private static QName resolve(final AbstractQName qname, final QNameModule localModule) { if (qname instanceof QName) { return (QName) qname; - } else if (qname instanceof UnqualifiedQName) { + } else if (qname instanceof Unqualified) { // Bind to namespace. Note we expect to perform frequent matching, hence we are interning the result - return ((UnqualifiedQName) qname).bindTo(localModule).intern(); + return ((Unqualified) qname).bindTo(localModule).intern(); } else { throw new IllegalStateException("Unhandled unresolved QName " + qname); } diff --git a/model/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/AugmentIdentifierEffectiveStatement.java b/model/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/AugmentIdentifierEffectiveStatement.java index f73dc00f55..a6f5e40e9d 100644 --- a/model/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/AugmentIdentifierEffectiveStatement.java +++ b/model/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/AugmentIdentifierEffectiveStatement.java @@ -8,13 +8,13 @@ package org.opendaylight.yangtools.odlext.model.api; import com.google.common.annotations.Beta; -import org.opendaylight.yangtools.yang.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.UnknownEffectiveStatement; @Beta public interface AugmentIdentifierEffectiveStatement - extends UnknownEffectiveStatement { + extends UnknownEffectiveStatement { @Override default StatementDefinition statementDefinition() { return OpenDaylightExtensionsStatements.AUGMENT_IDENTIFIER; diff --git a/model/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/AugmentIdentifierStatement.java b/model/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/AugmentIdentifierStatement.java index c850264c6c..cd07e5b876 100644 --- a/model/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/AugmentIdentifierStatement.java +++ b/model/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/AugmentIdentifierStatement.java @@ -8,12 +8,12 @@ package org.opendaylight.yangtools.odlext.model.api; import com.google.common.annotations.Beta; -import org.opendaylight.yangtools.yang.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement; @Beta -public interface AugmentIdentifierStatement extends UnknownStatement { +public interface AugmentIdentifierStatement extends UnknownStatement { @Override default StatementDefinition statementDefinition() { return OpenDaylightExtensionsStatements.AUGMENT_IDENTIFIER; diff --git a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/BodyDeclaredStatement.java b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/BodyDeclaredStatement.java index d7c23cd82a..63d6af5742 100644 --- a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/BodyDeclaredStatement.java +++ b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/BodyDeclaredStatement.java @@ -10,11 +10,11 @@ package org.opendaylight.yangtools.yang.model.api.stmt; import com.google.common.annotations.Beta; import java.util.Collection; import org.eclipse.jdt.annotation.NonNull; -import org.opendaylight.yangtools.yang.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; @Beta -public interface BodyDeclaredStatement extends NotificationStatementAwareDeclaredStatement, - DataDefinitionAwareDeclaredStatement.WithReusableDefinitions { +public interface BodyDeclaredStatement extends NotificationStatementAwareDeclaredStatement, + DataDefinitionAwareDeclaredStatement.WithReusableDefinitions { default @NonNull Collection getExtensions() { return declaredSubstatements(ExtensionStatement.class); } diff --git a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/LinkageDeclaredStatement.java b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/LinkageDeclaredStatement.java index 88f93c0bde..7cda41af59 100644 --- a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/LinkageDeclaredStatement.java +++ b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/LinkageDeclaredStatement.java @@ -10,11 +10,11 @@ package org.opendaylight.yangtools.yang.model.api.stmt; import com.google.common.annotations.Beta; import java.util.Collection; import org.eclipse.jdt.annotation.NonNull; -import org.opendaylight.yangtools.yang.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; @Beta -public interface LinkageDeclaredStatement extends DeclaredStatement { +public interface LinkageDeclaredStatement extends DeclaredStatement { default @NonNull Collection getImports() { return declaredSubstatements(ImportStatement.class); } diff --git a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ModuleEffectiveStatement.java b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ModuleEffectiveStatement.java index 7df36936d9..d9f436fc71 100644 --- a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ModuleEffectiveStatement.java +++ b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ModuleEffectiveStatement.java @@ -11,7 +11,7 @@ import com.google.common.annotations.Beta; import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.QNameModule; -import org.opendaylight.yangtools.yang.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.model.api.meta.IdentifierNamespace; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; @@ -21,7 +21,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; */ @Beta public interface ModuleEffectiveStatement - extends DataTreeAwareEffectiveStatement, SchemaTreeRoot { + extends DataTreeAwareEffectiveStatement, SchemaTreeRoot { /** * Namespace mapping all known prefixes in a module to their modules. Note this namespace includes the module * in which it is instantiated. diff --git a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ModuleStatement.java b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ModuleStatement.java index bdfbe66f6a..965012460e 100644 --- a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ModuleStatement.java +++ b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ModuleStatement.java @@ -8,11 +8,11 @@ package org.opendaylight.yangtools.yang.model.api.stmt; import java.util.Optional; -import org.opendaylight.yangtools.yang.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; -public interface ModuleStatement extends MetaDeclaredStatement, ModuleHeaderGroup, +public interface ModuleStatement extends MetaDeclaredStatement, ModuleHeaderGroup, LinkageDeclaredStatement, RevisionAwareDeclaredStatement, BodyDeclaredStatement { @Override default StatementDefinition statementDefinition() { diff --git a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/RevisionAwareDeclaredStatement.java b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/RevisionAwareDeclaredStatement.java index 0faea315b5..4961153ae8 100644 --- a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/RevisionAwareDeclaredStatement.java +++ b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/RevisionAwareDeclaredStatement.java @@ -10,11 +10,11 @@ package org.opendaylight.yangtools.yang.model.api.stmt; import com.google.common.annotations.Beta; import java.util.Collection; import org.eclipse.jdt.annotation.NonNull; -import org.opendaylight.yangtools.yang.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; @Beta -public interface RevisionAwareDeclaredStatement extends DeclaredStatement { +public interface RevisionAwareDeclaredStatement extends DeclaredStatement { default @NonNull Collection getRevisions() { return declaredSubstatements(RevisionStatement.class); } diff --git a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/SubmoduleEffectiveStatement.java b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/SubmoduleEffectiveStatement.java index bdf12cca65..67410d92d0 100644 --- a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/SubmoduleEffectiveStatement.java +++ b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/SubmoduleEffectiveStatement.java @@ -8,7 +8,7 @@ package org.opendaylight.yangtools.yang.model.api.stmt; import com.google.common.annotations.Beta; -import org.opendaylight.yangtools.yang.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; @@ -19,7 +19,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; */ @Beta public interface SubmoduleEffectiveStatement - extends DataTreeAwareEffectiveStatement { + extends DataTreeAwareEffectiveStatement { @Override default StatementDefinition statementDefinition() { return YangStmtMapping.SUBMODULE; diff --git a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/SubmoduleStatement.java b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/SubmoduleStatement.java index 4672f2d139..df75ae109d 100644 --- a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/SubmoduleStatement.java +++ b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/SubmoduleStatement.java @@ -10,11 +10,11 @@ package org.opendaylight.yangtools.yang.model.api.stmt; import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; -import org.opendaylight.yangtools.yang.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; -public interface SubmoduleStatement extends MetaDeclaredStatement, LinkageDeclaredStatement, +public interface SubmoduleStatement extends MetaDeclaredStatement, LinkageDeclaredStatement, RevisionAwareDeclaredStatement, BodyDeclaredStatement { @Override default StatementDefinition statementDefinition() { diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/DeclaredStatements.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/DeclaredStatements.java index c445ee2ba2..e0bed7821b 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/DeclaredStatements.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/DeclaredStatements.java @@ -16,7 +16,7 @@ import org.opendaylight.yangtools.yang.common.Ordering; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.common.Uint32; -import org.opendaylight.yangtools.yang.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.common.YangVersion; import org.opendaylight.yangtools.yang.model.api.DeviateKind; @@ -490,7 +490,7 @@ public final class DeclaredStatements { : new RegularModifierStatement(argument, substatements); } - public static ModuleStatement createModule(final String rawArgument, final UnqualifiedQName argument, + public static ModuleStatement createModule(final String rawArgument, final Unqualified argument, final ImmutableList> substatements) { return new ModuleStatementImpl(rawArgument, argument, substatements); } @@ -637,7 +637,7 @@ public final class DeclaredStatements { } } - public static SubmoduleStatement createSubmodule(final String rawArgument, final UnqualifiedQName argument, + public static SubmoduleStatement createSubmodule(final String rawArgument, final Unqualified argument, final ImmutableList> substatements) { return new SubmoduleStatementImpl(rawArgument, argument, substatements); } diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/AbstractDeclaredEffectiveRootStatement.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/AbstractDeclaredEffectiveRootStatement.java index cb5a71d689..1ecf54d0e8 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/AbstractDeclaredEffectiveRootStatement.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/AbstractDeclaredEffectiveRootStatement.java @@ -8,7 +8,7 @@ package org.opendaylight.yangtools.yang.model.ri.stmt.impl.decl; import com.google.common.collect.ImmutableList; -import org.opendaylight.yangtools.yang.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.stmt.BodyDeclaredStatement; import org.opendaylight.yangtools.yang.model.api.stmt.LinkageDeclaredStatement; @@ -16,10 +16,10 @@ import org.opendaylight.yangtools.yang.model.api.stmt.MetaDeclaredStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RevisionAwareDeclaredStatement; import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithArgument.WithSubstatements; -abstract class AbstractDeclaredEffectiveRootStatement> - extends WithSubstatements implements LinkageDeclaredStatement, - MetaDeclaredStatement, RevisionAwareDeclaredStatement, BodyDeclaredStatement { - protected AbstractDeclaredEffectiveRootStatement(final String rawArgument, final UnqualifiedQName argument, +abstract class AbstractDeclaredEffectiveRootStatement> + extends WithSubstatements implements LinkageDeclaredStatement, + MetaDeclaredStatement, RevisionAwareDeclaredStatement, BodyDeclaredStatement { + protected AbstractDeclaredEffectiveRootStatement(final String rawArgument, final Unqualified argument, final ImmutableList> substatements) { super(rawArgument, argument, substatements); } diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/ModuleStatementImpl.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/ModuleStatementImpl.java index a659ab1489..38058b0d98 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/ModuleStatementImpl.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/ModuleStatementImpl.java @@ -8,13 +8,13 @@ package org.opendaylight.yangtools.yang.model.ri.stmt.impl.decl; import com.google.common.collect.ImmutableList; -import org.opendaylight.yangtools.yang.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement; public final class ModuleStatementImpl extends AbstractDeclaredEffectiveRootStatement implements ModuleStatement { - public ModuleStatementImpl(final String rawArgument, final UnqualifiedQName argument, + public ModuleStatementImpl(final String rawArgument, final Unqualified argument, final ImmutableList> substatements) { super(rawArgument, argument, substatements); } diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/SubmoduleStatementImpl.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/SubmoduleStatementImpl.java index fd319fa425..c54593156f 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/SubmoduleStatementImpl.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/SubmoduleStatementImpl.java @@ -8,13 +8,13 @@ package org.opendaylight.yangtools.yang.model.ri.stmt.impl.decl; import com.google.common.collect.ImmutableList; -import org.opendaylight.yangtools.yang.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement; public final class SubmoduleStatementImpl extends AbstractDeclaredEffectiveRootStatement implements SubmoduleStatement { - public SubmoduleStatementImpl(final String rawArgument, final UnqualifiedQName argument, + public SubmoduleStatementImpl(final String rawArgument, final Unqualified argument, final ImmutableList> substatements) { super(rawArgument, argument, substatements); } diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/ref/RefModuleStatement.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/ref/RefModuleStatement.java index 5da41ef606..aadb4a2a24 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/ref/RefModuleStatement.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/ref/RefModuleStatement.java @@ -7,12 +7,12 @@ */ package org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref; -import org.opendaylight.yangtools.yang.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference; import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement; import org.opendaylight.yangtools.yang.model.spi.meta.AbstractRefStatement; -public final class RefModuleStatement extends AbstractRefStatement +public final class RefModuleStatement extends AbstractRefStatement implements ModuleStatement { public RefModuleStatement(final ModuleStatement delegate, final DeclarationReference ref) { super(delegate, ref); diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/ref/RefSubmoduleStatement.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/ref/RefSubmoduleStatement.java index c5773b51d6..ecab0ab2f2 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/ref/RefSubmoduleStatement.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/ref/RefSubmoduleStatement.java @@ -7,12 +7,12 @@ */ package org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref; -import org.opendaylight.yangtools.yang.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference; import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement; import org.opendaylight.yangtools.yang.model.spi.meta.AbstractRefStatement; -public final class RefSubmoduleStatement extends AbstractRefStatement +public final class RefSubmoduleStatement extends AbstractRefStatement implements SubmoduleStatement { public RefSubmoduleStatement(final SubmoduleStatement delegate, final DeclarationReference ref) { super(delegate, ref); diff --git a/model/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaInferenceStack.java b/model/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaInferenceStack.java index 78a70e6690..893956e49f 100644 --- a/model/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaInferenceStack.java +++ b/model/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaInferenceStack.java @@ -31,7 +31,7 @@ import org.opendaylight.yangtools.rfc8040.model.api.YangDataEffectiveStatement; 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.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextProvider; import org.opendaylight.yangtools.yang.model.api.EffectiveStatementInference; @@ -141,17 +141,17 @@ public final class SchemaInferenceStack implements Mutable, EffectiveModelContex private boolean clean; private SchemaInferenceStack(final EffectiveModelContext effectiveModel, final int expectedSize) { - this.deque = new ArrayDeque<>(expectedSize); + deque = new ArrayDeque<>(expectedSize); this.effectiveModel = requireNonNull(effectiveModel); - this.clean = true; + clean = true; } private SchemaInferenceStack(final SchemaInferenceStack source) { - this.deque = source.deque.clone(); - this.effectiveModel = source.effectiveModel; - this.currentModule = source.currentModule; - this.groupingDepth = source.groupingDepth; - this.clean = source.clean; + deque = source.deque.clone(); + effectiveModel = source.effectiveModel; + currentModule = source.currentModule; + groupingDepth = source.groupingDepth; + clean = source.clean; } private SchemaInferenceStack(final EffectiveModelContext effectiveModel, @@ -166,8 +166,8 @@ public final class SchemaInferenceStack implements Mutable, EffectiveModelContex private SchemaInferenceStack(final EffectiveModelContext effectiveModel) { this.effectiveModel = requireNonNull(effectiveModel); - this.deque = new ArrayDeque<>(); - this.clean = true; + deque = new ArrayDeque<>(); + clean = true; } /** @@ -660,9 +660,9 @@ public final class SchemaInferenceStack implements Mutable, EffectiveModelContex final QName qname; if (toResolve instanceof QName) { qname = (QName) toResolve; - } else if (toResolve instanceof UnqualifiedQName) { + } else if (toResolve instanceof Unqualified) { checkArgument(defaultNamespace != null, "Can not find target module of step %s", step); - qname = ((UnqualifiedQName) toResolve).bindTo(defaultNamespace); + qname = ((Unqualified) toResolve).bindTo(defaultNamespace); } else { throw new VerifyException("Unexpected child step QName " + toResolve); } diff --git a/parser/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierEffectiveStatementImpl.java b/parser/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierEffectiveStatementImpl.java index 5844cc1765..151ce35b94 100644 --- a/parser/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierEffectiveStatementImpl.java +++ b/parser/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierEffectiveStatementImpl.java @@ -10,12 +10,11 @@ package org.opendaylight.yangtools.odlext.parser; import com.google.common.collect.ImmutableList; import org.opendaylight.yangtools.odlext.model.api.AugmentIdentifierEffectiveStatement; import org.opendaylight.yangtools.odlext.model.api.AugmentIdentifierStatement; -import org.opendaylight.yangtools.yang.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredEffectiveStatement.DefaultArgument.WithSubstatements; -final class AugmentIdentifierEffectiveStatementImpl - extends WithSubstatements +final class AugmentIdentifierEffectiveStatementImpl extends WithSubstatements implements AugmentIdentifierEffectiveStatement { AugmentIdentifierEffectiveStatementImpl(final AugmentIdentifierStatement declared, final ImmutableList> substatements) { diff --git a/parser/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierStatementImpl.java b/parser/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierStatementImpl.java index 6deef3ea39..be161a9c65 100644 --- a/parser/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierStatementImpl.java +++ b/parser/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierStatementImpl.java @@ -9,13 +9,13 @@ package org.opendaylight.yangtools.odlext.parser; import com.google.common.collect.ImmutableList; import org.opendaylight.yangtools.odlext.model.api.AugmentIdentifierStatement; -import org.opendaylight.yangtools.yang.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithArgument.WithSubstatements; -final class AugmentIdentifierStatementImpl extends WithSubstatements +final class AugmentIdentifierStatementImpl extends WithSubstatements implements AugmentIdentifierStatement { - AugmentIdentifierStatementImpl(final UnqualifiedQName argument, + AugmentIdentifierStatementImpl(final Unqualified argument, final ImmutableList> substatements) { super(argument.getLocalName(), argument, substatements); } diff --git a/parser/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierStatementSupport.java b/parser/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierStatementSupport.java index 9f05f85965..0a31524c54 100644 --- a/parser/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierStatementSupport.java +++ b/parser/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierStatementSupport.java @@ -12,7 +12,8 @@ import com.google.common.collect.ImmutableList; import org.opendaylight.yangtools.odlext.model.api.AugmentIdentifierEffectiveStatement; import org.opendaylight.yangtools.odlext.model.api.AugmentIdentifierStatement; import org.opendaylight.yangtools.odlext.model.api.OpenDaylightExtensionsStatements; -import org.opendaylight.yangtools.yang.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -25,8 +26,7 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; @Beta public final class AugmentIdentifierStatementSupport - extends AbstractStatementSupport { + extends AbstractStatementSupport { private static final SubstatementValidator VALIDATOR = SubstatementValidator.builder(OpenDaylightExtensionsStatements.AUGMENT_IDENTIFIER).build(); @@ -36,9 +36,9 @@ public final class AugmentIdentifierStatementSupport } @Override - public UnqualifiedQName parseArgumentValue(final StmtContext ctx, final String value) { + public Unqualified parseArgumentValue(final StmtContext ctx, final String value) { try { - return UnqualifiedQName.of(value).intern(); + return UnresolvedQName.unqualified(value).intern(); } catch (IllegalArgumentException e) { throw new SourceException(ctx, e, "Invalid identifier \"%s\"", value); } @@ -46,7 +46,7 @@ public final class AugmentIdentifierStatementSupport @Override protected AugmentIdentifierStatement createDeclared( - final StmtContext ctx, + final StmtContext ctx, final ImmutableList> substatements) { return new AugmentIdentifierStatementImpl(ctx.getArgument(), substatements); } @@ -59,7 +59,7 @@ public final class AugmentIdentifierStatementSupport @Override protected AugmentIdentifierEffectiveStatement createEffective( - final Current stmt, + final Current stmt, final ImmutableList> substatements) { return new AugmentIdentifierEffectiveStatementImpl(stmt.declared(), substatements); } diff --git a/parser/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/RefAugmentIdentifierStatement.java b/parser/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/RefAugmentIdentifierStatement.java index befe367d4c..138d8b7c80 100644 --- a/parser/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/RefAugmentIdentifierStatement.java +++ b/parser/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/RefAugmentIdentifierStatement.java @@ -8,11 +8,11 @@ package org.opendaylight.yangtools.odlext.parser; import org.opendaylight.yangtools.odlext.model.api.AugmentIdentifierStatement; -import org.opendaylight.yangtools.yang.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference; import org.opendaylight.yangtools.yang.model.spi.meta.AbstractRefStatement; -final class RefAugmentIdentifierStatement extends AbstractRefStatement +final class RefAugmentIdentifierStatement extends AbstractRefStatement implements AugmentIdentifierStatement { RefAugmentIdentifierStatement(final AugmentIdentifierStatement delegate, final DeclarationReference ref) { super(delegate, ref); diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java index 8daa4eebd9..18b7b429e7 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java @@ -24,7 +24,7 @@ import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.concepts.SemVer; import org.opendaylight.yangtools.openconfig.model.api.OpenConfigVersionEffectiveStatement; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.common.YangVersion; import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; @@ -59,17 +59,16 @@ import org.opendaylight.yangtools.yang.parser.spi.source.ImportPrefixToModuleCtx import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; @Beta -public abstract class AbstractEffectiveModule, - E extends DataTreeAwareEffectiveStatement> - extends WithTypedefNamespace - implements ModuleLike, DocumentedNodeMixin, - NotificationNodeContainerCompat { +public abstract class AbstractEffectiveModule, + E extends DataTreeAwareEffectiveStatement> + extends WithTypedefNamespace + implements ModuleLike, DocumentedNodeMixin, NotificationNodeContainerCompat { private final String prefix; private final ImmutableSet groupings; private final ImmutableSet uses; private final ImmutableSet> typeDefinitions; - protected AbstractEffectiveModule(final Current stmt, + protected AbstractEffectiveModule(final Current stmt, final ImmutableList> substatements, final String prefix) { super(stmt.declared(), substatements); @@ -101,7 +100,7 @@ public abstract class AbstractEffectiveModule submodules; - ModuleEffectiveStatementImpl(final Current stmt, + ModuleEffectiveStatementImpl(final Current stmt, final ImmutableList> substatements, final Collection submodules, final QNameModule qnameModule) { super(stmt, substatements, findPrefix(stmt, substatements, "module", stmt.getRawArgument())); diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementSupport.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementSupport.java index 9026d06136..4522b063c9 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementSupport.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementSupport.java @@ -23,7 +23,8 @@ import org.opendaylight.yangtools.openconfig.model.api.OpenConfigStatements; import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; -import org.opendaylight.yangtools.yang.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; import org.opendaylight.yangtools.yang.model.api.SchemaNode; @@ -70,7 +71,7 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; @Beta public final class ModuleStatementSupport - extends AbstractStatementSupport { + extends AbstractStatementSupport { private static final SubstatementValidator RFC6020_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.MODULE) .addAny(YangStmtMapping.ANYXML) .addAny(YangStmtMapping.AUGMENT) @@ -147,16 +148,16 @@ public final class ModuleStatementSupport } @Override - public UnqualifiedQName parseArgumentValue(final StmtContext ctx, final String value) { + public Unqualified parseArgumentValue(final StmtContext ctx, final String value) { try { - return UnqualifiedQName.of(value); + return UnresolvedQName.unqualified(value); } catch (IllegalArgumentException e) { throw new SourceException(e.getMessage(), ctx, e); } } @Override - public void onPreLinkageDeclared(final Mutable stmt) { + public void onPreLinkageDeclared(final Mutable stmt) { final String moduleName = stmt.getRawArgument(); final XMLNamespace moduleNs = SourceException.throwIfNull( @@ -179,7 +180,7 @@ public final class ModuleStatementSupport } @Override - public void onLinkageDeclared(final Mutable stmt) { + public void onLinkageDeclared(final Mutable stmt) { final XMLNamespace moduleNs = SourceException.throwIfNull( firstAttributeOf(stmt.declaredSubstatements(), NamespaceStatement.class), stmt, "Namespace of the module [%s] is missing", stmt.argument()); @@ -219,7 +220,7 @@ public final class ModuleStatementSupport @Override protected ImmutableList> buildEffectiveSubstatements( - final Current stmt, + final Current stmt, final List> substatements) { final ImmutableList> local = super.buildEffectiveSubstatements(stmt, substatements); @@ -245,7 +246,7 @@ public final class ModuleStatementSupport } @Override - protected ModuleStatement createDeclared(final StmtContext ctx, + protected ModuleStatement createDeclared(final StmtContext ctx, final ImmutableList> substatements) { if (substatements.isEmpty()) { throw noNamespace(ctx); @@ -260,7 +261,7 @@ public final class ModuleStatementSupport } @Override - protected ModuleEffectiveStatement createEffective(final Current stmt, + protected ModuleEffectiveStatement createEffective(final Current stmt, final ImmutableList> substatements) { if (substatements.isEmpty()) { throw noNamespace(stmt); @@ -293,7 +294,7 @@ public final class ModuleStatementSupport } private static void addToSemVerModuleNamespace( - final Mutable stmt, + final Mutable stmt, final SourceIdentifier moduleIdentifier) { final SemVerSourceIdentifier id = SemVerSourceIdentifier.create(stmt.getRawArgument(), stmt.getFromNamespace(SemanticVersionNamespace.class, stmt)); diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/path/PathExpressionParser.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/path/PathExpressionParser.java index 7fae6a57ac..48ffa293b4 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/path/PathExpressionParser.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/path/PathExpressionParser.java @@ -17,8 +17,9 @@ import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.TerminalNode; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName; import org.opendaylight.yangtools.yang.model.api.PathExpression; import org.opendaylight.yangtools.yang.model.api.PathExpression.DerefSteps; import org.opendaylight.yangtools.yang.model.api.PathExpression.LocationPathSteps; @@ -220,7 +221,7 @@ class PathExpressionParser { private static YangQNameExpr createChildExpr(final StmtContext ctx, final Node_identifierContext qname) { switch (qname.getChildCount()) { case 1: - return YangQNameExpr.of(UnqualifiedQName.of(qname.getText()).intern()); + return YangQNameExpr.of(UnresolvedQName.unqualified(qname.getText()).intern()); case 3: return YangQNameExpr.of(parseQName(ctx, qname)); default: @@ -232,7 +233,7 @@ class PathExpressionParser { final List predicates) { switch (qname.getChildCount()) { case 1: - return YangXPathAxis.CHILD.asStep(UnqualifiedQName.of(qname.getText()).intern(), predicates); + return YangXPathAxis.CHILD.asStep(UnresolvedQName.unqualified(qname.getText()).intern(), predicates); case 3: return YangXPathAxis.CHILD.asStep(parseQName(ctx, qname), predicates); default: @@ -240,7 +241,7 @@ class PathExpressionParser { } } - private static QName parseQName(final StmtContext ctx, final Node_identifierContext qname) { + private static @NonNull QName parseQName(final StmtContext ctx, final Node_identifierContext qname) { return StmtContextUtils.parseNodeIdentifier(ctx, qname.getChild(0).getText(), qname.getChild(2).getText()); } } diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleEffectiveStatementImpl.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleEffectiveStatementImpl.java index 1898b5ca07..92c9917a90 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleEffectiveStatementImpl.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleEffectiveStatementImpl.java @@ -24,7 +24,7 @@ import java.util.Set; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; -import org.opendaylight.yangtools.yang.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.Submodule; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.IdentifierNamespace; @@ -55,7 +55,7 @@ final class SubmoduleEffectiveStatementImpl private ImmutableSet submodules; private boolean sealed; - SubmoduleEffectiveStatementImpl(final Current stmt, + SubmoduleEffectiveStatementImpl(final Current stmt, final ImmutableList> substatements) { super(stmt, substatements, findSubmodulePrefix(stmt, substatements)); @@ -74,7 +74,7 @@ final class SubmoduleEffectiveStatementImpl final Optional submoduleRevision = findFirstEffectiveSubstatementArgument( RevisionEffectiveStatement.class); - this.qnameModule = QNameModule.create(belongsToModuleQName.getNamespace(), submoduleRevision).intern(); + qnameModule = QNameModule.create(belongsToModuleQName.getNamespace(), submoduleRevision).intern(); /* * Because of possible circular chains of includes between submodules we can diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementSupport.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementSupport.java index b3846638d9..178302b263 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementSupport.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementSupport.java @@ -13,7 +13,8 @@ import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.f import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableList; import org.eclipse.jdt.annotation.NonNull; -import org.opendaylight.yangtools.yang.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; @@ -41,7 +42,7 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; @Beta public final class SubmoduleStatementSupport - extends AbstractStatementSupport { + extends AbstractStatementSupport { private static final SubstatementValidator RFC6020_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.SUBMODULE) .addAny(YangStmtMapping.ANYXML) @@ -113,24 +114,22 @@ public final class SubmoduleStatementSupport } @Override - public UnqualifiedQName parseArgumentValue(final StmtContext ctx, final String value) { + public Unqualified parseArgumentValue(final StmtContext ctx, final String value) { try { - return UnqualifiedQName.of(value); + return UnresolvedQName.unqualified(value); } catch (IllegalArgumentException e) { throw new SourceException(e.getMessage(), ctx, e); } } @Override - public void onPreLinkageDeclared( - final Mutable stmt) { + public void onPreLinkageDeclared(final Mutable stmt) { stmt.setRootIdentifier(RevisionSourceIdentifier.create(stmt.getRawArgument(), StmtContextUtils.getLatestRevision(stmt.declaredSubstatements()))); } @Override - public void onLinkageDeclared( - final Mutable stmt) { + public void onLinkageDeclared(final Mutable stmt) { final SourceIdentifier submoduleIdentifier = RevisionSourceIdentifier.create(stmt.getRawArgument(), StmtContextUtils.getLatestRevision(stmt.declaredSubstatements())); @@ -153,7 +152,7 @@ public final class SubmoduleStatementSupport } @Override - protected SubmoduleStatement createDeclared(final StmtContext ctx, + protected SubmoduleStatement createDeclared(final StmtContext ctx, final ImmutableList> substatements) { if (substatements.isEmpty()) { throw noBelongsTo(ctx); @@ -168,7 +167,7 @@ public final class SubmoduleStatementSupport } @Override - protected SubmoduleEffectiveStatement createEffective(final Current stmt, + protected SubmoduleEffectiveStatement createEffective(final Current stmt, final ImmutableList> substatements) { if (substatements.isEmpty()) { throw noBelongsTo(stmt); diff --git a/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/path/PathExpressionParserTest.java b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/path/PathExpressionParserTest.java index ceecf8874b..6a4d418370 100644 --- a/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/path/PathExpressionParserTest.java +++ b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/path/PathExpressionParserTest.java @@ -24,7 +24,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; -import org.opendaylight.yangtools.yang.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName; import org.opendaylight.yangtools.yang.model.api.PathExpression; import org.opendaylight.yangtools.yang.model.api.PathExpression.DerefSteps; import org.opendaylight.yangtools.yang.model.api.PathExpression.LocationPathSteps; @@ -66,9 +66,9 @@ public class PathExpressionParserTest { final DerefSteps derefSteps = (DerefSteps) steps; assertEquals(YangLocationPath.relative(YangXPathAxis.PARENT.asStep(), - YangXPathAxis.CHILD.asStep(UnqualifiedQName.of("type"))), derefSteps.getRelativePath()); + YangXPathAxis.CHILD.asStep(UnresolvedQName.unqualified("type"))), derefSteps.getRelativePath()); assertEquals(YangLocationPath.relative(YangXPathAxis.PARENT.asStep(), - YangXPathAxis.CHILD.asStep(UnqualifiedQName.of("id"))), derefSteps.getDerefArgument()); + YangXPathAxis.CHILD.asStep(UnresolvedQName.unqualified("id"))), derefSteps.getDerefArgument()); } @Test @@ -114,13 +114,13 @@ public class PathExpressionParserTest { path.getSteps(); assertEquals(ImmutableList.of( - YangXPathAxis.CHILD.asStep(UnqualifiedQName.of("device_types")), - YangXPathAxis.CHILD.asStep(UnqualifiedQName.of("device_type"), + YangXPathAxis.CHILD.asStep(UnresolvedQName.unqualified("device_types")), + YangXPathAxis.CHILD.asStep(UnresolvedQName.unqualified("device_type"), ImmutableSet.of(YangBinaryOperator.EQUALS.exprWith( - YangQNameExpr.of(UnqualifiedQName.of("type")), + YangQNameExpr.of(UnresolvedQName.unqualified("type")), YangPathExpr.of(YangFunctionCallExpr.of(YangFunction.CURRENT.getIdentifier()), Relative.relative( YangXPathAxis.PARENT.asStep(), - YangXPathAxis.CHILD.asStep(UnqualifiedQName.of("type_text"))))))), - YangXPathAxis.CHILD.asStep(UnqualifiedQName.of("desc"))), path.getSteps()); + YangXPathAxis.CHILD.asStep(UnresolvedQName.unqualified("type_text"))))))), + YangXPathAxis.CHILD.asStep(UnresolvedQName.unqualified("desc"))), path.getSteps()); } } diff --git a/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangLocationPath.java b/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangLocationPath.java index 15e42f43ce..b4134d7ce8 100644 --- a/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangLocationPath.java +++ b/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangLocationPath.java @@ -25,6 +25,7 @@ import org.eclipse.jdt.annotation.Nullable; 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.common.UnresolvedQName; @Beta public abstract class YangLocationPath implements YangExpr { @@ -241,15 +242,15 @@ public abstract class YangLocationPath implements YangExpr { } } - public static class UnresolvedQNameStep extends AbstractQNameStep + public static class UnresolvedQNameStep extends AbstractQNameStep implements UnresolvedQNameReferent { private static final long serialVersionUID = 1L; - UnresolvedQNameStep(final YangXPathAxis axis, final AbstractQName qname) { + UnresolvedQNameStep(final YangXPathAxis axis, final UnresolvedQName qname) { super(axis, qname); } - static UnresolvedQNameStep of(final YangXPathAxis axis, final AbstractQName qname, + static UnresolvedQNameStep of(final YangXPathAxis axis, final UnresolvedQName qname, final Collection predicates) { return predicates.isEmpty() ? new UnresolvedQNameStep(axis, qname) : new UnresolvedQNameStepWithPredicates(axis, qname, ImmutableSet.copyOf(predicates)); @@ -266,7 +267,7 @@ public abstract class YangLocationPath implements YangExpr { private final ImmutableSet predicates; - UnresolvedQNameStepWithPredicates(final YangXPathAxis axis, final AbstractQName qname, + UnresolvedQNameStepWithPredicates(final YangXPathAxis axis, final UnresolvedQName qname, final ImmutableSet predicates) { super(axis, qname); this.predicates = requireNonNull(predicates); diff --git a/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangQNameExpr.java b/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangQNameExpr.java index 1c90f3c587..e8e35f5195 100644 --- a/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangQNameExpr.java +++ b/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangQNameExpr.java @@ -11,8 +11,8 @@ import static java.util.Objects.requireNonNull; import com.google.common.annotations.Beta; import org.eclipse.jdt.annotation.Nullable; -import org.opendaylight.yangtools.yang.common.AbstractQName; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName; /** * An XPath QName expression. This is an exact QName, which cannot be converted to a string literal compatible with @@ -60,14 +60,14 @@ public abstract class YangQNameExpr implements YangExpr, QNameReferent { public static final class Unresolved extends YangQNameExpr implements UnresolvedQNameReferent { private static final long serialVersionUID = 1L; - private final AbstractQName qname; + private final UnresolvedQName qname; - Unresolved(final AbstractQName qname) { + Unresolved(final UnresolvedQName qname) { this.qname = requireNonNull(qname); } @Override - public AbstractQName getQName() { + public UnresolvedQName getQName() { return qname; } @@ -93,7 +93,7 @@ public abstract class YangQNameExpr implements YangExpr, QNameReferent { // Prevent instantiation } - public static Unresolved of(final AbstractQName qname) { + public static Unresolved of(final UnresolvedQName qname) { return new Unresolved(qname); } diff --git a/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangXPathAxis.java b/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangXPathAxis.java index 3fc7ce508e..1f2a5ae880 100644 --- a/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangXPathAxis.java +++ b/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangXPathAxis.java @@ -12,8 +12,8 @@ import static java.util.Objects.requireNonNull; import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableSet; import java.util.Collection; -import org.opendaylight.yangtools.yang.common.AbstractQName; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName; import org.opendaylight.yangtools.yang.xpath.api.YangLocationPath.AxisStep; import org.opendaylight.yangtools.yang.xpath.api.YangLocationPath.AxisStepWithPredicates; import org.opendaylight.yangtools.yang.xpath.api.YangLocationPath.NodeTypeStep; @@ -117,11 +117,11 @@ public enum YangXPathAxis { return ResolvedQNameStep.of(this, qname, predicates); } - public final UnresolvedQNameStep asStep(final AbstractQName qname) { + public final UnresolvedQNameStep asStep(final UnresolvedQName qname) { return new UnresolvedQNameStep(this, qname); } - public final UnresolvedQNameStep asStep(final AbstractQName qname, final Collection predicates) { + public final UnresolvedQNameStep asStep(final UnresolvedQName qname, final Collection predicates) { return UnresolvedQNameStep.of(this, qname, predicates); } diff --git a/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangXPathExpression.java b/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangXPathExpression.java index c62d6b49f6..58004a95b8 100644 --- a/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangXPathExpression.java +++ b/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangXPathExpression.java @@ -11,8 +11,8 @@ import com.google.common.annotations.Beta; import javax.xml.xpath.XPathExpressionException; import org.opendaylight.yangtools.concepts.Immutable; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.common.QualifiedQName; -import org.opendaylight.yangtools.yang.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Qualified; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.common.YangVersion; /** @@ -24,11 +24,11 @@ import org.opendaylight.yangtools.yang.common.YangVersion; * levels to which an XPath expression can be bound: *
    *
  • Unbound Expressions, which is a essentially a parse tree. No namespace binding has been performed, i.e. all - * node identifiers are in {@link QualifiedQName} or {@link UnqualifiedQName} form. This level is typically not used - * when dealing with YANG models directly, but can be useful for validating a String conforms to XPath syntax. + * node identifiers are in {@link Qualified} or {@link Unqualified} form. This level is typically not used when + * dealing with YANG models directly, but can be useful for validating a String conforms to XPath syntax. *
  • - *
  • Qualified-bound Expressions, where all {@link QualifiedQName}s are resolved and bound to {@link QName}s, but - * {@link UnqualifiedQName}s are still present. This level corresponds to how far a YANG parser can interpret XPath + *
  • Qualified-bound Expressions, where all {@link Qualified}s are resolved and bound to {@link QName}s, but + * {@link Unqualified}s are still present. This level corresponds to how far a YANG parser can interpret XPath * expressions defined in {@code typedef} statements and statements which are not fully instantiated, i.e. are * descendants of a {@code grouping} statement. *
  • @@ -47,12 +47,15 @@ import org.opendaylight.yangtools.yang.common.YangVersion; @Beta public interface YangXPathExpression extends Immutable { /** - * A Qualified-bound expression. All {@link QualifiedQName}s are eliminated and replaced with {@link QName}s. + * A Qualified-bound expression. All {@link Qualified}s are eliminated and replaced with {@link QName}s. */ interface QualifiedBound extends YangXPathExpression { } + /** + * An Unqualified-bound expression. All {@link Unqualified}s are eliminated and replaced with {@link QName}s. + */ interface UnqualifiedBound extends QualifiedBound { @Override YangQNameExpr.Resolved interpretAsQName(YangLiteralExpr expr) throws XPathExpressionException; diff --git a/xpath/yang-xpath-impl/src/main/java/org/opendaylight/yangtools/yang/xpath/impl/AntlrXPathParser.java b/xpath/yang-xpath-impl/src/main/java/org/opendaylight/yangtools/yang/xpath/impl/AntlrXPathParser.java index a12dfd2e8b..a7e09afbc4 100644 --- a/xpath/yang-xpath-impl/src/main/java/org/opendaylight/yangtools/yang/xpath/impl/AntlrXPathParser.java +++ b/xpath/yang-xpath-impl/src/main/java/org/opendaylight/yangtools/yang/xpath/impl/AntlrXPathParser.java @@ -40,8 +40,7 @@ import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.TerminalNode; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; -import org.opendaylight.yangtools.yang.common.QualifiedQName; -import org.opendaylight.yangtools.yang.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName; import org.opendaylight.yangtools.yang.common.YangConstants; import org.opendaylight.yangtools.yang.common.YangNamespaceContext; import org.opendaylight.yangtools.yang.common.YangVersion; @@ -118,13 +117,13 @@ abstract class AntlrXPathParser implements YangXPathParser { @Override QNameStep createStep(final YangXPathAxis axis, final String localName, final List predicates) { - return axis.asStep(UnqualifiedQName.of(localName).intern(), predicates); + return axis.asStep(UnresolvedQName.unqualified(localName).intern(), predicates); } @Override QNameStep createStep(final YangXPathAxis axis, final String prefix, final String localName, final List predicates) { - return axis.asStep(QualifiedQName.of(prefix, localName).intern(), predicates); + return axis.asStep(UnresolvedQName.qualified(prefix, localName).intern(), predicates); } @Override @@ -228,8 +227,8 @@ abstract class AntlrXPathParser implements YangXPathParser { AntlrXPathParser(final YangXPathMathMode mathMode) { this.mathMode = requireNonNull(mathMode); - this.mathSupport = mathMode.getSupport(); - this.functionSupport = new FunctionSupport(mathSupport); + mathSupport = mathMode.getSupport(); + functionSupport = new FunctionSupport(mathSupport); } abstract QName createQName(String localName); diff --git a/xpath/yang-xpath-impl/src/main/java/org/opendaylight/yangtools/yang/xpath/impl/InstanceIdentifierParser.java b/xpath/yang-xpath-impl/src/main/java/org/opendaylight/yangtools/yang/xpath/impl/InstanceIdentifierParser.java index cadea136ee..c3654f0b78 100644 --- a/xpath/yang-xpath-impl/src/main/java/org/opendaylight/yangtools/yang/xpath/impl/InstanceIdentifierParser.java +++ b/xpath/yang-xpath-impl/src/main/java/org/opendaylight/yangtools/yang/xpath/impl/InstanceIdentifierParser.java @@ -20,7 +20,7 @@ import javax.xml.xpath.XPathExpressionException; import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; import org.antlr.v4.runtime.tree.ParseTree; -import org.opendaylight.yangtools.yang.common.QualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName; import org.opendaylight.yangtools.yang.common.YangNamespaceContext; import org.opendaylight.yangtools.yang.xpath.antlr.instanceIdentifierParser; import org.opendaylight.yangtools.yang.xpath.antlr.instanceIdentifierParser.EqQuotedStringContext; @@ -55,12 +55,12 @@ abstract class InstanceIdentifierParser { @Override YangQNameExpr createExpr(final String prefix, final String localName) { - return YangQNameExpr.of(QualifiedQName.of(prefix, localName)); + return YangQNameExpr.of(UnresolvedQName.qualified(prefix, localName)); } @Override QNameStep createChildStep(final String prefix, final String localName, final Collection predicates) { - return YangXPathAxis.CHILD.asStep(QualifiedQName.of(prefix, localName), predicates); + return YangXPathAxis.CHILD.asStep(UnresolvedQName.qualified(prefix, localName), predicates); } } @@ -88,7 +88,7 @@ abstract class InstanceIdentifierParser { private final YangXPathMathSupport mathSupport; InstanceIdentifierParser(final YangXPathMathMode mathMode) { - this.mathSupport = mathMode.getSupport(); + mathSupport = mathMode.getSupport(); } final Absolute interpretAsInstanceIdentifier(final YangLiteralExpr expr) throws XPathExpressionException { diff --git a/xpath/yang-xpath-impl/src/main/java/org/opendaylight/yangtools/yang/xpath/impl/Utils.java b/xpath/yang-xpath-impl/src/main/java/org/opendaylight/yangtools/yang/xpath/impl/Utils.java index 74ebb6a99f..a0f0439385 100644 --- a/xpath/yang-xpath-impl/src/main/java/org/opendaylight/yangtools/yang/xpath/impl/Utils.java +++ b/xpath/yang-xpath-impl/src/main/java/org/opendaylight/yangtools/yang/xpath/impl/Utils.java @@ -9,11 +9,9 @@ package org.opendaylight.yangtools.yang.xpath.impl; import javax.xml.xpath.XPathExpressionException; import org.eclipse.jdt.annotation.Nullable; -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.common.QualifiedQName; -import org.opendaylight.yangtools.yang.common.UnqualifiedQName; +import org.opendaylight.yangtools.yang.common.UnresolvedQName; import org.opendaylight.yangtools.yang.common.YangNamespaceContext; import org.opendaylight.yangtools.yang.xpath.api.YangLiteralExpr; import org.opendaylight.yangtools.yang.xpath.api.YangQNameExpr; @@ -32,10 +30,10 @@ final class Utils { final String text = expr.getLiteral(); final int colon = text.indexOf(':'); - final AbstractQName qname; + final UnresolvedQName qname; try { - qname = colon != -1 ? QualifiedQName.of(text.substring(0, colon), text.substring(colon + 1)) - : UnqualifiedQName.of(text); + qname = colon != -1 ? UnresolvedQName.qualified(text.substring(0, colon), text.substring(colon + 1)) + : UnresolvedQName.unqualified(text); } catch (IllegalArgumentException e) { throw wrapException(e, "Cannot interpret %s as a QName", expr); } @@ -49,7 +47,7 @@ final class Utils { final int colon = text.indexOf(':'); try { if (colon == -1) { - return YangQNameExpr.of(UnqualifiedQName.of(text).intern()); + return YangQNameExpr.of(UnresolvedQName.unqualified(text).intern()); } return YangQNameExpr.of(namespaceContext.createQName(text.substring(0, colon), text.substring(colon + 1))); -- 2.36.6