Author: rfscholte
Date: Sun Oct 22 11:41:02 2017
New Revision: 1812898

URL: http://svn.apache.org/viewvc?rev=1812898&view=rev
Log:
Improve JDeprScanConsumer

Added:
    maven/plugins/trunk/maven-jdeprscan-plugin/src/test/
    maven/plugins/trunk/maven-jdeprscan-plugin/src/test/java/
    maven/plugins/trunk/maven-jdeprscan-plugin/src/test/java/org/
    maven/plugins/trunk/maven-jdeprscan-plugin/src/test/java/org/apache/
    maven/plugins/trunk/maven-jdeprscan-plugin/src/test/java/org/apache/maven/
    
maven/plugins/trunk/maven-jdeprscan-plugin/src/test/java/org/apache/maven/plugins/
    
maven/plugins/trunk/maven-jdeprscan-plugin/src/test/java/org/apache/maven/plugins/jdeprscan/
    
maven/plugins/trunk/maven-jdeprscan-plugin/src/test/java/org/apache/maven/plugins/jdeprscan/consumers/
    
maven/plugins/trunk/maven-jdeprscan-plugin/src/test/java/org/apache/maven/plugins/jdeprscan/consumers/JDeprScanConsumerTest.java
Modified:
    maven/plugins/trunk/maven-jdeprscan-plugin/   (props changed)
    
maven/plugins/trunk/maven-jdeprscan-plugin/src/it/projects/jdeprscan-release8/invoker.properties
    
maven/plugins/trunk/maven-jdeprscan-plugin/src/it/projects/jdeprscan-release9/invoker.properties
    
maven/plugins/trunk/maven-jdeprscan-plugin/src/main/java/org/apache/maven/plugins/jdeprscan/AbstractJDeprScanMojo.java
    
maven/plugins/trunk/maven-jdeprscan-plugin/src/main/java/org/apache/maven/plugins/jdeprscan/BaseJDeprScanMojo.java
    
maven/plugins/trunk/maven-jdeprscan-plugin/src/main/java/org/apache/maven/plugins/jdeprscan/consumers/JDeprScanConsumer.java

Propchange: maven/plugins/trunk/maven-jdeprscan-plugin/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Sun Oct 22 11:41:02 2017
@@ -0,0 +1,4 @@
+target
+.classpath
+.project
+.settings

Modified: 
maven/plugins/trunk/maven-jdeprscan-plugin/src/it/projects/jdeprscan-release8/invoker.properties
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-jdeprscan-plugin/src/it/projects/jdeprscan-release8/invoker.properties?rev=1812898&r1=1812897&r2=1812898&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-jdeprscan-plugin/src/it/projects/jdeprscan-release8/invoker.properties
 (original)
+++ 
maven/plugins/trunk/maven-jdeprscan-plugin/src/it/projects/jdeprscan-release8/invoker.properties
 Sun Oct 22 11:41:02 2017
@@ -14,4 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+invoker.buildResult = failure
 invoker.goals = verify
\ No newline at end of file

Modified: 
maven/plugins/trunk/maven-jdeprscan-plugin/src/it/projects/jdeprscan-release9/invoker.properties
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-jdeprscan-plugin/src/it/projects/jdeprscan-release9/invoker.properties?rev=1812898&r1=1812897&r2=1812898&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-jdeprscan-plugin/src/it/projects/jdeprscan-release9/invoker.properties
 (original)
+++ 
maven/plugins/trunk/maven-jdeprscan-plugin/src/it/projects/jdeprscan-release9/invoker.properties
 Sun Oct 22 11:41:02 2017
@@ -14,4 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+invoker.buildResult = failure
 invoker.goals = verify
\ No newline at end of file

