summaryrefslogtreecommitdiff
path: root/sampleUses
diff options
context:
space:
mode:
authorJesse Wilson <jessewilson@google.com>2009-12-10 17:45:56 -0800
committerJesse Wilson <jessewilson@google.com>2009-12-10 18:00:27 -0800
commit66e84b9ff30de7c75b510cb9117205368cf5bd25 (patch)
tree9b49377f14e9eea01d15986f3b091a2a8bb80ca1 /sampleUses
parentb0ccf1cf90b52ec3866bf436a66b208d5aff21d2 (diff)
downloadjsr305-66e84b9ff30de7c75b510cb9117205368cf5bd25.tar.gz
Initial checkin. JSR 305 r49
Diffstat (limited to 'sampleUses')
-rw-r--r--sampleUses/.classpath7
-rw-r--r--sampleUses/.project17
-rw-r--r--sampleUses/pom.xml26
-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
15 files changed, 277 insertions, 0 deletions
diff --git a/sampleUses/.classpath b/sampleUses/.classpath
new file mode 100644
index 0000000..f508c72
--- /dev/null
+++ b/sampleUses/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src/main/java"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry combineaccessrules="false" kind="src" path="/JSR305-ri"/>
+ <classpathentry kind="output" path="build/classes"/>
+</classpath>
diff --git a/sampleUses/.project b/sampleUses/.project
new file mode 100644
index 0000000..bfe32bc
--- /dev/null
+++ b/sampleUses/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>JSR305-uses</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.jsr-305</groupId>
+ <artifactId>jsr-305</artifactId>
+ <version>0.1-SNAPSHOT</version>
+ </parent>
+
+ <groupId>org.jsr-305</groupId>
+ <artifactId>sampleUses</artifactId>
+ <packaging>jar</packaging>
+ <name>JSR 305 Sample Use Cases</name>
+ <version>0.1-SNAPSHOT</version>
+ <description>Use Cases for JSR-305</description>
+ <dependencies>
+ <dependency>
+ <groupId>org.jsr-305</groupId>
+ <artifactId>ri</artifactId>
+ <version>0.1-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+
+</project>
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 {
+
+}