import java.io.File;
import java.util.Date;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Semaphore;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ArrayBlockingQueue;
class A {
boolean fileOp(File f) {
f.delete(); // Noncompliant [[sc=5;ec=16]] {{Do something with the "boolean" value returned by "delete".}}
boolean b1 = f.delete(); // Noncompliant [[sc=5;ec=29]] {{Do something with the "boolean" value returned by "delete".}}
boolean b2 = f.delete(); // Compliant
if (b2 || f.delete()) {} // Compliant
f.exists(); // Noncompliant
f.renameTo(new File("")); // Noncompliant
f.createNewFile(); // Noncompliant
f.mkdir(); // Compliant : true if it was created, false if it existed, using it just to make sure we created the dir is a common idiom
f.canWrite(); // Noncompliant
f.isHidden(); // Noncompliant
f.setLastModified(Long.MAX_VALUE); // Noncompliant
return f.canExecute();
}
boolean lockOp(Lock l) {
l.tryLock(); // Noncompliant [[sc=5;ec=17]] {{Do something with the "boolean" value returned by "tryLock".}}
l.tryLock(0L, TimeUnit.DAYS); // Compliant
return l.tryLock(); // Compliant
}
void iteratorOp(Iterator<String> i, List<Object> l) {
i.hasNext(); // Noncompliant
l.iterator().hasNext(); // Noncompliant
while(i.hasNext()) { // Compliant
// do something
}
}
void enumerationOp(Enumeration<String> e, Hashtable<String, Object> h) {
e.hasMoreElements(); // Noncompliant
h.elements().hasMoreElements(); // Noncompliant
while(i.hasNext()) { // Compliant
// do something
}
}
boolean conditionOp(Condition c) {
c.awaitNanos(Long.MAX_VALUE); // Noncompliant {{Do something with the "long" value returned by "awaitNanos".}}
if (c.await(42, TimeUnit.SECONDS)) { // Compliant
return true;
}
c.await(42, TimeUnit.DAYS); // Noncompliant
c.awaitUntil(new Date()); // Noncompliant
return false;
}
boolean countdownOp(CountDownLatch c) {
c.await(42L, TimeUnit.HOURS); // Noncompliant
return c.await(0L, TimeUnit.DAYS); // Compliant
}
boolean semaphoreOp(Semaphore s) {
s.tryAcquire(42); // Noncompliant
s.tryAcquire(); // Noncompliant
s.tryAcquire(42L, TimeUnit.HOURS); // Noncompliant
s.tryAcquire(42, 42L, TimeUnit.SECONDS); // Noncompliant
return s.tryAcquire(); // Compliant
}
boolean blockingQueueOp(BlockingQueue<String> b, ArrayBlockingQueue<Object> a, List<String> l, List<Object> lo) {
a.remove("hello"); // Noncompliant
b.remove(); // Noncompliant {{Do something with the "String" value returned by "remove".}}
b.remove(new Object()); // Noncompliant
b.drainTo(l); // Noncompliant
a.drainTo(lo, 42); // Noncompliant
a.offer(new Object()); // Noncompliant
b.offer("hello", 42L, TimeUnit.SECONDS); // Noncompliant
return a.offer(new Object()); // Compliant
}
}