Thanks!

Sent from my iPhone

> On 2016/09/24, at 3:14, Matt Sicker <[email protected]> wrote:
> 
> Updated.
> 
>> On 23 September 2016 at 13:08, Remko Popma <[email protected]> wrote:
>> Good catch! Can you help? 3am again here...
>> 
>> Sent from my iPhone
>> 
>>> On 2016/09/24, at 2:55, Matt Sicker <[email protected]> wrote:
>>> 
>>> You should avoid using Class.forName(). We have LoaderUtil.loadClass() for 
>>> this.
>>> 
>>> ---------- Forwarded message ----------
>>> From: <[email protected]>
>>> Date: 23 September 2016 at 11:56
>>> Subject: logging-log4j2 git commit: LOG4J2-1611 LOG4J2-1010 LOG4J2-1447 
>>> context injector should use ContextDataFactory; ContextDataFactory now 
>>> supports pre-sizing
>>> To: [email protected]
>>> 
>>> 
>>> Repository: logging-log4j2
>>> Updated Branches:
>>>   refs/heads/master a22b7ae64 -> cceb1808d
>>> 
>>> 
>>> LOG4J2-1611 LOG4J2-1010 LOG4J2-1447 context injector should use 
>>> ContextDataFactory; ContextDataFactory now supports pre-sizing
>>> 
>>> 
>>> Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
>>> Commit: 
>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/cceb1808
>>> Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/cceb1808
>>> Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/cceb1808
>>> 
>>> Branch: refs/heads/master
>>> Commit: cceb1808df85bdd0e0093a47cf8d010268532622
>>> Parents: a22b7ae
>>> Author: rpopma <[email protected]>
>>> Authored: Sat Sep 24 01:56:27 2016 +0900
>>> Committer: rpopma <[email protected]>
>>> Committed: Sat Sep 24 01:56:27 2016 +0900
>>> 
>>> ----------------------------------------------------------------------
>>>  .../log4j/core/impl/ContextDataFactory.java     |  53 ++++++++--
>>>  .../core/impl/ThreadContextDataInjector.java    |   7 +-
>>>  ...actoryPropertySetMissingConstructorTest.java |  41 ++++++++
>>>  .../impl/ContextDataFactoryPropertySetTest.java |  52 ++++++++++
>>>  .../log4j/core/impl/ContextDataFactoryTest.java |  47 +++++++++
>>>  .../log4j/core/impl/FactoryTestStringMap.java   | 103 +++++++++++++++++++
>>>  ...ctoryTestStringMapWithoutIntConstructor.java |  99 ++++++++++++++++++
>>>  7 files changed, 392 insertions(+), 10 deletions(-)
>>> ----------------------------------------------------------------------
>>> 
>>> 
>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/cceb1808/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataFactory.java
>>> ----------------------------------------------------------------------
>>> diff --git 
>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataFactory.java
>>>  
>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataFactory.java
>>> index 49d2b97..9b48dfd 100644
>>> --- 
>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataFactory.java
>>> +++ 
>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataFactory.java
>>> @@ -16,11 +16,13 @@
>>>   */
>>>  package org.apache.logging.log4j.core.impl;
>>> 
>>> -import org.apache.logging.log4j.core.LogEvent;
>>> +import java.lang.reflect.Constructor;
>>> +
>>>  import org.apache.logging.log4j.core.ContextDataInjector;
>>> +import org.apache.logging.log4j.core.LogEvent;
>>> +import org.apache.logging.log4j.util.PropertiesUtil;
>>>  import org.apache.logging.log4j.util.SortedArrayStringMap;
>>>  import org.apache.logging.log4j.util.StringMap;
>>> -import org.apache.logging.log4j.util.PropertiesUtil;
>>> 
>>>  /**
>>>   * Factory for creating the StringMap instances used to initialize 
>>> LogEvents'
>>> @@ -30,7 +32,8 @@ import org.apache.logging.log4j.util.PropertiesUtil;
>>>   * <p>
>>>   * By default returns {@code SortedArrayStringMap} objects. Can be 
>>> configured by setting system property
>>>   * {@code "log4j2.ContextData"} to the fully qualified class name of a 
>>> class implementing the
>>> - * {@code StringMap} interface. The class must have a public default 
>>> constructor.
>>> + * {@code StringMap} interface. The class must have a public default 
>>> constructor, and if possible should also have a
>>> + * public constructor that takes a single {@code int} argument for the 
>>> initial capacity.
>>>   * </p>
>>>   *
>>>   * @see LogEvent#getContextData()
>>> @@ -39,15 +42,53 @@ import org.apache.logging.log4j.util.PropertiesUtil;
>>>   * @since 2.7
>>>   */
>>>  public class ContextDataFactory {
>>> +    private static final String CLASS_NAME = 
>>> PropertiesUtil.getProperties().getStringProperty("log4j2.ContextData");
>>> +    private static final Class<?> CACHED_CLASS = 
>>> createCachedClass(CLASS_NAME);
>>> +    private static final Constructor<?> CACHED_CONSTRUCTOR = 
>>> createCachedConstructor(CACHED_CLASS);
>>> +
>>> +    private static Class<?> createCachedClass(final String className) {
>>> +        if (className == null) {
>>> +            return null;
>>> +        }
>>> +        try {
>>> +            return Class.forName(className);
>>> +        } catch (final Exception any) {
>>> +            return null;
>>> +        }
>>> +    }
>>> +
>>> +    private static Constructor<?> createCachedConstructor(final Class<?> 
>>> cachedClass) {
>>> +        if (cachedClass == null) {
>>> +            return null;
>>> +        }
>>> +        try {
>>> +            return cachedClass.getDeclaredConstructor(int.class);
>>> +        } catch (final Exception any) {
>>> +            return null;
>>> +        }
>>> +    }
>>> 
>>>      @SuppressWarnings("unchecked")
>>>      public static StringMap createContextData() {
>>> -        final String CLASS = 
>>> PropertiesUtil.getProperties().getStringProperty("log4j2.ContextData",
>>> -                SortedArrayStringMap.class.getName());
>>> +        if (CACHED_CLASS == null) {
>>> +            return new SortedArrayStringMap();
>>> +        }
>>>          try {
>>> -            return (StringMap) Class.forName(CLASS).newInstance();
>>> +            return (StringMap) CACHED_CLASS.newInstance();
>>>          } catch (final Exception any) {
>>>              return new SortedArrayStringMap();
>>>          }
>>>      }
>>> +
>>> +    @SuppressWarnings("unchecked")
>>> +    public static StringMap createContextData(final int initialCapacity) {
>>> +        if (CACHED_CONSTRUCTOR == null) {
>>> +            return new SortedArrayStringMap(initialCapacity);
>>> +        }
>>> +        try {
>>> +            return (StringMap) 
>>> CACHED_CONSTRUCTOR.newInstance(initialCapacity);
>>> +        } catch (final Exception any) {
>>> +            return new SortedArrayStringMap(initialCapacity);
>>> +        }
>>> +    }
>>>  }
>>> 
>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/cceb1808/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjector.java
>>> ----------------------------------------------------------------------
>>> diff --git 
>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjector.java
>>>  
>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjector.java
>>> index 698d53a..832a8cb 100644
>>> --- 
>>> a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjector.java
>>> +++ 
>>> b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjector.java
>>> @@ -23,10 +23,9 @@ import org.apache.logging.log4j.ThreadContext;
>>>  import org.apache.logging.log4j.ThreadContextAccess;
>>>  import org.apache.logging.log4j.core.ContextDataInjector;
>>>  import org.apache.logging.log4j.core.config.Property;
>>> +import org.apache.logging.log4j.spi.ThreadContextMap;
>>>  import org.apache.logging.log4j.util.ReadOnlyStringMap;
>>> -import org.apache.logging.log4j.util.SortedArrayStringMap;
>>>  import org.apache.logging.log4j.util.StringMap;
>>> -import org.apache.logging.log4j.spi.ThreadContextMap;
>>> 
>>>  /**
>>>   * {@code ThreadContextDataInjector} contains a number of strategies for 
>>> copying key-value pairs from the various
>>> @@ -82,7 +81,7 @@ public class ThreadContextDataInjector  {
>>>              // data. Note that we cannot reuse the specified StringMap: 
>>> some Loggers may have properties defined
>>>              // and others not, so the LogEvent's context data may have 
>>> been replaced with an immutable copy from
>>>              // the ThreadContext - this will throw an 
>>> UnsupportedOperationException if we try to modify it.
>>> -            final StringMap result = new SortedArrayStringMap(props.size() 
>>> + copy.size());
>>> +            final StringMap result = 
>>> ContextDataFactory.createContextData(props.size() + copy.size());
>>>              copyProperties(props, result);
>>>              copyThreadContextMap(copy, result);
>>>              return result;
>>> @@ -175,7 +174,7 @@ public class ThreadContextDataInjector  {
>>>              // data. Note that we cannot reuse the specified StringMap: 
>>> some Loggers may have properties defined
>>>              // and others not, so the LogEvent's context data may have 
>>> been replaced with an immutable copy from
>>>              // the ThreadContext - this will throw an 
>>> UnsupportedOperationException if we try to modify it.
>>> -            final StringMap result = new SortedArrayStringMap(props.size() 
>>> + immutableCopy.size());
>>> +            final StringMap result = 
>>> ContextDataFactory.createContextData(props.size() + immutableCopy.size());
>>>              copyProperties(props, result);
>>>              result.putAll(immutableCopy);
>>>              return result;
>>> 
>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/cceb1808/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryPropertySetMissingConstructorTest.java
>>> ----------------------------------------------------------------------
>>> diff --git 
>>> a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryPropertySetMissingConstructorTest.java
>>>  
>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryPropertySetMissingConstructorTest.java
>>> new file mode 100644
>>> index 0000000..6e8d621
>>> --- /dev/null
>>> +++ 
>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryPropertySetMissingConstructorTest.java
>>> @@ -0,0 +1,41 @@
>>> +/*
>>> + * Licensed to the Apache Software Foundation (ASF) under one or more
>>> + * contributor license agreements. See the NOTICE file distributed with
>>> + * this work for additional information regarding copyright ownership.
>>> + * The ASF licenses this file to You under the Apache license, Version 2.0
>>> + * (the "License"); you may not use this file except in compliance with
>>> + * the License. You may obtain a copy of the License at
>>> + *
>>> + *      http://www.apache.org/licenses/LICENSE-2.0
>>> + *
>>> + * Unless required by applicable law or agreed to in writing, software
>>> + * distributed under the License is distributed on an "AS IS" BASIS,
>>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
>>> + * See the license for the specific language governing permissions and
>>> + * limitations under the license.
>>> + */
>>> +package org.apache.logging.log4j.core.impl;
>>> +
>>> +import java.lang.reflect.Field;
>>> +
>>> +import org.apache.logging.log4j.util.SortedArrayStringMap;
>>> +import org.junit.Test;
>>> +
>>> +import static org.junit.Assert.*;
>>> +
>>> +/**
>>> + * Tests the ContextDataFactory class.
>>> + */
>>> +public class ContextDataFactoryPropertySetMissingConstructorTest {
>>> +
>>> +    @Test
>>> +    public void 
>>> intArgReturnsSortedArrayStringMapIfPropertySpecifiedButMissingIntConstructor()
>>>  throws Exception {
>>> +        System.setProperty("log4j2.ContextData", 
>>> FactoryTestStringMapWithoutIntConstructor.class.getName());
>>> +        assertTrue(ContextDataFactory.createContextData(2) instanceof 
>>> SortedArrayStringMap);
>>> +        SortedArrayStringMap actual = (SortedArrayStringMap) 
>>> ContextDataFactory.createContextData(2);
>>> +        Field thresholdField = 
>>> SortedArrayStringMap.class.getDeclaredField("threshold");
>>> +        thresholdField.setAccessible(true);
>>> +        assertEquals(2, thresholdField.getInt(actual));
>>> +        System.clearProperty("log4j2.ContextData");
>>> +    }
>>> +}
>>> \ No newline at end of file
>>> 
>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/cceb1808/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryPropertySetTest.java
>>> ----------------------------------------------------------------------
>>> diff --git 
>>> a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryPropertySetTest.java
>>>  
>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryPropertySetTest.java
>>> new file mode 100644
>>> index 0000000..b5bb3b2
>>> --- /dev/null
>>> +++ 
>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryPropertySetTest.java
>>> @@ -0,0 +1,52 @@
>>> +/*
>>> + * Licensed to the Apache Software Foundation (ASF) under one or more
>>> + * contributor license agreements. See the NOTICE file distributed with
>>> + * this work for additional information regarding copyright ownership.
>>> + * The ASF licenses this file to You under the Apache license, Version 2.0
>>> + * (the "License"); you may not use this file except in compliance with
>>> + * the License. You may obtain a copy of the License at
>>> + *
>>> + *      http://www.apache.org/licenses/LICENSE-2.0
>>> + *
>>> + * Unless required by applicable law or agreed to in writing, software
>>> + * distributed under the License is distributed on an "AS IS" BASIS,
>>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
>>> + * See the license for the specific language governing permissions and
>>> + * limitations under the license.
>>> + */
>>> +package org.apache.logging.log4j.core.impl;
>>> +
>>> +import java.lang.reflect.Field;
>>> +
>>> +import org.apache.logging.log4j.util.SortedArrayStringMap;
>>> +import org.junit.Test;
>>> +
>>> +import static org.junit.Assert.*;
>>> +
>>> +/**
>>> + * Tests the ContextDataFactory class.
>>> + */
>>> +public class ContextDataFactoryPropertySetTest {
>>> +
>>> +    @Test
>>> +    public void noArgReturnsSpecifiedImplIfPropertySpecified() throws 
>>> Exception {
>>> +        System.setProperty("log4j2.ContextData", 
>>> FactoryTestStringMap.class.getName());
>>> +        assertTrue(ContextDataFactory.createContextData() instanceof 
>>> FactoryTestStringMap);
>>> +        System.clearProperty("log4j2.ContextData");
>>> +    }
>>> +
>>> +    @Test
>>> +    public void intArgReturnsSpecifiedImplIfPropertySpecified() throws 
>>> Exception {
>>> +        System.setProperty("log4j2.ContextData", 
>>> FactoryTestStringMap.class.getName());
>>> +        assertTrue(ContextDataFactory.createContextData(2) instanceof 
>>> FactoryTestStringMap);
>>> +        System.clearProperty("log4j2.ContextData");
>>> +    }
>>> +
>>> +    @Test
>>> +    public void intArgSetsCapacityIfPropertySpecified() throws Exception {
>>> +        System.setProperty("log4j2.ContextData", 
>>> FactoryTestStringMap.class.getName());
>>> +        FactoryTestStringMap actual = (FactoryTestStringMap) 
>>> ContextDataFactory.createContextData(2);
>>> +        assertEquals(2, actual.initialCapacity);
>>> +        System.clearProperty("log4j2.ContextData");
>>> +    }
>>> +}
>>> \ No newline at end of file
>>> 
>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/cceb1808/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryTest.java
>>> ----------------------------------------------------------------------
>>> diff --git 
>>> a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryTest.java
>>>  
>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryTest.java
>>> new file mode 100644
>>> index 0000000..aca1c27
>>> --- /dev/null
>>> +++ 
>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/ContextDataFactoryTest.java
>>> @@ -0,0 +1,47 @@
>>> +/*
>>> + * Licensed to the Apache Software Foundation (ASF) under one or more
>>> + * contributor license agreements. See the NOTICE file distributed with
>>> + * this work for additional information regarding copyright ownership.
>>> + * The ASF licenses this file to You under the Apache license, Version 2.0
>>> + * (the "License"); you may not use this file except in compliance with
>>> + * the License. You may obtain a copy of the License at
>>> + *
>>> + *      http://www.apache.org/licenses/LICENSE-2.0
>>> + *
>>> + * Unless required by applicable law or agreed to in writing, software
>>> + * distributed under the License is distributed on an "AS IS" BASIS,
>>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
>>> + * See the license for the specific language governing permissions and
>>> + * limitations under the license.
>>> + */
>>> +package org.apache.logging.log4j.core.impl;
>>> +
>>> +import java.lang.reflect.Field;
>>> +
>>> +import org.apache.logging.log4j.util.SortedArrayStringMap;
>>> +import org.junit.Test;
>>> +
>>> +import static org.junit.Assert.*;
>>> +
>>> +/**
>>> + * Tests the ContextDataFactory class.
>>> + */
>>> +public class ContextDataFactoryTest {
>>> +    @Test
>>> +    public void noArgReturnsSortedArrayStringMapIfNoPropertySpecified() 
>>> throws Exception {
>>> +        assertTrue(ContextDataFactory.createContextData() instanceof 
>>> SortedArrayStringMap);
>>> +    }
>>> +
>>> +    @Test
>>> +    public void intArgReturnsSortedArrayStringMapIfNoPropertySpecified() 
>>> throws Exception {
>>> +        assertTrue(ContextDataFactory.createContextData(2) instanceof 
>>> SortedArrayStringMap);
>>> +    }
>>> +
>>> +    @Test
>>> +    public void intArgSetsCapacityIfNoPropertySpecified() throws Exception 
>>> {
>>> +        SortedArrayStringMap actual = (SortedArrayStringMap) 
>>> ContextDataFactory.createContextData(2);
>>> +        Field thresholdField = 
>>> SortedArrayStringMap.class.getDeclaredField("threshold");
>>> +        thresholdField.setAccessible(true);
>>> +        assertEquals(2, thresholdField.getInt(actual));
>>> +    }
>>> +}
>>> \ No newline at end of file
>>> 
>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/cceb1808/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/FactoryTestStringMap.java
>>> ----------------------------------------------------------------------
>>> diff --git 
>>> a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/FactoryTestStringMap.java
>>>  
>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/FactoryTestStringMap.java
>>> new file mode 100644
>>> index 0000000..9f7fcc7
>>> --- /dev/null
>>> +++ 
>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/FactoryTestStringMap.java
>>> @@ -0,0 +1,103 @@
>>> +/*
>>> + * Licensed to the Apache Software Foundation (ASF) under one or more
>>> + * contributor license agreements. See the NOTICE file distributed with
>>> + * this work for additional information regarding copyright ownership.
>>> + * The ASF licenses this file to You under the Apache license, Version 2.0
>>> + * (the "License"); you may not use this file except in compliance with
>>> + * the License. You may obtain a copy of the License at
>>> + *
>>> + *      http://www.apache.org/licenses/LICENSE-2.0
>>> + *
>>> + * Unless required by applicable law or agreed to in writing, software
>>> + * distributed under the License is distributed on an "AS IS" BASIS,
>>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
>>> + * See the license for the specific language governing permissions and
>>> + * limitations under the license.
>>> + */
>>> +package org.apache.logging.log4j.core.impl;
>>> +
>>> +import java.util.Map;
>>> +
>>> +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.TriConsumer;
>>> +
>>> +/**
>>> + * Dummy implementation of the StringMap interface for testing.
>>> + */
>>> +public class FactoryTestStringMap implements StringMap {
>>> +    int initialCapacity;
>>> +
>>> +    public FactoryTestStringMap() {
>>> +    }
>>> +
>>> +    public FactoryTestStringMap(final int initialCapacity) {
>>> +        this.initialCapacity = initialCapacity;
>>> +    }
>>> +
>>> +    @Override
>>> +    public Map<String, String> toMap() {
>>> +        return null;
>>> +    }
>>> +
>>> +    @Override
>>> +    public boolean containsKey(final String key) {
>>> +        return false;
>>> +    }
>>> +
>>> +    @Override
>>> +    public <V> void forEach(final BiConsumer<String, ? super V> action) {
>>> +
>>> +    }
>>> +
>>> +    @Override
>>> +    public <V, S> void forEach(final TriConsumer<String, ? super V, S> 
>>> action, final S state) {
>>> +
>>> +    }
>>> +
>>> +    @Override
>>> +    public <V> V getValue(final String key) {
>>> +        return null;
>>> +    }
>>> +
>>> +    @Override
>>> +    public boolean isEmpty() {
>>> +        return false;
>>> +    }
>>> +
>>> +    @Override
>>> +    public int size() {
>>> +        return 0;
>>> +    }
>>> +
>>> +    @Override
>>> +    public void clear() {
>>> +
>>> +    }
>>> +
>>> +    @Override
>>> +    public void freeze() {
>>> +
>>> +    }
>>> +
>>> +    @Override
>>> +    public boolean isFrozen() {
>>> +        return false;
>>> +    }
>>> +
>>> +    @Override
>>> +    public void putAll(final ReadOnlyStringMap source) {
>>> +
>>> +    }
>>> +
>>> +    @Override
>>> +    public void putValue(final String key, final Object value) {
>>> +
>>> +    }
>>> +
>>> +    @Override
>>> +    public void remove(final String key) {
>>> +
>>> +    }
>>> +}
>>> 
>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/cceb1808/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/FactoryTestStringMapWithoutIntConstructor.java
>>> ----------------------------------------------------------------------
>>> diff --git 
>>> a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/FactoryTestStringMapWithoutIntConstructor.java
>>>  
>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/FactoryTestStringMapWithoutIntConstructor.java
>>> new file mode 100644
>>> index 0000000..c87e729
>>> --- /dev/null
>>> +++ 
>>> b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/FactoryTestStringMapWithoutIntConstructor.java
>>> @@ -0,0 +1,99 @@
>>> +/*
>>> + * Licensed to the Apache Software Foundation (ASF) under one or more
>>> + * contributor license agreements. See the NOTICE file distributed with
>>> + * this work for additional information regarding copyright ownership.
>>> + * The ASF licenses this file to You under the Apache license, Version 2.0
>>> + * (the "License"); you may not use this file except in compliance with
>>> + * the License. You may obtain a copy of the License at
>>> + *
>>> + *      http://www.apache.org/licenses/LICENSE-2.0
>>> + *
>>> + * Unless required by applicable law or agreed to in writing, software
>>> + * distributed under the License is distributed on an "AS IS" BASIS,
>>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
>>> + * See the license for the specific language governing permissions and
>>> + * limitations under the license.
>>> + */
>>> +package org.apache.logging.log4j.core.impl;
>>> +
>>> +import java.util.Map;
>>> +
>>> +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.TriConsumer;
>>> +
>>> +/**
>>> + * Dummy implementation of the StringMap interface for testing.
>>> + */
>>> +public class FactoryTestStringMapWithoutIntConstructor implements 
>>> StringMap {
>>> +    int initialCapacity;
>>> +
>>> +    public FactoryTestStringMapWithoutIntConstructor() {
>>> +    }
>>> +
>>> +    @Override
>>> +    public Map<String, String> toMap() {
>>> +        return null;
>>> +    }
>>> +
>>> +    @Override
>>> +    public boolean containsKey(final String key) {
>>> +        return false;
>>> +    }
>>> +
>>> +    @Override
>>> +    public <V> void forEach(final BiConsumer<String, ? super V> action) {
>>> +
>>> +    }
>>> +
>>> +    @Override
>>> +    public <V, S> void forEach(final TriConsumer<String, ? super V, S> 
>>> action, final S state) {
>>> +
>>> +    }
>>> +
>>> +    @Override
>>> +    public <V> V getValue(final String key) {
>>> +        return null;
>>> +    }
>>> +
>>> +    @Override
>>> +    public boolean isEmpty() {
>>> +        return false;
>>> +    }
>>> +
>>> +    @Override
>>> +    public int size() {
>>> +        return 0;
>>> +    }
>>> +
>>> +    @Override
>>> +    public void clear() {
>>> +
>>> +    }
>>> +
>>> +    @Override
>>> +    public void freeze() {
>>> +
>>> +    }
>>> +
>>> +    @Override
>>> +    public boolean isFrozen() {
>>> +        return false;
>>> +    }
>>> +
>>> +    @Override
>>> +    public void putAll(final ReadOnlyStringMap source) {
>>> +
>>> +    }
>>> +
>>> +    @Override
>>> +    public void putValue(final String key, final Object value) {
>>> +
>>> +    }
>>> +
>>> +    @Override
>>> +    public void remove(final String key) {
>>> +
>>> +    }
>>> +}
>>> 
>>> 
>>> 
>>> 
>>> -- 
>>> Matt Sicker <[email protected]>
> 
> 
> 
> -- 
> Matt Sicker <[email protected]>

Reply via email to