From: Robert Varga Date: Mon, 2 Nov 2020 15:37:49 +0000 (+0100) Subject: Fix StmtContext.findSubstatementArgument()/hasSubstatement() X-Git-Tag: v6.0.1~8 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=b049955b52bcdf654e7b27530105745b0ca77ac0;p=yangtools.git Fix StmtContext.findSubstatementArgument()/hasSubstatement() When we are searching for a substatement we should also mind that it can have its effective statement built. If we do not, we can end up picking a statement which has been disabled by deviate. Change-Id: I27743b5acbb2f617497d329423b239f363c54258 JIRA: YANGTOOLS-1157 Signed-off-by: miroslav.kovac Signed-off-by: Robert Varga --- diff --git a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextDefaults.java b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextDefaults.java index a5692a860d..59fb76f71c 100644 --- a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextDefaults.java +++ b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextDefaults.java @@ -33,7 +33,7 @@ public final class StmtContextDefaults { public static > @NonNull Optional findSubstatementArgument( final @NonNull StmtContext stmt, final @NonNull Class type) { return stmt.allSubstatementsStream() - .filter(ctx -> ((StmtContext) ctx).producesEffective(type)) + .filter(ctx -> ctx.isSupportedToBuildEffective() && ((StmtContext) ctx).producesEffective(type)) .findAny() .map(ctx -> (A) ctx.coerceStatementArgument()); } @@ -47,7 +47,8 @@ public final class StmtContextDefaults { */ @SuppressWarnings({ "rawtypes", "unchecked" }) public static boolean hasSubstatement(final @NonNull StmtContext stmt, - @SuppressWarnings("rawtypes") final @NonNull Class> type) { - return stmt.allSubstatementsStream().anyMatch(ctx -> ((StmtContext) ctx).producesEffective(type)); + final @NonNull Class> type) { + return stmt.allSubstatementsStream() + .anyMatch(ctx -> ctx.isSupportedToBuildEffective() && ((StmtContext) ctx).producesEffective(type)); } }