*/
package org.opendaylight.yangtools.yang.model.spi.meta;
+import static com.google.common.base.Verify.verifyNotNull;
+
import com.google.common.annotations.Beta;
import com.google.common.base.Strings;
import com.google.common.collect.Collections2;
import org.opendaylight.yangtools.yang.model.api.Status;
import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.UserOrderedAware;
import org.opendaylight.yangtools.yang.model.api.UsesNode;
import org.opendaylight.yangtools.yang.model.api.WhenConditionAware;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ErrorAppTagEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ErrorMessageEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.InputEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByAwareEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.OutputEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.TypedefEffectiveStatement;
*
* @param <A> Argument type ({@link Empty} if statement does not have argument.)
* @param <D> Class representing declared version of this statement.
+ * @deprecated Scheduled for removal with {@link CopyableNode}.
*/
+ @Deprecated(since = "8.0.0")
public interface CopyableMixin<A, D extends DeclaredStatement<A>> extends AddedByUsesMixin<A, D>, CopyableNode {
@Override
+ @Deprecated(since = "8.0.0")
default boolean isAugmenting() {
return (flags() & FlagsBuilder.AUGMENTING) != 0;
}
@Override
default Optional<Boolean> effectiveConfig() {
final int fl = flags() & FlagsBuilder.MASK_CONFIG;
- switch (fl) {
- case FlagsBuilder.CONFIG_FALSE:
- return Optional.of(Boolean.FALSE);
- case FlagsBuilder.CONFIG_TRUE:
- return Optional.of(Boolean.TRUE);
- case FlagsBuilder.CONFIG_UNDEF:
- return Optional.empty();
- default:
- throw new IllegalStateException("Unhandled effective config flags " + fl);
- }
+ return switch (fl) {
+ case FlagsBuilder.CONFIG_FALSE -> Optional.of(Boolean.FALSE);
+ case FlagsBuilder.CONFIG_TRUE -> Optional.of(Boolean.TRUE);
+ case FlagsBuilder.CONFIG_UNDEF -> Optional.empty();
+ default -> throw new IllegalStateException("Unhandled effective config flags " + fl);
+ };
}
}
@Override
default Status getStatus() {
final int status = flags() & FlagsBuilder.MASK_STATUS;
- switch (status) {
- case FlagsBuilder.STATUS_CURRENT:
- return Status.CURRENT;
- case FlagsBuilder.STATUS_DEPRECATED:
- return Status.DEPRECATED;
- case FlagsBuilder.STATUS_OBSOLETE:
- return Status.OBSOLETE;
- default:
- throw new IllegalStateException("Illegal status " + status);
- }
+ return switch (status) {
+ case FlagsBuilder.STATUS_CURRENT -> Status.CURRENT;
+ case FlagsBuilder.STATUS_DEPRECATED -> Status.DEPRECATED;
+ case FlagsBuilder.STATUS_OBSOLETE -> Status.OBSOLETE;
+ default -> throw new IllegalStateException("Illegal status " + status);
+ };
}
}
extends DocumentedNodeMixin.WithStatus<A, D>, CopyableMixin<A, D>, UnknownSchemaNode {
@Override
default String getNodeParameter() {
- return Strings.nullToEmpty(getDeclared().rawArgument());
+ return Strings.nullToEmpty(verifyNotNull(getDeclared()).rawArgument());
}
}
*
* @param <A> Argument type ({@link Empty} if statement does not have argument.)
* @param <D> Class representing declared version of this statement.
+ * @param <E> Class representing effective version of this statement.
*/
- public interface UserOrderedMixin<A, D extends DeclaredStatement<A>> extends EffectiveStatementWithFlags<A, D> {
- default boolean userOrdered() {
+ // FIXME: 9.0.0: remove this mixin once we have a properly-cached DataTree and JSON/XML codec tree and the speed
+ // of isUserOrdered() is not really critical.
+ public interface UserOrderedAwareMixin<A, D extends DeclaredStatement<A>,
+ E extends OrderedByAwareEffectiveStatement<A, D>>
+ extends EffectiveStatementWithFlags<A, D>, UserOrderedAware<E> {
+ @Override
+ default boolean isUserOrdered() {
return (flags() & FlagsBuilder.USER_ORDERED) != 0;
}
}
}
public FlagsBuilder setStatus(final Status status) {
- final int bits;
- switch (status) {
- case CURRENT:
- bits = STATUS_CURRENT;
- break;
- case DEPRECATED:
- bits = STATUS_DEPRECATED;
- break;
- case OBSOLETE:
- bits = STATUS_OBSOLETE;
- break;
- default:
- throw new IllegalStateException("Unhandled status " + status);
- }
-
+ final int bits = switch (status) {
+ case CURRENT -> STATUS_CURRENT;
+ case DEPRECATED -> STATUS_DEPRECATED;
+ case OBSOLETE -> STATUS_OBSOLETE;
+ };
flags = flags & ~MASK_STATUS | bits;
return this;
}
static <T extends ContainerLike> T findAsContainer(final EffectiveStatement<?, ?> stmt,
final Class<? extends EffectiveStatement<QName, ?>> type, final Class<T> target) {
- return target.cast(stmt.findFirstEffectiveSubstatement(type).get());
+ return target.cast(stmt.findFirstEffectiveSubstatement(type).orElseThrow());
}
static Collection<? extends @NonNull TypeDefinition<?>> filterTypeDefinitions(final Mixin<?, ?> stmt) {