diff --git a/common/src/main/java/org/jetbrains/annotations/CheckReturnValue.java b/common/src/main/java/org/jetbrains/annotations/CheckReturnValue.java new file mode 100644 index 0000000..aaa99b0 --- /dev/null +++ b/common/src/main/java/org/jetbrains/annotations/CheckReturnValue.java @@ -0,0 +1,33 @@ +package org.jetbrains.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; + +/** + * Specifies that the method is impure and that its return value must be used. + *
+ * For pure methods (annotated with {@code @Contract(pure = true)}), + * it's implied that the resulting value is important, + * so this annotation would be redundant. + *
+ * Some impure methods have side effects and still require the return value to be used. + * For example, {@link java.io.InputStream#read(byte[])} + * returns the number of bytes actually stored in the byte array. + * Without checking the return value, it's impossible to say how many bytes were actually read. + *
+ * This annotation should not be used if the return value of the method + * provides only additional information. + * For example, the main purpose of {@link java.util.Collection#add(Object)} + * is to modify the collection, and the return value is only interesting + * when adding an element to a set, to see if the set already contained that element before. + *
+ * When used on a type, the annotation applies to all methods that do not return {@code void}. + *
+ * When used on a package, the annotation applies to all types of that package.
+ *
+ * @see Contract#pure()
+ */
+@Target({ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.TYPE, ElementType.PACKAGE})
+@ApiStatus.Experimental
+public @interface CheckReturnValue {
+}
diff --git a/gradle.properties b/gradle.properties
index 830616a..45fd678 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -14,5 +14,5 @@
# limitations under the License.
#
-projectVersion=23.1.0
+projectVersion=24.0.0
#JDK_5=