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/03/07 20:14:53 UTC

[maven-jxr] 01/01: [JXR-164] Use file name without path for page title

This is an automated email from the ASF dual-hosted git repository.

sjaranowski pushed a commit to branch JXR-164
in repository https://gitbox.apache.org/repos/asf/maven-jxr.git

commit ca783175d3eb3be0fc5c312222756070bb43b761
Author: Slawomir Jaranowski <s....@gmail.com>
AuthorDate: Mon Mar 7 21:14:15 2022 +0100

    [JXR-164] Use file name without path for page title
---
 .../org/apache/maven/jxr/JavaCodeTransform.java    | 12 +++++--
 .../java/org/apache/maven/jxr/pacman/JavaFile.java | 27 +++++++++++++++
 .../org/apache/maven/jxr/pacman/JavaFileImpl.java  | 15 --------
 .../apache/maven/jxr/JavaCodeTransformTest.java    | 40 +++++++++++++++++++---
 maven-jxr/src/test/resources/UnknownType.java      | 27 +++++++++++++++
 5 files changed, 99 insertions(+), 22 deletions(-)

diff --git a/maven-jxr/src/main/java/org/apache/maven/jxr/JavaCodeTransform.java b/maven-jxr/src/main/java/org/apache/maven/jxr/JavaCodeTransform.java
index 3deb024..699aeee 100644
--- a/maven-jxr/src/main/java/org/apache/maven/jxr/JavaCodeTransform.java
+++ b/maven-jxr/src/main/java/org/apache/maven/jxr/JavaCodeTransform.java
@@ -332,7 +332,7 @@ public class JavaCodeTransform
             }
             else
             {
-                out.print( this.getCurrentFilename() );
+                out.print( javaFile.getFilename() );
             }
             out.print( ' ' );
         }
@@ -983,7 +983,7 @@ public class JavaCodeTransform
         {
             overview.append( "<div id=\"overview\">" );
             // get the URI to get Javadoc info.
-            Path javadocURI = javadocLinkDir;
+            Path javadocURI;
 
             try
             {
@@ -992,10 +992,16 @@ public class JavaCodeTransform
                 javadocURI = javadocLinkDir.resolve( jf.getPackageType().getName().replace( '.', '/' ) )
                                 ;
                 // Use the name of the file instead of the class to handle inner classes properly
+                String fileName;
                 if ( jf.getClassType() != null && jf.getClassType().getFilename() != null )
                 {
-                    javadocURI = javadocURI.resolve( jf.getClassType().getFilename() + ".html" );
+                    fileName = jf.getClassType().getFilename();
                 }
+                else
+                {
+                    fileName = jf.getFilename();
+                }
+                javadocURI = javadocURI.resolve( fileName + ".html" );
 
                 String javadocHREF = "<a href=\"" + javadocURI.toString().replace( '\\', '/' ) + "\">View Javadoc</a>";
 
diff --git a/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/JavaFile.java b/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/JavaFile.java
index f6a90c9..b06ac09 100644
--- a/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/JavaFile.java
+++ b/maven-jxr/src/main/java/org/apache/maven/jxr/pacman/JavaFile.java
@@ -42,12 +42,15 @@ public abstract class JavaFile
 
     private final Path path;
 
+    private String filename;
+
     private final String encoding;
     
     protected JavaFile(  Path path, String encoding )
     {
         this.path = path;
         this.encoding = encoding;
+        this.filename = getFilenameWithoutPathOrExtension( path );
     }
 
     /**
@@ -135,10 +138,34 @@ public abstract class JavaFile
     }
 
     /**
+     * File name without path and extension.
+     */
+    public String getFilename()
+    {
+        return filename;
+    }
+
+    /**
      * Gets the encoding attribute of the JavaFile object
      */
     public String getEncoding()
     {
         return this.encoding;
     }
+
+    /**
+     * Remove the path and the ".java" extension from a filename.
+     */
+    protected static String getFilenameWithoutPathOrExtension( Path path )
+    {
+        String newFilename = path.getFileName().toString();
+        // Remove the ".java" extension from the filename, if it exists
+        int extensionIndex = newFilename.lastIndexOf( ".java" );
+        if ( extensionIndex >= 0 )
+        {
+            newFilename = newFilename.substring( 0, extensionIndex );
+        }
+        return newFilename;
+    }
+
 }
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 9a30db5..0b516b9 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
@@ -148,21 +148,6 @@ public class JavaFileImpl
     }
 
     /**
-     * Remove the path and the ".java" extension from a filename.
-     */
-    private static String getFilenameWithoutPathOrExtension( Path path )
-    {
-        String newFilename = path.getFileName().toString();
-        // Remove the ".java" extension from the filename, if it exists
-        int extensionIndex = newFilename.lastIndexOf( ".java" );
-        if ( extensionIndex >= 0 )
-        {
-            newFilename = newFilename.substring( 0, extensionIndex );
-        }
-        return newFilename;
-    }
-
-    /**
      * Get a StreamTokenizer for this file.
      */
     private StreamTokenizer getTokenizer( Reader reader )
