FELIX-6157 Converter build fails with Java 12
No additional unit tests needed as the existing unit tests already cover
this when run under Java 12
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk/converter/converter@1865310 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/osgi/util/converter/ConvertingImpl.java b/src/main/java/org/osgi/util/converter/ConvertingImpl.java
index 71b8aad..fc409d2 100644
--- a/src/main/java/org/osgi/util/converter/ConvertingImpl.java
+++ b/src/main/java/org/osgi/util/converter/ConvertingImpl.java
@@ -91,11 +91,23 @@
Set<Class< ? >> nmv = new HashSet<>(cim.keySet());
nmv.addAll(Arrays.<Class< ? >> asList(String.class, Class.class,
Comparable.class, CharSequence.class, Map.Entry.class));
+ // The following classes are only available from Java 12 onwards
+ addClassIfAvailable("java.lang.constant.Constable", nmv);
+ addClassIfAvailable("java.lang.constant.ConstantDesc", nmv);
INTERFACE_IMPLS = Collections.unmodifiableMap(iim);
NO_MAP_VIEW_TYPES = Collections.unmodifiableSet(nmv);
}
+ private static void addClassIfAvailable(String cls, Collection<Class<?>> collection) {
+ try {
+ Class<?> clazz = ConvertingImpl.class.getClassLoader().loadClass(cls);
+ collection.add(clazz);
+ } catch (Exception ex) {
+ // Class not available, to nothing
+ }
+ }
+
private final InternalConverter converter;
private volatile Object object;
private volatile Class< ? > sourceClass;
@@ -831,7 +843,7 @@
i++;
componentType = componentType.getComponentType();
}
-
+
if(i == 1) {
return Array.newInstance(componentType, 0);
} else {