diff options
Diffstat (limited to 'sampleUses/src')
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 { + +} |