From d70f2e9f13755ea7c3aac1f0c8d8a6b0b0861368 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 --- .../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 5926a06346..1c636a937d 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; @@ -314,7 +311,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(); } } @@ -343,7 +340,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 @@ -420,7 +417,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