summaryrefslogtreecommitdiffstats
path: root/sampleUses/src
diff options
context:
space:
mode:
Diffstat (limited to 'sampleUses/src')
-rw-r--r--sampleUses/src/main/java/CreditCardNumber.java27
-rw-r--r--sampleUses/src/main/java/FixedLengthString.java26
-rw-r--r--sampleUses/src/main/java/LuhnVerification.java26
-rw-r--r--sampleUses/src/main/java/SocialSecurityNumber.java14
-rw-r--r--sampleUses/src/main/java/edu/umd/cs/findbugs/DottedClassName.java14
-rw-r--r--sampleUses/src/main/java/edu/umd/cs/findbugs/SlashedClassName.java15
-rw-r--r--sampleUses/src/main/java/edu/umd/cs/findbugs/examples/ParametersAreSlashedByDefault.java13
-rw-r--r--sampleUses/src/main/java/edu/umd/cs/findbugs/examples/Test.java31
-rw-r--r--sampleUses/src/main/java/edu/umd/cs/findbugs/examples/TestDefaults.java19
-rw-r--r--sampleUses/src/main/java/java/sql/ResultSetConcurrency.java14
-rw-r--r--sampleUses/src/main/java/java/sql/ResultSetHoldability.java14
-rw-r--r--sampleUses/src/main/java/java/sql/ResultSetType.java14
12 files changed, 227 insertions, 0 deletions
diff --git a/sampleUses/src/main/java/CreditCardNumber.java b/sampleUses/src/main/java/CreditCardNumber.java
new file mode 100644
index 0000000..ef5f711
--- /dev/null
+++ b/sampleUses/src/main/java/CreditCardNumber.java
@@ -0,0 +1,27 @@
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+import javax.annotation.MatchesPattern;
+import javax.annotation.meta.TypeQualifier;
+import javax.annotation.meta.TypeQualifierValidator;
+import javax.annotation.meta.When;
+
+@Documented
+@TypeQualifier
+@MatchesPattern("[0-9]{16}")
+@Retention(RetentionPolicy.RUNTIME)
+public @interface CreditCardNumber {
+ class Checker implements TypeQualifierValidator<CreditCardNumber> {
+
+ public When forConstantValue(CreditCardNumber annotation, Object v) {
+ if (!(v instanceof String))
+ return When.NEVER;
+ String s = (String) v;
+ if (LuhnVerification.checkNumber(s))
+ return When.ALWAYS;
+ return When.NEVER;
+ }
+ }
+}
diff --git a/sampleUses/src/main/java/FixedLengthString.java b/sampleUses/src/main/java/FixedLengthString.java
new file mode 100644
index 0000000..bf7ba44
--- /dev/null
+++ b/sampleUses/src/main/java/FixedLengthString.java
@@ -0,0 +1,26 @@
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+import javax.annotation.meta.TypeQualifier;
+import javax.annotation.meta.TypeQualifierValidator;
+import javax.annotation.meta.When;
+
+@Documented
+@TypeQualifier(applicableTo=String.class)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface FixedLengthString {
+ int value();
+
+ class Checker implements TypeQualifierValidator<FixedLengthString> {
+
+ public When forConstantValue(FixedLengthString annotation, Object v) {
+ if (!(v instanceof String))
+ return When.NEVER;
+ String s = (String) v;
+ if (s.length() == annotation.value())
+ return When.ALWAYS;
+ return When.NEVER;
+ }
+ }
+} \ No newline at end of file
diff --git a/sampleUses/src/main/java/LuhnVerification.java b/sampleUses/src/main/java/LuhnVerification.java
new file mode 100644
index 0000000..f9ad241
--- /dev/null
+++ b/sampleUses/src/main/java/LuhnVerification.java
@@ -0,0 +1,26 @@
+public class LuhnVerification {
+
+ static boolean checkNumber(String value) {
+ int result = 0;
+ boolean special = false;
+ for (int i = value.length() - 1; i >= 0; i--) {
+ int v = value.charAt(i) - '0';
+ if (v < 0 || v > 9)
+ return false;
+ if (special) {
+ v = v * 2;
+ if (v > 9)
+ v = v - 10 + 1;
+ }
+ result += v;
+ special = !special;
+ }
+ System.out.println(result);
+ return result % 10 == 0;
+ }
+
+ public static void main(String args[]) {
+ System.out.println(checkNumber(""));
+ }
+
+}
diff --git a/sampleUses/src/main/java/SocialSecurityNumber.java b/sampleUses/src/main/java/SocialSecurityNumber.java
new file mode 100644
index 0000000..a20c21b
--- /dev/null
+++ b/sampleUses/src/main/java/SocialSecurityNumber.java
@@ -0,0 +1,14 @@
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+import javax.annotation.MatchesPattern;
+import javax.annotation.meta.TypeQualifierNickname;
+
+@Documented
+@TypeQualifierNickname
+@MatchesPattern("[0-9]{3}-[0-9]{2}-[0-9]{4}")
+@Retention(RetentionPolicy.RUNTIME)
+public @interface SocialSecurityNumber {
+}
diff --git a/sampleUses/src/main/java/edu/umd/cs/findbugs/DottedClassName.java b/sampleUses/src/main/java/edu/umd/cs/findbugs/DottedClassName.java
new file mode 100644
index 0000000..f8779d0
--- /dev/null
+++ b/sampleUses/src/main/java/edu/umd/cs/findbugs/DottedClassName.java
@@ -0,0 +1,14 @@
+package edu.umd.cs.findbugs;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+import javax.annotation.meta.TypeQualifierNickname;
+import javax.annotation.meta.When;
+
+@Documented
+@SlashedClassName(when=When.NEVER)
+@TypeQualifierNickname
+@Retention(RetentionPolicy.RUNTIME)
+public @interface DottedClassName { } \ No newline at end of file
diff --git a/sampleUses/src/main/java/edu/umd/cs/findbugs/SlashedClassName.java b/sampleUses/src/main/java/edu/umd/cs/findbugs/SlashedClassName.java
new file mode 100644
index 0000000..cc06384
--- /dev/null
+++ b/sampleUses/src/main/java/edu/umd/cs/findbugs/SlashedClassName.java
@@ -0,0 +1,15 @@
+package edu.umd.cs.findbugs;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+import javax.annotation.meta.TypeQualifier;
+import javax.annotation.meta.When;
+
+@Documented
+@TypeQualifier(applicableTo=CharSequence.class)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface SlashedClassName {
+ When when() default When.ALWAYS;
+}
diff --git a/sampleUses/src/main/java/edu/umd/cs/findbugs/examples/ParametersAreSlashedByDefault.java b/sampleUses/src/main/java/edu/umd/cs/findbugs/examples/ParametersAreSlashedByDefault.java
new file mode 100644
index 0000000..28e30e8
--- /dev/null
+++ b/sampleUses/src/main/java/edu/umd/cs/findbugs/examples/ParametersAreSlashedByDefault.java
@@ -0,0 +1,13 @@
+package edu.umd.cs.findbugs.examples;
+
+import java.lang.annotation.ElementType;
+
+import javax.annotation.meta.TypeQualifierDefault;
+
+import edu.umd.cs.findbugs.SlashedClassName;
+
+@SlashedClassName
+@TypeQualifierDefault(ElementType.PARAMETER)
+public @interface ParametersAreSlashedByDefault {
+
+}
diff --git a/sampleUses/src/main/java/edu/umd/cs/findbugs/examples/Test.java b/sampleUses/src/main/java/edu/umd/cs/findbugs/examples/Test.java
new file mode 100644
index 0000000..1246131
--- /dev/null
+++ b/sampleUses/src/main/java/edu/umd/cs/findbugs/examples/Test.java
@@ -0,0 +1,31 @@
+package edu.umd.cs.findbugs.examples;
+
+import javax.annotation.meta.When;
+
+import edu.umd.cs.findbugs.DottedClassName;
+import edu.umd.cs.findbugs.SlashedClassName;
+
+public class Test {
+
+
+ public void foo(@SlashedClassName String foo) {}
+
+ public void foo2(@DottedClassName String foo) {
+ foo(foo); // should get warning here
+ }
+
+ public void foo3(String foo) {
+ foo(foo);
+ }
+ public void foo4(@DottedClassName String foo) {
+ foo3(foo);
+ }
+
+ public void foo5(@SlashedClassName(when=When.MAYBE) String foo) {
+ foo(foo);
+ }
+ public void foo6(@SlashedClassName(when=When.UNKNOWN) String foo) {
+ foo(foo);
+ }
+}
+
diff --git a/sampleUses/src/main/java/edu/umd/cs/findbugs/examples/TestDefaults.java b/sampleUses/src/main/java/edu/umd/cs/findbugs/examples/TestDefaults.java
new file mode 100644
index 0000000..c6e8013
--- /dev/null
+++ b/sampleUses/src/main/java/edu/umd/cs/findbugs/examples/TestDefaults.java
@@ -0,0 +1,19 @@
+package edu.umd.cs.findbugs.examples;
+
+import javax.annotation.meta.When;
+
+import edu.umd.cs.findbugs.DottedClassName;
+import edu.umd.cs.findbugs.SlashedClassName;
+
+@ParametersAreSlashedByDefault
+public class TestDefaults {
+ public void foo(String c) {}
+
+ public void foo2(@DottedClassName String c) {
+ foo(c);
+ }
+
+ public void foo3(@SlashedClassName(when=When.UNKNOWN) String c) {
+ foo(c);
+ }
+}
diff --git a/sampleUses/src/main/java/java/sql/ResultSetConcurrency.java b/sampleUses/src/main/java/java/sql/ResultSetConcurrency.java
new file mode 100644
index 0000000..418fa9e
--- /dev/null
+++ b/sampleUses/src/main/java/java/sql/ResultSetConcurrency.java
@@ -0,0 +1,14 @@
+package java.sql;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+import javax.annotation.meta.TypeQualifier;
+
+@Documented
+@TypeQualifier(applicableTo=Integer.class)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ResultSetConcurrency {
+
+}
diff --git a/sampleUses/src/main/java/java/sql/ResultSetHoldability.java b/sampleUses/src/main/java/java/sql/ResultSetHoldability.java
new file mode 100644
index 0000000..4bfdce2
--- /dev/null
+++ b/sampleUses/src/main/java/java/sql/ResultSetHoldability.java
@@ -0,0 +1,14 @@
+package java.sql;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+import javax.annotation.meta.TypeQualifier;
+
+@Documented
+@TypeQualifier(applicableTo=Integer.class)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ResultSetHoldability {
+
+}
diff --git a/sampleUses/src/main/java/java/sql/ResultSetType.java b/sampleUses/src/main/java/java/sql/ResultSetType.java
new file mode 100644
index 0000000..888db2c
--- /dev/null
+++ b/sampleUses/src/main/java/java/sql/ResultSetType.java
@@ -0,0 +1,14 @@
+package java.sql;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+import javax.annotation.meta.TypeQualifier;
+
+@Documented
+@TypeQualifier(applicableTo=Integer.class)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ResultSetType {
+
+}