You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2021/04/18 08:25:36 UTC

[maven-jxr] 01/04: Remove FileManager from CodeTransformer

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

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

commit 577717974a87e499e0ebd0f5f79099f7255256d5
Author: rfscholte <rf...@apache.org>
AuthorDate: Sat Apr 17 17:51:07 2021 +0200

    Remove FileManager from CodeTransformer
---
 .../apache/maven/plugin/jxr/AbstractJxrReport.java |   2 +-
 .../java/org/apache/maven/jxr/CodeTransformer.java |   4 +-
 .../src/main/java/org/apache/maven/jxr/JXR.java    |  10 +-
 .../org/apache/maven/jxr/JavaCodeTransform.java    | 179 +++++++--------------
 .../org/apache/maven/jxr/IncludeExcludeTest.java   |   2 +-
 .../test/java/org/apache/maven/jxr/JXR141Test.java |   2 +-
 .../apache/maven/jxr/JavaCodeTransformTest.java    |  21 ++-
 .../java/org/apache/maven/jxr/JxrBeanTest.java     |   2 +-
 8 files changed, 90 insertions(+), 132 deletions(-)

diff --git a/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/AbstractJxrReport.java b/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/AbstractJxrReport.java
index 3d9a346..386d68c 100644
--- a/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/AbstractJxrReport.java
+++ b/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/AbstractJxrReport.java
@@ -272,7 +272,7 @@ public abstract class AbstractJxrReport
         PackageManager packageManager = new PackageManager( fileManager );
         CodeTransformer codeTransform = new JavaCodeTransform( packageManager, fileManager );
         
