1 import annotations.DetectorUnderTest;
2 import edu.umd.cs.findbugs.annotations.DesireWarning;
3 import edu.umd.cs.findbugs.annotations.ExpectWarning;
4 import edu.umd.cs.findbugs.annotations.NoWarning;
5 import edu.umd.cs.findbugs.detect.SuspiciousThreadInterrupted;
6
7 @DetectorUnderTest(SuspiciousThreadInterrupted.class)
8 public class UselessCurrentThread implements Runnable {
9 private Thread unknownThread;
10
11 public UselessCurrentThread(Thread t) {
12 unknownThread = t;
13 }
14
15 @NoWarning("STI_INTERRUPTED_ON_CURRENTTHREAD")
16 void test1() throws InterruptedException {
17 while (!Thread.interrupted()) {
18 System.out.println("huh?");
19 Thread.sleep(10000);
20 }
21 }
22
23 void test2() throws InterruptedException {
24 Thread.currentThread();
25 while (!Thread.interrupted()) {
26 System.out.println("huh?");
27 Thread.sleep(10000);
28 }
29 }
30
31 @ExpectWarning("STI_INTERRUPTED_ON_CURRENTTHREAD")
32 void test3() throws InterruptedException {
33 while (!Thread.currentThread().interrupted()) {
34 System.out.println("huh?");
35 Thread.sleep(10000);
36 }
37 }
38
39
40 @DesireWarning("STI_INTERRUPTED_ON_UNKNOWNTHREAD")
41 void test4() throws InterruptedException {
42 Thread t = Thread.currentThread();
43 while (!unknownThread.interrupted()) {
44 System.out.println("huh?");
45 Thread.sleep(10000);
46 }
47 }
48
49
50 @DesireWarning("STI_INTERRUPTED_ON_UNKNOWNTHREAD")
51 void test5() throws InterruptedException {
52 while (!unknownThread.interrupted()) {
53 System.out.println("huh?");
54 Thread.sleep(10000);
55 }
56 }
57
58 @Override
59 public void run() {
60 try {
61
62 test1();
63 test2();
64 test3();
65 test4();
66
67 } catch (InterruptedException ie) {
68 System.out.println("Oh, ok");
69 }
70 }
71 }