summaryrefslogtreecommitdiffstats
path: root/org.eclipse.cdt.codan.extension/src/org/eclipse/cdt/codan/extension/checkers/CloseOpenedFilesChecker.java
diff options
context:
space:
mode:
authorElliott Baron <ebaron@fedoraproject.org>2009-10-31 12:53:00 -0400
committerElliott Baron <ebaron@fedoraproject.org>2009-10-31 12:53:00 -0400
commitf4fd87f6b05de1a67c5d2d09f1813ddce6de4879 (patch)
tree2b2478caf6e34b26d1c8a6d99744b6f4e6ecc38a /org.eclipse.cdt.codan.extension/src/org/eclipse/cdt/codan/extension/checkers/CloseOpenedFilesChecker.java
parent8c3cd18a05d15f3c9b13ec87250decd318665f0e (diff)
downloadcodan-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.java19
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();
}