This repository was archived by the owner on May 7, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 770
Type annotations
Markus Rathgeb edited this page Sep 13, 2017
·
4 revisions
We are using the Eclipse JDT nullness annotations.
As long as we do not fully agree about the usage of that annotations its usage is described here and not in the coding guidelines.
Add the following line org.eclipse.jdt.annotation;resolution:=optional to your Import-Package section of your OSGi manifest.
Comments like "ensure correct usage" should be seen as "if the Eclipse IDE nullness checking has been enabled".
See e.g. https://github.com/eclipse/smarthome/pull/4080#issuecomment-325375800 and https://github.com/eclipse/smarthome/pull/4080#issuecomment-325434657
- If a function argument or parameter is not annotated, it could be null.
- Use
@NonNullannotation for function arguments that must not be null to ensure correct usage. - Use
@Nullablefor return values if they could be null, to ensure the caller handles the return value correctly. - Don't use
@Nullableon function parameters.- That is the point we do not agree at the moment.
- Use
@NonNullfor return types to state that null must not be returned and the consumer could rely on it.- This is something we currently think about.
Comments like "ensure correct usage" should be seen as "if the Eclipse IDE nullness checking has been enabled".
- The final result of our null annotation usage should be that classes are annotated by
@NonNullByDefaultand return types, parameter types etc. are annotated with@Nullableonly. There is no need for a@NonNullannotation because it is set as default. - As long as we are in a transition phase it could be hard work to annotate the whole class. As long as the whole class cannot be annotated to use a default annotation we are allowed to use
@Nullableand@NonNullannotations for return types, parameter types etc. As soon as it is possible to set the default annotation for the class all redundant usages of@NonNullshould be removed. -
@NonNulland@Nullablewill be (not only in the transition phase but all the time) allowed for generic type arguments. So we could mark that e.g. a map must contain only non-null values of a collection does not contain a nullable entry etc. - We are using the Eclipse External Annotation support to add annotations for the JRE and third party libraries.
- Classes should be annotated by
@NonNullByDefaultand return types, parameter types, generic types etc. are annotated with@Nullableonly. There is no need for a@NonNullannotation because it is set as default. - We are using the Eclipse External Annotation support to add annotations for the JRE and third party libraries.
- The transition of existing classes could be a longer process but if you want to use nullness annotation in a class / interface you need to set the default for the whole class and annotate all types that differ from the default.