From a70e66e6245b4cd7e875340c59f7028e1f5868fa Mon Sep 17 00:00:00 2001 From: Elliotte Rusty Harold Date: Sun, 8 Dec 2024 20:40:08 +0000 Subject: [PATCH] [MJAVADOC-825] Prefer NullPointerExceptions for null arguments (#350) * Prefer NullPointerExceptions for null arguments --- .../maven/plugins/javadoc/JavadocUtil.java | 37 ++++++---- .../plugins/javadoc/JavadocUtilTest.java | 69 +++++++++++-------- 2 files changed, 62 insertions(+), 44 deletions(-) diff --git a/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java b/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java index d6d39fa8..8da760f1 100644 --- a/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java +++ b/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java @@ -497,9 +497,9 @@ protected static JavaVersion getJavadocVersion(File javadocExe) Pattern.compile("(?s).*?[^a-zA-Z](([0-9]+\\.?[0-9]*)(\\.[0-9]+)?).*"); /** - * Parse the output for 'javadoc -J-version' and return the javadoc version recognized.
- * Here are some output for 'javadoc -J-version' depending the JDK used: - * + * Parse the output of 'javadoc -J-version' and return the javadoc version recognized.
+ * Here are some output for 'javadoc -J-version' depending on the JDK used: + *
Output for 'javadoc -J-version' per JDK
* * * @@ -530,15 +530,20 @@ protected static JavaVersion getJavadocVersion(File javadocExe) * *
Output of 'javadoc -J-version' per JDK
JDKOutput for 'javadoc -J-version'
* - * @param output for 'javadoc -J-version' + * @param output of 'javadoc -J-version' * @return the version of the javadoc for the output, only digits and dots - * @throws PatternSyntaxException if the output doesn't match with the output pattern + * @throws PatternSyntaxException if the output doesn't match the output pattern * {@code (?s).*?[^a-zA-Z]([0-9]+\\.?[0-9]*)(\\.([0-9]+))?.*}. - * @throws IllegalArgumentException if the output is null + * @throws NullPointerException if the output is null + * @throws IllegalArgumentException if the output is empty */ - protected static String extractJavadocVersion(String output) throws IllegalArgumentException { - if (output == null || output.isEmpty()) { - throw new IllegalArgumentException("The output could not be null."); + protected static String extractJavadocVersion(String output) { + if (output == null) { + throw new NullPointerException("The output cannot be null."); + } + + if (output.isEmpty()) { + throw new IllegalArgumentException("The output cannot be empty."); } Pattern pattern = EXTRACT_JAVADOC_VERSION_PATTERN; @@ -591,14 +596,18 @@ protected static String extractJavadocVersion(String output) throws IllegalArgum * * * @param memory the memory to be parsed, not null. - * @return the memory parsed with a supported unit. If no unit specified in the memory parameter, the + * @return the memory parsed with a supported unit. If no unit is specified in the memory argument, the * default unit is m. The units g | gb or t | tb will be converted in * m. - * @throws IllegalArgumentException if the memory parameter is null or doesn't match any pattern. + * @throws NullPointerException if the memory argument is null + * @throws IllegalArgumentException if the memory argument doesn't match any pattern. */ - protected static String parseJavadocMemory(String memory) throws IllegalArgumentException { - if (memory == null || memory.isEmpty()) { - throw new IllegalArgumentException("The memory could not be null."); + protected static String parseJavadocMemory(String memory) { + if (memory == null) { + throw new NullPointerException("The memory cannot be null."); + } + if (memory.isEmpty()) { + throw new IllegalArgumentException("The memory cannot be empty."); } Matcher m0 = PARSE_JAVADOC_MEMORY_PATTERN_0.matcher(memory); diff --git a/src/test/java/org/apache/maven/plugins/javadoc/JavadocUtilTest.java b/src/test/java/org/apache/maven/plugins/javadoc/JavadocUtilTest.java index 25c4c485..df6fcd99 100644 --- a/src/test/java/org/apache/maven/plugins/javadoc/JavadocUtilTest.java +++ b/src/test/java/org/apache/maven/plugins/javadoc/JavadocUtilTest.java @@ -40,7 +40,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -import java.util.regex.PatternSyntaxException; import org.apache.maven.plugin.testing.stubs.MavenProjectStub; import org.apache.maven.plugins.javadoc.ProxyServer.AuthAsyncProxyServlet; @@ -61,21 +60,31 @@ * @author Vincent Siveton */ public class JavadocUtilTest extends PlexusTestCase { - /** - * Method to test the javadoc version parsing. - * - */ - public void testParseJavadocVersion() { - String version = null; + + public void testParseJavadocVersion_Null() { try { - JavadocUtil.extractJavadocVersion(version); + JavadocUtil.extractJavadocVersion(null); fail("Not catch null"); - } catch (IllegalArgumentException e) { - assertTrue(true); + } catch (NullPointerException ex) { + assertNotNull(ex.getMessage()); } + } + public void testParseJavadocVersion_EmptyString() { + try { + JavadocUtil.extractJavadocVersion(""); + fail("Not catch empty version"); + } catch (IllegalArgumentException ex) { + assertNotNull(ex.getMessage()); + } + } + + /** + * Test the javadoc version parsing. + */ + public void testParseJavadocVersion() { // Sun JDK 1.4 - version = "java full version \"1.4.2_12-b03\""; + String version = "java full version \"1.4.2_12-b03\""; assertEquals("1.4.2", JavadocUtil.extractJavadocVersion(version)); // Sun JDK 1.5 @@ -126,15 +135,6 @@ public void testParseJavadocVersion() { version = "java full version \"1.4\""; assertEquals("1.4", JavadocUtil.extractJavadocVersion(version)); - version = "java full version \"1.A.B_07-164\""; - try { - JavadocUtil.extractJavadocVersion(version); - // does not fail since JEP 223 support addition - // assertTrue( "Not catch wrong pattern", false ); - } catch (PatternSyntaxException e) { - assertTrue(true); - } - version = "SCO-UNIX-J2SE-1.5.0_09*FCS-UW714-OSR6*_20061114"; assertEquals("1.5.0", JavadocUtil.extractJavadocVersion(version)); @@ -163,20 +163,29 @@ public void testParseJavadocVersion() { assertEquals("10.0.1", JavadocUtil.extractJavadocVersion(version)); } - /** - * Method to test the javadoc memory parsing. - * - */ - public void testParseJavadocMemory() { - String memory = null; + public void testParseJavadocMemory_null() { try { - JavadocUtil.parseJavadocMemory(memory); + JavadocUtil.parseJavadocMemory(null); fail("Not catch null"); - } catch (IllegalArgumentException e) { - assertTrue(true); + } catch (NullPointerException ex) { + assertNotNull(ex.getMessage()); + } + } + + public void testParseJavadocMemory_empty() { + try { + JavadocUtil.parseJavadocMemory(""); + fail("Not catch null"); + } catch (IllegalArgumentException ex) { + assertNotNull(ex.getMessage()); } + } - memory = "128"; + /** + * Method to test the javadoc memory parsing. + */ + public void testParseJavadocMemory() { + String memory = "128"; assertEquals(JavadocUtil.parseJavadocMemory(memory), "128m"); memory = "128k";