From 3352bd58961fa6f5b44bfbd3415eca44a6cdd9af Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 1 Dec 2020 14:42:15 +0100 Subject: [PATCH] Fire AbstractPrerequisite listeners as soon as they resolve We seem to be stuck with listeners not firing, leaving references which need to be cleared. Ensure we fire phase listeners as soon as they are satisfied -- repurposing tryApply() for its logical purpose. JIRA: YANGTOOLS-1192 Change-Id: I87d1700e2cc80bfa3fbb5be9a8dc938d6fe55c17 Signed-off-by: Robert Varga (cherry picked from commit d70f2e9f13755ea7c3aac1f0c8d8a6b0b0861368) --- .../parser/stmt/reactor/ModifierImpl.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ModifierImpl.java b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ModifierImpl.java index 7327e988af..5edde2ffd8 100644 --- a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ModifierImpl.java +++ b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ModifierImpl.java @@ -86,12 +86,6 @@ final class ModifierImpl implements ModelActionBuilder { action = null; } - private void applyAction() { - checkState(!actionApplied); - action.apply(ctx); - actionApplied = true; - } - private , N extends StatementNamespace> @NonNull AbstractPrerequisite requiresCtxImpl(final StmtContext context, final Class namespace, final K key, final ModelProcessingPhase phase) { @@ -147,7 +141,10 @@ final class ModifierImpl implements ModelActionBuilder { checkState(action != null, "Action was not defined yet."); if (removeSatisfied()) { - applyAction(); + if (!actionApplied) { + action.apply(ctx); + actionApplied = true; + } return true; } return false; @@ -320,7 +317,7 @@ final class ModifierImpl implements ModelActionBuilder { @Override public boolean phaseFinished(final StatementContextBase context, final ModelProcessingPhase finishedPhase) { - return resolvePrereq((C) context); + return resolvePrereq((C) context) || tryApply(); } } @@ -349,7 +346,7 @@ final class ModifierImpl implements ModelActionBuilder { @Override public boolean phaseFinished(final StatementContextBase context, final ModelProcessingPhase finishedPhase) { - return resolvePrereq((C) context); + return resolvePrereq((C) context) || tryApply(); } @Override @@ -426,7 +423,9 @@ final class ModifierImpl implements ModelActionBuilder { if (!it.hasNext()) { // Last step: we are done - resolvePrereq((C) value); + if (resolvePrereq((C) value)) { + tryApply(); + } return; } -- 2.36.6