This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch release-2.x in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit 543c441cdd590af61b7cadc5674c739afc0637e5 Author: Gary Gregory <[email protected]> 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 +++++ .../org/apache/logging/log4j/core/config/AbstractConfiguration.java | 2 +- .../logging/log4j/core/config/plugins/processor/PluginProcessor.java | 4 +++- .../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 +- .../org/apache/logging/log4j/core/util/datetime/FastDatePrinter.java | 5 ++++- .../src/test/java/org/apache/logging/dumbster/smtp/SmtpMessage.java | 2 +- .../src/main/java/org/apache/logging/log4j/jcl/LogFactoryImpl.java | 3 ++- .../core/appender/db/jpa/converter/ThrowableAttributeConverter.java | 4 +++- 17 files changed, 42 insertions(+), 16 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 29be5ac..1638569 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 91a0932..1ed1582 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/config/AbstractConfiguration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java index 5e4f566..41a072e 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 @@ -380,7 +380,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/processor/PluginProcessor.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor.java index 4ee6917..b1ca407 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor.java @@ -52,6 +52,8 @@ public class PluginProcessor extends AbstractProcessor { // TODO: this could be made more abstract to allow for compile-time and run-time plugin processing + private static final Element[] EMPTY_ELEMENT_ARRAY = {}; + /** * The location of the plugin cache data file. This file is written to by this processor, and read from by * {@link org.apache.logging.log4j.core.config.plugins.util.PluginManager}. @@ -77,7 +79,7 @@ public class PluginProcessor extends AbstractProcessor { return false; } collectPlugins(elements); - writeCacheFile(elements.toArray(new Element[elements.size()])); + writeCacheFile(elements.toArray(EMPTY_ELEMENT_ARRAY)); messager.printMessage(Kind.NOTE, "Annotations processed"); return true; } catch (final Exception ex) { 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 69623d3..b5788c1 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 @@ -52,6 +52,8 @@ import org.apache.logging.log4j.util.StringBuilders; */ public class PluginBuilder implements Builder<Object> { + private static final Field[] EMPTY_FIELD_ARRAY = new Field[] {}; + private static final Logger LOGGER = StatusLogger.getLogger(); private final PluginType<?> pluginType; @@ -162,7 +164,7 @@ public class PluginBuilder implements Builder<Object> { private void injectFields(final Builder<?> builder) throws IllegalAccessException { final List<Field> fields = TypeUtil.getAllDeclaredFields(builder.getClass()); - AccessibleObject.setAccessible(fields.toArray(new Field[] {}), true); + AccessibleObject.setAccessible(fields.toArray(EMPTY_FIELD_ARRAY), true); final StringBuilder log = new StringBuilder(); boolean invalid = false; String reason = ""; 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 b942bbb..6286876 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 @@ -89,7 +89,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 b45ba19..08f6d33 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 bd10224..c8940f6 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 @@ -49,8 +49,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); @@ -73,6 +71,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 955bdd7..84e2fd1 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 a7f815d..34ed17c 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.core.config.plugins.Plugin; import org.apache.logging.log4j.message.MapMessage; +import org.apache.logging.log4j.util.Strings; /** * A map-based lookup. @@ -102,7 +103,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 6bdd56f..41222c6 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 @@ -31,6 +31,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. @@ -99,7 +100,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 921a99e..318e3ff 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 @@ -258,6 +258,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. */ @@ -336,7 +339,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 9e66441..dc77f87 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 @@ -570,7 +570,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/util/datetime/FastDatePrinter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/datetime/FastDatePrinter.java index a5ab486..06c4981 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/datetime/FastDatePrinter.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/datetime/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; ) { @@ -737,6 +737,9 @@ public class FastDatePrinter implements DatePrinter, Serializable { * <p>Inner class defining a rule.</p> */ private interface Rule { + + static final Rule[] EMPTY_ARRAY = {}; + /** * Returns the estimated length of the result. * diff --git a/log4j-core/src/test/java/org/apache/logging/dumbster/smtp/SmtpMessage.java b/log4j-core/src/test/java/org/apache/logging/dumbster/smtp/SmtpMessage.java index 93e38d1..ebc3cf5 100644 --- a/log4j-core/src/test/java/org/apache/logging/dumbster/smtp/SmtpMessage.java +++ b/log4j-core/src/test/java/org/apache/logging/dumbster/smtp/SmtpMessage.java @@ -88,7 +88,7 @@ public class SmtpMessage { if (values == null) { return Strings.EMPTY_ARRAY; } - return values.toArray(new String[values.size()]); + return values.toArray(Strings.EMPTY_ARRAY); } /** 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 diff --git a/log4j-jpa/src/main/java/org/apache/logging/log4j/core/appender/db/jpa/converter/ThrowableAttributeConverter.java b/log4j-jpa/src/main/java/org/apache/logging/log4j/core/appender/db/jpa/converter/ThrowableAttributeConverter.java index bbec319..50afb94 100644 --- a/log4j-jpa/src/main/java/org/apache/logging/log4j/core/appender/db/jpa/converter/ThrowableAttributeConverter.java +++ b/log4j-jpa/src/main/java/org/apache/logging/log4j/core/appender/db/jpa/converter/ThrowableAttributeConverter.java @@ -35,6 +35,8 @@ import org.apache.logging.log4j.util.Strings; */ @Converter(autoApply = false) public class ThrowableAttributeConverter implements AttributeConverter<Throwable, String> { + private static final StackTraceElement[] EMPTY_STACK_TRACE_ELEMENT_ARRAY = new StackTraceElement[0]; + private static final int CAUSED_BY_STRING_LENGTH = 10; private static final Field THROWABLE_CAUSE; @@ -118,7 +120,7 @@ public class ThrowableAttributeConverter implements AttributeConverter<Throwable } return this.getThrowable(throwableClassName, message, cause, - stackTrace.toArray(new StackTraceElement[stackTrace.size()])); + stackTrace.toArray(EMPTY_STACK_TRACE_ELEMENT_ARRAY)); } private Throwable getThrowable(final String throwableClassName, final String message, final Throwable cause,