-        JXR jxr = new JXR( packageManager, Collections.singletonMap( "java", codeTransform ) );
+        JXR jxr = new JXR( packageManager, fileManager, Collections.singletonMap( "java", codeTransform ) );
         jxr.setDest( Paths.get( destinationDirectory ) );
         if ( StringUtils.isEmpty( inputEncoding ) )
         {
diff --git a/maven-jxr/src/main/java/org/apache/maven/jxr/CodeTransformer.java b/maven-jxr/src/main/java/org/apache/maven/jxr/CodeTransformer.java
index be79907..b54e5ad 100644
--- a/maven-jxr/src/main/java/org/apache/maven/jxr/CodeTransformer.java
+++ b/maven-jxr/src/main/java/org/apache/maven/jxr/CodeTransformer.java
@@ -24,6 +24,8 @@ import java.nio.file.Path;
 import java.util.Locale;
 import java.util.Set;
 
+import org.apache.maven.jxr.pacman.JavaFile;
+
 /**
  * The code transformer, responsible to turn code into JXR documentation
  * 
@@ -44,7 +46,7 @@ public interface CodeTransformer
      * @param bottom TODO
      * @throws IOException
      */
-    void transform( Path sourcefile, Path destfile, Locale locale, String inputEncoding, String outputEncoding,
+    void transform( JavaFile sourcefile, Path destfile, Locale locale, String outputEncoding,
                     Path javadocLinkDir, String bottom )
         throws IOException;
     
diff --git a/maven-jxr/src/main/java/org/apache/maven/jxr/JXR.java b/maven-jxr/src/main/java/org/apache/maven/jxr/JXR.java
index ba8db99..3b81bc9 100644
--- a/maven-jxr/src/main/java/org/apache/maven/jxr/JXR.java
+++ b/maven-jxr/src/main/java/org/apache/maven/jxr/JXR.java
@@ -20,6 +20,7 @@ package org.apache.maven.jxr;
  */
 
 import org.apache.maven.jxr.ant.DirectoryScanner;
+import org.apache.maven.jxr.pacman.FileManager;
 import org.apache.maven.jxr.pacman.PackageManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -44,6 +45,8 @@ public class JXR
     private static final Logger LOGGER = LoggerFactory.getLogger( JXR.class );
     
     private final PackageManager pkgmgr;
+    
+    private final FileManager fileManager;
 
     /**
      * Handles taking .java files and changing them into html. "More than meets
@@ -77,9 +80,10 @@ public class JXR
      */
     private String[] includes;
     
-    public JXR( PackageManager pkgmgr, Map<String, CodeTransformer> transformers )
+    public JXR( PackageManager pkgmgr, FileManager fileManager, Map<String, CodeTransformer> transformers )
     {
         this.pkgmgr = pkgmgr;
+        this.fileManager = fileManager;
         this.transformers = transformers;
     }
 
@@ -249,10 +253,12 @@ public class JXR
         throws IOException
     {
         LOGGER.debug( sourceFile + " -> " + destFile );
+        
+        fileManager.getFile( sourceFile );
 
         // get a relative link to the javadocs
         Path javadoc = javadocLinkDir != null ? getRelativeLink( destFile.getParent(), javadocLinkDir ) : null;
-        transformer.transform( sourceFile, destFile, locale, inputEncoding, outputEncoding, javadoc, bottom );
+        transformer.transform( fileManager.getFile( sourceFile ), destFile, locale, outputEncoding, javadoc, bottom );
     }
 
     /**
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 d7e41d8..67f5080 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
@@ -1,33 +1,5 @@
 package org.apache.maven.jxr;
 
-import java.io.BufferedReader;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-import java.io.Reader;
-import java.io.Serializable;
-import java.io.Writer;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Singleton;
-
 /*
  * CodeViewer.java
  * CoolServlets.com
@@ -58,6 +30,34 @@ import javax.inject.Singleton;
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+
 import org.apache.commons.lang3.StringUtils;
 import org.apache.maven.jxr.pacman.ClassType;
 import org.apache.maven.jxr.pacman.FileManager;
@@ -95,8 +95,8 @@ import org.apache.maven.jxr.util.StringEntry;
  *                                  importFilter
  * </pre>
  */
+// No Singleton as it holds state during transformation
 @Named( "java" )
-@Singleton
 public class JavaCodeTransform
     implements Serializable, CodeTransformer
 {
@@ -188,7 +188,7 @@ public class JavaCodeTransform
     /**
      * Set the filename that is currently being processed.
      */
-    private Path currentFilename = null;
+    private JavaFile currentSourceFile;
 
     /**
      * The output encoding
@@ -210,11 +210,6 @@ public class JavaCodeTransform
      */
     private final PackageManager packageManager;
 
-    /**
-     * current file manager
-     */
-    private final FileManager fileManager;
-
     {
         reservedWords.put( "abstract", "abstract" );
         reservedWords.put( "do", "do" );
@@ -273,10 +268,10 @@ public class JavaCodeTransform
         reservedWords.put( "implements", "implements" );
     }
 
+    @Inject
     public JavaCodeTransform( PackageManager packageManager, FileManager fileManager )
     {
         this.packageManager = packageManager;
-        this.fileManager = fileManager;
     }
 
     @Override
@@ -335,28 +330,18 @@ public class JavaCodeTransform
 
         // title ("classname xref")
         out.print( "<title>" );
-        try
+        JavaFile javaFile = this.currentSourceFile;
+        // Use the name of the file instead of the class to handle inner classes properly
+        if ( javaFile.getClassType() != null && javaFile.getClassType().getFilename() != null )
         {
-            JavaFile javaFile = fileManager.getFile( this.getCurrentFilename() );
-            // Use the name of the file instead of the class to handle inner classes properly
-            if ( javaFile.getClassType() != null && javaFile.getClassType().getFilename() != null )
-            {
-                out.print( javaFile.getClassType().getFilename() );
-            }
-            else
-            {
-                out.print( this.getCurrentFilename() );
-            }
-            out.print( ' ' );
-        }
-        catch ( IOException e )
-        {
-            e.printStackTrace();
+            out.print( javaFile.getClassType().getFilename() );
         }
-        finally
+        else
         {
-            out.println( "xref</title>" );
+            out.print( javaFile.getPath().toString() );
         }
+        out.print( ' ' );
+        out.println( "xref</title>" );
 
         // stylesheet link
         out.print( "<link type=\"text/css\" rel=\"stylesheet\" href=\"" );
@@ -449,16 +434,16 @@ public class JavaCodeTransform
      * @throws IOException
      */
     @Override
-    public final void transform( Path sourcefile, Path destfile, Locale locale, String inputEncoding,
+    public final void transform( JavaFile sourcefile, Path destfile, Locale locale,
                                  String outputEncoding, Path javadocLinkDir, String bottom )
         throws IOException
     {
-        this.setCurrentFilename( sourcefile );
+        this.setCurrentSourceFile( sourcefile );
 
         // make sure that the parent directories exist...
         Files.createDirectories( destfile.getParent() );
 
-        try ( Reader fr = getReader( sourcefile, inputEncoding ); Writer fw = getWriter( destfile, outputEncoding ) )
+        try ( Reader fr = getReader( sourcefile.getPath(), sourcefile.getEncoding() ); Writer fw = getWriter( destfile, outputEncoding ) )
         {
             transform( fr, fw, locale, outputEncoding, javadocLinkDir, bottom );
         }
@@ -499,24 +484,15 @@ public class JavaCodeTransform
         return fr;
     }
 
-    /**
-     * Get the current filename
-     *
-     * @return String
-     */
-    private Path getCurrentFilename()
+
+    private JavaFile getCurrentSourceFile()
     {
-        return this.currentFilename;
+        return currentSourceFile;
     }
-
-    /**
-     * Set the current filename
-     *
-     * @param filename String
-     */
-    private void setCurrentFilename( Path filename )
+    
+    private void setCurrentSourceFile( JavaFile currentSourceFile )
     {
-        this.currentFilename = filename;
+        this.currentSourceFile = currentSourceFile;
     }
 
     /**
@@ -528,17 +504,7 @@ public class JavaCodeTransform
     {
         StringBuilder buff = new StringBuilder();
 
-        JavaFile jf;
-
-        try
-        {
-            jf = fileManager.getFile( this.getCurrentFilename() );
-        }
-        catch ( IOException e )
-        {
-            e.printStackTrace();
-            return null;
-        }
+        JavaFile jf = getCurrentSourceFile();
 
         String current = jf.getPackageType().getName();
 
@@ -987,28 +953,21 @@ public class JavaCodeTransform
             // get the URI to get Javadoc info.
             Path javadocURI = javadocLinkDir;
 
-            try
-            {
-                JavaFile jf = fileManager.getFile( this.getCurrentFilename() );
-
-                javadocURI = javadocLinkDir.resolve( jf.getPackageType().getName().replace( '.', '/' ) )
-                                ;
-                // Use the name of the file instead of the class to handle inner classes properly
-                if ( jf.getClassType() != null && jf.getClassType().getFilename() != null )
-                {
-                    javadocURI = javadocURI.resolve( jf.getClassType().getFilename() + ".html" );
-                }
-
-                String javadocHREF = "<a href=\"" + javadocURI.toString().replace( '\\', '/' ) + "\">View Javadoc</a>";
+            JavaFile jf = this.getCurrentSourceFile();
 
-                // get the generation time...
-                overview.append( javadocHREF );
-            }
-            catch ( IOException e )
+            javadocURI = javadocLinkDir.resolve( jf.getPackageType().getName().replace( '.', '/' ) )
+                            ;
+            // Use the name of the file instead of the class to handle inner classes properly
+            if ( jf.getClassType() != null && jf.getClassType().getFilename() != null )
             {
-                e.printStackTrace();
+                javadocURI = javadocURI.resolve( jf.getClassType().getFilename() + ".html" );
             }
 
+            String javadocHREF = "<a href=\"" + javadocURI.toString().replace( '\\', '/' ) + "\">View Javadoc</a>";
+
+            // get the generation time...
+            overview.append( javadocHREF );
+
             overview.append( "</div>" );
         }
 
@@ -1045,23 +1004,7 @@ public class JavaCodeTransform
      */
     private String jxrFilter( String line )
     {
-        JavaFile jf;
-
-        try
-        {
-            // if the current file isn't set then just return
-            if ( this.getCurrentFilename() == null )
-            {
-                return line;
-            }
-
-            jf = fileManager.getFile( this.getCurrentFilename() );
-        }
-        catch ( IOException e )
-        {
-            e.printStackTrace();
-            return line;
-        }
+        JavaFile jf = getCurrentSourceFile();
 
         Set<String> packages = new HashSet<>();
 
diff --git a/maven-jxr/src/test/java/org/apache/maven/jxr/IncludeExcludeTest.java b/maven-jxr/src/test/java/org/apache/maven/jxr/IncludeExcludeTest.java
index d333777..1c7d9ae 100644
--- a/maven-jxr/src/test/java/org/apache/maven/jxr/IncludeExcludeTest.java
+++ b/maven-jxr/src/test/java/org/apache/maven/jxr/IncludeExcludeTest.java
@@ -49,7 +49,7 @@ public class IncludeExcludeTest
         PackageManager packageManager = new PackageManager( fileManager );
         CodeTransformer codeTransform = new JavaCodeTransform( packageManager, fileManager );
         
-        jxr = new JXR( packageManager, Collections.singletonMap( "java", codeTransform ) );
+        jxr = new JXR( packageManager, fileManager, Collections.singletonMap( "java", codeTransform ) );
         jxr.setDest( Paths.get( "target" ) );
         jxr.setInputEncoding( "ISO-8859-1" );
         jxr.setOutputEncoding( "ISO-8859-1" );
diff --git a/maven-jxr/src/test/java/org/apache/maven/jxr/JXR141Test.java b/maven-jxr/src/test/java/org/apache/maven/jxr/JXR141Test.java
index 9c9180f..1564b35 100644
--- a/maven-jxr/src/test/java/org/apache/maven/jxr/JXR141Test.java
+++ b/maven-jxr/src/test/java/org/apache/maven/jxr/JXR141Test.java
@@ -48,7 +48,7 @@ public class JXR141Test
         PackageManager packageManager = new PackageManager( fileManager );
         CodeTransformer codeTransform = new JavaCodeTransform( packageManager, fileManager );
         
-        jxr = new JXR( packageManager, Collections.singletonMap( "java", codeTransform ) );    
+        jxr = new JXR( packageManager, fileManager, Collections.singletonMap( "java", codeTransform ) );    
     }
     
     @Test
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 a186b62..a804f72 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
@@ -28,6 +28,8 @@ import java.nio.file.Paths;
 import java.util.Locale;
 
 import org.apache.maven.jxr.pacman.FileManager;
+import org.apache.maven.jxr.pacman.JavaFile;
+import org.apache.maven.jxr.pacman.JavaFileImpl;
 import org.apache.maven.jxr.pacman.PackageManager;
 import org.junit.Before;
 import org.junit.Test;
@@ -39,6 +41,8 @@ public class JavaCodeTransformTest
 {
     /** JavaCodeTransform object under test */
     private CodeTransformer codeTransform;
+    
+    private FileManager fileManager;
 
     /**
      * Set up this test.
@@ -46,7 +50,7 @@ public class JavaCodeTransformTest
     @Before
     public void setUp() throws Exception
     {
-        FileManager fileManager = new FileManager();
+        fileManager = new FileManager();
         codeTransform = new JavaCodeTransform( new PackageManager( fileManager ), fileManager);
     }
 
@@ -59,12 +63,13 @@ public class JavaCodeTransformTest
         throws Exception // single line despite /*
     {
         Path sourceFile = Paths.get( "src/test/java/org/apache/maven/jxr/JavaCodeTransformTest.java" );
+        JavaFile javaFile = new JavaFileImpl( sourceFile, "ISO-8859-1" );
         assertTrue( /* mid-line comment */ Files.exists( sourceFile ) ); /*
 
         multiline comment text
 
-        */ codeTransform.transform( sourceFile, Paths.get( "target/JavaCodeTransformTest.html" ) // additional comment
-           , Locale.ENGLISH, "ISO-8859-1", "ISO-8859-1", Paths.get( "." ), "" );
+        */ codeTransform.transform( javaFile, Paths.get( "target/JavaCodeTransformTest.html" ) // additional comment
+           , Locale.ENGLISH, "ISO-8859-1", Paths.get( "." ), "" );
         assertTrue( /**/ Files.exists( Paths.get( "target/JavaCodeTransformTest.html" ) ) );
     }
 
@@ -76,10 +81,11 @@ public class JavaCodeTransformTest
         throws Exception
     {
         Path sourceFile = Paths.get( "src/test/resources/EmptyClass.java" );
+        JavaFile javaFile = new JavaFileImpl( sourceFile, "ISO-8859-1" );
         assertTrue( Files.exists( sourceFile ) );
 
-        codeTransform.transform( sourceFile, Paths.get( "target/EmptyClass.html" )
-            , Locale.ENGLISH, "ISO-8859-1", "ISO-8859-1", Paths.get( "." ), "" );
+        codeTransform.transform( javaFile, Paths.get( "target/EmptyClass.html" )
+            , Locale.ENGLISH, "ISO-8859-1", Paths.get( "." ), "" );
         assertTrue( Files.exists( Paths.get( "target/EmptyClass.html" ) ) );
     }
 
@@ -91,10 +97,11 @@ public class JavaCodeTransformTest
         throws Exception
     {
         Path sourceFile = Paths.get( "src/test/resources/ClassWithLink.java" );
+        JavaFile javaFile = new JavaFileImpl( sourceFile, "ISO-8859-1" );
         assertTrue( Files.exists( sourceFile ) );
 
-        codeTransform.transform( sourceFile, Paths.get( "target/ClassWithLink.html" )
-            , Locale.ENGLISH, "ISO-8859-1", "ISO-8859-1", Paths.get( "." ), "" );
+        codeTransform.transform( javaFile, Paths.get( "target/ClassWithLink.html" )
+            , Locale.ENGLISH, "ISO-8859-1", Paths.get( "." ), "" );
         assertTrue( Files.exists( Paths.get( "target/ClassWithLink.html" ) ) );
 
         byte[] bytes = Files.readAllBytes( Paths.get( "target/ClassWithLink.html" ) );
diff --git a/maven-jxr/src/test/java/org/apache/maven/jxr/JxrBeanTest.java b/maven-jxr/src/test/java/org/apache/maven/jxr/JxrBeanTest.java
index 8ab6e21..6bc9efb 100644
--- a/maven-jxr/src/test/java/org/apache/maven/jxr/JxrBeanTest.java
+++ b/maven-jxr/src/test/java/org/apache/maven/jxr/JxrBeanTest.java
@@ -36,7 +36,7 @@ public class JxrBeanTest
     {   FileManager fileManager = new FileManager();
         PackageManager packageManager = new PackageManager( fileManager );
         CodeTransformer codeTransform = new JavaCodeTransform( packageManager, fileManager );
-        jxrBean = new JXR( packageManager, Collections.singletonMap( "java", codeTransform ) );
+        jxrBean = new JXR( packageManager, fileManager, Collections.singletonMap( "java", codeTransform ) );
         jxrBean.setDest( Paths.get( "target" ) );
         jxrBean.setInputEncoding( "ISO-8859-1" );
         jxrBean.setOutputEncoding( "ISO-8859-1" );