diff --git a/briar-api/build.gradle b/briar-api/build.gradle index 479b38fdcba2e4c60c74408cf16460b445c8da50..42314bfd5f9d1e2e047258b98982e3bc6c4d3793 100644 --- a/briar-api/build.gradle +++ b/briar-api/build.gradle @@ -4,10 +4,15 @@ targetCompatibility = 1.6 apply plugin: 'witness' +repositories { + mavenCentral() +} + dependencies { compile "com.google.dagger:dagger:2.0.2" compile 'com.google.dagger:dagger-compiler:2.0.2' compile 'org.jetbrains:annotations-java5:15.0' + compile 'com.google.code.findbugs:jsr305:3.0.1' } dependencyVerification { @@ -18,6 +23,7 @@ dependencyVerification { 'javax.inject:javax.inject:91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff', 'com.google.dagger:dagger-producers:99ec15e8a0507ba569e7655bc1165ee5e5ca5aa914b3c8f7e2c2458f724edd6b', 'com.google.guava:guava:d664fbfc03d2e5ce9cab2a44fb01f1d0bf9dfebeccc1a473b1f9ea31f79f6f99', + 'com.google.code.findbugs:jsr305:c885ce34249682bc0236b4a7d56efcc12048e6135a5baf7a9cde8ad8cda13fcd' ] } diff --git a/briar-api/src/org/briarproject/api/nullsafety/FieldsNotNullByDefault.java b/briar-api/src/org/briarproject/api/nullsafety/FieldsNotNullByDefault.java new file mode 100644 index 0000000000000000000000000000000000000000..bdfd8f523bd1a3bc3fcec886aebcb69911ed752f --- /dev/null +++ b/briar-api/src/org/briarproject/api/nullsafety/FieldsNotNullByDefault.java @@ -0,0 +1,26 @@ +package org.briarproject.api.nullsafety; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; + +import javax.annotation.Nonnull; +import javax.annotation.meta.TypeQualifierDefault; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * This annotation can be applied to a package or class to indicate that + * the fields in that element are non-null by default unless: + * <ul> + * <li> There is an explicit nullness annotation + * <li> There is a default nullness annotation applied to a more tightly + * nested element. + * </ul> + */ +@Documented +@Nonnull +@TypeQualifierDefault(FIELD) +@Retention(RUNTIME) +public @interface FieldsNotNullByDefault { +} diff --git a/briar-api/src/org/briarproject/api/nullsafety/MethodsNotNullByDefault.java b/briar-api/src/org/briarproject/api/nullsafety/MethodsNotNullByDefault.java new file mode 100644 index 0000000000000000000000000000000000000000..417e792de0af0dbdfa9e4328dc3f34b48fb01592 --- /dev/null +++ b/briar-api/src/org/briarproject/api/nullsafety/MethodsNotNullByDefault.java @@ -0,0 +1,28 @@ +package org.briarproject.api.nullsafety; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; + +import javax.annotation.Nonnull; +import javax.annotation.meta.TypeQualifierDefault; + +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * This annotation can be applied to a package or class to indicate that + * the methods in that element are non-null by default unless: + * <ul> + * <li> There is an explicit nullness annotation + * <li> The method overrides a method in a superclass (in which case the + * annotation of the corresponding method in the superclass applies) + * <li> There is a default nullness annotation applied to a more tightly + * nested element. + * </ul> + */ +@Documented +@Nonnull +@TypeQualifierDefault(METHOD) +@Retention(RUNTIME) +public @interface MethodsNotNullByDefault { +} diff --git a/briar-api/src/org/briarproject/api/nullsafety/NotNullByDefault.java b/briar-api/src/org/briarproject/api/nullsafety/NotNullByDefault.java new file mode 100644 index 0000000000000000000000000000000000000000..29ae96b7cc2452294888c9de6643417ef6c675be --- /dev/null +++ b/briar-api/src/org/briarproject/api/nullsafety/NotNullByDefault.java @@ -0,0 +1,32 @@ +package org.briarproject.api.nullsafety; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; + +import javax.annotation.Nonnull; +import javax.annotation.meta.TypeQualifierDefault; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * This annotation can be applied to a package or class to indicate that + * the fields, methods and parameters in that element are non-null by default + * unless: + * <ul> + * <li> There is an explicit nullness annotation + * <li> The method overrides a method in a superclass (in which case the + * annotation of the corresponding method or parameter in the superclass + * applies) + * <li> There is a default nullness annotation applied to a more tightly + * nested element. + * </ul> + */ +@Documented +@Nonnull +@TypeQualifierDefault({FIELD, METHOD, PARAMETER}) +@Retention(RUNTIME) +public @interface NotNullByDefault { +} diff --git a/briar-api/src/org/briarproject/api/nullsafety/ParametersNotNullByDefault.java b/briar-api/src/org/briarproject/api/nullsafety/ParametersNotNullByDefault.java new file mode 100644 index 0000000000000000000000000000000000000000..ac5de25e25c61715d8b70b7a06dd430bbc1fcc74 --- /dev/null +++ b/briar-api/src/org/briarproject/api/nullsafety/ParametersNotNullByDefault.java @@ -0,0 +1,28 @@ +package org.briarproject.api.nullsafety; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; + +import javax.annotation.Nonnull; +import javax.annotation.meta.TypeQualifierDefault; + +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * This annotation can be applied to a package or class to indicate that + * the method parameters in that element are non-null by default unless: + * <ul> + * <li> There is an explicit nullness annotation + * <li> The method overrides a method in a superclass (in which case the + * annotation of the corresponding parameter in the superclass applies) + * <li> There is a default nullness annotation applied to a more tightly + * nested element. + * </ul> + */ +@Documented +@Nonnull +@TypeQualifierDefault(PARAMETER) +@Retention(RUNTIME) +public @interface ParametersNotNullByDefault { +}