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 2019/07/05 13:24:26 UTC

[maven-jxr] branch JXR-145 created (now ee3219f)

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

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


      at ee3219f  [JXR-145] Support custom codetransformers

This branch includes the following new commits:

     new ee3219f  [JXR-145] Support custom codetransformers

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[maven-jxr] 01/01: [JXR-145] Support custom codetransformers

Posted by rf...@apache.org.
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 ee3219f57550a5f81e97f43ac12d59698f9a0375
Author: rfscholte <rf...@apache.org>
AuthorDate: Fri Jul 5 15:24:17 2019 +0200

    [JXR-145] Support custom codetransformers
---
 .../apache/maven/plugin/jxr/AbstractJxrReport.java |   1 -
 .../org/apache/maven/plugin/jxr/JxrReport.html     |   2 +-
 .../src/main/java/org/apache/maven/jxr/JXR.java    | 119 +++++++++------------
 .../org/apache/maven/jxr/JavaCodeTransform.java    |  97 ++++++++---------
 .../apache/maven/jxr/JavaCodeTransformTest.java    |   8 +-
 5 files changed, 101 insertions(+), 126 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 2f6586a..678a0e8 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
@@ -277,7 +277,6 @@ public abstract class AbstractJxrReport
         jxr.setInputEncoding( inputEncoding );
         jxr.setLocale( locale );
         jxr.setOutputEncoding( getOutputEncoding() );
-        jxr.setRevision( "HEAD" );
         jxr.setJavadocLinkDir( getJavadocLocation() );
         // Set include/exclude patterns on the jxr instance
         if ( excludes != null && !excludes.isEmpty() )
diff --git a/maven-jxr-plugin/src/site/resources/example/xref/org/apache/maven/plugin/jxr/JxrReport.html b/maven-jxr-plugin/src/site/resources/example/xref/org/apache/maven/plugin/jxr/JxrReport.html
index 2e228e7..6adf638 100644
--- a/maven-jxr-plugin/src/site/resources/example/xref/org/apache/maven/plugin/jxr/JxrReport.html
+++ b/maven-jxr-plugin/src/site/resources/example/xref/org/apache/maven/plugin/jxr/JxrReport.html
@@ -394,7 +394,7 @@ under the License.
 <a name="366" href="#366">366</a>         jxr.setLocale( locale );
 <a name="367" href="#367">367</a>         jxr.setLog( <strong>new</strong> PluginLogAdapter( getLog() ) );
 <a name="368" href="#368">368</a>         jxr.setOutputEncoding( outputEncoding );
-<a name="369" href="#369">369</a>         jxr.setRevision( <span class="string">"HEAD"</span> );
+<a name="369" href="#369">369</a>
 <a name="370" href="#370">370</a> 
 <a name="371" href="#371">371</a>         jxr.xref( sourceDirs, templateDir, windowTitle, docTitle, bottom );
 <a name="372" href="#372">372</a> 
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 a719ff0..54bb576 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
@@ -27,8 +27,12 @@ import org.codehaus.plexus.logging.AbstractLogEnabled;
 import java.io.IOException;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
 
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -52,14 +56,9 @@ public class JXR extends AbstractLogEnabled
      * the eye!" :)
      */
     @Inject
-    private JavaCodeTransform transformer;
+    private Map<String, CodeTransformer> transformers;
     
     /**
-     * The default list of include patterns to use.
-     */
-    private static final String[] DEFAULT_INCLUDES = { "**/*.java" };
-
-    /**
      * Path to destination.
      */
     private Path destDir;
@@ -75,21 +74,15 @@ public class JXR extends AbstractLogEnabled
      */
     private Path javadocLinkDir;
 
-
-    /**
-     * The revision of the module currently being processed.
-     */
-    private String revision;
-
     /**
      * The list of exclude patterns to use.
      */
-    private String[] excludes = null;
+    private String[] excludes;
 
     /**
      * The list of include patterns to use.
      */
