[LANG-1291] Provide annotations to document thread safety.

Project: http://git-wip-us.apache.org/repos/asf/commons-lang/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-lang/commit/a5e76ebc
Tree: http://git-wip-us.apache.org/repos/asf/commons-lang/tree/a5e76ebc
Diff: http://git-wip-us.apache.org/repos/asf/commons-lang/diff/a5e76ebc

Branch: refs/heads/release
Commit: a5e76ebc404d419651c2a25b1a62199de64cccf5
Parents: 5242157
Author: Gary Gregory <garydgreg...@gmail.com>
Authored: Mon Apr 17 11:54:04 2017 -0700
Committer: Gary Gregory <garydgreg...@gmail.com>
Committed: Mon Apr 17 11:54:04 2017 -0700

----------------------------------------------------------------------
 .../lang3/concurrent/annotation/Contract.java   | 50 +++++++++++++++
 .../annotation/ThreadingBehavior.java           | 66 ++++++++++++++++++++
 2 files changed, 116 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-lang/blob/a5e76ebc/src/main/java/org/apache/commons/lang3/concurrent/annotation/Contract.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/lang3/concurrent/annotation/Contract.java 
b/src/main/java/org/apache/commons/lang3/concurrent/annotation/Contract.java
new file mode 100644
index 0000000..e34bb95
--- /dev/null
+++ b/src/main/java/org/apache/commons/lang3/concurrent/annotation/Contract.java
@@ -0,0 +1,50 @@
+/*
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation.  For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+package org.apache.commons.lang3.concurrent.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * This annotation defines behavioral contract enforced at runtime by 
instances of annotated classes.
+ */
+@Documented
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.CLASS)
+public @interface Contract {
+
+    /**
+     * Defines behavioral contract enforced at runtime by instances of 
annotated classes.
+     * 
+     * @return The behavioral contract enforced at runtime by instances of 
annotated classes.
+     */
+    ThreadingBehavior threading() default ThreadingBehavior.UNSAFE;
+
+}

http://git-wip-us.apache.org/repos/asf/commons-lang/blob/a5e76ebc/src/main/java/org/apache/commons/lang3/concurrent/annotation/ThreadingBehavior.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/commons/lang3/concurrent/annotation/ThreadingBehavior.java
 
b/src/main/java/org/apache/commons/lang3/concurrent/annotation/ThreadingBehavior.java
new file mode 100644
index 0000000..e03b164
--- /dev/null
+++ 
b/src/main/java/org/apache/commons/lang3/concurrent/annotation/ThreadingBehavior.java
@@ -0,0 +1,66 @@
+/*
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation.  For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+package org.apache.commons.lang3.concurrent.annotation;
+
+/**
+ * Defines types of threading behavior enforced at runtime.
+ */
+public enum ThreadingBehavior {
+
+    /**
+     * Instances of classes with the given contract are expected to be fully 
immutable and thread-safe.
+     */
+    IMMUTABLE,
+
+    /**
+     * Instances of classes with the given contract are expected to be 
immutable if their dependencies injected at
+     * construction time are immutable and are expected to be thread-safe if 
their dependencies are thread-safe.
+     */
+    IMMUTABLE_CONDITIONAL,
+
+    /**
+     * Instances of classes with the given contract are expected to maintain 
no state and to be thread-safe.
+     */
+    STATELESS,
+
+    /**
+     * Instances of classes with the given contract are expected to be fully 
thread-safe.
+     */
+    SAFE,
+
+    /**
+     * Instances of classes with the given contract are expected to be 
thread-safe if their dependencies injected at
+     * construction time are thread-safe.
+     */
+    SAFE_CONDITIONAL,
+
+    /**
+     * Instances of classes with the given contract are expected to be non 
thread-safe.
+     */
+    UNSAFE
+
+}

Reply via email to