Open palexdev opened 1 year ago
Hi there!
Thanks for the flexmark-java
library 👍
Are there any plans for compatibility with graalvm (native image)?
I'm hitting a somewhat similar error in a binary built with GraalVM:
Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
at com.vladsch.flexmark.util.misc.BitFieldSet.add(BitFieldSet.java:659)
at com.vladsch.flexmark.util.misc.BitFieldSet.of(BitFieldSet.java:1204)
at com.vladsch.flexmark.util.sequence.LineAppendable.<clinit>(LineAppendable.java:48)
I tried #578 and I confirm it fixes my issue. Any chance we can get a release with that fix any time soon?
Would be good to see this fixed. I was able to patch the change from https://github.com/vsch/flexmark-java/pull/578 into my image using GraalVM's substitution feature so I didn't have to use a rebuilt flexmark jar:
@TargetClass(value = BitFieldSet.class, innerClass = "UniverseLoader")
final class com_vladsch_flexmark_util_misc_BitFieldSet_UniverseLoader {
@Alias
static ConcurrentHashMap<Class, Enum[]> enumUniverseMap;
@Substitute
public static <E extends Enum<E>> Enum[] getUniverseSlow(Class<E> elementType) {
assert (elementType.isEnum());
Enum[] cachedUniverse = enumUniverseMap.get(elementType);
if (cachedUniverse != null) return cachedUniverse;
E[] constants = elementType.getEnumConstants();
int enums = constants.length;
if (enums > 0) {
cachedUniverse = new Enum[enums];
enums = 0;
for (E constant : constants) {
cachedUniverse[enums++] = constant;
}
} else {
cachedUniverse = new Enum<?>[0];
}
enumUniverseMap.put(elementType, cachedUniverse);
return cachedUniverse;
}
}
I'm trying to build an app with JavaFX and markdown-javafx-renderer (which uses flexmark) using GraalVM. I can successfully build the image but at runtime the app crashes with the following exception:
To Reproduce
Here's the Reproducer project I'm using: Reproducer.zip
Steps to reproduce: 1) Execute the
nativeBuild
Gradle task 2) Execute thenativeRun
Gradle task