import org.opendaylight.yangtools.yang.model.ri.stmt.impl.decl.EmptyRequireInstanceStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.decl.EmptyStatusStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.decl.EmptyYangVersionStatement;
+import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.AbstractContainerEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.AbstractLeafEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.ActionEffectiveStatementImpl;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.AugmentEffectiveStatementImpl;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.ChoiceEffectiveStatementImpl;
-import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.ContainerEffectiveStatementImpl;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.DeclaredCaseEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.DeclaredInputEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.DeclaredOutputEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyBitEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyConfigEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyContactEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyContainerEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyDefaultEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyDescriptionEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyEnumEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularBitEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularConfigEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularContactEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularContainerEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularDefaultEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularDescriptionEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularEnumEffectiveStatement;
public static ContainerEffectiveStatement copyContainer(final ContainerEffectiveStatement original,
final QName argument, final int flags) {
- checkArgument(original instanceof ContainerEffectiveStatementImpl, "Unsupported original %s", original);
- return new ContainerEffectiveStatementImpl((ContainerEffectiveStatementImpl) original, argument, flags);
+ checkArgument(original instanceof AbstractContainerEffectiveStatement, "Unsupported original %s", original);
+ final var orig = (AbstractContainerEffectiveStatement) original;
+ return argument.equals(orig.getDeclared().argument()) ? new EmptyContainerEffectiveStatement(orig, flags)
+ : new RegularContainerEffectiveStatement(orig, argument, flags);
}
public static ContainerEffectiveStatement createContainer(final ContainerStatement declared, final QName argument,
final int flags, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
- return new ContainerEffectiveStatementImpl(declared, substatements, argument, flags);
+ return argument.equals(declared.argument())
+ ? new EmptyContainerEffectiveStatement(declared, substatements, flags)
+ : new RegularContainerEffectiveStatement(declared, substatements, argument, flags);
}
public static DefaultEffectiveStatement createDefault(final DefaultStatement declared,
*/
package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff;
-import static java.util.Objects.requireNonNull;
-
import com.google.common.collect.ImmutableList;
-import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.NotificationNodeContainerMixin;
import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.PresenceMixin;
-public final class ContainerEffectiveStatementImpl
+public abstract class AbstractContainerEffectiveStatement
extends WithTypedefNamespace<QName, ContainerStatement, ContainerEffectiveStatement>
implements ContainerEffectiveStatement, ContainerSchemaNode, DataSchemaNodeMixin<ContainerStatement>,
DataNodeContainerMixin<QName, ContainerStatement>, ActionNodeContainerMixin<QName, ContainerStatement>,
NotificationNodeContainerCompat<QName, ContainerStatement, ContainerEffectiveStatement>,
MustConstraintMixin<QName, ContainerStatement>, PresenceMixin<QName, ContainerStatement>,
AugmentationTargetMixin<QName, ContainerStatement> {
-
private final int flags;
- private final @NonNull QName argument;
- public ContainerEffectiveStatementImpl(final ContainerStatement declared,
- final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final QName argument,
- final int flags) {
+ AbstractContainerEffectiveStatement(final ContainerStatement declared,
+ final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final int flags) {
super(declared, substatements);
- this.argument = requireNonNull(argument);
this.flags = flags;
}
- public ContainerEffectiveStatementImpl(final ContainerEffectiveStatementImpl origEffective, final QName argument,
- final int flags) {
+ AbstractContainerEffectiveStatement(final AbstractContainerEffectiveStatement origEffective, final int flags) {
super(origEffective);
- this.argument = requireNonNull(argument);
this.flags = flags;
}
@Override
- public int flags() {
+ public final int flags() {
return flags;
}
@Override
- public QName argument() {
- return argument;
- }
-
- @Override
- public boolean isPresenceContainer() {
+ public final boolean isPresenceContainer() {
return presence();
}
@Override
- public DataSchemaNode dataChildByName(final QName name) {
+ public final DataSchemaNode dataChildByName(final QName name) {
return dataSchemaNode(name);
}
@Override
- public ContainerEffectiveStatement asEffectiveStatement() {
+ public final ContainerEffectiveStatement asEffectiveStatement() {
return this;
}
@Override
- public String toString() {
- return "container " + argument.getLocalName();
+ public final String toString() {
+ return "container " + argument().getLocalName();
}
}
--- /dev/null
+/*
+ * 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.model.ri.stmt.impl.eff;
+
+import com.google.common.collect.ImmutableList;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ContainerStatement;
+
+public final class EmptyContainerEffectiveStatement extends AbstractContainerEffectiveStatement {
+ public EmptyContainerEffectiveStatement(final ContainerStatement declared,
+ final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final int flags) {
+ super(declared, substatements, flags);
+ }
+
+ public EmptyContainerEffectiveStatement(final AbstractContainerEffectiveStatement original, final int flags) {
+ super(original, flags);
+ }
+
+ @Override
+ public QName argument() {
+ return getDeclared().argument();
+ }
+}
--- /dev/null
+/*
+ * 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.model.ri.stmt.impl.eff;
+
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.collect.ImmutableList;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ContainerStatement;
+
+public final class RegularContainerEffectiveStatement extends AbstractContainerEffectiveStatement {
+ private final @NonNull QName argument;
+
+ public RegularContainerEffectiveStatement(final ContainerStatement declared,
+ final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final QName argument,
+ final int flags) {
+ super(declared, substatements, flags);
+ this.argument = requireNonNull(argument);
+ }
+
+ public RegularContainerEffectiveStatement(final AbstractContainerEffectiveStatement original, final QName argument,
+ final int flags) {
+ super(original, flags);
+ this.argument = requireNonNull(argument);
+ }
+
+ @Override
+ public QName argument() {
+ return argument;
+ }
+}