From 66e84b9ff30de7c75b510cb9117205368cf5bd25 Mon Sep 17 00:00:00 2001 From: Jesse Wilson Date: Thu, 10 Dec 2009 17:45:56 -0800 Subject: Initial checkin. JSR 305 r49 --- sampleUses/.classpath | 7 +++++ sampleUses/.project | 17 ++++++++++++ sampleUses/pom.xml | 26 ++++++++++++++++++ sampleUses/src/main/java/CreditCardNumber.java | 27 +++++++++++++++++++ sampleUses/src/main/java/FixedLengthString.java | 26 ++++++++++++++++++ sampleUses/src/main/java/LuhnVerification.java | 26 ++++++++++++++++++ sampleUses/src/main/java/SocialSecurityNumber.java | 14 ++++++++++ .../java/edu/umd/cs/findbugs/DottedClassName.java | 14 ++++++++++ .../java/edu/umd/cs/findbugs/SlashedClassName.java | 15 +++++++++++ .../examples/ParametersAreSlashedByDefault.java | 13 +++++++++ .../java/edu/umd/cs/findbugs/examples/Test.java | 31 ++++++++++++++++++++++ .../edu/umd/cs/findbugs/examples/TestDefaults.java | 19 +++++++++++++ .../main/java/java/sql/ResultSetConcurrency.java | 14 ++++++++++ .../main/java/java/sql/ResultSetHoldability.java | 14 ++++++++++ .../src/main/java/java/sql/ResultSetType.java | 14 ++++++++++ 15 files changed, 277 insertions(+) create mode 100644 sampleUses/.classpath create mode 100644 sampleUses/.project create mode 100644 sampleUses/pom.xml create mode 100644 sampleUses/src/main/java/CreditCardNumber.java create mode 100644 sampleUses/src/main/java/FixedLengthString.java create mode 100644 sampleUses/src/main/java/LuhnVerification.java create mode 100644 sampleUses/src/main/java/SocialSecurityNumber.java create mode 100644 sampleUses/src/main/java/edu/umd/cs/findbugs/DottedClassName.java create mode 100644 sampleUses/src/main/java/edu/umd/cs/findbugs/SlashedClassName.java create mode 100644 sampleUses/src/main/java/edu/umd/cs/findbugs/examples/ParametersAreSlashedByDefault.java create mode 100644 sampleUses/src/main/java/edu/umd/cs/findbugs/examples/Test.java create mode 100644 sampleUses/src/main/java/edu/umd/cs/findbugs/examples/TestDefaults.java create mode 100644 sampleUses/src/main/java/java/sql/ResultSetConcurrency.java create mode 100644 sampleUses/src/main/java/java/sql/ResultSetHoldability.java create mode 100644 sampleUses/src/main/java/java/sql/ResultSetType.java (limited to 'sampleUses') diff --git a/sampleUses/.classpath b/sampleUses/.classpath new file mode 100644 index 0000000..f508c72 --- /dev/null +++ b/sampleUses/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/sampleUses/.project b/sampleUses/.project new file mode 100644 index 0000000..bfe32bc --- /dev/null +++ b/sampleUses/.project @@ -0,0 +1,17 @@ + + + JSR305-uses + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/sampleUses/pom.xml b/sampleUses/pom.xml new file mode 100644 index 0000000..0199223 --- /dev/null +++ b/sampleUses/pom.xml @@ -0,0 +1,26 @@ + + + + 4.0.0 + + org.jsr-305 + jsr-305 + 0.1-SNAPSHOT + + + org.jsr-305 + sampleUses + jar + JSR 305 Sample Use Cases + 0.1-SNAPSHOT + Use Cases for JSR-305 + + + org.jsr-305 + ri + 0.1-SNAPSHOT + + + + 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 { + + 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 { + + 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 { + +} -- cgit v1.2.3