From 30552a040fff06a3a187b462b819dcde2d4d0282 Mon Sep 17 00:00:00 2001 From: Markus KARG Date: Thu, 23 May 2024 14:15:11 +0000 Subject: [PATCH] Parallel processing of files --- .../mojo/license/AbstractFileHeaderMojo.java | 23 +++++++++++++------ .../mojo/license/AbstractLicenseNameMojo.java | 5 ++-- .../org/codehaus/mojo/license/FileState.java | 13 ++++------- 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/src/main/java/org/codehaus/mojo/license/AbstractFileHeaderMojo.java b/src/main/java/org/codehaus/mojo/license/AbstractFileHeaderMojo.java index c0ae8ebf2..69450bb42 100644 --- a/src/main/java/org/codehaus/mojo/license/AbstractFileHeaderMojo.java +++ b/src/main/java/org/codehaus/mojo/license/AbstractFileHeaderMojo.java @@ -24,16 +24,17 @@ import java.io.File; import java.io.IOException; +import java.io.UncheckedIOException; import java.nio.file.Files; import java.nio.file.StandardCopyOption; import java.util.Collections; import java.util.EnumMap; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeMap; +import java.util.concurrent.ConcurrentHashMap; import freemarker.template.Template; import org.apache.commons.lang3.StringUtils; @@ -360,7 +361,7 @@ public abstract class AbstractFileHeaderMojo extends AbstractLicenseNameMojo { /** * Dictionary of treated files indexed by their state. */ - EnumMap> result; + Map> result; /** * Dictionary of files to treat indexed by their CommentStyle. @@ -533,7 +534,7 @@ public void doAction() throws Exception { long t0 = System.nanoTime(); - processedFiles = new HashSet<>(); + processedFiles = ConcurrentHashMap.newKeySet(); result = new EnumMap<>(FileState.class); try { @@ -586,7 +587,7 @@ public void doAction() throws Exception { * @param result processed files by their status * @throws MojoFailureException if check is not ok (some file with no header or to update) */ - private void checkResults(EnumMap> result) throws MojoFailureException { + private void checkResults(Map> result) throws MojoFailureException { Set states = result.keySet(); StringBuilder builder = new StringBuilder(); @@ -633,10 +634,18 @@ private void processCommentStyle(String commentStyle, List filesToTreat) t // use header transformer according to comment style given in header FileHeaderTransformer transformer = getTransformer(transformers, commentStyle); - FileHeaderProcessor processor = getFileHeaderProcessor(license, transformer); - for (File file : filesToTreat) { - processFile(processor, file); + try { + filesToTreat.parallelStream().forEach(file -> { + try { + FileHeaderProcessor processor = getFileHeaderProcessor(license, transformer); + processFile(processor, file); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + }); + } catch (UncheckedIOException e) { + throw e.getCause(); } filesToTreat.clear(); } diff --git a/src/main/java/org/codehaus/mojo/license/AbstractLicenseNameMojo.java b/src/main/java/org/codehaus/mojo/license/AbstractLicenseNameMojo.java index 56f35d547..433236bed 100644 --- a/src/main/java/org/codehaus/mojo/license/AbstractLicenseNameMojo.java +++ b/src/main/java/org/codehaus/mojo/license/AbstractLicenseNameMojo.java @@ -27,7 +27,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; -import java.util.EnumMap; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -388,7 +387,7 @@ FileHeaderTransformer getTransformer(Map transfor * @param state state of file to report * @param buffer where to report */ - void reportType(EnumMap> result, FileState state, StringBuilder buffer) { + void reportType(Map> result, FileState state, StringBuilder buffer) { String operation = state.name(); Set set = getFiles(result, state); @@ -499,7 +498,7 @@ Map> obtainFilesToProcessByCommentStyle( * @param state state of files to get * @return all files of the given state */ - private Set getFiles(EnumMap> result, FileState state) { + private Set getFiles(Map> result, FileState state) { return result.get(state); } diff --git a/src/main/java/org/codehaus/mojo/license/FileState.java b/src/main/java/org/codehaus/mojo/license/FileState.java index e8478b26e..9c9ffb7eb 100644 --- a/src/main/java/org/codehaus/mojo/license/FileState.java +++ b/src/main/java/org/codehaus/mojo/license/FileState.java @@ -23,9 +23,9 @@ */ import java.io.File; -import java.util.EnumMap; -import java.util.HashSet; +import java.util.Map; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; /** * Defines state of a file after process. @@ -70,12 +70,7 @@ public enum FileState { * @param file file to add * @param results dictionary to update */ - public void addFile(File file, EnumMap> results) { - Set fileSet = results.get(this); - if (fileSet == null) { - fileSet = new HashSet<>(); - results.put(this, fileSet); - } - fileSet.add(file); + public void addFile(File file, Map> results) { + results.computeIfAbsent(this, k -> ConcurrentHashMap.newKeySet()).add(file); } }