diff --git a/maven-jxr/src/test/java/org/apache/maven/jxr/JavaCodeTransformTest.java b/maven-jxr/src/test/java/org/apache/maven/jxr/JavaCodeTransformTest.java
index 101c420..6e54de1 100644
--- a/maven-jxr/src/test/java/org/apache/maven/jxr/JavaCodeTransformTest.java
+++ b/maven-jxr/src/test/java/org/apache/maven/jxr/JavaCodeTransformTest.java
@@ -1,7 +1,5 @@
 package org.apache.maven.jxr;
 
-import static org.junit.Assert.assertTrue;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -32,6 +30,8 @@ import org.apache.maven.jxr.pacman.PackageManager;
 import org.junit.Before;
 import org.junit.Test;
 
+import static org.junit.Assert.assertTrue;
+
 /**
  * JUnit test for {@link JavaCodeTransform}.
  */
@@ -64,8 +64,14 @@ public class JavaCodeTransformTest
         multiline comment text
 
         */ codeTransform.transform( sourceFile, Paths.get( "target/JavaCodeTransformTest.html" ) // additional comment
-           , Locale.ENGLISH, "ISO-8859-1", "ISO-8859-1", Paths.get( "." ), "", "" );
+           , Locale.ENGLISH, "ISO-8859-1", "ISO-8859-1", Paths.get( "./javadocs-test" ), "", "" );
         assertTrue( /**/ Files.exists( Paths.get( "target/JavaCodeTransformTest.html" ) ) );
+
+        byte[] bytes = Files.readAllBytes( Paths.get( "target/JavaCodeTransformTest.html" ) );
+        String content = new String( bytes, StandardCharsets.ISO_8859_1 );
+        assertTrue( content.contains( "<title>JavaCodeTransformTest xref</title>" ) );
+        assertTrue( content.contains( "<a href=\"./javadocs-test/org/apache/maven/jxr/JavaCodeTransformTest.html\">"
+                                          + "View Javadoc</a>" ) );
     }
 
     /**
@@ -79,8 +85,13 @@ public class JavaCodeTransformTest
         assertTrue( Files.exists( sourceFile ) );
 
         codeTransform.transform( sourceFile, Paths.get( "target/EmptyClass.html" )
-            , Locale.ENGLISH, "ISO-8859-1", "ISO-8859-1", Paths.get( "." ), "", "" );
+            , Locale.ENGLISH, "ISO-8859-1", "ISO-8859-1", Paths.get( "javadocs" ), "", "" );
         assertTrue( Files.exists( Paths.get( "target/EmptyClass.html" ) ) );
+
+        byte[] bytes = Files.readAllBytes( Paths.get( "target/EmptyClass.html" ) );
+        String content = new String( bytes, StandardCharsets.ISO_8859_1 );
+        assertTrue( content.contains( "<title>EmptyClass xref</title>" ) );
+        assertTrue( content.contains( "<a href=\"javadocs/EmptyClass.html\">View Javadoc</a>" ) );
     }
 
     /**
@@ -109,4 +120,25 @@ public class JavaCodeTransformTest
             "target=\"alexandria_uri\">https://www.apache.org/licenses/LICENSE-2.0</a></em>" ) );
 
     }
+
+    /**
+     * Test what happens with unknown java type.
+     */
+    @Test
+    public void testTransformWithUnknownJavaType()
+        throws Exception
+    {
+        Path sourceFile = Paths.get( "src/test/resources/UnknownType.java" );
+        assertTrue( Files.exists( sourceFile ) );
+
+        codeTransform.transform( sourceFile, Paths.get( "target/UnknownType.html" )
+            , Locale.ENGLISH, "ISO-8859-1", "ISO-8859-1", Paths.get( "javadocs" ), "", "" );
+        assertTrue( Files.exists( Paths.get( "target/UnknownType.html" ) ) );
+
+        byte[] bytes = Files.readAllBytes( Paths.get( "target/UnknownType.html" ) );
+        String content = new String( bytes, StandardCharsets.ISO_8859_1 );
+        assertTrue( content.contains( "<title>UnknownType xref</title>" ) );
+        assertTrue( content.contains( "<a href=\"javadocs/example/UnknownType.html\">View Javadoc</a>" ) );
+    }
+
 }
diff --git a/maven-jxr/src/test/resources/UnknownType.java b/maven-jxr/src/test/resources/UnknownType.java
new file mode 100644
index 0000000..e0e15f6
--- /dev/null
+++ b/maven-jxr/src/test/resources/UnknownType.java
@@ -0,0 +1,27 @@
+package example;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * This is a sample class with unknown type.
+ */
+public unknown UnknownType
+{
+}