diff --git a/README.md b/README.md
index 59f164f..69f1cd3 100644
--- a/README.md
+++ b/README.md
@@ -30,6 +30,7 @@ This plugin was born as the 'alter ego' of maven apt plugin [apt-maven-plugin](h
Date | Version | Info
--- | --- | ---
+**Oct 01, 2020** | [Release 4.4](https://github.com/bsorrentino/maven-annotation-plugin/releases/tag/v4.4) | merge PR #87. Thanks to [Martijn Dashorst](https://github.com/dashorst)
**Sep 25, 2020** | [Release 4.3](https://github.com/bsorrentino/maven-annotation-plugin/releases/tag/v4.3) | merge PR #85. Thanks to [Martijn Dashorst](https://github.com/dashorst)
**Aug 03, 2020** | [Release 4.2](https://github.com/bsorrentino/maven-annotation-plugin/releases/tag/v4.2) | merge PR #84. Thanks to [DemonicTutor](https://github.com/DemonicTutor)
**Aug 03, 2020** | [Release 4.2-jdk8](https://github.com/bsorrentino/maven-annotation-plugin/releases/tag/v4.2-jdk8) | merge PR #84. Thanks to [DemonicTutor](https://github.com/DemonicTutor)
diff --git a/pom.xml b/pom.xml
index 230cc9c..43a4dde 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
org.bsc.maven
maven-processor-plugin-parent
pom
- 4.3
+ 4.4
MAVEN PROCESSOR PLUGIN PARENT
A maven plugin to process annotation for jdk6 at compile time
diff --git a/processor/pom.xml b/processor/pom.xml
index b798483..610734c 100644
--- a/processor/pom.xml
+++ b/processor/pom.xml
@@ -13,7 +13,7 @@ This plugin could be considered the 'alter ego' of maven apt plugin http://mojo.
org.bsc.maven
maven-processor-plugin-parent
- 4.3
+ 4.4
diff --git a/processor/src/main/java/org/bsc/maven/plugin/processor/AbstractAnnotationProcessorMojo.java b/processor/src/main/java/org/bsc/maven/plugin/processor/AbstractAnnotationProcessorMojo.java
index e74f954..0002bc7 100644
--- a/processor/src/main/java/org/bsc/maven/plugin/processor/AbstractAnnotationProcessorMojo.java
+++ b/processor/src/main/java/org/bsc/maven/plugin/processor/AbstractAnnotationProcessorMojo.java
@@ -64,6 +64,7 @@
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.function.Consumer;
+import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
@@ -80,7 +81,9 @@
import org.sonatype.aether.util.artifact.DefaultArtifact;
*/
// 3.1.0
+import static java.lang.String.format;
import static java.util.Optional.ofNullable;
+import static java.util.stream.Collectors.joining;
/**
@@ -419,7 +422,7 @@ private String buildModulePath()
return getClasspathElements(new java.util.LinkedHashSet<>())
.stream()
- .collect(Collectors.joining( File.pathSeparator) );
+ .collect(joining( File.pathSeparator) );
}
/**
@@ -564,7 +567,7 @@ private List prepareOptions( JavaCompiler compiler ) {
if( getLog().isDebugEnabled() ) {
for (String option : options) {
- getLog().debug(String.format("javac option: %s", option));
+ getLog().debug(format("javac option: %s", option));
}
}
@@ -573,7 +576,13 @@ private List prepareOptions( JavaCompiler compiler ) {
}
private boolean isSourcesUnchanged( List allSources ) throws IOException {
- long maxSourceDate = allSources.stream().map(JavaFileObject::getLastModified).max(Long::compare).get();
+ if (!areSourceFilesSameAsPreviousRun(allSources))
+ return false;
+
+ long maxSourceDate = allSources.stream()
+ .map(JavaFileObject::getLastModified)
+ .max(Long::compare)
+ .orElse(Long.MIN_VALUE);
// use atomic long for effectively final wrapper around long variable
final AtomicLong maxOutputDate = new AtomicLong(Long.MIN_VALUE);
@@ -596,7 +605,41 @@ private boolean isSourcesUnchanged( List allSources ) throws IOE
}
return maxSourceDate <= maxOutputDate.get();
+ }
+ /**
+ * Checks the list of {@code allSources} against the stored list of source files in a previous run.
+ *
+ * @param allSources
+ * @return {@code true} when the filenames of the previous run matches exactly with the current run.
+ * @throws IOException
+ */
+ private boolean areSourceFilesSameAsPreviousRun(List allSources) throws IOException {
+ Path sourceFileList = outputDirectory.toPath().resolve(".maven-processor-source-files.txt");
+ try {
+ if (!Files.exists(sourceFileList)) {
+ getLog().debug("File with previous sources " + sourceFileList + " not found, treating as first run");
+ return false;
+ }
+
+ Set previousSourceFiles = new HashSet<>(Files.readAllLines(sourceFileList));
+ Set currentSourceFiles = allSources.stream().map(JavaFileObject::getName).collect(Collectors.toSet());
+ if (getLog().isDebugEnabled()) {
+ final String removedSourceFiles = previousSourceFiles.stream()
+ .filter(f -> !currentSourceFiles.contains(f))
+ .collect(joining("\n"));
+ getLog().debug(format("removed source files:\n%s", removedSourceFiles));
+
+ final String newSourceFiles = currentSourceFiles.stream()
+ .filter(f -> !previousSourceFiles.contains(f))
+ .collect(joining("\n"));
+ getLog().debug(format("new source files:\n%s", newSourceFiles));
+ }
+ return previousSourceFiles.equals(currentSourceFiles);
+ } finally {
+ outputDirectory.mkdirs();
+ Files.write(sourceFileList, allSources.stream().map(JavaFileObject::getName).collect(Collectors.toSet()));
+ }
}
private void executeWithExceptionsHandled() throws Exception
@@ -644,14 +687,14 @@ private void executeWithExceptionsHandled() throws Exception
continue;
}
- getLog().debug( String.format( "processing source directory [%s]", sourceDir.getPath()) );
+ getLog().debug( format( "processing source directory [%s]", sourceDir.getPath()) );
if( !sourceDir.exists() ) {
- getLog().warn( String.format("source directory [%s] doesn't exist! Processor task will be skipped!", sourceDir.getPath()));
+ getLog().warn( format("source directory [%s] doesn't exist! Processor task will be skipped!", sourceDir.getPath()));
continue;
}
if( !sourceDir.isDirectory() ) {
- getLog().warn( String.format("source directory [%s] is invalid! Processor task will be skipped!", sourceDir.getPath()));
+ getLog().warn( format("source directory [%s] is invalid! Processor task will be skipped!", sourceDir.getPath()));
continue;
}
@@ -669,17 +712,17 @@ private void executeWithExceptionsHandled() throws Exception
if (null != kind)
switch (kind) {
case ERROR:
- getLog().error(String.format("diagnostic: %s", diagnostic));
+ getLog().error(format("diagnostic: %s", diagnostic));
break;
case MANDATORY_WARNING:
case WARNING:
- getLog().warn(String.format("diagnostic: %s", diagnostic));
+ getLog().warn(format("diagnostic: %s", diagnostic));
break;
case NOTE:
- getLog().info(String.format("diagnostic: %s", diagnostic));
+ getLog().info(format("diagnostic: %s", diagnostic));
break;
case OTHER:
- getLog().info(String.format("diagnostic: %s", diagnostic));
+ getLog().info(format("diagnostic: %s", diagnostic));
break;
default:
break;
@@ -691,7 +734,7 @@ private void executeWithExceptionsHandled() throws Exception
java.util.Set< Map.Entry> pSet = systemProperties.entrySet();
for ( Map.Entry e : pSet ) {
- getLog().debug( String.format("set system property : [%s] = [%s]", e.getKey(), e.getValue() ));
+ getLog().debug( format("set system property : [%s] = [%s]", e.getKey(), e.getValue() ));
System.setProperty(e.getKey(), e.getValue());
}
@@ -721,10 +764,10 @@ private void executeWithExceptionsHandled() throws Exception
}
}
- getLog().debug(String.format("** Discovered %d java sources in %s", sourceCount, f.getAbsolutePath()));
+ getLog().debug(format("** Discovered %d java sources in %s", sourceCount, f.getAbsolutePath()));
} catch (Exception ex) {
- getLog().warn(String.format("Problem reading source archive [%s]", artifact.getFile().getPath()));
+ getLog().warn(format("Problem reading source archive [%s]", artifact.getFile().getPath()));
getLog().debug(ex);
}
});
@@ -768,11 +811,11 @@ private void executeWithExceptionsHandled() throws Exception
charset = Charset.forName(encoding);
}
catch( IllegalCharsetNameException ex1 ) {
- getLog().warn( String.format("the given charset name [%s] is illegal!. default is used", encoding ));
+ getLog().warn( format("the given charset name [%s] is illegal!. default is used", encoding ));
charset = null;
}
catch( UnsupportedCharsetException ex2 ) {
- getLog().warn( String.format("the given charset name [%s] is unsupported!. default is used", encoding ));
+ getLog().warn( format("the given charset name [%s] is unsupported!. default is used", encoding ));
charset = null;
}
}
@@ -857,7 +900,7 @@ private void addCompilerArguments(List options) {
for (String arg : compilerArguments.split(" ")) {
if (!StringUtils.isEmpty(arg)) {
arg = arg.trim();
- getLog().debug(String.format("Adding compiler arg: %s", arg));
+ getLog().debug(format("Adding compiler arg: %s", arg));
options.add(arg);
}
}
@@ -866,9 +909,9 @@ private void addCompilerArguments(List options) {
for( java.util.Map.Entry e : optionMap.entrySet() ) {
if( !StringUtils.isEmpty(e.getKey()) && e.getValue()!=null ) {
- String opt = String.format("-A%s=%s", e.getKey().trim(), e.getValue().toString().trim());
+ String opt = format("-A%s=%s", e.getKey().trim(), e.getValue().toString().trim());
options.add( opt );
- getLog().debug(String.format("Adding compiler arg: %s", opt));
+ getLog().debug(format("Adding compiler arg: %s", opt));
}
}
@@ -879,7 +922,7 @@ private void addOutputToSourcesIfNeeded()
{
final Boolean add = addOutputDirectoryToCompilationSources;
if (add == null || add.booleanValue()) {
- getLog().debug(String.format("Source directory: %s added", outputDirectory));
+ getLog().debug(format("Source directory: %s added", outputDirectory));
addCompileSourceRoot(project, outputDirectory.getAbsolutePath());
}
}
@@ -950,7 +993,7 @@ private Artifact resolveSourceArtifact( Artifact dep ) throws ArtifactResolution
request.setArtifact( artifact );
request.setRepositories(remoteRepos);
- getLog().debug( String.format("Resolving artifact %s from %s", artifact, remoteRepos ));
+ getLog().debug( format("Resolving artifact %s from %s", artifact, remoteRepos ));
final ArtifactResult result = repoSystem.resolveArtifact( repoSession, request );
@@ -976,7 +1019,7 @@ private void processSourceArtifacts( Consumer closure ) {
}
} catch (ArtifactResolutionException ex) {
- getLog().warn( String.format(" sources for artifact [%s] not found!", dep.toString()));
+ getLog().warn( format(" sources for artifact [%s] not found!", dep.toString()));
getLog().debug(ex);
}
diff --git a/test/pom.xml b/test/pom.xml
index 29ffc4b..89b26e6 100644
--- a/test/pom.xml
+++ b/test/pom.xml
@@ -11,7 +11,7 @@
org.bsc.maven
maven-processor-plugin-parent
- 4.3
+ 4.4
@@ -76,7 +76,7 @@ PROCESSOR PLUGIN
false
- org.bsc.maven.plugin.processor.test.TESTWikiProcessor
+ org.bsc.maven.plugin.processor.test.TestWikiProcessor
@@ -99,17 +99,12 @@ PROCESSOR PLUGIN
- ${basedir}/src/main/java
-
false
+ true
- org.bsc.maven.plugin.processor.test.TESTWikiProcessor
-
+ org.bsc.maven.plugin.processor.test.TestWikiProcessor
diff --git a/test/src/main/java/org/bsc/maven/plugin/processor/test/TESTWikiProcessor.java b/test/src/main/java/org/bsc/maven/plugin/processor/test/TestWikiProcessor.java
similarity index 97%
rename from test/src/main/java/org/bsc/maven/plugin/processor/test/TESTWikiProcessor.java
rename to test/src/main/java/org/bsc/maven/plugin/processor/test/TestWikiProcessor.java
index 55a2c6c..3f9d427 100644
--- a/test/src/main/java/org/bsc/maven/plugin/processor/test/TESTWikiProcessor.java
+++ b/test/src/main/java/org/bsc/maven/plugin/processor/test/TestWikiProcessor.java
@@ -31,7 +31,7 @@
@SupportedAnnotationTypes( "*" )
//@SupportedOptions( {"subfolder", "filepath", "templateUri"})
//@SupportedAnnotationTypes( {"javax.ws.rs.GET", "javax.ws.rs.PUT", "javax.ws.rs.POST", "javax.ws.rs.DELETE"})
-public class TESTWikiProcessor extends BaseAbstractProcessor {
+public class TestWikiProcessor extends BaseAbstractProcessor {
/**
*
diff --git a/test/src/main/java/org/bsc/maven/plugin/processor/test/TestWikiProcessorClass.java b/test/src/main/java/org/bsc/maven/plugin/processor/test/TestWikiProcessorClass.java
new file mode 100644
index 0000000..e3093d4
--- /dev/null
+++ b/test/src/main/java/org/bsc/maven/plugin/processor/test/TestWikiProcessorClass.java
@@ -0,0 +1,16 @@
+package org.bsc.maven.plugin.processor.test;
+
+public class TestWikiProcessorClass {
+
+ @ServiceDocumentation("service1")
+ public void service1() {
+
+
+ }
+
+ @ServiceDocumentation("service2")
+ public void service2( @ParameterDocumentation("param1") String param1) {
+
+
+ }
+}
diff --git a/test/src/site/.maven-processor-source-files.txt b/test/src/site/.maven-processor-source-files.txt
new file mode 100644
index 0000000..6256132
--- /dev/null
+++ b/test/src/site/.maven-processor-source-files.txt
@@ -0,0 +1,4 @@
+/Users/bsorrentino/WORKSPACES/GITHUB.me/maven-annotation-plugin/test/src/main/java/org/bsc/maven/plugin/processor/test/ParameterDocumentation.java
+/Users/bsorrentino/WORKSPACES/GITHUB.me/maven-annotation-plugin/test/src/main/java/org/bsc/maven/plugin/processor/test/TestWikiProcessor.java
+/Users/bsorrentino/WORKSPACES/GITHUB.me/maven-annotation-plugin/test/src/main/java/org/bsc/maven/plugin/processor/test/ServiceDocumentation.java
+/Users/bsorrentino/WORKSPACES/GITHUB.me/maven-annotation-plugin/test/src/main/java/org/bsc/maven/plugin/processor/test/TestWikiProcessorClass.java
diff --git a/utils/pom.xml b/utils/pom.xml
index c9552be..56d14d4 100644
--- a/utils/pom.xml
+++ b/utils/pom.xml
@@ -31,7 +31,7 @@
org.bsc.maven
maven-processor-plugin-parent
- 4.3
+ 4.4