From f4fd87f6b05de1a67c5d2d09f1813ddce6de4879 Mon Sep 17 00:00:00 2001 From: Elliott Baron Date: Sat, 31 Oct 2009 12:53:00 -0400 Subject: Fixed handling of nested if statements. * org.eclipse.cdt.codan.extension/src/org/eclipse/cdt/codan/extension/checkers/CloseOpenedFilesChecker.java: Fixed flowMerge to not modify argument, allow duplicates in worklist - some blocks need to be processed more than once. * org.eclipse.cdt.codan.extension/src/org/eclipse/cdt/codan/extension/checkers/FunctionNameParser.java: Unused imports. --- .../extension/checkers/CloseOpenedFilesChecker.java | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) (limited to 'org.eclipse.cdt.codan.extension/src/org/eclipse/cdt/codan/extension/checkers/CloseOpenedFilesChecker.java') diff --git a/org.eclipse.cdt.codan.extension/src/org/eclipse/cdt/codan/extension/checkers/CloseOpenedFilesChecker.java b/org.eclipse.cdt.codan.extension/src/org/eclipse/cdt/codan/extension/checkers/CloseOpenedFilesChecker.java index a38ef13..5ea8e79 100644 --- a/org.eclipse.cdt.codan.extension/src/org/eclipse/cdt/codan/extension/checkers/CloseOpenedFilesChecker.java +++ b/org.eclipse.cdt.codan.extension/src/org/eclipse/cdt/codan/extension/checkers/CloseOpenedFilesChecker.java @@ -183,8 +183,10 @@ public class CloseOpenedFilesChecker extends AbstractIndexAstChecker { private Set flowMerge(IBlock blk, Set ss1, Set ss2) { - ss1.addAll(ss2); - return group(ss1); + Set ret = new HashSet(); + ret.addAll(ss1); + ret.addAll(ss2); + return group(ret); } private Set flowBranch(IBlock blk, Set ss, boolean value) { @@ -328,12 +330,7 @@ public class CloseOpenedFilesChecker extends AbstractIndexAstChecker { Set ss) { if (!edgeInfo.get(edge).equals(ss)) { edgeInfo.put(edge, ss); - - // No duplicates - IBlock next = edge.getTo(); - if (!worklist.contains(next)) { - worklist.add(next); - } + worklist.add(edge.getTo()); } } @@ -378,14 +375,12 @@ public class CloseOpenedFilesChecker extends AbstractIndexAstChecker { } protected boolean containsOpen(IASTNode node) { - // TODO Examine more than just name - FunctionNameParser parser = new FunctionNameParser(node, OPEN); + FunctionNameParser parser = new FunctionNameParser(node, OPEN, new String[] { "const char *", "int" }); return parser.matches(); } protected boolean containsClose(IASTNode node) { - // TODO Examine more than just name - FunctionNameParser parser = new FunctionNameParser(node, CLOSE); + FunctionNameParser parser = new FunctionNameParser(node, CLOSE, new String[] { "int" }); return parser.matches(); } -- cgit