import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.ElementCountConstraint;
import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ActionEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ActionStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.LeafStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.LengthEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.LengthStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ListEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ListStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyIncludeEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyLeafEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyLengthEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyListEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyLocalKeyEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyMandatoryEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyMaxElementsEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularIncludeEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularLeafEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularLengthEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularListEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularLocalKeyEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularMandatoryEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularMaxElementsEffectiveStatement;
: new RegularLengthEffectiveStatement(declared, substatements);
}
+ public static ListEffectiveStatement copyList(final ListEffectiveStatement original, final QName argument,
+ final int flags, final @Nullable ListSchemaNode newOriginal) {
+ if (original instanceof RegularListEffectiveStatement) {
+ return new RegularListEffectiveStatement((RegularListEffectiveStatement) original, argument, flags,
+ newOriginal);
+ } else if (original instanceof EmptyListEffectiveStatement) {
+ return new RegularListEffectiveStatement((EmptyListEffectiveStatement) original, argument, flags,
+ newOriginal);
+ } else {
+ throw new IllegalArgumentException("Unsupported original " + original);
+ }
+ }
+
+ public static ListEffectiveStatement createList(final ListStatement declared, final QName argument,
+ final int flags, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
+ final ImmutableList<QName> keyDefinition, final @Nullable ElementCountConstraint elementCountConstraint,
+ final @Nullable ListSchemaNode original) {
+ return original == null && elementCountConstraint == null
+ ? new EmptyListEffectiveStatement(declared, argument, flags, substatements, keyDefinition)
+ : new RegularListEffectiveStatement(declared, argument, flags, substatements, keyDefinition,
+ elementCountConstraint, original);
+ }
+
public static MandatoryEffectiveStatement createMandatory(final MandatoryStatement declared) {
return new EmptyMandatoryEffectiveStatement(declared);
}
* 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.parser.rfc7950.stmt.list;
+package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff;
import static java.util.Objects.requireNonNull;
* 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.parser.rfc7950.stmt.list;
+package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff;
import com.google.common.collect.ImmutableList;
import java.util.Optional;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ListStatement;
-final class EmptyListEffectiveStatement extends AbstractListEffectiveStatement {
- EmptyListEffectiveStatement(final ListStatement declared, final QName argument, final int flags,
+public final class EmptyListEffectiveStatement extends AbstractListEffectiveStatement {
+ public EmptyListEffectiveStatement(final ListStatement declared, final QName argument, final int flags,
final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
final ImmutableList<QName> keyDefinition) {
super(declared, argument, flags, substatements, keyDefinition);
}
- EmptyListEffectiveStatement(final EmptyListEffectiveStatement original, final QName argument, final int flags) {
+ public EmptyListEffectiveStatement(final EmptyListEffectiveStatement original, final QName argument,
+ final int flags) {
super(original, argument, flags);
}
* 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.parser.rfc7950.stmt.list;
+package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff;
import com.google.common.collect.ImmutableList;
import java.util.Optional;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ListStatement;
-final class RegularListEffectiveStatement extends AbstractListEffectiveStatement {
+public final class RegularListEffectiveStatement extends AbstractListEffectiveStatement {
private final ElementCountConstraint elementCountConstraint;
private final ListSchemaNode original;
- RegularListEffectiveStatement(final ListStatement declared, final QName argument, final int flags,
+ public RegularListEffectiveStatement(final ListStatement declared, final QName argument, final int flags,
final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
final ImmutableList<QName> keyDefinition, final ElementCountConstraint elementCountConstraint,
final ListSchemaNode original) {
this.original = original;
}
- RegularListEffectiveStatement(final RegularListEffectiveStatement originalEffective, final ListSchemaNode original,
- final QName argument, final int flags) {
+ public RegularListEffectiveStatement(final RegularListEffectiveStatement originalEffective, final QName argument,
+ final int flags, final ListSchemaNode original) {
super(originalEffective, argument, flags);
this.elementCountConstraint = originalEffective.elementCountConstraint;
this.original = original;
}
- RegularListEffectiveStatement(final EmptyListEffectiveStatement originalEffective, final ListSchemaNode original,
- final QName argument, final int flags) {
+ public RegularListEffectiveStatement(final EmptyListEffectiveStatement originalEffective,
+ final QName argument, final int flags, final ListSchemaNode original) {
super(originalEffective, argument, flags);
this.elementCountConstraint = null;
this.original = original;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
-import java.util.Optional;
import java.util.Set;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.common.Ordering;
import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.ElementCountConstraint;
import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
import org.opendaylight.yangtools.yang.model.api.Status;
import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatementDecorators;
import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements;
+import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements;
import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder;
import org.opendaylight.yangtools.yang.model.spi.meta.SubstatementIndexingException;
import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
@Override
public ListEffectiveStatement copyEffective(final Current<QName, ListStatement> stmt,
final ListEffectiveStatement original) {
- final int flags = computeFlags(stmt, original.effectiveSubstatements());
- if (original instanceof RegularListEffectiveStatement) {
- return new RegularListEffectiveStatement((RegularListEffectiveStatement) original,
- stmt.original(ListSchemaNode.class), stmt.getArgument(), flags);
- } else if (original instanceof EmptyListEffectiveStatement) {
- return new RegularListEffectiveStatement((EmptyListEffectiveStatement) original,
- stmt.original(ListSchemaNode.class), stmt.getArgument(), flags);
- } else {
- // Safe fallback
- return super.copyEffective(stmt, original);
- }
+ return EffectiveStatements.copyList(original, stmt.getArgument(),
+ computeFlags(stmt, original.effectiveSubstatements()), stmt.original(ListSchemaNode.class));
}
@Override
EffectiveStmtUtils.checkUniqueTypedefs(stmt, substatements);
EffectiveStmtUtils.checkUniqueUses(stmt, substatements);
- final Optional<ElementCountConstraint> elementCountConstraint =
- EffectiveStmtUtils.createElementCountConstraint(substatements);
- final QName qname = stmt.getArgument();
- final ListSchemaNode original = stmt.original(ListSchemaNode.class);
try {
- return original == null && !elementCountConstraint.isPresent()
- ? new EmptyListEffectiveStatement(stmt.declared(), qname, flags, substatements, keyDefinition)
- : new RegularListEffectiveStatement(stmt.declared(), qname, flags, substatements, keyDefinition,
- elementCountConstraint.orElse(null), original);
+ return EffectiveStatements.createList(stmt.declared(), stmt.getArgument(), flags, substatements,
+ keyDefinition, EffectiveStmtUtils.createElementCountConstraint(substatements).orElse(null),
+ stmt.original(ListSchemaNode.class));
} catch (SubstatementIndexingException e) {
throw new SourceException(e.getMessage(), stmt, e);
}