-    private String[] includes = DEFAULT_INCLUDES;
+    private String[] includes;
 
     /**
      * Now that we have instantiated everything. Process this JXR task.
@@ -102,53 +95,67 @@ public class JXR extends AbstractLogEnabled
     public void processPath( PackageManager packageManager, Path sourceDir, String bottom )
         throws IOException
     {
+        
         DirectoryScanner ds = new DirectoryScanner();
         // I'm not sure why we don't use the directoryScanner in packageManager,
         // but since we don't we need to set includes/excludes here as well
         ds.setExcludes( excludes );
-        ds.setIncludes( includes );
+        if ( includes != null )
+        {
+            ds.setIncludes( includes );
+        }
+        else
+        {
+            Set<String> transformerIncludes = new HashSet<>();
+            for ( CodeTransformer transformer: transformers.values() )
+            {
+               transformerIncludes.addAll( transformer.getDefaultIncludes() ); 
+            }
+            ds.setIncludes( transformerIncludes.toArray( new String[0] ) );
+        }
         ds.addDefaultExcludes();
 
         ds.setBasedir( sourceDir.toString() );
         ds.scan();
 
         //now get the list of included files
-
         String[] files = ds.getIncludedFiles();
-
+        
+        Map<String, CodeTransformer> transformerForExtension = new HashMap<>();
+        
         for ( String file : files )
         {
             Path sourceFile = sourceDir.resolve( file );
+            
+            String fileExtension = getExtension( sourceFile );
 
-            if ( isJavaFile( sourceFile.toString() ) )
+            CodeTransformer transformer = transformerForExtension.get( fileExtension );
+            if ( !transformerForExtension.containsKey( fileExtension ) )
+            {
+                for ( CodeTransformer ct : transformers.values() )
+                {
+                    if ( ct.canTransform( fileExtension ) )
+                    {
+                        transformer = ct;
+                        break;
+                    }
+                }
+                transformerForExtension.put( fileExtension, transformer );
+            }
+            
+            if ( transformer != null )
             {
-                String newFileName = file.replaceFirst( ".java$", ".html" );
+                String newFileName = file.replaceFirst( fileExtension + '$', ".html" );
                 
-                transform( sourceFile, this.destDir.resolve( newFileName ), bottom );
+                transform( transformer, sourceFile, this.destDir.resolve( newFileName ), bottom );
             }
         }
     }
-
-    /**
-     * Check to see if the file is a Java source file.
-     *
-     * @param filename The name of the file to check
-     * @return <code>true</code> if the file is a Java file
-     */
-    public static boolean isJavaFile( String filename )
-    {
-        return filename.endsWith( ".java" );
-    }
-
-    /**
-     * Check to see if the file is an HTML file.
-     *
-     * @param filename The name of the file to check
-     * @return <code>true</code> if the file is an HTML file
-     */
-    public static boolean isHtmlFile( String filename )
+    
+    private String getExtension( Path file ) 
     {
-        return filename.endsWith( ".html" );
+        String fileName = file.getFileName().toString(); 
+        return fileName.substring( fileName.indexOf( '.' ) );
     }
 
     /**
@@ -193,22 +200,6 @@ public class JXR extends AbstractLogEnabled
     }
 
     /**
-     * @param transformer
-     */
-    public void setTransformer( JavaCodeTransform transformer )
-    {
-        this.transformer = transformer;
-    }
-
-    /**
-     * @param revision
-     */
-    public void setRevision( String revision )
-    {
-        this.revision = revision;
-    }
-
-    /**
      * @param sourceDirs
      * @param templateDir
      * @param windowTitle
@@ -260,15 +251,14 @@ public class JXR extends AbstractLogEnabled
      * @param bottom The bottom footer text just as in the package pages
      * @throws IOException Thrown if the transform can't happen for some reason.
      */
-    private void transform( Path sourceFile, Path destFile, String bottom )
+    private void transform( CodeTransformer transformer, Path sourceFile, Path destFile, String bottom )
         throws IOException
     {
         getLogger().debug( sourceFile + " -> " + destFile );
 
         // get a relative link to the javadocs
         Path javadoc = javadocLinkDir != null ? getRelativeLink( destFile.getParent(), javadocLinkDir ) : null;
-        transformer.transform( sourceFile, destFile, locale, inputEncoding, outputEncoding, javadoc,
-            this.revision, bottom );
+        transformer.transform( sourceFile, destFile, locale, inputEncoding, outputEncoding, javadoc, bottom );
     }
 
     /**
@@ -294,17 +284,8 @@ public class JXR extends AbstractLogEnabled
         this.excludes = excludes;
     }
 
-
     public void setIncludes( String[] includes )
     {
-        if ( includes == null )
-        {
-            // We should not include non-java files, so we use a sensible default pattern
-            this.includes = DEFAULT_INCLUDES;
-        }
-        else
-        {
-            this.includes = includes;
-        }
+        this.includes = includes;
     }
 }
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 106280f..fb856c6 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,5 +1,33 @@
 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
@@ -40,34 +68,6 @@ import org.apache.maven.jxr.pacman.PackageType;
 import org.apache.maven.jxr.util.SimpleWordTokenizer;
 import org.apache.maven.jxr.util.StringEntry;
 
-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;
-
 /**
  * Syntax highlights java by turning it into html. A codeviewer object is created and then keeps state as lines are
  * passed in. Each line passed in as java test, is returned as syntax highlighted html text. Users of the class can set
@@ -95,10 +95,10 @@ import javax.inject.Singleton;
  *                                  importFilter
  * </pre>
  */
