package sfBugsNew;

import java.io.Serializable;

public class Bug1242 {


    public static class Child extends Parent<Something>
    {
        @Override
        public Something getDuplicateValue()
        {
            Something value = super.getDuplicateValue();
            
            System.err.println("getValue() called.");
            
            return value;
        }
    }
    public static interface Duplicatable<T extends Duplicatable<T>> extends Cloneable
    {
        T getDuplicate();
    }
    public static class Interim<T extends Interim<T>> implements Duplicatable<T>
    {
        @Override
        public T getDuplicate()
        {
            try
            {
                return (T) clone();
            }
            catch (CloneNotSupportedException cnse)
            {
                return null;
            }
        }
    }
    // Alternative that produces no bug warnings:
    //public class Parent<T extends Duplicatable<T>>
    public static class Parent<T extends Interim<T>>
    {
        private T value;
        
        public void setValue(T newValue)
        {
            value = newValue;
        }
        
        public T getDuplicateValue()
        {
            if (value == null)
            {
                return null;
            }
            T duplicate = value.getDuplicate();
            return duplicate;
        }
    }
    public static class Something extends Interim<Something>
    {
        public void doStuff()
        {
            System.err.println("Hello");
        }
    }

}

@@ -24,28 +24,156 @@
 ort 
-java.io.Serializable
+edu.umd.cs.findbugs.annotations.Confidence;%0Aimport edu.umd.cs.findbugs.annotations.DesireNoWarning;%0Aimport edu.umd.cs.findbugs.annotations.NoWarning
 ;%0A%0Ap
@@ -195,17 +195,16 @@
 1242 %7B%0A%0A
-%0A
     publ
@@ -246,35 +246,31 @@
 t%3CSomething%3E
+ %7B
 %0A    
-%7B%0A    
     @Overrid
@@ -262,32 +262,190 @@
        @Override
+%0A        @DesireNoWarning(%22BC_UNCONFIRMED_CAST_OF_RETURN_VALUE%22)%0A        @NoWarning(value=%22BC_UNCONFIRMED_CAST_OF_RETURN_VALUE%22, confidence=Confidence.MEDIUM)
 %0A        public 
@@ -469,32 +469,24 @@
 icateValue()
-%0A       
  %7B%0A         
@@ -533,28 +533,16 @@
 alue();%0A
-            
 %0A       
@@ -588,28 +588,16 @@
 led.%22);%0A
-            
 %0A       
@@ -623,32 +623,33 @@
         %7D%0A    %7D%0A
+%0A
     public stati
@@ -717,20 +717,16 @@
 loneable
-%0A   
  %7B%0A     
@@ -748,24 +748,25 @@
 te();%0A    %7D%0A
+%0A
     public s
@@ -833,20 +833,16 @@
 table%3CT%3E
-%0A   
  %7B%0A     
@@ -885,24 +885,16 @@
 licate()
-%0A       
  %7B%0A     
@@ -903,28 +903,16 @@
      try
-%0A           
  %7B%0A     
@@ -955,28 +955,16 @@
        %7D
-%0A           
  catch (
@@ -995,28 +995,16 @@
 on cnse)
-%0A           
  %7B%0A     
@@ -1053,24 +1053,25 @@
     %7D%0A    %7D%0A
+%0A
     // Alter
@@ -1114,16 +1114,17 @@
 :%0A    //
+ 
 public c
@@ -1214,20 +1214,16 @@
 erim%3CT%3E%3E
-%0A   
  %7B%0A     
@@ -1242,24 +1242,16 @@
  value;%0A
-        
 %0A       
@@ -1283,24 +1283,16 @@
 ewValue)
-%0A       
  %7B%0A     
@@ -1326,24 +1326,16 @@
       %7D%0A
-        
 %0A       
@@ -1363,24 +1363,16 @@
 eValue()
-%0A       
  %7B%0A     
@@ -1396,28 +1396,16 @@
 == null)
-%0A           
  %7B%0A     
@@ -1532,24 +1532,25 @@
     %7D%0A    %7D%0A
+%0A
     public s
@@ -1597,20 +1597,16 @@
 mething%3E
-%0A   
  %7B%0A     
@@ -1629,24 +1629,16 @@
 oStuff()
-%0A       
  %7B%0A     

Add annotations about expected outcomes