Merge branch 'not-null-by-default' into 'master'

Null safety annotations

The @NotNullByDefault annotation marks all fields, methods and parameters in a class or package @NotNull, so Android Studio will warn if values that may be null are used. Please use this annotation for new classes, and specify @Nullable for any fields, methods and parameters that may be null.

Injected fields are initialised to null, so injected classes should use @MethodsNotNullByDefault and @ParametersNotNullByDefault, or specify @Nullable for injected fields.

See merge request !349
This commit is contained in:
akwizgran
2016-10-12 16:00:54 +00:00
5 changed files with 116 additions and 0 deletions

View File

@@ -8,6 +8,7 @@ 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 +19,7 @@ dependencyVerification {
'javax.inject:javax.inject:91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff',
'com.google.dagger:dagger-producers:99ec15e8a0507ba569e7655bc1165ee5e5ca5aa914b3c8f7e2c2458f724edd6b',
'com.google.guava:guava:d664fbfc03d2e5ce9cab2a44fb01f1d0bf9dfebeccc1a473b1f9ea31f79f6f99',
'com.google.code.findbugs:jsr305:c885ce34249682bc0236b4a7d56efcc12048e6135a5baf7a9cde8ad8cda13fcd'
]
}

View File

@@ -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 {
}

View File

@@ -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 {
}

View File

@@ -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 {
}

View File

@@ -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 {
}