You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sj...@apache.org on 2022/07/25 08:43:50 UTC
[maven-jxr] branch master updated: [JXR-170] NullPointerException while parsing Java 15 multi-line String source - Add support for parsing sources with Java 15 multi-line Strings - Add JUnit test case - Implement toString on class BaseType - Require non-null name on BaseType construtor - Prevent construction of types with null name - Add version to maven-enforcer-plugin plugin to prevent failure of integration test JXR-143_nofork
This is an automated email from the ASF dual-hosted git repository.
sjaranowski pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-jxr.git
The following commit(s) were added to refs/heads/master by this push:
new 87995c6 [JXR-170] NullPointerException while parsing Java 15 multi-line String source - Add support for parsing sources with Java 15 multi-line Strings - Add JUnit test case - Implement toString on class BaseType - Require non-null name on BaseType construtor - Prevent construction of types with null name - Add version to maven-enforcer-plugin plugin to prevent failure of integration test JXR-143_nofork
87995c6 is described below
commit 87995c6e2484f3a6476fc29c600c294ede849f22
Author: Markus Spann <sm...@outlook.de>
AuthorDate: Sun Jul 24 15:47:20 2022 +0200
[JXR-170] NullPointerException while parsing Java 15 multi-line String source
- Add support for parsing sources with Java 15 multi-line Strings
- Add JUnit test case
- Implement toString on class BaseType
- Require non-null name on BaseType construtor
- Prevent construction of types with null name
- Add version to maven-enforcer-plugin plugin to prevent failure of integration test JXR-143_nofork
---
maven-jxr-plugin/src/it/JXR-143_nofork/pom.xml | 1 +
.../java/org/apache/maven/jxr/pacman/BaseType.java | 29 ++++++++-------
.../org/apache/maven/jxr/pacman/ClassType.java | 5 +--
.../org/apache/maven/jxr/pacman/ImportType.java | 2 +-
.../org/apache/maven/jxr/pacman/JavaFileImpl.java | 42 +++++++++++++++++-----
.../org/apache/maven/jxr/pacman/PackageType.java | 4 +--
.../apache/maven/jxr/pacman/JavaFileImplTest.java | 12 ++++++-
.../jxr/pacman/ClassWithMultiLineString.java} | 39 ++++++--------------
8 files changed, 78 insertions(+), 56 deletions(-)
diff --git a/maven-jxr-plugin/src/it/JXR-143_nofork/pom.xml b/maven-jxr-plugin/src/it/JXR-143_nofork/pom.xml
index c1cf179..d84d314 100644
--- a/maven-jxr-plugin/src/it/JXR-143_nofork/pom.xml
+++ b/maven-jxr-plugin/src/it/JXR-143_nofork/pom.xml
@@ -44,6 +44,7 @@ under the License.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
+ <version>3.1.0</version>
<executions>
<execution>
<goals>
diff --git a/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/BaseType.java b/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/BaseType.java
index e0485c9..c309469 100644
--- a/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/BaseType.java
+++ b/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/BaseType.java
@@ -19,6 +19,8 @@ package org.apache.maven.jxr.pacman;
* under the License.
*/
+import java.util.Objects;
+
/**
* put your documentation comment here
*
@@ -26,8 +28,17 @@ package org.apache.maven.jxr.pacman;
*/
public abstract class BaseType
{
- private String name = null;
+ private final String name;
+ /**
+ * Construct type and set its name.
+ *
+ * @param name type name
+ */
+ public BaseType( String name )
+ {
+ this.name = Objects.requireNonNull( name );
+ }
/**
* Get the name for this type
@@ -36,22 +47,14 @@ public abstract class BaseType
*/
public String getName()
{
- if ( name == null )
- {
- return "";
- }
return this.name;
}
-
- /**
- * Set the name for this type
- *
- * @param name The new name value
- */
- public void setName( String name )
+ @Override
+ public String toString()
{
- this.name = name;
+ return getClass().getSimpleName() + "[name=" + name + "]";
}
+
}
diff --git a/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/ClassType.java b/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/ClassType.java
index e5783fd..023332e 100644
--- a/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/ClassType.java
+++ b/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/ClassType.java
@@ -41,7 +41,7 @@ public class ClassType
@Deprecated
public ClassType( String name )
{
- this.setName( name );
+ this( name, null );
}
/**
@@ -52,7 +52,8 @@ public class ClassType
*/
public ClassType( String name, String filename )
{
- this.setName( name );
+ super( name );
+
this.setFilename( filename );
}
diff --git a/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/ImportType.java b/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/ImportType.java
index a8abf53..c702e41 100644
--- a/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/ImportType.java
+++ b/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/ImportType.java
@@ -39,7 +39,7 @@ public class ImportType
*/
public ImportType( String name )
{
- this.setName( name );
+ super( name );
//compute member variables
diff --git a/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/JavaFileImpl.java b/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/JavaFileImpl.java
index 0b516b9..74f2470 100644
--- a/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/JavaFileImpl.java
+++ b/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/JavaFileImpl.java
@@ -84,6 +84,9 @@ public class JavaFileImpl
{
int openBracesCount = 0;
+ char prevttype = Character.MIN_VALUE; // previous token type
+ boolean inTripleQuote = false; // used to toggle between inside/outside triple-quoted multi-line strings
+
while ( stok.nextToken() != StreamTokenizer.TT_EOF )
{
@@ -103,12 +106,28 @@ public class JavaFileImpl
}
continue;
}
+ else
+ {
+ if ( '"' == stok.ttype && '"' == prevttype )
+ {
+ inTripleQuote = !inTripleQuote;
+ }
+ prevttype = (char) stok.ttype;
+ if ( inTripleQuote )
+ {
+ // skip content found inside triple-quoted multi-line Java 15 String
+ continue;
+ }
+ }
//set the package
if ( "package".equals( stok.sval ) && stok.ttype != '\"' )
{
stok.nextToken();
- this.setPackageType( new PackageType( stok.sval ) );
+ if ( stok.sval != null )
+ {
+ this.setPackageType( new PackageType( stok.sval ) );
+ }
}
//set the imports
@@ -125,23 +144,28 @@ public class JavaFileImpl
stripped( and become "test." ). Here we need to test for this
and if necessary re-add the char.
*/
- if ( name.charAt( name.length() - 1 ) == '.' )
+ if ( name != null )
{
- name = name + '*';
+ if ( name.charAt( name.length() - 1 ) == '.' )
+ {
+ name = name + '*';
+ }
+ this.addImportType( new ImportType( name ) );
}
-
- this.addImportType( new ImportType( name ) );
}
// Add the class or classes. There can be several classes in one file so
// continue with the while loop to get them all.
if ( ( "class".equals( stok.sval ) || "interface".equals( stok.sval ) || "enum".equals( stok.sval ) )
- && stok.ttype != '\"' )
+ && stok.ttype != '"' )
{
stok.nextToken();
- this.addClassType( new ClassType( nestedPrefix + stok.sval,
- getFilenameWithoutPathOrExtension( this.getPath() ) ) );
- parseRecursive( nestedPrefix + stok.sval + ".", stok );
+ if ( stok.sval != null )
+ {
+ this.addClassType( new ClassType( nestedPrefix + stok.sval,
+ getFilenameWithoutPathOrExtension( this.getPath() ) ) );
+ parseRecursive( nestedPrefix + stok.sval + ".", stok );
+ }
}
}
diff --git a/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/PackageType.java b/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/PackageType.java
index 9817a45..b8a4300 100644
--- a/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/PackageType.java
+++ b/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/PackageType.java
@@ -39,7 +39,7 @@ public class PackageType
*/
public PackageType( String name )
{
- this.setName( name );
+ super( name );
}
/**
@@ -47,9 +47,9 @@ public class PackageType
*/
public PackageType()
{
+ super( "" );
}
-
/**
* Get all the known classes
*/
diff --git a/maven-jxr/src/test/java/org/apache/maven/jxr/pacman/JavaFileImplTest.java b/maven-jxr/src/test/java/org/apache/maven/jxr/pacman/JavaFileImplTest.java
index 5c3a854..ca3f1eb 100644
--- a/maven-jxr/src/test/java/org/apache/maven/jxr/pacman/JavaFileImplTest.java
+++ b/maven-jxr/src/test/java/org/apache/maven/jxr/pacman/JavaFileImplTest.java
@@ -46,4 +46,14 @@ public class JavaFileImplTest {
assertEquals( "NotNested", classTypes.next().getName() );
}
-}
\ No newline at end of file
+ @Test
+ public void testJXR_170_multiLineString() throws IOException
+ {
+ JavaFileImpl javaFile = new JavaFileImpl( Paths.get(
+ "src/test/resources/jxr170/org/apache/maven/jxr/pacman/ClassWithMultiLineString.java" ),
+ "UTF-8" );
+ assertEquals( 1, javaFile.getClassTypes().size() );
+ assertEquals( "ClassWithMultiLineString", javaFile.getClassTypes().get(0).getName() );
+ assertEquals( "[ImportType[name=java.lang.*]]", javaFile.getImportTypes().toString() );
+ }
+}
diff --git a/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/BaseType.java b/maven-jxr/src/test/resources/jxr170/org/apache/maven/jxr/pacman/ClassWithMultiLineString.java
similarity index 60%
copy from maven-jxr/src/main/java/org/apache/maven/jxr/pacman/BaseType.java
copy to maven-jxr/src/test/resources/jxr170/org/apache/maven/jxr/pacman/ClassWithMultiLineString.java
index e0485c9..e1dc937 100644
--- a/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/BaseType.java
+++ b/maven-jxr/src/test/resources/jxr170/org/apache/maven/jxr/pacman/ClassWithMultiLineString.java
@@ -1,4 +1,4 @@
-package org.apache.maven.jxr.pacman;
+package org.apache.maven.jxr;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -20,38 +20,21 @@ package org.apache.maven.jxr.pacman;
*/
/**
- * put your documentation comment here
+ * Test Java source of the test for JXR-170.
*
- * @author jvanzyl
+ * @author Markus Spann
*/
-public abstract class BaseType
-{
- private String name = null;
+public class ClassWithMultiLineString {
+ private final String str;
- /**
- * Get the name for this type
- *
- * @return The name value
- */
- public String getName()
- {
- if ( name == null )
- {
- return "";
- }
- return this.name;
+ public ClassWithMultiLineString(String _str) {
+ str = _str;
}
-
- /**
- * Set the name for this type
- *
- * @param name The new name value
- */
- public void setName( String name )
- {
- this.name = name;
+ public static void main(String[] args) {
+ new ClassWithMultiLineString("""
+ import java.util.List;
+ """);
}
}
-