From fe29fce36e13eb7cb30feb051d764df8a28567b3 Mon Sep 17 00:00:00 2001 From: Gintas Grigelionis Date: Tue, 3 Apr 2018 10:01:13 +0200 Subject: [PATCH] Java 8: computeIfAbsent/withInitial --- .../org/apache/tools/ant/ComponentHelper.java | 6 +----- .../apache/tools/ant/IntrospectionHelper.java | 3 +-- src/main/org/apache/tools/ant/Main.java | 6 +----- src/main/org/apache/tools/ant/Project.java | 7 +------ .../org/apache/tools/ant/ProjectHelper.java | 12 ++--------- src/main/org/apache/tools/ant/XmlLogger.java | 6 +----- .../tools/ant/helper/AntXMLContext.java | 6 +----- .../org/apache/tools/ant/taskdefs/Copy.java | 6 +----- .../apache/tools/ant/taskdefs/Definer.java | 7 +------ .../org/apache/tools/ant/taskdefs/Javac.java | 6 +----- .../org/apache/tools/ant/taskdefs/Tar.java | 6 +----- .../org/apache/tools/ant/taskdefs/Zip.java | 7 +------ .../ant/taskdefs/cvslib/ChangeLogParser.java | 5 ++--- .../ant/taskdefs/optional/i18n/Translate.java | 4 +--- .../org/apache/tools/ant/util/DateUtils.java | 20 ++++--------------- src/main/org/apache/tools/zip/ZipFile.java | 6 +----- 16 files changed, 21 insertions(+), 92 deletions(-) diff --git a/src/main/org/apache/tools/ant/ComponentHelper.java b/src/main/org/apache/tools/ant/ComponentHelper.java index 36a665dd5..96e28bcb1 100644 --- a/src/main/org/apache/tools/ant/ComponentHelper.java +++ b/src/main/org/apache/tools/ant/ComponentHelper.java @@ -683,11 +683,7 @@ public class ComponentHelper { String name = def.getName(); List list = null; synchronized (restrictedDefinitions) { - list = restrictedDefinitions.get(name); - if (list == null) { - list = new ArrayList<>(); - restrictedDefinitions.put(name, list); - } + list = restrictedDefinitions.computeIfAbsent(name, k -> new ArrayList<>()); } // Check if the classname is already present and remove it // if it is diff --git a/src/main/org/apache/tools/ant/IntrospectionHelper.java b/src/main/org/apache/tools/ant/IntrospectionHelper.java index e26ce2238..76cfa8c48 100644 --- a/src/main/org/apache/tools/ant/IntrospectionHelper.java +++ b/src/main/org/apache/tools/ant/IntrospectionHelper.java @@ -1028,8 +1028,7 @@ public final class IntrospectionHelper { final String attrName) { // use wrappers for primitive classes, e.g. int and // Integer are treated identically - final Class reflectedArg = PRIMITIVE_TYPE_MAP.containsKey(arg) - ? PRIMITIVE_TYPE_MAP.get(arg) : arg; + final Class reflectedArg = PRIMITIVE_TYPE_MAP.getOrDefault(arg, arg); // Object.class - it gets handled differently by AttributeSetter if (java.lang.Object.class == reflectedArg) { diff --git a/src/main/org/apache/tools/ant/Main.java b/src/main/org/apache/tools/ant/Main.java index 832c634a2..260581efd 100644 --- a/src/main/org/apache/tools/ant/Main.java +++ b/src/main/org/apache/tools/ant/Main.java @@ -406,11 +406,7 @@ public class Main implements AntMain { for (final ArgumentProcessor processor : processorRegistry.getProcessors()) { final int newI = processor.readArguments(args, i); if (newI != -1) { - List extraArgs = extraArguments.get(processor.getClass()); - if (extraArgs == null) { - extraArgs = new ArrayList<>(); - extraArguments.put(processor.getClass(), extraArgs); - } + List extraArgs = extraArguments.computeIfAbsent(processor.getClass(), k -> new ArrayList<>()); for (; i < newI && i < args.length; i++) { extraArgs.add(args[i]); } diff --git a/src/main/org/apache/tools/ant/Project.java b/src/main/org/apache/tools/ant/Project.java index d5a714e39..1983cdbc4 100644 --- a/src/main/org/apache/tools/ant/Project.java +++ b/src/main/org/apache/tools/ant/Project.java @@ -179,12 +179,7 @@ public class Project implements ResourceFactory { /** for each thread, record whether it is currently executing messageLogged */ - private final ThreadLocal isLoggingMessage = new ThreadLocal() { - @Override - protected Boolean initialValue() { - return Boolean.FALSE; - } - }; + private final ThreadLocal isLoggingMessage = ThreadLocal.withInitial(() -> Boolean.FALSE); /** * The Ant core classloader--may be null if using diff --git a/src/main/org/apache/tools/ant/ProjectHelper.java b/src/main/org/apache/tools/ant/ProjectHelper.java index 8eec9fb99..84a899192 100644 --- a/src/main/org/apache/tools/ant/ProjectHelper.java +++ b/src/main/org/apache/tools/ant/ProjectHelper.java @@ -202,11 +202,7 @@ public class ProjectHelper { targetPrefix.set(prefix); } - private static final ThreadLocal prefixSeparator = new ThreadLocal() { - protected String initialValue() { - return "."; - } - }; + private static final ThreadLocal prefixSeparator = ThreadLocal.withInitial(() -> "."); /** * The separator between the prefix and the target name. @@ -230,11 +226,7 @@ public class ProjectHelper { prefixSeparator.set(sep); } - private static final ThreadLocal inIncludeMode = new ThreadLocal() { - protected Boolean initialValue() { - return Boolean.FALSE; - } - }; + private static final ThreadLocal inIncludeMode = ThreadLocal.withInitial(() -> Boolean.FALSE); /** * Whether the current file should be read in include as opposed diff --git a/src/main/org/apache/tools/ant/XmlLogger.java b/src/main/org/apache/tools/ant/XmlLogger.java index 75af5f517..94b3e715e 100644 --- a/src/main/org/apache/tools/ant/XmlLogger.java +++ b/src/main/org/apache/tools/ant/XmlLogger.java @@ -207,11 +207,7 @@ public class XmlLogger implements BuildLogger { * @return the stack of timed elements for the current thread */ private Stack getStack() { - Stack threadStack = threadStacks.get(Thread.currentThread()); - if (threadStack == null) { - threadStack = new Stack<>(); - threadStacks.put(Thread.currentThread(), threadStack); - } + Stack threadStack = threadStacks.computeIfAbsent(Thread.currentThread(), k -> new Stack<>()); /* For debugging purposes uncomment: org.w3c.dom.Comment s = doc.createComment("stack=" + threadStack); buildElement.element.appendChild(s); diff --git a/src/main/org/apache/tools/ant/helper/AntXMLContext.java b/src/main/org/apache/tools/ant/helper/AntXMLContext.java index f022839f5..9d08985c7 100644 --- a/src/main/org/apache/tools/ant/helper/AntXMLContext.java +++ b/src/main/org/apache/tools/ant/helper/AntXMLContext.java @@ -362,11 +362,7 @@ public class AntXMLContext { * @param uri a namespace uri */ public void startPrefixMapping(String prefix, String uri) { - List list = prefixMapping.get(prefix); - if (list == null) { - list = new ArrayList<>(); - prefixMapping.put(prefix, list); - } + List list = prefixMapping.computeIfAbsent(prefix, k -> new ArrayList<>()); list.add(uri); } diff --git a/src/main/org/apache/tools/ant/taskdefs/Copy.java b/src/main/org/apache/tools/ant/taskdefs/Copy.java index ba0928d03..a492150f9 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Copy.java +++ b/src/main/org/apache/tools/ant/taskdefs/Copy.java @@ -1015,11 +1015,7 @@ public class Copy extends Task { private static void add(File baseDir, final String[] names, final Map> m) { if (names != null) { baseDir = getKeyFile(baseDir); - List l = m.get(baseDir); - if (l == null) { - l = new ArrayList<>(names.length); - m.put(baseDir, l); - } + List l = m.computeIfAbsent(baseDir, k -> new ArrayList<>(names.length)); l.addAll(Arrays.asList(names)); } } diff --git a/src/main/org/apache/tools/ant/taskdefs/Definer.java b/src/main/org/apache/tools/ant/taskdefs/Definer.java index 92af5d618..44bc7bad7 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Definer.java +++ b/src/main/org/apache/tools/ant/taskdefs/Definer.java @@ -54,12 +54,7 @@ public abstract class Definer extends DefBase { */ private static final String ANTLIB_XML = "/antlib.xml"; - private static final ThreadLocal> RESOURCE_STACK = new ThreadLocal>() { - @Override - protected Map initialValue() { - return new HashMap<>(); - } - }; + private static final ThreadLocal> RESOURCE_STACK = ThreadLocal.withInitial(HashMap::new); private String name; private String classname; diff --git a/src/main/org/apache/tools/ant/taskdefs/Javac.java b/src/main/org/apache/tools/ant/taskdefs/Javac.java index e8520eeb2..8a965c506 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Javac.java +++ b/src/main/org/apache/tools/ant/taskdefs/Javac.java @@ -1695,11 +1695,7 @@ public class Javac extends MatchingTask { final File moduleSourceRoot = pathInModule == null ? module : new File(module, pathInModule); - Collection moduleRoots = collector.get(moduleName); - if (moduleRoots == null) { - moduleRoots = new ArrayList<>(); - collector.put(moduleName, moduleRoots); - } + Collection moduleRoots = collector.computeIfAbsent(moduleName, k -> new ArrayList<>()); moduleRoots.add(moduleSourceRoot); } } diff --git a/src/main/org/apache/tools/ant/taskdefs/Tar.java b/src/main/org/apache/tools/ant/taskdefs/Tar.java index 41f02df32..51bb8cdb6 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Tar.java +++ b/src/main/org/apache/tools/ant/taskdefs/Tar.java @@ -605,11 +605,7 @@ public class Tar extends MatchingTask { base = Copy.NULL_FILE_PLACEHOLDER; } basedirs.add(base); - List files = basedirToFilesMap.get(base); - if (files == null) { - files = new Vector<>(); - basedirToFilesMap.put(base, files); - } + List files = basedirToFilesMap.computeIfAbsent(base, k -> new Vector<>()); if (base == Copy.NULL_FILE_PLACEHOLDER) { files.add(r.getFile().getAbsolutePath()); } else { diff --git a/src/main/org/apache/tools/ant/taskdefs/Zip.java b/src/main/org/apache/tools/ant/taskdefs/Zip.java index a0dc95e75..dfb629e31 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Zip.java +++ b/src/main/org/apache/tools/ant/taskdefs/Zip.java @@ -1296,12 +1296,7 @@ public class Zip extends MatchingTask { * to move the withEmpty behavior checks (since either would break * subclasses in several ways). */ - private static final ThreadLocal HAVE_NON_FILE_SET_RESOURCES_TO_ADD = new ThreadLocal() { - @Override - protected Boolean initialValue() { - return Boolean.FALSE; - } - }; + private static final ThreadLocal HAVE_NON_FILE_SET_RESOURCES_TO_ADD = ThreadLocal.withInitial(() -> Boolean.FALSE); /** * Collect the resources that are newer than the corresponding diff --git a/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogParser.java b/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogParser.java index 10a9bc4ab..15f867807 100644 --- a/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogParser.java +++ b/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogParser.java @@ -263,9 +263,8 @@ class ChangeLogParser { * Utility method that saves the current entry. */ private void saveEntry() { - entries.computeIfAbsent(date + author + comment, k -> { - return new CVSEntry(parseDate(date), author, comment); - }).addFile(file, revision, previousRevision); + entries.computeIfAbsent(date + author + comment, + k -> new CVSEntry(parseDate(date), author, comment)).addFile(file, revision, previousRevision); } /** diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/i18n/Translate.java b/src/main/org/apache/tools/ant/taskdefs/optional/i18n/Translate.java index 01856fc0b..00070f3a8 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/i18n/Translate.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/i18n/Translate.java @@ -458,9 +458,7 @@ public class Translate extends MatchingTask { } if (key.length() > 0) { //Has key already been loaded into resourceMap? - if (resourceMap.get(key) == null) { - resourceMap.put(key, value); - } + resourceMap.putIfAbsent(key, value); } } } diff --git a/src/main/org/apache/tools/ant/util/DateUtils.java b/src/main/org/apache/tools/ant/util/DateUtils.java index 300857019..6801fc5a0 100644 --- a/src/main/org/apache/tools/ant/util/DateUtils.java +++ b/src/main/org/apache/tools/ant/util/DateUtils.java @@ -98,12 +98,7 @@ public final class DateUtils { * @since Ant 1.10.2 */ public static final ThreadLocal EN_US_DATE_FORMAT_MIN = - new ThreadLocal() { - @Override - protected DateFormat initialValue() { - return new SimpleDateFormat("MM/dd/yyyy hh:mm a", Locale.US); - } - }; + ThreadLocal.withInitial(() -> new SimpleDateFormat("MM/dd/yyyy hh:mm a", Locale.US)); /** * Provides a thread-local US-style date format. Exactly as used by @@ -112,12 +107,7 @@ public final class DateUtils { * @since Ant 1.10.2 */ public static final ThreadLocal EN_US_DATE_FORMAT_SEC = - new ThreadLocal() { - @Override - protected DateFormat initialValue() { - return new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a", Locale.US); - } - }; + ThreadLocal.withInitial(() -> new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a", Locale.US)); static { MINUTE_SECONDS.setFormat(0, MINUTES_FORMAT); @@ -329,12 +319,10 @@ public final class DateUtils { } final private static ThreadLocal iso8601WithTimeZone = - new ThreadLocal() { - @Override protected DateFormat initialValue() { + ThreadLocal.withInitial(() -> { // An arbitrary easy-to-read format to normalize to. return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS Z"); - } - }; + }); final private static Pattern iso8601normalizer = Pattern.compile( "^(\\d{4,}-\\d{2}-\\d{2})[Tt ]" + // yyyy-MM-dd "(\\d{2}:\\d{2}(:\\d{2}(\\.\\d{3})?)?) ?" + // HH:mm:ss.SSS diff --git a/src/main/org/apache/tools/zip/ZipFile.java b/src/main/org/apache/tools/zip/ZipFile.java index 9a51f5c1a..941d0aebc 100644 --- a/src/main/org/apache/tools/zip/ZipFile.java +++ b/src/main/org/apache/tools/zip/ZipFile.java @@ -889,11 +889,7 @@ public class ZipFile implements Closeable { } final String name = ze.getName(); - LinkedList entriesOfThatName = nameMap.get(name); - if (entriesOfThatName == null) { - entriesOfThatName = new LinkedList<>(); - nameMap.put(name, entriesOfThatName); - } + LinkedList entriesOfThatName = nameMap.computeIfAbsent(name, k -> new LinkedList<>()); entriesOfThatName.addLast(ze); } }