/*
* @test
* @summary Test that inherited declaration annotations are stored in bytecode.
*
* @compile -source 7 -target 7 ../PersistUtil.java Driver.java ReferenceInfoUtil.java Extends.java Super.java
* @run main Driver Extends
*/
import static com.sun.tools.classfile.TypeAnnotation.TargetType.*;
public class Extends {
@ADescriptions({
@ADescription(annotation = "org/checkerframework/checker/nullness/qual/EnsuresNonNull")
})
public String m1() {
StringBuilder sb = new StringBuilder();
return TestWrapper.wrap("@Override void setf() {f = new Object();}\n");
}
@ADescriptions({})
public String m2() {
return TestWrapper.wrap("@Override void setg() {}\n");
}
// Issue 342
// We do not want that behavior with related annotations. @Pure should
// override @SideEffectFree.
@ADescriptions({
@ADescription(annotation = "org/checkerframework/dataflow/qual/Pure"),
@ADescription(annotation = "org/checkerframework/dataflow/qual/SideEffectFree")
})
public String m3() {
return TestWrapper.wrap("@Pure @Override void seth() {}\n");
}
}
class TestWrapper {
public static String wrap(String method) {
StringBuilder sb = new StringBuilder();
sb.append("class Test extends Super {\n");
sb.append(method);
sb.append("}");
return sb.toString();
}
}