From 2d388737025494d0fae0d5b98829d0dce7eaf4ad Mon Sep 17 00:00:00 2001 From: Luca Molteni Date: Wed, 13 Sep 2023 16:56:05 +0200 Subject: [PATCH] Revert "[DROOLS-7528] Avoid casting to unnecessary interfaces (Fix the secondary super cache problem in Drools) (#5451)" This reverts commit abbfa6f7d7b73fa29773746d2debc5e9fc3bc172. --- .../org/drools/core/phreak/LazyPhreakBuilder.java | 2 +- .../drools/core/phreak/RuleNetworkEvaluator.java | 3 +-- .../java/org/drools/core/reteoo/LeftTuple.java | 14 +------------- .../java/org/drools/core/reteoo/PathMemory.java | 2 +- .../org/drools/core/reteoo/RightTupleImpl.java | 9 +-------- .../core/reteoo/RuleTerminalNodeLeftTuple.java | 2 +- .../core/reteoo/SingleLeftTupleSinkAdapter.java | 14 ++------------ 7 files changed, 8 insertions(+), 38 deletions(-) diff --git a/drools-core/src/main/java/org/drools/core/phreak/LazyPhreakBuilder.java b/drools-core/src/main/java/org/drools/core/phreak/LazyPhreakBuilder.java index 698e2fb244f..77165cca1c1 100644 --- a/drools-core/src/main/java/org/drools/core/phreak/LazyPhreakBuilder.java +++ b/drools-core/src/main/java/org/drools/core/phreak/LazyPhreakBuilder.java @@ -1643,7 +1643,7 @@ private static int updateRiaAndTerminalMemory( LeftTupleSource lt, } } else if (NodeTypeEnums.isTerminalNode(sink)) { - pmem = reteEvaluator.getNodeMemory((AbstractTerminalNode) sink); + pmem = (PathMemory) reteEvaluator.getNodeMemory((MemoryFactory) sink); } if (pmem != null && smem.getPos() < pmem.getSegmentMemories().length) { diff --git a/drools-core/src/main/java/org/drools/core/phreak/RuleNetworkEvaluator.java b/drools-core/src/main/java/org/drools/core/phreak/RuleNetworkEvaluator.java index 7ae14f4f0f4..20d58465fa7 100644 --- a/drools-core/src/main/java/org/drools/core/phreak/RuleNetworkEvaluator.java +++ b/drools-core/src/main/java/org/drools/core/phreak/RuleNetworkEvaluator.java @@ -25,7 +25,6 @@ import org.drools.core.common.ReteEvaluator; import org.drools.core.common.TupleSets; import org.drools.core.common.TupleSetsImpl; -import org.drools.core.reteoo.AbstractTerminalNode; import org.drools.core.reteoo.AccumulateNode; import org.drools.core.reteoo.AccumulateNode.AccumulateMemory; import org.drools.core.reteoo.AsyncReceiveNode; @@ -328,7 +327,7 @@ public void innerEval(PathMemory pmem, boolean terminalNode = true; switch (node.getType()) { case NodeTypeEnums.RuleTerminalNode: - pRtNode.doNode((AbstractTerminalNode) node, activationsManager, srcTuples, executor); + pRtNode.doNode(( TerminalNode ) node, activationsManager, srcTuples, executor); break; case NodeTypeEnums.QueryTerminalNode: pQtNode.doNode((QueryTerminalNode) node, activationsManager, srcTuples, stack); diff --git a/drools-core/src/main/java/org/drools/core/reteoo/LeftTuple.java b/drools-core/src/main/java/org/drools/core/reteoo/LeftTuple.java index befbebe37e3..9801285fef3 100644 --- a/drools-core/src/main/java/org/drools/core/reteoo/LeftTuple.java +++ b/drools-core/src/main/java/org/drools/core/reteoo/LeftTuple.java @@ -343,20 +343,8 @@ public int getIndex() { } @Override - // It's better to always cast to a concrete or abstract class to avoid - // secondary super cache problem. See https://issues.redhat.com/browse/DROOLS-7521 public LeftTupleSink getTupleSink() { - Object sink = getSink(); - if (sink instanceof AccumulateNode) { - return (AccumulateNode) sink; - } else if (sink instanceof RuleTerminalNode) { - return (RuleTerminalNode) sink; - } else if (sink instanceof RightInputAdapterNode) { - return (RightInputAdapterNode) sink; - } else if (sink instanceof ExistsNode) { - return (ExistsNode) sink; - } - return (LeftTupleSink)sink; + return (LeftTupleSink)getSink(); } /* Had to add the set method because sink adapters must override diff --git a/drools-core/src/main/java/org/drools/core/reteoo/PathMemory.java b/drools-core/src/main/java/org/drools/core/reteoo/PathMemory.java index a4e7fd8a14d..1fca5922de5 100644 --- a/drools-core/src/main/java/org/drools/core/reteoo/PathMemory.java +++ b/drools-core/src/main/java/org/drools/core/reteoo/PathMemory.java @@ -113,7 +113,7 @@ public RuleAgendaItem getOrCreateRuleAgendaItem(ActivationsManager activationsMa } private TerminalNode ensureAgendaItemCreated(ActivationsManager activationsManager) { - AbstractTerminalNode rtn = (AbstractTerminalNode) getPathEndNode(); + TerminalNode rtn = (TerminalNode) getPathEndNode(); if (agendaItem == null) { int salience = rtn.getRule().getSalience().isDynamic() ? 0 : rtn.getRule().getSalience().getValue(); agendaItem = activationsManager.createRuleAgendaItem(salience, this, rtn); diff --git a/drools-core/src/main/java/org/drools/core/reteoo/RightTupleImpl.java b/drools-core/src/main/java/org/drools/core/reteoo/RightTupleImpl.java index 0b5577f1595..a4e1321fd0d 100644 --- a/drools-core/src/main/java/org/drools/core/reteoo/RightTupleImpl.java +++ b/drools-core/src/main/java/org/drools/core/reteoo/RightTupleImpl.java @@ -52,15 +52,8 @@ public RightTupleImpl(InternalFactHandle handle, handle.addLastRightTuple( this ); } - // It's better to always cast to a concrete or abstract class to avoid - // secondary super cache problem. See https://issues.redhat.com/browse/DROOLS-7521 public RightTupleSink getTupleSink() { - Object sink = getSink(); - if(sink instanceof BetaNode) { - return (BetaNode)sink; - } else { - return (RightTupleSink) sink; - } + return (RightTupleSink) getSink(); } public void reAdd() { diff --git a/drools-core/src/main/java/org/drools/core/reteoo/RuleTerminalNodeLeftTuple.java b/drools-core/src/main/java/org/drools/core/reteoo/RuleTerminalNodeLeftTuple.java index 4626a017d9d..cd3c5e2ef88 100644 --- a/drools-core/src/main/java/org/drools/core/reteoo/RuleTerminalNodeLeftTuple.java +++ b/drools-core/src/main/java/org/drools/core/reteoo/RuleTerminalNodeLeftTuple.java @@ -247,7 +247,7 @@ public void setActivationNode(final ActivationNode activationNode) { } public TerminalNode getTerminalNode() { - return (AbstractTerminalNode) getTupleSink(); + return (TerminalNode) getTupleSink(); } public List getFactHandles() { diff --git a/drools-core/src/main/java/org/drools/core/reteoo/SingleLeftTupleSinkAdapter.java b/drools-core/src/main/java/org/drools/core/reteoo/SingleLeftTupleSinkAdapter.java index b3ae7668066..08cf0dae39a 100644 --- a/drools-core/src/main/java/org/drools/core/reteoo/SingleLeftTupleSinkAdapter.java +++ b/drools-core/src/main/java/org/drools/core/reteoo/SingleLeftTupleSinkAdapter.java @@ -50,19 +50,9 @@ public BaseNode getMatchingNode(BaseNode candidate) { public LeftTupleSink[] getSinks() { return sinkArray; } - - // See LeftTuple.getTupleSink() or https://issues.redhat.com/browse/DROOLS-7521 + public LeftTupleSinkNode getFirstLeftTupleSink() { - if (sink instanceof AccumulateNode) { - return (AccumulateNode) sink; - } else if (sink instanceof RuleTerminalNode) { - return (RuleTerminalNode) sink; - } else if (sink instanceof RightInputAdapterNode) { - return (RightInputAdapterNode) sink; - } else if (sink instanceof ExistsNode) { - return (ExistsNode) sink; - } - return (LeftTupleSinkNode) sink; + return ( LeftTupleSinkNode ) sink; } public LeftTupleSinkNode getLastLeftTupleSink() {