diff options
author | Elliott Baron <ebaron@fedoraproject.org> | 2009-10-31 12:53:00 -0400 |
---|---|---|
committer | Elliott Baron <ebaron@fedoraproject.org> | 2009-10-31 12:53:00 -0400 |
commit | f4fd87f6b05de1a67c5d2d09f1813ddce6de4879 (patch) | |
tree | 2b2478caf6e34b26d1c8a6d99744b6f4e6ecc38a /org.eclipse.cdt.codan.extension/src/org/eclipse/cdt/codan/extension/checkers/CloseOpenedFilesChecker.java | |
parent | 8c3cd18a05d15f3c9b13ec87250decd318665f0e (diff) | |
download | codan-f4fd87f6b05de1a67c5d2d09f1813ddce6de4879.tar.gz codan-f4fd87f6b05de1a67c5d2d09f1813ddce6de4879.tar.xz codan-f4fd87f6b05de1a67c5d2d09f1813ddce6de4879.zip |
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.
Diffstat (limited to 'org.eclipse.cdt.codan.extension/src/org/eclipse/cdt/codan/extension/checkers/CloseOpenedFilesChecker.java')
-rw-r--r-- | org.eclipse.cdt.codan.extension/src/org/eclipse/cdt/codan/extension/checkers/CloseOpenedFilesChecker.java | 19 |
1 files changed, 7 insertions, 12 deletions
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<SymbolicState> flowMerge(IBlock blk, Set<SymbolicState> ss1, Set<SymbolicState> ss2) { - ss1.addAll(ss2); - return group(ss1); + Set<SymbolicState> ret = new HashSet<SymbolicState>(); + ret.addAll(ss1); + ret.addAll(ss2); + return group(ret); } private Set<SymbolicState> flowBranch(IBlock blk, Set<SymbolicState> ss, boolean value) { @@ -328,12 +330,7 @@ public class CloseOpenedFilesChecker extends AbstractIndexAstChecker { Set<SymbolicState> 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(); } |