diff --git a/pom.xml b/pom.xml
index 7099dd8cbc..3452ae81ee 100644
--- a/pom.xml
+++ b/pom.xml
@@ -889,7 +889,7 @@
spring-vault
spring-web-modules
spring-websockets
- static-analysis
+
tablesaw
tensorflow-java
testing-modules
@@ -1134,7 +1134,7 @@
spring-vault
spring-web-modules
spring-websockets
- static-analysis
+
tablesaw
tensorflow-java
testing-modules
diff --git a/static-analysis/error-prone-project/.mvn/jvm.config b/static-analysis/error-prone-project/.mvn/jvm.config
new file mode 100644
index 0000000000..32599cefea
--- /dev/null
+++ b/static-analysis/error-prone-project/.mvn/jvm.config
@@ -0,0 +1,10 @@
+--add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED
+--add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED
+--add-exports jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED
+--add-exports jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED
+--add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED
+--add-exports jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED
+--add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED
+--add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
+--add-opens jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED
+--add-opens jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED
diff --git a/static-analysis/error-prone-project/pom.xml b/static-analysis/error-prone-project/pom.xml
new file mode 100644
index 0000000000..59f7bb7270
--- /dev/null
+++ b/static-analysis/error-prone-project/pom.xml
@@ -0,0 +1,61 @@
+
+
+ 4.0.0
+
+ com.baeldung
+ static-analysis
+ 1.0-SNAPSHOT
+
+
+ error-prone-project
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+ 17
+ UTF-8
+ true
+
+ -XDcompilePolicy=simple
+ -Xplugin:ErrorProne
+ -J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED
+ -J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED
+ -J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED
+ -J--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED
+ -J--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED
+ -J--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED
+ -J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED
+ -J--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
+ -J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED
+ -J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED
+
+
+
+ com.google.errorprone
+ error_prone_core
+ ${error-prone.version}
+
+
+ com.baeldung
+ my-bugchecker-plugin
+ 1.0-SNAPSHOT
+
+
+
+
+
+
+
+
+ 17
+ 17
+ UTF-8
+
+
+
diff --git a/static-analysis/error-prone-project/src/main/java/com/baeldung/BuggyClass.java b/static-analysis/error-prone-project/src/main/java/com/baeldung/BuggyClass.java
new file mode 100644
index 0000000000..dda432ad48
--- /dev/null
+++ b/static-analysis/error-prone-project/src/main/java/com/baeldung/BuggyClass.java
@@ -0,0 +1,12 @@
+package com.baeldung;
+
+public class BuggyClass {
+ public static void main(String[] args) {
+ if (args.length == 0 || args[0] != null) {
+ new IllegalArgumentException();
+ }
+ }
+
+ public void emptyMethod() {
+ }
+}
diff --git a/static-analysis/error-prone-project/src/main/java/com/baeldung/ClassWithEmptyMethod.java b/static-analysis/error-prone-project/src/main/java/com/baeldung/ClassWithEmptyMethod.java
new file mode 100644
index 0000000000..cc791ecdd4
--- /dev/null
+++ b/static-analysis/error-prone-project/src/main/java/com/baeldung/ClassWithEmptyMethod.java
@@ -0,0 +1,6 @@
+package com.baeldung;
+
+public class ClassWithEmptyMethod {
+ public void theEmptyMethod() {
+ }
+}
diff --git a/static-analysis/my-bugchecker-plugin/pom.xml b/static-analysis/my-bugchecker-plugin/pom.xml
new file mode 100644
index 0000000000..cbe16b0a14
--- /dev/null
+++ b/static-analysis/my-bugchecker-plugin/pom.xml
@@ -0,0 +1,56 @@
+
+
+ 4.0.0
+
+ com.baeldung
+ static-analysis
+ 1.0-SNAPSHOT
+
+ jar
+ my-bugchecker-plugin
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+
+
+ com.google.auto.service
+ auto-service
+ ${google-auto-service.version}
+
+
+
+
+
+
+
+
+ com.google.errorprone
+ error_prone_annotation
+ ${error-prone.version}
+
+
+ com.google.errorprone
+ error_prone_check_api
+ ${error-prone.version}
+
+
+ com.google.auto.service
+ auto-service-annotations
+ ${google-auto-service.version}
+
+
+
+
+ 17
+ 17
+ UTF-8
+
+
+
diff --git a/static-analysis/my-bugchecker-plugin/src/main/java/com/baeldung/EmptyMethodChecker.java b/static-analysis/my-bugchecker-plugin/src/main/java/com/baeldung/EmptyMethodChecker.java
new file mode 100644
index 0000000000..f31913c086
--- /dev/null
+++ b/static-analysis/my-bugchecker-plugin/src/main/java/com/baeldung/EmptyMethodChecker.java
@@ -0,0 +1,24 @@
+package com.baeldung;
+
+import com.google.auto.service.AutoService;
+import com.google.errorprone.BugPattern;
+import com.google.errorprone.VisitorState;
+import com.google.errorprone.bugpatterns.BugChecker;
+import com.google.errorprone.fixes.SuggestedFix;
+import com.google.errorprone.matchers.Description;
+import com.sun.source.tree.MethodTree;
+
+
+@AutoService(BugChecker.class)
+@BugPattern(name = "EmptyMethodCheck", summary = "Empty methods should be deleted", severity = BugPattern.SeverityLevel.ERROR)
+public class EmptyMethodChecker extends BugChecker implements BugChecker.MethodTreeMatcher {
+ @Override
+ public Description matchMethod(MethodTree methodTree, VisitorState visitorState) {
+ if (methodTree.getBody()
+ .getStatements()
+ .isEmpty()) {
+ return describeMatch(methodTree, SuggestedFix.delete(methodTree));
+ }
+ return Description.NO_MATCH;
+ }
+}
diff --git a/static-analysis/pmd/pom.xml b/static-analysis/pmd/pom.xml
new file mode 100644
index 0000000000..31914fe9f0
--- /dev/null
+++ b/static-analysis/pmd/pom.xml
@@ -0,0 +1,20 @@
+
+
+ 4.0.0
+
+ com.baeldung
+ static-analysis
+ 1.0-SNAPSHOT
+
+
+ pmd
+
+
+ 17
+ 17
+ UTF-8
+
+
+
diff --git a/static-analysis/src/main/java/com/baeldung/pmd/Cnt.java b/static-analysis/pmd/src/main/java/com/baeldung/pmd/Cnt.java
similarity index 100%
rename from static-analysis/src/main/java/com/baeldung/pmd/Cnt.java
rename to static-analysis/pmd/src/main/java/com/baeldung/pmd/Cnt.java
diff --git a/static-analysis/src/main/resources/customruleset.xml b/static-analysis/pmd/src/main/resources/customruleset.xml
similarity index 96%
rename from static-analysis/src/main/resources/customruleset.xml
rename to static-analysis/pmd/src/main/resources/customruleset.xml
index e0a009dd4a..6b1a80334d 100644
--- a/static-analysis/src/main/resources/customruleset.xml
+++ b/static-analysis/pmd/src/main/resources/customruleset.xml
@@ -1,37 +1,37 @@
-
-
-
-
- This ruleset checks my code for bad stuff
-
-
-
-
-
-
-
-
-
-
-
-
-
- 2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+ This ruleset checks my code for bad stuff
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static-analysis/src/main/resources/logback.xml b/static-analysis/pmd/src/main/resources/logback.xml
similarity index 100%
rename from static-analysis/src/main/resources/logback.xml
rename to static-analysis/pmd/src/main/resources/logback.xml
diff --git a/static-analysis/src/test/java/com/baeldung/pmd/CntUnitTest.java b/static-analysis/pmd/src/test/java/com/baeldung/pmd/CntUnitTest.java
similarity index 100%
rename from static-analysis/src/test/java/com/baeldung/pmd/CntUnitTest.java
rename to static-analysis/pmd/src/test/java/com/baeldung/pmd/CntUnitTest.java
diff --git a/static-analysis/pom.xml b/static-analysis/pom.xml
index eedf5ba724..176f3dc092 100644
--- a/static-analysis/pom.xml
+++ b/static-analysis/pom.xml
@@ -6,6 +6,7 @@
static-analysis
1.0-SNAPSHOT
static-analysis
+ pom
com.baeldung
@@ -29,4 +30,15 @@
-
\ No newline at end of file
+
+ pmd
+ my-bugchecker-plugin
+ error-prone-project
+
+
+
+ 2.23.0
+ 1.0.1
+
+
+