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 );
+ }
+}