Modified: 
maven/plugins/trunk/maven-jdeprscan-plugin/src/main/java/org/apache/maven/plugins/jdeprscan/AbstractJDeprScanMojo.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-jdeprscan-plugin/src/main/java/org/apache/maven/plugins/jdeprscan/AbstractJDeprScanMojo.java?rev=1812898&r1=1812897&r2=1812898&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-jdeprscan-plugin/src/main/java/org/apache/maven/plugins/jdeprscan/AbstractJDeprScanMojo.java
 (original)
+++ 
maven/plugins/trunk/maven-jdeprscan-plugin/src/main/java/org/apache/maven/plugins/jdeprscan/AbstractJDeprScanMojo.java
 Sun Oct 22 11:41:02 2017
@@ -35,7 +35,6 @@ import org.apache.maven.plugin.MojoExecu
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.Component;
 import org.apache.maven.plugins.annotations.Parameter;
-import org.apache.maven.plugins.jdeprscan.consumers.JDeprScanConsumer;
 import org.apache.maven.toolchain.Toolchain;
 import org.apache.maven.toolchain.ToolchainManager;
 import org.codehaus.plexus.util.StringUtils;
@@ -55,9 +54,6 @@ public abstract class AbstractJDeprScanM
     @Parameter( defaultValue = "${session}", readonly = true, required = true )
     private MavenSession session;
     
-    
-    @Parameter()
-
     @Component
     private ToolchainManager toolchainManager;
 
@@ -82,7 +78,18 @@ public abstract class AbstractJDeprScanM
 
         addJDeprScanOptions( cmd );
 
-        executeJDeprScanCommandLine( cmd, new JDeprScanConsumer() );
+        executeJDeprScanCommandLine( cmd, getConsumer() );
+        
+        verify();
+    }
+    
+    protected CommandLineUtils.StringStreamConsumer getConsumer()
+    {
+      return null;    
+    }
+    
+    protected void verify() throws MojoExecutionException
+    {
     }
     
     protected abstract boolean isForRemoval();
@@ -192,13 +199,13 @@ public abstract class AbstractJDeprScanM
 
             String output = ( StringUtils.isEmpty( out.getOutput() ) ? null : 
'\n' + out.getOutput().trim() );
 
-            if ( exitCode != 0 )
+            if ( StringUtils.isNotEmpty( output ) )
             {
-                if ( StringUtils.isNotEmpty( output ) )
-                {
-                    getLog().info( output );
-                }
+                getLog().info( output );
+            }
 
+            if ( exitCode != 0 )
+            {
                 StringBuilder msg = new StringBuilder( "\nExit code: " );
                 msg.append( exitCode );
                 if ( StringUtils.isNotEmpty( err.getOutput() ) )
@@ -211,10 +218,6 @@ public abstract class AbstractJDeprScanM
                 throw new MojoExecutionException( msg.toString() );
             }
 
