diff --git a/core-java/pom.xml b/core-java/pom.xml
index 463b65a4ce..e8548600f8 100644
--- a/core-java/pom.xml
+++ b/core-java/pom.xml
@@ -129,6 +129,13 @@
system
${java.home}/../lib/tools.jar
+
+ org.jetbrains
+ annotations
+ ${intellij.annotations.version}
+
+
+
@@ -209,7 +216,8 @@
true
-
+
org.baeldung.executable.ExecutableMavenJar
@@ -264,12 +272,12 @@
-Xmx300m
-XX:+UseParallelGC
-classpath
-
+
com.baeldung.outofmemoryerror.OutOfMemoryGCLimitExceed
-
+
org.apache.maven.plugins
maven-javadoc-plugin
@@ -330,7 +338,7 @@
java
-classpath
-
+
org.openjdk.jmh.Main
.*
@@ -363,7 +371,8 @@
true
- ${project.build.outputDirectory}/META-INF/MANIFEST.MF
+ ${project.build.outputDirectory}/META-INF/MANIFEST.MF
+
@@ -397,12 +406,14 @@
true
- ${project.build.outputDirectory}/META-INF/MANIFEST.MF
+ ${project.build.outputDirectory}/META-INF/MANIFEST.MF
+
com/baeldung/instrumentation/application/MyAtm.class
- com/baeldung/instrumentation/application/MyAtmApplication.class
+ com/baeldung/instrumentation/application/MyAtmApplication.class
+
com/baeldung/instrumentation/application/Launcher.class
@@ -432,12 +443,14 @@
true
- ${project.build.outputDirectory}/META-INF/MANIFEST.MF
+ ${project.build.outputDirectory}/META-INF/MANIFEST.MF
+
com/baeldung/instrumentation/agent/AtmTransformer.class
- com/baeldung/instrumentation/agent/MyInstrumentationAgent.class
+ com/baeldung/instrumentation/agent/MyInstrumentationAgent.class
+
@@ -449,7 +462,7 @@
-
+
2.8.2
@@ -470,12 +483,12 @@
2.21.0
-
+
1.1
1.4.197
2.1.0.1
1.19
-
+
1.19
3.0.0-M1
3.0.2
@@ -486,7 +499,8 @@
61.1
3.21.0-GA
-
+
1.8.0
+ 16.0.2
diff --git a/core-java/src/main/java/com/baeldung/nulls/APIContracts.java b/core-java/src/main/java/com/baeldung/nulls/APIContracts.java
new file mode 100644
index 0000000000..f8dfba25dd
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/nulls/APIContracts.java
@@ -0,0 +1,29 @@
+package com.baeldung.nulls;
+
+public class APIContracts {
+
+ /**
+ * Prints the value of {@code param} if not null. Prints {@code null} otherwise.
+ * @param param
+ */
+ public void print(Object param) {
+ System.out.println("Printing " + param);
+ }
+
+ /**
+ *
+ * @return non null result
+ * @throws Exception - if result is null
+ */
+ public Object process() throws Exception {
+ Object result = doSomething();
+ if (result == null)
+ throw new Exception("Processing fail. Got a null response");
+ else
+ return result;
+ }
+
+ private Object doSomething() {
+ return null;
+ }
+}
diff --git a/core-java/src/main/java/com/baeldung/nulls/Assertions.java b/core-java/src/main/java/com/baeldung/nulls/Assertions.java
new file mode 100644
index 0000000000..a0d692623f
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/nulls/Assertions.java
@@ -0,0 +1,13 @@
+package com.baeldung.nulls;
+
+public class Assertions {
+
+ public void accept(Object param){
+ assert param != null;
+
+ doSomething(param);
+ }
+
+ private void doSomething(Object param) {
+ }
+}
diff --git a/core-java/src/main/java/com/baeldung/nulls/EmptyCollections.java b/core-java/src/main/java/com/baeldung/nulls/EmptyCollections.java
new file mode 100644
index 0000000000..95e49e4e91
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/nulls/EmptyCollections.java
@@ -0,0 +1,24 @@
+package com.baeldung.nulls;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+public class EmptyCollections {
+
+ public List names(){
+ if (userExist())
+ return Stream.of(readName()).collect(Collectors.toList());
+ else
+ return Collections.emptyList();
+ }
+
+ private boolean userExist() {
+ return false;
+ }
+
+ private String readName() {
+ return "test";
+ }
+}
diff --git a/core-java/src/main/java/com/baeldung/nulls/FindBugsAnnotations.java b/core-java/src/main/java/com/baeldung/nulls/FindBugsAnnotations.java
new file mode 100644
index 0000000000..f879f033c9
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/nulls/FindBugsAnnotations.java
@@ -0,0 +1,28 @@
+package com.baeldung.nulls;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+public class FindBugsAnnotations {
+
+ public void accept(@Nonnull Object param) {
+ System.out.println(param.toString());
+ }
+
+ public void print(@Nullable Object param) {
+ System.out.println("Printing " + param);
+ }
+
+ @Nonnull
+ public Object process() throws Exception {
+ Object result = doSomething();
+ if (result == null)
+ throw new Exception("Processing fail. Got a null response");
+ else
+ return result;
+ }
+
+ private Object doSomething() {
+ return null;
+ }
+}
diff --git a/core-java/src/main/java/com/baeldung/nulls/Preconditions.java b/core-java/src/main/java/com/baeldung/nulls/Preconditions.java
new file mode 100644
index 0000000000..ff32db46dd
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/nulls/Preconditions.java
@@ -0,0 +1,32 @@
+package com.baeldung.nulls;
+
+public class Preconditions {
+
+ public void goodAccept(String one, String two, String three) {
+ if (null == one || null == two || three == null)
+ throw new IllegalArgumentException();
+ }
+
+ public void badAccept(String one, String two, String three){
+ if (null == one)
+ throw new IllegalArgumentException();
+ else
+ process(one);
+
+ if (null == two)
+ throw new IllegalArgumentException();
+ else
+ process(two);
+
+ if (null == three)
+ throw new IllegalArgumentException();
+ else
+ process(three);
+
+ }
+
+ private void process(String one) {
+ }
+
+
+}
diff --git a/core-java/src/main/java/com/baeldung/nulls/PrimitivesAndWrapper.java b/core-java/src/main/java/com/baeldung/nulls/PrimitivesAndWrapper.java
new file mode 100644
index 0000000000..dce7a05308
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/nulls/PrimitivesAndWrapper.java
@@ -0,0 +1,24 @@
+package com.baeldung.nulls;
+
+public class PrimitivesAndWrapper {
+
+ public static int sum(int a, int b) {
+ return a + b;
+ }
+
+ public static Integer sum(Integer a, Integer b) {
+ return a + b;
+ }
+
+ public static Integer goodSum(Integer a, Integer b) {
+ if (a != null && b != null)
+ return a + b;
+ else
+ throw new IllegalArgumentException();
+ }
+
+ public static void main(String[] args) {
+ sum(0, 0);
+ sum(null, null);
+ }
+}
diff --git a/core-java/src/main/java/com/baeldung/nulls/UsingLombok.java b/core-java/src/main/java/com/baeldung/nulls/UsingLombok.java
new file mode 100644
index 0000000000..73db0742c8
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/nulls/UsingLombok.java
@@ -0,0 +1,10 @@
+package com.baeldung.nulls;
+
+import lombok.NonNull;
+
+public class UsingLombok {
+
+ public void accept(@NonNull Object param){
+ System.out.println(param);
+ }
+}
diff --git a/core-java/src/main/java/com/baeldung/nulls/UsingObjects.java b/core-java/src/main/java/com/baeldung/nulls/UsingObjects.java
new file mode 100644
index 0000000000..e8a3262ce7
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/nulls/UsingObjects.java
@@ -0,0 +1,24 @@
+package com.baeldung.nulls;
+
+import java.util.Objects;
+
+public class UsingObjects {
+
+ private String checked;
+
+ public void accept(Object param) {
+ try {
+ Objects.requireNonNull(param);
+ } catch (NullPointerException e) {
+ //doSomethingElseToo
+ e.printStackTrace();
+ }
+ }
+
+ public void caller() throws Exception {
+ if (Objects.nonNull(checked))
+ accept(checked);
+ else
+ throw new Exception();
+ }
+}
diff --git a/core-java/src/main/java/com/baeldung/nulls/UsingOptional.java b/core-java/src/main/java/com/baeldung/nulls/UsingOptional.java
new file mode 100644
index 0000000000..626afc311d
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/nulls/UsingOptional.java
@@ -0,0 +1,23 @@
+package com.baeldung.nulls;
+
+import java.util.Optional;
+
+public class UsingOptional {
+
+ public Optional