blob: 3fdd14d92e7161bcf2bb0fc96abe9e20dea5a6be [file] [log] [blame]
import java.util.regex.*;
// File reporttest.astub contains an annotation on
// the java.util.regex package.
// :: error: (usage)
public class Package extends PatternSyntaxException {
public Package(String desc, String regex, int index) {
// :: error: (usage)
super(desc, regex, index);
}
@Override
@org.checkerframework.dataflow.qual.Pure
public String getPattern() {
// :: error: (usage)
return super.getPattern();
}
// :: error: (usage)
void m(Pattern p) {
// Access to a constant.
// :: error: (usage)
int i = Pattern.CANON_EQ;
// Use of inherited method.
// :: error: (usage)
String msg = getMessage();
// No report for use of overridden method -
// we get a message when we call super in the overriding method.
// TODO: Would we want "transitive" behavior? I.e. a few levels higher
// in the inheritance hierarchy we could see the class to report.
String pat = this.getPattern();
try {
// :: error: (usage)
p.compile("test(((");
} catch (Package pe) {
// We don't look at supertypes of the types we analyze.
// TODO: Should we?
System.out.println("OK!");
// :: error: (usage)
} catch (PatternSyntaxException pse) {
// We do get a report for direct uses.
System.out.println("Ha!");
}
}
}