With Java 8 we can make this method readily available as a default,
without having to have it in a separate utils method.
Since we are at it, also introduce producesEffective(), which allows
us to infer details about the effective instance.
Also migrate open-coded equivalents to use the common method where
possible.
Change-Id: Ie2590c460296efea9fafe6a52bb3548bafe0ae0c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit
61507ff3a5b8960b33cf71d90c61c53f2a8b2aff)
final Object argument = getStatementArgument();
if (argument instanceof QName) {
final QName qname = (QName) argument;
final Object argument = getStatementArgument();
if (argument instanceof QName) {
final QName qname = (QName) argument;
- if (StmtContextUtils.producesDeclared(this, UsesStatement.class)) {
+ if (producesDeclared(UsesStatement.class)) {
return maybeParentPath.orElse(null);
}
return maybeParentPath.orElse(null);
}
return parentPath.createChild(qname);
}
if (argument instanceof SchemaNodeIdentifier
return parentPath.createChild(qname);
}
if (argument instanceof SchemaNodeIdentifier
- && (StmtContextUtils.producesDeclared(this, AugmentStatement.class)
- || StmtContextUtils.producesDeclared(this, RefineStatement.class)
- || StmtContextUtils.producesDeclared(this, DeviationStatement.class))) {
+ && (producesDeclared(AugmentStatement.class) || producesDeclared(RefineStatement.class)
+ || producesDeclared(DeviationStatement.class))) {
return parentPath.createChild(((SchemaNodeIdentifier) argument).getPathFromRoot());
}
return parentPath.createChild(((SchemaNodeIdentifier) argument).getPathFromRoot());
}
static void copyFromSourceToTarget(final StatementContextBase<?, ?, ?> sourceCtx,
final StatementContextBase<?, ?, ?> targetCtx) {
static void copyFromSourceToTarget(final StatementContextBase<?, ?, ?> sourceCtx,
final StatementContextBase<?, ?, ?> targetCtx) {
- final CopyType typeOfCopy = UsesStatement.class.equals(sourceCtx.coerceParentContext().getPublicDefinition()
- .getDeclaredRepresentationClass()) ? CopyType.ADDED_BY_USES_AUGMENTATION
- : CopyType.ADDED_BY_AUGMENTATION;
+ final CopyType typeOfCopy = sourceCtx.coerceParentContext().producesDeclared(UsesStatement.class)
+ ? CopyType.ADDED_BY_USES_AUGMENTATION : CopyType.ADDED_BY_AUGMENTATION;
/*
* Since Yang 1.1, if an augmentation is made conditional with a
* "when" statement, it is allowed to add mandatory nodes.
/*
* Since Yang 1.1, if an augmentation is made conditional with a
* "when" statement, it is allowed to add mandatory nodes.
final StatementContextBase<?, ?, ?> targetCtx, final CopyType typeOfCopy,
final boolean skipCheckOfMandatoryNodes) {
final StatementContextBase<?, ?, ?> targetCtx, final CopyType typeOfCopy,
final boolean skipCheckOfMandatoryNodes) {
- if (WhenStatement.class.equals(sourceCtx.getPublicDefinition().getDeclaredRepresentationClass())) {
+ if (sourceCtx.producesDeclared(WhenStatement.class)) {
}
// Data definition statements must not collide on their namespace
}
// Data definition statements must not collide on their namespace
- if (DataDefinitionStatement.class.isAssignableFrom(
- sourceCtx.getPublicDefinition().getDeclaredRepresentationClass())) {
+ if (sourceCtx.producesDeclared(DataDefinitionStatement.class)) {
for (final StmtContext<?, ?, ?> subStatement : targetCtx.allSubstatements()) {
for (final StmtContext<?, ?, ?> subStatement : targetCtx.allSubstatements()) {
- if (DataDefinitionStatement.class.isAssignableFrom(
- subStatement.getPublicDefinition().getDeclaredRepresentationClass())) {
-
+ if (subStatement.producesDeclared(DataDefinitionStatement.class)) {
InferenceException.throwIf(
Objects.equals(sourceCtx.getStatementArgument(), subStatement.getStatementArgument()),
sourceCtx.getStatementSourceReference(),
InferenceException.throwIf(
Objects.equals(sourceCtx.getStatementArgument(), subStatement.getStatementArgument()),
sourceCtx.getStatementSourceReference(),
@Override
public void onStatementDefinitionDeclared(final Mutable<QName, BaseStatement, BaseEffectiveStatement> baseStmtCtx) {
final Mutable<?, ?, ?> baseParentCtx = baseStmtCtx.getParentContext();
@Override
public void onStatementDefinitionDeclared(final Mutable<QName, BaseStatement, BaseEffectiveStatement> baseStmtCtx) {
final Mutable<?, ?, ?> baseParentCtx = baseStmtCtx.getParentContext();
- if (StmtContextUtils.producesDeclared(baseParentCtx, IdentityStatement.class)) {
+ if (baseParentCtx.producesDeclared(IdentityStatement.class)) {
final QName baseIdentityQName = baseStmtCtx.coerceStatementArgument();
final ModelActionBuilder baseIdentityAction = baseStmtCtx.newInferenceAction(
final QName baseIdentityQName = baseStmtCtx.coerceStatementArgument();
final ModelActionBuilder baseIdentityAction = baseStmtCtx.newInferenceAction(
private static void resolveUsesNode(final Mutable<QName, UsesStatement, UsesEffectiveStatement> usesNode,
final StmtContext<?, ?, ?> targetNodeStmtCtx) {
for (final Mutable<?, ?, ?> subStmtCtx : usesNode.mutableDeclaredSubstatements()) {
private static void resolveUsesNode(final Mutable<QName, UsesStatement, UsesEffectiveStatement> usesNode,
final StmtContext<?, ?, ?> targetNodeStmtCtx) {
for (final Mutable<?, ?, ?> subStmtCtx : usesNode.mutableDeclaredSubstatements()) {
- if (StmtContextUtils.producesDeclared(subStmtCtx, RefineStatement.class)
- && areFeaturesSupported(subStmtCtx)) {
+ if (subStmtCtx.producesDeclared(RefineStatement.class) && areFeaturesSupported(subStmtCtx)) {
performRefine(subStmtCtx, targetNodeStmtCtx);
}
}
performRefine(subStmtCtx, targetNodeStmtCtx);
}
}
return verifyNotNull(getStatementArgument(), "Statement context %s does not have an argument", this);
}
return verifyNotNull(getStatementArgument(), "Statement context %s does not have an argument", this);
}
+ default <X, Y extends DeclaredStatement<X>> boolean producesDeclared(final Class<? super Y> type) {
+ return type.isAssignableFrom(getPublicDefinition().getDeclaredRepresentationClass());
+ }
+
+ default <X, Y extends DeclaredStatement<X>, Z extends EffectiveStatement<A, D>> boolean producesEffective(
+ final Class<? super Z> type) {
+ return type.isAssignableFrom(getPublicDefinition().getEffectiveRepresentationClass());
+ }
+
/**
* Return the {@link SchemaPath} of this statement. Not all statements have a SchemaPath, in which case
* {@link Optional#empty()} is returned.
/**
* Return the {@link SchemaPath} of this statement. Not all statements have a SchemaPath, in which case
* {@link Optional#empty()} is returned.
public static <A, D extends DeclaredStatement<A>> A firstAttributeOf(
final Iterable<? extends StmtContext<?, ?, ?>> contexts, final Class<D> declaredType) {
for (final StmtContext<?, ?, ?> ctx : contexts) {
public static <A, D extends DeclaredStatement<A>> A firstAttributeOf(
final Iterable<? extends StmtContext<?, ?, ?>> contexts, final Class<D> declaredType) {
for (final StmtContext<?, ?, ?> ctx : contexts) {
- if (producesDeclared(ctx, declaredType)) {
+ if (ctx.producesDeclared(declaredType)) {
return (A) ctx.getStatementArgument();
}
}
return (A) ctx.getStatementArgument();
}
}
@SuppressWarnings("unchecked")
public static <A, D extends DeclaredStatement<A>> A firstAttributeOf(final StmtContext<?, ?, ?> ctx,
final Class<D> declaredType) {
@SuppressWarnings("unchecked")
public static <A, D extends DeclaredStatement<A>> A firstAttributeOf(final StmtContext<?, ?, ?> ctx,
final Class<D> declaredType) {
- return producesDeclared(ctx, declaredType) ? (A) ctx.getStatementArgument() : null;
+ return ctx.producesDeclared(declaredType) ? (A) ctx.getStatementArgument() : null;
}
public static <A, D extends DeclaredStatement<A>> A firstSubstatementAttributeOf(
}
public static <A, D extends DeclaredStatement<A>> A firstSubstatementAttributeOf(
public static <A, D extends DeclaredStatement<A>> StmtContext<A, ?, ?> findFirstDeclaredSubstatement(
final StmtContext<?, ?, ?> stmtContext, final Class<D> declaredType) {
for (final StmtContext<?, ?, ?> subStmtContext : stmtContext.declaredSubstatements()) {
public static <A, D extends DeclaredStatement<A>> StmtContext<A, ?, ?> findFirstDeclaredSubstatement(
final StmtContext<?, ?, ?> stmtContext, final Class<D> declaredType) {
for (final StmtContext<?, ?, ?> subStmtContext : stmtContext.declaredSubstatements()) {
- if (producesDeclared(subStmtContext, declaredType)) {
+ if (subStmtContext.producesDeclared(declaredType)) {
return (StmtContext<A, ?, ?>) subStmtContext;
}
}
return (StmtContext<A, ?, ?>) subStmtContext;
}
}
final StmtContext<?, ?, ?> stmtContext, final Class<D> declaredType) {
final ImmutableList.Builder<StmtContext<A, D, ?>> listBuilder = ImmutableList.builder();
for (final StmtContext<?, ?, ?> subStmtContext : stmtContext.declaredSubstatements()) {
final StmtContext<?, ?, ?> stmtContext, final Class<D> declaredType) {
final ImmutableList.Builder<StmtContext<A, D, ?>> listBuilder = ImmutableList.builder();
for (final StmtContext<?, ?, ?> subStmtContext : stmtContext.declaredSubstatements()) {
- if (producesDeclared(subStmtContext, declaredType)) {
+ if (subStmtContext.producesDeclared(declaredType)) {
listBuilder.add((StmtContext<A, D, ?>) subStmtContext);
}
}
listBuilder.add((StmtContext<A, D, ?>) subStmtContext);
}
}
final StmtContext<?, ?, ?> stmtContext, final Class<D> type) {
final ImmutableList.Builder<StmtContext<A, D, ?>> listBuilder = ImmutableList.builder();
for (final StmtContext<?, ?, ?> subStmtContext : stmtContext.effectiveSubstatements()) {
final StmtContext<?, ?, ?> stmtContext, final Class<D> type) {
final ImmutableList.Builder<StmtContext<A, D, ?>> listBuilder = ImmutableList.builder();
for (final StmtContext<?, ?, ?> subStmtContext : stmtContext.effectiveSubstatements()) {
- if (producesDeclared(subStmtContext, type)) {
+ if (subStmtContext.producesDeclared(type)) {
listBuilder.add((StmtContext<A, D, ?>) subStmtContext);
}
}
listBuilder.add((StmtContext<A, D, ?>) subStmtContext);
}
}
public static <A, D extends DeclaredStatement<A>> StmtContext<A, ?, ?> findFirstEffectiveSubstatement(
final StmtContext<?, ?, ?> stmtContext, final Class<D> declaredType) {
for (final StmtContext<?, ?, ?> subStmtContext : stmtContext.effectiveSubstatements()) {
public static <A, D extends DeclaredStatement<A>> StmtContext<A, ?, ?> findFirstEffectiveSubstatement(
final StmtContext<?, ?, ?> stmtContext, final Class<D> declaredType) {
for (final StmtContext<?, ?, ?> subStmtContext : stmtContext.effectiveSubstatements()) {
- if (producesDeclared(subStmtContext, declaredType)) {
+ if (subStmtContext.producesDeclared(declaredType)) {
return (StmtContext<A, ?, ?>) subStmtContext;
}
}
return (StmtContext<A, ?, ?>) subStmtContext;
}
}
public static boolean producesDeclared(final StmtContext<?, ?, ?> ctx,
final Class<? extends DeclaredStatement<?>> type) {
return type.isAssignableFrom(ctx.getPublicDefinition().getDeclaredRepresentationClass());
public static boolean producesDeclared(final StmtContext<?, ?, ?> ctx,
final Class<? extends DeclaredStatement<?>> type) {
return type.isAssignableFrom(ctx.getPublicDefinition().getDeclaredRepresentationClass());
* if supplied statement context is null
*/
public static boolean isUnrecognizedStatement(final StmtContext<?, ?, ?> stmtCtx) {
* if supplied statement context is null
*/
public static boolean isUnrecognizedStatement(final StmtContext<?, ?, ?> stmtCtx) {
- return UnrecognizedStatement.class
- .isAssignableFrom(stmtCtx.getPublicDefinition().getDeclaredRepresentationClass());
+ return stmtCtx.producesDeclared(UnrecognizedStatement.class);
}
public static boolean checkFeatureSupport(final StmtContext<?, ?, ?> stmtContext,
}
public static boolean checkFeatureSupport(final StmtContext<?, ?, ?> stmtContext,
final StmtContext<?, ?, ?> rootCtx = ctx.getRoot();
final QNameModule qnameModule;
final StmtContext<?, ?, ?> rootCtx = ctx.getRoot();
final QNameModule qnameModule;
- if (producesDeclared(rootCtx, ModuleStatement.class)) {
+ if (rootCtx.producesDeclared(ModuleStatement.class)) {
qnameModule = rootCtx.getFromNamespace(ModuleCtxToModuleQName.class, rootCtx);
qnameModule = rootCtx.getFromNamespace(ModuleCtxToModuleQName.class, rootCtx);
- } else if (producesDeclared(rootCtx, SubmoduleStatement.class)) {
+ } else if (rootCtx.producesDeclared(SubmoduleStatement.class)) {
final String belongsToModuleName = firstAttributeOf(rootCtx.declaredSubstatements(),
BelongsToStatement.class);
qnameModule = rootCtx.getFromNamespace(ModuleNameToModuleQName.class, belongsToModuleName);
final String belongsToModuleName = firstAttributeOf(rootCtx.declaredSubstatements(),
BelongsToStatement.class);
qnameModule = rootCtx.getFromNamespace(ModuleNameToModuleQName.class, belongsToModuleName);
- if (producesDeclared(ctx.getRoot(), SubmoduleStatement.class)) {
- final String moduleName = ctx.getRoot().getFromNamespace(BelongsToPrefixToModuleName.class, prefix);
+ final StmtContext<?, ?, ?> root = ctx.getRoot();
+ if (root.producesDeclared(SubmoduleStatement.class)) {
+ final String moduleName = root.getFromNamespace(BelongsToPrefixToModuleName.class, prefix);
return ctx.getFromNamespace(ModuleNameToModuleQName.class, moduleName);
}
return ctx.getFromNamespace(ModuleNameToModuleQName.class, moduleName);
}
public static Optional<Revision> getLatestRevision(final Iterable<? extends StmtContext<?, ?, ?>> subStmts) {
Revision revision = null;
for (final StmtContext<?, ?, ?> subStmt : subStmts) {
public static Optional<Revision> getLatestRevision(final Iterable<? extends StmtContext<?, ?, ?>> subStmts) {
Revision revision = null;
for (final StmtContext<?, ?, ?> subStmt : subStmts) {
- if (subStmt.getPublicDefinition().getDeclaredRepresentationClass().isAssignableFrom(
- RevisionStatement.class)) {
+ if (subStmt.producesDeclared(RevisionStatement.class)) {
if (revision == null && subStmt.getStatementArgument() != null) {
revision = (Revision) subStmt.getStatementArgument();
} else {
if (revision == null && subStmt.getStatementArgument() != null) {
revision = (Revision) subStmt.getStatementArgument();
} else {