You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by gg...@apache.org on 2022/01/19 17:39:30 UTC

[logging-log4j2] 09/10: Reuse empty array constants.

This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit a4ca6fada94eb324167e5c9116991c6341349da4
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Wed Jan 19 09:00:34 2022 -0500

    Reuse empty array constants.
    
    Refactor empty array constants.
---
 .../src/main/java/org/apache/logging/log4j/spi/LoggerContext.java    | 5 +++++
 log4j-core/src/main/java/org/apache/logging/log4j/core/Appender.java | 5 +++++
 log4j-core/src/main/java/org/apache/logging/log4j/core/Filter.java   | 5 +++++
 .../org/apache/logging/log4j/core/config/AbstractConfiguration.java  | 2 +-
 .../apache/logging/log4j/core/config/plugins/util/PluginBuilder.java | 4 +++-
 .../java/org/apache/logging/log4j/core/filter/CompositeFilter.java   | 2 +-
 .../org/apache/logging/log4j/core/impl/JdkMapAdapterStringMap.java   | 3 ++-
 .../main/java/org/apache/logging/log4j/core/impl/ThrowableProxy.java | 4 ++--
 .../org/apache/logging/log4j/core/impl/ThrowableProxyHelper.java     | 2 +-
 .../main/java/org/apache/logging/log4j/core/lookup/MapLookup.java    | 3 ++-
 .../apache/logging/log4j/core/pattern/MessagePatternConverter.java   | 3 ++-
 .../java/org/apache/logging/log4j/core/pattern/NameAbbreviator.java  | 5 ++++-
 .../java/org/apache/logging/log4j/core/pattern/PatternParser.java    | 2 +-
 .../logging/log4j/core/time/internal/format/FastDatePrinter.java     | 5 ++++-
 .../src/main/java/org/apache/logging/log4j/jcl/LogFactoryImpl.java   | 3 ++-
 15 files changed, 40 insertions(+), 13 deletions(-)

diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/spi/LoggerContext.java b/log4j-api/src/main/java/org/apache/logging/log4j/spi/LoggerContext.java
index 84837d5..c4ce580 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/spi/LoggerContext.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/spi/LoggerContext.java
@@ -25,6 +25,11 @@ import org.apache.logging.log4j.message.MessageFactory;
 public interface LoggerContext {
 
     /**
+     * Empty array.
+     */
+    LoggerContext[] EMPTY_ARRAY = {};
+
+    /**
      * Gets the anchor for some other context, such as a ClassLoader or ServletContext.
      * @return The external context.
      */
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender.java
index 5519a56..eca106c 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/Appender.java
@@ -43,6 +43,11 @@ public interface Appender extends LifeCycle {
      * @since 2.6
      */
     String ELEMENT_TYPE = "appender";
+    
+    /**
+     * Empty array.
+     */
+    Appender[] EMPTY_ARRAY = {};
 
     /**
      * Logs a LogEvent using whatever logic this Appender wishes to use. It is typically recommended to use a
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter.java
index 1baa39b..aa8f2e0 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/Filter.java
@@ -33,6 +33,11 @@ import org.apache.logging.log4j.util.EnglishEnums;
 public interface Filter extends LifeCycle {
 
     /**
+     * Empty array.
+     */
+    Filter[] EMPTY_ARRAY = {};
+    
+    /**
      * Main {@linkplain org.apache.logging.log4j.plugins.Plugin#elementType() plugin element type} for
      * Filter plugins.
      *
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java
index 677b591..6fbbda5 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java
@@ -386,7 +386,7 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement
         root.getReliabilityStrategy().beforeStopAppenders();
 
         // Stop the appenders in reverse order in case they still have activity.
-        final Appender[] array = appenders.values().toArray(new Appender[appenders.size()]);
+        final Appender[] array = appenders.values().toArray(Appender.EMPTY_ARRAY);
         final List<Appender> async = getAsyncAppenders(array);
         if (!async.isEmpty()) {
             // LOG4J2-511, LOG4J2-392 stop AsyncAppenders first
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java
index 4da3fd0..05cbe87 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.java
@@ -55,6 +55,8 @@ import java.util.function.Function;
  */
 public class PluginBuilder implements Builder<Object> {
 
+    private static final Field[] EMPTY_FIELD_ARRAY = {};
+    
     private static final Logger LOGGER = StatusLogger.getLogger();
 
     private final PluginType<?> pluginType;
@@ -178,7 +180,7 @@ public class PluginBuilder implements Builder<Object> {
     private Object injectBuilder(final Builder<?> builder) {
         final Object target = builder instanceof BuilderWrapper ? ((BuilderWrapper) builder).getBuilder() : builder;
         final List<Field> fields = TypeUtil.getAllDeclaredFields(target.getClass());
-        AccessibleObject.setAccessible(fields.toArray(new Field[0]), true);
+        AccessibleObject.setAccessible(fields.toArray(EMPTY_FIELD_ARRAY), true);
         final StringBuilder log = new StringBuilder();
         // TODO: collect OptionBindingExceptions into a composite error message (ConfigurationException?)
         for (final Field field : fields) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/CompositeFilter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/CompositeFilter.java
index 26a24cc..4ac1a3f 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/CompositeFilter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/CompositeFilter.java
@@ -90,7 +90,7 @@ public final class CompositeFilter extends AbstractLifeCycle implements Iterable
         } else {
             filterList.remove(filter);
         }
-        return new CompositeFilter(filterList.toArray(new Filter[this.filters.length - 1]));
+        return new CompositeFilter(filterList.toArray(Filter.EMPTY_ARRAY));
     }
 
     @Override
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/JdkMapAdapterStringMap.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/JdkMapAdapterStringMap.java
index 4d0ea36..631d7b3 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/JdkMapAdapterStringMap.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/JdkMapAdapterStringMap.java
@@ -25,6 +25,7 @@ import java.util.Objects;
 import org.apache.logging.log4j.util.BiConsumer;
 import org.apache.logging.log4j.util.ReadOnlyStringMap;
 import org.apache.logging.log4j.util.StringMap;
+import org.apache.logging.log4j.util.Strings;
 import org.apache.logging.log4j.util.TriConsumer;
 
 /**
@@ -91,7 +92,7 @@ public class JdkMapAdapterStringMap implements StringMap {
 
     private String[] getSortedKeys() {
         if (sortedKeys == null) {
-            sortedKeys = map.keySet().toArray(new String[map.size()]);
+            sortedKeys = map.keySet().toArray(Strings.EMPTY_ARRAY);
             Arrays.sort(sortedKeys, NULL_FIRST_COMPARATOR);
         }
         return sortedKeys;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxy.java
index c3c7aef..1e4d3d8 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxy.java
@@ -48,8 +48,6 @@ import org.apache.logging.log4j.util.Strings;
  */
 public class ThrowableProxy implements Serializable {
 
-    static final ThrowableProxy[] EMPTY_ARRAY = {};
-
     private static final char EOL = '\n';
 
     private static final String EOL_STR = String.valueOf(EOL);
@@ -72,6 +70,8 @@ public class ThrowableProxy implements Serializable {
 
     private final transient Throwable throwable;
 
+    static final ThrowableProxy[] EMPTY_ARRAY = {};
+
     /**
      * For JSON and XML IO via Jackson.
      */
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxyHelper.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxyHelper.java
index f477f0b..66b7014 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxyHelper.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThrowableProxyHelper.java
@@ -138,7 +138,7 @@ class ThrowableProxyHelper {
                     proxies.add(new ThrowableProxy(candidate, suppressedVisited));
                 }
             }
-            return proxies.toArray(new ThrowableProxy[proxies.size()]);
+            return proxies.toArray(ThrowableProxy.EMPTY_ARRAY);
         } catch (final Exception e) {
             StatusLogger.getLogger().error(e);
         }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/MapLookup.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/MapLookup.java
index b190e5c..76cb1df 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/MapLookup.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/MapLookup.java
@@ -23,6 +23,7 @@ import java.util.Map;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.plugins.Plugin;
 import org.apache.logging.log4j.message.MapMessage;
+import org.apache.logging.log4j.util.Strings;
 
 /**
  * A map-based lookup.
@@ -71,7 +72,7 @@ public class MapLookup implements StrLookup {
             return null;
         }
         final int size = args.size();
-        return initMap(args.toArray(new String[size]), newMap(size));
+        return initMap(args.toArray(Strings.EMPTY_ARRAY), newMap(size));
     }
 
     static Map<String, String> toMap(final String[] args) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java
index d3de7ee..01e221e 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java
@@ -30,6 +30,7 @@ import org.apache.logging.log4j.status.StatusLogger;
 import org.apache.logging.log4j.util.MultiFormatStringBuilderFormattable;
 import org.apache.logging.log4j.util.PerformanceSensitive;
 import org.apache.logging.log4j.util.StringBuilderFormattable;
+import org.apache.logging.log4j.util.Strings;
 
 /**
  * Returns the event's rendered message in a StringBuilder.
@@ -98,7 +99,7 @@ public class MessagePatternConverter extends LogEventPatternConverter {
                 results.add(option);
             }
         }
-        return results.toArray(new String[0]);
+        return results.toArray(Strings.EMPTY_ARRAY);
     }
 
     @Override
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/NameAbbreviator.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/NameAbbreviator.java
index 42f2b64..4b76875 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/NameAbbreviator.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/NameAbbreviator.java
@@ -260,6 +260,9 @@ public abstract class NameAbbreviator {
      * Fragment of an pattern abbreviator.
      */
     private static final class PatternAbbreviatorFragment {
+        
+        static final PatternAbbreviatorFragment[] EMPTY_ARRAY = {};
+
         /**
          * Count of initial characters of element to output.
          */
@@ -338,7 +341,7 @@ public abstract class NameAbbreviator {
                     "fragments must have at least one element");
             }
 
-            this.fragments = fragments.toArray(new PatternAbbreviatorFragment[0]);
+            this.fragments = fragments.toArray(PatternAbbreviatorFragment.EMPTY_ARRAY);
         }
 
         /**
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java
index d9a33c6..05b2214 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/PatternParser.java
@@ -569,7 +569,7 @@ public final class PatternParser {
             boolean errors = false;
             for (final Class<?> clazz : parmTypes) {
                 if (clazz.isArray() && clazz.getName().equals("[Ljava.lang.String;")) {
-                    final String[] optionsArray = options.toArray(new String[options.size()]);
+                    final String[] optionsArray = options.toArray(Strings.EMPTY_ARRAY);
                     parms[i] = optionsArray;
                 } else if (clazz.isAssignableFrom(Configuration.class)) {
                     parms[i] = config;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/format/FastDatePrinter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/format/FastDatePrinter.java
index 1597f3f..8c5b67f 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/format/FastDatePrinter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/format/FastDatePrinter.java
@@ -164,7 +164,7 @@ public class FastDatePrinter implements DatePrinter, Serializable {
      */
     private void init() {
         final List<Rule> rulesList = parsePattern();
-        mRules = rulesList.toArray(new Rule[rulesList.size()]);
+        mRules = rulesList.toArray(Rule.EMPTY_ARRAY);
 
         int len = 0;
         for (int i=mRules.length; --i >= 0; ) {
@@ -722,6 +722,9 @@ public class FastDatePrinter implements DatePrinter, Serializable {
      * <p>Inner class defining a rule.</p>
      */
     private interface Rule {
+        
+        Rule[] EMPTY_ARRAY = {};
+
         /**
          * Returns the estimated length of the result.
          *
diff --git a/log4j-jcl/src/main/java/org/apache/logging/log4j/jcl/LogFactoryImpl.java b/log4j-jcl/src/main/java/org/apache/logging/log4j/jcl/LogFactoryImpl.java
index 6a318a4..615bb77 100644
--- a/log4j-jcl/src/main/java/org/apache/logging/log4j/jcl/LogFactoryImpl.java
+++ b/log4j-jcl/src/main/java/org/apache/logging/log4j/jcl/LogFactoryImpl.java
@@ -24,6 +24,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogConfigurationException;
 import org.apache.commons.logging.LogFactory;
 import org.apache.logging.log4j.spi.LoggerAdapter;
+import org.apache.logging.log4j.util.Strings;
 
 /**
  * Log4j binding for Commons Logging.
@@ -47,7 +48,7 @@ public class LogFactoryImpl extends LogFactory {
 
     @Override
     public String[] getAttributeNames() {
-        return attributes.keySet().toArray(new String[attributes.size()]);
+        return attributes.keySet().toArray(Strings.EMPTY_ARRAY);
     }
 
     @Override