From 7c1f98faab335f132ee72ff91fbe3d4f06c6bd92 Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Mon, 25 Feb 2019 09:04:20 +0100 Subject: [PATCH] OO-3909: hardened the tree visitor to handle possible "null" nodes --- .../org/olat/core/util/tree/TreeVisitor.java | 10 ++++--- .../MergedCourseElementDataContainer.java | 29 ++++++------------- 2 files changed, 15 insertions(+), 24 deletions(-) diff --git a/src/main/java/org/olat/core/util/tree/TreeVisitor.java b/src/main/java/org/olat/core/util/tree/TreeVisitor.java index c94258ede02..cc2e47a59bd 100644 --- a/src/main/java/org/olat/core/util/tree/TreeVisitor.java +++ b/src/main/java/org/olat/core/util/tree/TreeVisitor.java @@ -61,10 +61,12 @@ public class TreeVisitor { if (!visitChildrenFirst) { v.visit(node); } - int chdCnt = node.getChildCount(); - for (int i = 0; i < chdCnt; i++) { - INode chd = node.getChildAt(i); - doVisit(chd); + if(node != null) { + int chdCnt = node.getChildCount(); + for (int i = 0; i < chdCnt; i++) { + INode chd = node.getChildAt(i); + doVisit(chd); + } } if (visitChildrenFirst) { v.visit(node); diff --git a/src/main/java/org/olat/course/folder/MergedCourseElementDataContainer.java b/src/main/java/org/olat/course/folder/MergedCourseElementDataContainer.java index 39f9a3bdcec..2af53d3dda9 100644 --- a/src/main/java/org/olat/course/folder/MergedCourseElementDataContainer.java +++ b/src/main/java/org/olat/course/folder/MergedCourseElementDataContainer.java @@ -31,9 +31,7 @@ import org.olat.core.id.IdentityEnvironment; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; import org.olat.core.util.StringHelper; -import org.olat.core.util.nodes.INode; import org.olat.core.util.tree.TreeVisitor; -import org.olat.core.util.tree.Visitor; import org.olat.core.util.vfs.MergeSource; import org.olat.core.util.vfs.NamedContainerImpl; import org.olat.core.util.vfs.Quota; @@ -92,12 +90,9 @@ public class MergedCourseElementDataContainer extends MergeSource { ICourse course = CourseFactory.loadCourse(courseId); AtomicInteger count = new AtomicInteger(0); if(identityEnv == null) { - new TreeVisitor(new Visitor() { - @Override - public void visit(INode node) { - if(node instanceof PFCourseNode || node instanceof BCCourseNode) { - count.incrementAndGet(); - } + new TreeVisitor(node -> { + if(node instanceof PFCourseNode || node instanceof BCCourseNode) { + count.incrementAndGet(); } }, course.getRunStructure().getRootNode(), true).visitAll(); } else if(course instanceof PersistingCourseImpl) { @@ -107,18 +102,12 @@ public class MergedCourseElementDataContainer extends MergeSource { CourseNode rootCn = userCourseEnv.getCourseEnvironment().getRunStructure().getRootNode(); NodeEvaluation rootNodeEval = rootCn.eval(userCourseEnv.getConditionInterpreter(), treeEval, new VisibleTreeFilter()); - new TreeVisitor(new Visitor() { - @Override - public void visit(INode node) { - if(node instanceof TreeNode) { - - if(((TreeNode)node).getUserObject() instanceof NodeEvaluation) { - NodeEvaluation nodeEval = (NodeEvaluation)((TreeNode)node).getUserObject(); - if(nodeEval != null - && (nodeEval.getCourseNode() instanceof PFCourseNode || nodeEval.getCourseNode() instanceof BCCourseNode)) { - count.incrementAndGet(); - } - } + new TreeVisitor(node -> { + if(node instanceof TreeNode && ((TreeNode)node).getUserObject() instanceof NodeEvaluation) { + NodeEvaluation nodeEval = (NodeEvaluation)((TreeNode)node).getUserObject(); + if(nodeEval != null + && (nodeEval.getCourseNode() instanceof PFCourseNode || nodeEval.getCourseNode() instanceof BCCourseNode)) { + count.incrementAndGet(); } } }, rootNodeEval.getTreeNode(), true).visitAll(); -- GitLab