You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rg...@apache.org on 2020/02/16 19:00:08 UTC
[logging-log4j2] branch master updated: [LOG4J2-2604/2649] Change
MethodHandle to Constructor to adapt graalvm (#291)
This is an automated email from the ASF dual-hosted git repository.
rgoers pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
The following commit(s) were added to refs/heads/master by this push:
new 6b9035d [LOG4J2-2604/2649] Change MethodHandle to Constructor to adapt graalvm (#291)
6b9035d is described below
commit 6b9035d8a2fb85cefe23e7a80aa17d6b4337604c
Author: terrence <Mh...@users.noreply.github.com>
AuthorDate: Mon Feb 17 02:59:58 2020 +0800
[LOG4J2-2604/2649] Change MethodHandle to Constructor to adapt graalvm (#291)
* change MethodHandle to Constructor
* format space.
* add comment about why change to Constructor
---
.../log4j/core/impl/ContextDataFactory.java | 32 ++++++++++++----------
1 file changed, 18 insertions(+), 14 deletions(-)
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 70b548d..2a152d7 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,9 +16,7 @@
*/
package org.apache.logging.log4j.core.impl;
-import java.lang.invoke.MethodHandle;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.MethodType;
+import java.lang.reflect.Constructor;
import java.util.Map;
import java.util.Map.Entry;
@@ -48,11 +46,17 @@ import org.apache.logging.log4j.util.StringMap;
* @since 2.7
*/
public class ContextDataFactory {
- private static final MethodHandles.Lookup LOOKUP = MethodHandles.lookup();
private static final String CLASS_NAME = PropertiesUtil.getProperties().getStringProperty("log4j2.ContextData");
private static final Class<? extends StringMap> CACHED_CLASS = createCachedClass(CLASS_NAME);
- private static final MethodHandle DEFAULT_CONSTRUCTOR = createDefaultConstructor(CACHED_CLASS);
- private static final MethodHandle INITIAL_CAPACITY_CONSTRUCTOR = createInitialCapacityConstructor(CACHED_CLASS);
+
+ /**
+ * In LOG4J2-2649 (https://issues.apache.org/jira/browse/LOG4J2-2649),
+ * the reporter said some reason about using graalvm to static compile.
+ * In graalvm doc (https://github.com/oracle/graal/blob/master/substratevm/LIMITATIONS.md),
+ * graalvm is not support MethodHandle now, so the Constructor need not to return MethodHandle.
+ */
+ private static final Constructor<?> DEFAULT_CONSTRUCTOR = createDefaultConstructor(CACHED_CLASS);
+ private static final Constructor<?> INITIAL_CAPACITY_CONSTRUCTOR = createInitialCapacityConstructor(CACHED_CLASS);
private static final StringMap EMPTY_STRING_MAP = createContextData(0);
@@ -71,24 +75,24 @@ public class ContextDataFactory {
}
}
- private static MethodHandle createDefaultConstructor(final Class<? extends StringMap> cachedClass) {
+ private static Constructor<?> createDefaultConstructor(final Class<? extends StringMap> cachedClass){
if (cachedClass == null) {
return null;
}
try {
- return LOOKUP.findConstructor(cachedClass, MethodType.methodType(void.class));
- } catch (final NoSuchMethodException | IllegalAccessException ignored) {
+ return cachedClass.getConstructor();
+ } catch (final NoSuchMethodException | IllegalAccessError ignored) {
return null;
}
}
- private static MethodHandle createInitialCapacityConstructor(final Class<? extends StringMap> cachedClass) {
+ private static Constructor<?> createInitialCapacityConstructor(final Class<? extends StringMap> cachedClass){
if (cachedClass == null) {
return null;
}
try {
- return LOOKUP.findConstructor(cachedClass, MethodType.methodType(void.class, int.class));
- } catch (final NoSuchMethodException | IllegalAccessException ignored) {
+ return cachedClass.getConstructor(int.class);
+ } catch (final NoSuchMethodException | IllegalAccessError ignored) {
return null;
}
}
@@ -98,7 +102,7 @@ public class ContextDataFactory {
return new SortedArrayStringMap();
}
try {
- return (IndexedStringMap) DEFAULT_CONSTRUCTOR.invoke();
+ return (IndexedStringMap) DEFAULT_CONSTRUCTOR.newInstance();
} catch (final Throwable ignored) {
return new SortedArrayStringMap();
}
@@ -109,7 +113,7 @@ public class ContextDataFactory {
return new SortedArrayStringMap(initialCapacity);
}
try {
- return (IndexedStringMap) INITIAL_CAPACITY_CONSTRUCTOR.invoke(initialCapacity);
+ return (IndexedStringMap) INITIAL_CAPACITY_CONSTRUCTOR.newInstance(initialCapacity);
} catch (final Throwable ignored) {
return new SortedArrayStringMap(initialCapacity);
}