-            if ( StringUtils.isNotEmpty( output ) )
-            {
-                getLog().info( output );
-            }
         }
         catch ( CommandLineException e )
         {

Modified: 
maven/plugins/trunk/maven-jdeprscan-plugin/src/main/java/org/apache/maven/plugins/jdeprscan/BaseJDeprScanMojo.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-jdeprscan-plugin/src/main/java/org/apache/maven/plugins/jdeprscan/BaseJDeprScanMojo.java?rev=1812898&r1=1812897&r2=1812898&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-jdeprscan-plugin/src/main/java/org/apache/maven/plugins/jdeprscan/BaseJDeprScanMojo.java
 (original)
+++ 
maven/plugins/trunk/maven-jdeprscan-plugin/src/main/java/org/apache/maven/plugins/jdeprscan/BaseJDeprScanMojo.java
 Sun Oct 22 11:41:02 2017
@@ -23,15 +23,19 @@ import java.io.File;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
 
 import org.apache.maven.artifact.DependencyResolutionRequiredException;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 
 import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.plugins.jdeprscan.consumers.JDeprScanConsumer;
 import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.cli.Commandline;
+import org.codehaus.plexus.util.cli.CommandLineUtils.StringStreamConsumer;
 
 /**
  * Base class for all explicit jdeprscan mojos
@@ -63,13 +67,15 @@ public abstract class BaseJDeprScanMojo
     @Parameter
     private String release;
     
+    private JDeprScanConsumer consumer = new JDeprScanConsumer();
+    
     @Override
     public void execute()
         throws MojoExecutionException, MojoFailureException
     {
         if ( !Files.exists( getClassesDirectory() ) )
         {
-            getLog().debug( "No classes to analyze" );
+            getLog().debug( "No classes to scan" );
             return;
         }
         super.execute();
@@ -87,6 +93,12 @@ public abstract class BaseJDeprScanMojo
     }
     
     @Override
+    protected StringStreamConsumer getConsumer()
+    {
+        return consumer;
+    }
+    
+    @Override
     protected final void addJDeprScanOptions( Commandline cmd ) throws 
MojoFailureException
     {
         super.addJDeprScanOptions( cmd );
@@ -117,7 +129,46 @@ public abstract class BaseJDeprScanMojo
         
         cmd.createArg().setFile( getClassesDirectory().toFile() );
     }
-    
+
+    @Override
+    protected void verify() throws MojoExecutionException
+    {
+        if ( !( consumer.getDeprecatedClasses().isEmpty() && 
consumer.getDeprecatedMethods().isEmpty() ) )
+        {
+            if ( !consumer.getDeprecatedClasses().isEmpty() )
+            {
+                getLog().warn( "Found usage of deprecated classes:" );
+                
+                for ( Map.Entry<String, Set<String>> classes : 
consumer.getDeprecatedClasses().entrySet() )
+                {
+                    getLog().warn( "class " + classes.getKey() + " uses 
deprecated class(es)" );
+                    for ( String deprClass : classes.getValue() )
+                    {
+                        getLog().warn( "  * " + deprClass );
+                    }
+                }
+            }
+            
+            if ( !consumer.getDeprecatedMethods().isEmpty() )
+            {
+                getLog().warn( "Found usage of deprecated methods:" );
+                
+                for ( Map.Entry<String, Set<String>> classes : 
consumer.getDeprecatedMethods().entrySet() )
+                {
+                    getLog().warn( "class " + classes.getKey() + " uses 
deprecated method(s)" );
+                    for ( String deprMethod : classes.getValue() )
+                    {
+                        getLog().warn( "  * " + deprMethod );
+                    }
+                }
+            }
+            
+            if ( failOnWarning )
+            {
+                throw new MojoExecutionException( "JDeprScan detected usage of 
deprecated classes/methods" );
+            }
+        }
+    }
 
     protected abstract Path getClassesDirectory();
     

Modified: 
maven/plugins/trunk/maven-jdeprscan-plugin/src/main/java/org/apache/maven/plugins/jdeprscan/consumers/JDeprScanConsumer.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-jdeprscan-plugin/src/main/java/org/apache/maven/plugins/jdeprscan/consumers/JDeprScanConsumer.java?rev=1812898&r1=1812897&r2=1812898&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-jdeprscan-plugin/src/main/java/org/apache/maven/plugins/jdeprscan/consumers/JDeprScanConsumer.java
 (original)
+++ 
maven/plugins/trunk/maven-jdeprscan-plugin/src/main/java/org/apache/maven/plugins/jdeprscan/consumers/JDeprScanConsumer.java
 Sun Oct 22 11:41:02 2017
@@ -19,6 +19,13 @@ package org.apache.maven.plugins.jdeprsc
  * under the License.
  */
 
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
 import org.codehaus.plexus.util.cli.CommandLineUtils;
 import org.codehaus.plexus.util.cli.StreamConsumer;
 
@@ -33,4 +40,55 @@ public class JDeprScanConsumer
     implements StreamConsumer
 {
 
+    private Map<String, Set<String>> deprecatedClasses = new HashMap<>();
+
+    private Map<String, Set<String>> deprecatedMethods = new HashMap<>();
+
+    public static final Pattern DEPRECATED_CLASS = Pattern.compile( "^class 
(\\S+) uses deprecated class (\\S+)" );
+
+    public static final Pattern DEPRECATED_METHOD = Pattern.compile( "^class 
(\\S+) uses deprecated method (\\S+)" );
+
+    public Map<String, Set<String>> getDeprecatedClasses()
+    {
+        return deprecatedClasses;
+    }
+    
+    public Map<String, Set<String>> getDeprecatedMethods()
+    {
+        return deprecatedMethods;
+    }
+    
+    @Override
+    public void consumeLine( String line )
+    {
+        super.consumeLine( line );
+
+        Matcher matcher;
+        
+        matcher = DEPRECATED_CLASS.matcher( line );
+        if ( matcher.find() )
+        {
+            Set<String> dc = deprecatedClasses.get( matcher.group( 1 ) );
+            if ( dc == null )
+            {
+                dc = new HashSet<>();
+                deprecatedClasses.put( matcher.group( 1 ), dc );
+            }
+            dc.add( matcher.group( 2 ) );
+            return;
+        }
+        
+        matcher = DEPRECATED_METHOD.matcher( line );
+        if ( matcher.find() )
+        {
+            Set<String> dm = deprecatedMethods.get( matcher.group( 1 ) );
+            if ( dm == null )
+            {
+                dm = new HashSet<>();
+                deprecatedMethods.put( matcher.group( 1 ), dm );
+            }
+            dm.add( matcher.group( 2 ) );
+            return;
+        }
+    }
 }

Added: 
maven/plugins/trunk/maven-jdeprscan-plugin/src/test/java/org/apache/maven/plugins/jdeprscan/consumers/JDeprScanConsumerTest.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-jdeprscan-plugin/src/test/java/org/apache/maven/plugins/jdeprscan/consumers/JDeprScanConsumerTest.java?rev=1812898&view=auto
==============================================================================
--- 
maven/plugins/trunk/maven-jdeprscan-plugin/src/test/java/org/apache/maven/plugins/jdeprscan/consumers/JDeprScanConsumerTest.java
 (added)
+++ 
maven/plugins/trunk/maven-jdeprscan-plugin/src/test/java/org/apache/maven/plugins/jdeprscan/consumers/JDeprScanConsumerTest.java
 Sun Oct 22 11:41:02 2017
@@ -0,0 +1,63 @@
+package org.apache.maven.plugins.jdeprscan.consumers;
+
+/*
+ * 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.
+ */
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Collections;
+import java.util.Set;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class JDeprScanConsumerTest
+{
+    private JDeprScanConsumer consumer;
+    
+    @Before
+    public void setUp()
+    {
+        consumer = new JDeprScanConsumer();
+    }
+
+    @Test
+    public void testDeprecatedClass()
+    {
+        consumer.consumeLine( "class o/a/m/p/j/its/Deprecations uses 
deprecated class java/rmi/RMISecurityManager " );
+        
+        assertEquals( consumer.getDeprecatedClasses().size(), 1 );
+        assertEquals( consumer.getDeprecatedMethods().size(), 0 );
+        
+        Set<String> classes = consumer.getDeprecatedClasses().get( 
"o/a/m/p/j/its/Deprecations" );
+        assertEquals( Collections.singleton( "java/rmi/RMISecurityManager" ), 
classes );
+    }
+
+    @Test
+    public void testDeprecatedMethod()
+    {
+        consumer.consumeLine( "class o/a/m/p/j/its/Deprecations uses 
deprecated method java/lang/Boolean::<init>(Z)V" );
+        
+        assertEquals( consumer.getDeprecatedClasses().size(), 0 );
+        assertEquals( consumer.getDeprecatedMethods().size(), 1 );
+        
+        Set<String> methods = consumer.getDeprecatedMethods().get( 
"o/a/m/p/j/its/Deprecations" );
+        assertEquals( Collections.singleton( "java/lang/Boolean::<init>(Z)V" 
), methods );
+    }
+}


Reply via email to