From 236c88fc5cb2444af353bec6370b43b915ed8fdb Mon Sep 17 00:00:00 2001
From: peichhorn
Date: Mon, 5 Sep 2011 21:53:58 +0200
Subject: fixed Issue 271: @NotNull annotations should introduce a null check
---
.../lombok/core/handlers/TransformationsUtil.java | 2 +-
.../resource/after-delombok/NonNullPlain.java | 37 +++++++++++++++++++++-
.../transform/resource/after-ecj/NonNullPlain.java | 31 ++++++++++++++----
.../resource/after-eclipse/NonNullPlain.java | 31 ++++++++++++++----
test/transform/resource/before/NonNullPlain.java | 17 +++++++---
website/features/GetterSetter.html | 2 +-
6 files changed, 100 insertions(+), 20 deletions(-)
diff --git a/src/core/lombok/core/handlers/TransformationsUtil.java b/src/core/lombok/core/handlers/TransformationsUtil.java
index 50c1ca02..3c1fc421 100644
--- a/src/core/lombok/core/handlers/TransformationsUtil.java
+++ b/src/core/lombok/core/handlers/TransformationsUtil.java
@@ -72,7 +72,7 @@ public class TransformationsUtil {
public static final Pattern PRIMITIVE_TYPE_NAME_PATTERN = Pattern.compile(
"^(boolean|byte|short|int|long|float|double|char)$");
- public static final Pattern NON_NULL_PATTERN = Pattern.compile("^nonnull$", Pattern.CASE_INSENSITIVE);
+ public static final Pattern NON_NULL_PATTERN = Pattern.compile("^(?:notnull|nonnull)$", Pattern.CASE_INSENSITIVE);
public static final Pattern NULLABLE_PATTERN = Pattern.compile("^(?:nullable|checkfornull)$", Pattern.CASE_INSENSITIVE);
/**
diff --git a/test/transform/resource/after-delombok/NonNullPlain.java b/test/transform/resource/after-delombok/NonNullPlain.java
index 0c58425c..17c9ab51 100644
--- a/test/transform/resource/after-delombok/NonNullPlain.java
+++ b/test/transform/resource/after-delombok/NonNullPlain.java
@@ -1,25 +1,60 @@
+import java.lang.annotation.*;
+
class NonNullPlain {
@lombok.NonNull
int i;
@lombok.NonNull
String s;
+ @NotNull
+ Object o;
+
+ @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE})
+ @Retention(RetentionPolicy.CLASS)
+ public @interface NotNull {
+ }
+
+ @java.beans.ConstructorProperties({"i", "s", "o"})
@java.lang.SuppressWarnings("all")
- public void setI(@lombok.NonNull final int i) {
+ public NonNullPlain(@lombok.NonNull final int i, @lombok.NonNull final String s, @NotNull final Object o) {
+ if (s == null) throw new java.lang.NullPointerException("s");
+ if (o == null) throw new java.lang.NullPointerException("o");
this.i = i;
+ this.s = s;
+ this.o = o;
}
+
@lombok.NonNull
@java.lang.SuppressWarnings("all")
public int getI() {
return this.i;
}
+
@lombok.NonNull
@java.lang.SuppressWarnings("all")
public String getS() {
return this.s;
}
+
+ @NotNull
+ @java.lang.SuppressWarnings("all")
+ public Object getO() {
+ return this.o;
+ }
+
+ @java.lang.SuppressWarnings("all")
+ public void setI(@lombok.NonNull final int i) {
+ this.i = i;
+ }
+
@java.lang.SuppressWarnings("all")
public void setS(@lombok.NonNull final String s) {
if (s == null) throw new java.lang.NullPointerException("s");
this.s = s;
}
+
+ @java.lang.SuppressWarnings("all")
+ public void setO(@NotNull final Object o) {
+ if (o == null) throw new java.lang.NullPointerException("o");
+ this.o = o;
+ }
}
diff --git a/test/transform/resource/after-ecj/NonNullPlain.java b/test/transform/resource/after-ecj/NonNullPlain.java
index 6f552436..252a2077 100644
--- a/test/transform/resource/after-ecj/NonNullPlain.java
+++ b/test/transform/resource/after-ecj/NonNullPlain.java
@@ -1,8 +1,19 @@
-class NonNullPlain {
- @lombok.Setter @lombok.NonNull @lombok.Getter int i;
- @lombok.Getter @lombok.Setter @lombok.NonNull String s;
- public @java.lang.SuppressWarnings("all") void setI(final @lombok.NonNull int i) {
+import java.lang.annotation.*;
+@lombok.RequiredArgsConstructor @lombok.Getter @lombok.Setter class NonNullPlain {
+ public @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE}) @Retention(RetentionPolicy.CLASS) @interface NotNull {
+ }
+ @lombok.NonNull int i;
+ @lombok.NonNull String s;
+ @NotNull Object o;
+ public @java.beans.ConstructorProperties({"i", "s", "o"}) @java.lang.SuppressWarnings("all") NonNullPlain(final @lombok.NonNull int i, final @lombok.NonNull String s, final @NotNull Object o) {
+ super();
+ if ((s == null))
+ throw new java.lang.NullPointerException("s");
+ if ((o == null))
+ throw new java.lang.NullPointerException("o");
this.i = i;
+ this.s = s;
+ this.o = o;
}
public @lombok.NonNull @java.lang.SuppressWarnings("all") int getI() {
return this.i;
@@ -10,12 +21,20 @@ class NonNullPlain {
public @lombok.NonNull @java.lang.SuppressWarnings("all") String getS() {
return this.s;
}
+ public @NotNull @java.lang.SuppressWarnings("all") Object getO() {
+ return this.o;
+ }
+ public @java.lang.SuppressWarnings("all") void setI(final @lombok.NonNull int i) {
+ this.i = i;
+ }
public @java.lang.SuppressWarnings("all") void setS(final @lombok.NonNull String s) {
if ((s == null))
throw new java.lang.NullPointerException("s");
this.s = s;
}
- NonNullPlain() {
- super();
+ public @java.lang.SuppressWarnings("all") void setO(final @NotNull Object o) {
+ if ((o == null))
+ throw new java.lang.NullPointerException("o");
+ this.o = o;
}
}
\ No newline at end of file
diff --git a/test/transform/resource/after-eclipse/NonNullPlain.java b/test/transform/resource/after-eclipse/NonNullPlain.java
index 6f552436..252a2077 100644
--- a/test/transform/resource/after-eclipse/NonNullPlain.java
+++ b/test/transform/resource/after-eclipse/NonNullPlain.java
@@ -1,8 +1,19 @@
-class NonNullPlain {
- @lombok.Setter @lombok.NonNull @lombok.Getter int i;
- @lombok.Getter @lombok.Setter @lombok.NonNull String s;
- public @java.lang.SuppressWarnings("all") void setI(final @lombok.NonNull int i) {
+import java.lang.annotation.*;
+@lombok.RequiredArgsConstructor @lombok.Getter @lombok.Setter class NonNullPlain {
+ public @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE}) @Retention(RetentionPolicy.CLASS) @interface NotNull {
+ }
+ @lombok.NonNull int i;
+ @lombok.NonNull String s;
+ @NotNull Object o;
+ public @java.beans.ConstructorProperties({"i", "s", "o"}) @java.lang.SuppressWarnings("all") NonNullPlain(final @lombok.NonNull int i, final @lombok.NonNull String s, final @NotNull Object o) {
+ super();
+ if ((s == null))
+ throw new java.lang.NullPointerException("s");
+ if ((o == null))
+ throw new java.lang.NullPointerException("o");
this.i = i;
+ this.s = s;
+ this.o = o;
}
public @lombok.NonNull @java.lang.SuppressWarnings("all") int getI() {
return this.i;
@@ -10,12 +21,20 @@ class NonNullPlain {
public @lombok.NonNull @java.lang.SuppressWarnings("all") String getS() {
return this.s;
}
+ public @NotNull @java.lang.SuppressWarnings("all") Object getO() {
+ return this.o;
+ }
+ public @java.lang.SuppressWarnings("all") void setI(final @lombok.NonNull int i) {
+ this.i = i;
+ }
public @java.lang.SuppressWarnings("all") void setS(final @lombok.NonNull String s) {
if ((s == null))
throw new java.lang.NullPointerException("s");
this.s = s;
}
- NonNullPlain() {
- super();
+ public @java.lang.SuppressWarnings("all") void setO(final @NotNull Object o) {
+ if ((o == null))
+ throw new java.lang.NullPointerException("o");
+ this.o = o;
}
}
\ No newline at end of file
diff --git a/test/transform/resource/before/NonNullPlain.java b/test/transform/resource/before/NonNullPlain.java
index 265b8c5a..a438d1d4 100644
--- a/test/transform/resource/before/NonNullPlain.java
+++ b/test/transform/resource/before/NonNullPlain.java
@@ -1,10 +1,17 @@
+import java.lang.annotation.*;
+
+@lombok.RequiredArgsConstructor
+@lombok.Getter
+@lombok.Setter
class NonNullPlain {
- @lombok.Setter
@lombok.NonNull
- @lombok.Getter int i;
-
- @lombok.Getter
- @lombok.Setter
+ int i;
@lombok.NonNull
String s;
+ @NotNull
+ Object o;
+
+ @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE})
+ @Retention(RetentionPolicy.CLASS)
+ public @interface NotNull {}
}
\ No newline at end of file
diff --git a/website/features/GetterSetter.html b/website/features/GetterSetter.html
index 3e3530ef..51a1f514 100644
--- a/website/features/GetterSetter.html
+++ b/website/features/GetterSetter.html
@@ -58,7 +58,7 @@
Any variation on boolean will not result in using the is prefix instead of the get prefix; for example,
returning java.lang.Boolean results in a get prefix, not an is prefix.
- Any annotations named @NonNull (case insensitive) on the field are interpreted as: This field must not ever hold
+ Any annotations named @NonNull or @NotNull (case insensitive) on the field are interpreted as: This field must not ever hold
null. Therefore, these annotations result in an explicit null check in the generated setter. Also, these
annotations (as well as any annotation named @Nullable or @CheckForNull) are copied to setter parameter and getter method.
--
cgit