-@Named
+@Named( "java" )
 @Singleton
 public class JavaCodeTransform
-    implements Serializable
+    implements Serializable, CodeTransformer
 {
     // ----------------------------------------------------------------------
     // public fields
@@ -191,11 +191,6 @@ public class JavaCodeTransform
     private Path currentFilename = null;
 
     /**
-     * The current CVS revision of the currently transformed document
-     */
-    private String revision = null;
-
-    /**
      * The input encoding
      */
     private String inputEncoding = null;
@@ -285,6 +280,18 @@ public class JavaCodeTransform
         reservedWords.put( "implements", "implements" );
     }
 
+    @Override
+    public boolean canTransform( String fileExtension )
+    {
+        return ".java".equals( fileExtension );
+    }
+    
+    @Override
+    public Set<String> getDefaultIncludes()
+    {
+        return Collections.singleton( "**/*.java" );
+    }
+    
     // ----------------------------------------------------------------------
     // public methods
     // ----------------------------------------------------------------------
@@ -393,19 +400,17 @@ public class JavaCodeTransform
      * @param inputEncoding String
      * @param outputEncoding String
      * @param javadocLinkDir String
-     * @param revision String
      * @param bottom string
      * @throws IOException
      */
     private void transform( Reader sourceReader, Writer destWriter, Locale locale, String inputEncoding,
-                                 String outputEncoding, Path javadocLinkDir, String revision, String bottom )
+                                 String outputEncoding, Path javadocLinkDir, String bottom )
         throws IOException
     {
         this.locale = locale;
         this.inputEncoding = inputEncoding;
         this.outputEncoding = outputEncoding;
         this.javadocLinkDir = javadocLinkDir;
-        this.revision = revision;
 
         BufferedReader in = new BufferedReader( sourceReader );
 
@@ -443,12 +448,12 @@ public class JavaCodeTransform
      * @param inputEncoding String
      * @param outputEncoding String
      * @param javadocLinkDir String
-     * @param revision String
      * @param bottom TODO
      * @throws IOException
      */
+    @Override
     public final void transform( Path sourcefile, Path destfile, Locale locale, String inputEncoding,
-                                 String outputEncoding, Path javadocLinkDir, String revision, String bottom )
+                                 String outputEncoding, Path javadocLinkDir, String bottom )
         throws IOException
     {
         this.setCurrentFilename( sourcefile );
@@ -458,7 +463,7 @@ public class JavaCodeTransform
 
         try ( Reader fr = getReader( sourcefile, inputEncoding ); Writer fw = getWriter( destfile, outputEncoding ) )
         {
-            transform( fr, fw, locale, inputEncoding, outputEncoding, javadocLinkDir, revision, bottom );
+            transform( fr, fw, locale, inputEncoding, outputEncoding, javadocLinkDir, bottom );
         }
         catch ( RuntimeException e )
         {
@@ -606,16 +611,6 @@ public class JavaCodeTransform
     }
 
     /**
-     * The current revision of the CVS module
-     *
-     * @return String
-     */
-    public final String getRevision()
-    {
-        return this.revision;
-    }
-
-    /**
      * Cross Reference the given line with JXR returning the new content.
      *
      * @param line String
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 1b1f37c..52e9d86 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
@@ -34,7 +34,7 @@ import org.codehaus.plexus.PlexusTestCase;
 public class JavaCodeTransformTest extends PlexusTestCase
 {
     /** JavaCodeTransform object under test */
-    private JavaCodeTransform codeTransform;
+    private CodeTransformer codeTransform;
 
     @Override
     protected void customizeContainerConfiguration( ContainerConfiguration configuration )
@@ -65,7 +65,7 @@ public class JavaCodeTransformTest extends PlexusTestCase
         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( "." ), "" );
         assertTrue( /**/ Files.exists( Paths.get( "target/JavaCodeTransformTest.html" ) ) );
     }
 
@@ -79,7 +79,7 @@ public class JavaCodeTransformTest extends PlexusTestCase
         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( "." ), "" );
         assertTrue( Files.exists( Paths.get( "target/EmptyClass.html" ) ) );
     }
 
@@ -93,7 +93,7 @@ public class JavaCodeTransformTest extends PlexusTestCase
         assertTrue( Files.exists( sourceFile ) );
 
         codeTransform.transform( sourceFile, Paths.get( "target/ClassWithLink.html" )
-            , Locale.ENGLISH, "ISO-8859-1", "ISO-8859-1", Paths.get( "." ), "", "" );
+            , Locale.ENGLISH, "ISO-8859-1", "ISO-8859-1", Paths.get( "." ), "" );
         assertTrue( Files.exists( Paths.get( "target/ClassWithLink.html" ) ) );
 
         byte[] bytes = Files.readAllBytes( Paths.get( "target/ClassWithLink.html" ) );