package jsr305;

public abstract class StrictTest {

    protected abstract void requiresStrict(@Strict Object o);

    protected abstract Object get();

    protected abstract @Strict
    Object getStrict();

    @Strict
    Object f;

    @Strict
    Object f2;

    Object g;

    public @Strict
    Object violation1(Object unknown) {
        return unknown;
    }

    public void violation2(Object unknown) {
        f = unknown;
    }

    public void violation3(Object unknown) {
        requiresStrict(unknown);
    }

    public @Strict
    Object violation4() {
        return g;
    }

    public void violation5() {
        f = g;
    }

    public void violation6() {
        requiresStrict(g);
    }

    public @Strict
    Object violation7() {
        return get();
    }

    public void violation8() {
        f = get();
    }

    public void violation9() {
        requiresStrict(get());
    }

    public @Strict
    Object ok1DoNotReport(@Strict Object s) {
        return s;
    }

    public void ok2DoNotReport(@Strict Object s) {
        f = s;
    }

    public void ok3DoNotReport(@Strict Object s) {
        requiresStrict(s);
    }

    public @Strict
    Object ok4DoNotReport() {
        return f;
    }

    public void ok5DoNotReport() {
        f2 = f;
    }

    public void ok6DoNotReport() {
        requiresStrict(f);
    }

    public @Strict
    Object ok7DoNotReport() {
        return getStrict();
    }

    public void ok8DoNotReport() {
        f = getStrict();
    }

    public void ok9DoNotReport() {
        requiresStrict(getStrict());
    }
}

@@ -10,16 +10,121 @@
 sr305;%0A%0A
+import edu.umd.cs.findbugs.annotations.ExpectWarning;%0Aimport edu.umd.cs.findbugs.annotations.NoWarning;%0A%0A
 public a
@@ -378,16 +378,41 @@
 ect g;%0A%0A
+    @ExpectWarning(%22TQ%22)%0A
     publ
@@ -406,32 +406,37 @@
 TQ%22)%0A    public 
+%0A    
 @Strict%0A    Obje
@@ -490,32 +490,57 @@
 unknown;%0A    %7D%0A%0A
+    @ExpectWarning(%22TQ%22)%0A
     public void 
@@ -588,32 +588,57 @@
 unknown;%0A    %7D%0A%0A
+    @ExpectWarning(%22TQ%22)%0A
     public void 
@@ -698,32 +698,57 @@
 nknown);%0A    %7D%0A%0A
+    @ExpectWarning(%22TQ%22)%0A
     public @Stri
@@ -734,32 +734,33 @@
 TQ%22)%0A    public 
+ 
 @Strict%0A    Obje
@@ -794,32 +794,57 @@
 eturn g;%0A    %7D%0A%0A
+    @ExpectWarning(%22TQ%22)%0A
     public void 
@@ -872,32 +872,57 @@
   f = g;%0A    %7D%0A%0A
+    @ExpectWarning(%22TQ%22)%0A
     public void 
@@ -962,32 +962,57 @@
 rict(g);%0A    %7D%0A%0A
+    @ExpectWarning(%22TQ%22)%0A
     public @Stri
@@ -1061,32 +1061,57 @@
 n get();%0A    %7D%0A%0A
+    @ExpectWarning(%22TQ%22)%0A
     public void 
@@ -1143,32 +1143,57 @@
 = get();%0A    %7D%0A%0A
+    @ExpectWarning(%22TQ%22)%0A
     public void 
@@ -1237,32 +1237,54 @@
 (get());%0A    %7D%0A%0A
+    @NoWarning(%22TQ%22) %0A
     public @Stri
@@ -1349,32 +1349,54 @@
 eturn s;%0A    %7D%0A%0A
+    @NoWarning(%22TQ%22) %0A
     public void 
@@ -1444,32 +1444,54 @@
   f = s;%0A    %7D%0A%0A
+    @NoWarning(%22TQ%22) %0A
     public void 
@@ -1551,32 +1551,54 @@
 rict(s);%0A    %7D%0A%0A
+    @NoWarning(%22TQ%22) %0A
     public @Stri
@@ -1647,32 +1647,54 @@
 eturn f;%0A    %7D%0A%0A
+    @NoWarning(%22TQ%22) %0A
     public void 
@@ -1727,32 +1727,54 @@
  f2 = f;%0A    %7D%0A%0A
+    @NoWarning(%22TQ%22) %0A
     public void 
@@ -1818,32 +1818,53 @@
 rict(f);%0A    %7D%0A%0A
+    @NoWarning(%22TQ%22)%0A
     public @Stri
@@ -1850,32 +1850,39 @@
 TQ%22)%0A    public 
+  %0A    
 @Strict%0A    Obje
@@ -1929,33 +1929,54 @@
 Strict();%0A    %7D%0A
+    @NoWarning(%22TQ%22) 
 %0A
-
     public void 
@@ -2022,24 +2022,46 @@
 t();%0A    %7D%0A%0A
+    @NoWarning(%22TQ%22) %0A
     public v

add annotations about expectations