clojure.java-time
clojure.java-time copied to clipboard
Comparable exception thrown when `(zoned-date-time)` is invoked in a project built in graal native-image
Exception in thread "main" java.lang.ClassCastException: java_time.graph.Types cannot be cast to java.lang.Comparable
at clojure.lang.Util.compare(Util.java:153)
at clojure.lang.APersistentVector.compareTo(APersistentVector.java:439)
at java.util.concurrent.ConcurrentHashMap.compareComparables(ConcurrentHashMap.java:732)
at java.util.concurrent.ConcurrentHashMap$TreeBin.<init>(ConcurrentHashMap.java:2773)
at java.util.concurrent.ConcurrentHashMap.treeifyBin(ConcurrentHashMap.java:2630)
at java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1063)
at java.util.concurrent.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:1535)
at java_time.potemkin.util$fast_memoize$fn__11705.invoke(util.clj:50)
at java_time.graph$has_source_type_QMARK_$contains_src_types_QMARK___12015$fn__12016.invoke(graph.clj:279)
at clojure.core$some.invokeStatic(core.clj:2701)
at java_time.graph$has_source_type_QMARK_$contains_src_types_QMARK___12015.invoke(graph.clj:279)
at clojure.core$some.invokeStatic(core.clj:2701)
at java_time.graph$has_source_type_QMARK_.invokeStatic(graph.clj:282)
at java_time.graph$fn__12042.invokeStatic(graph.clj:301)
at java_time.graph$fn__12042.invoke(graph.clj:300)
at java_time.potemkin.util$fast_memoize$fn__11705.invoke(util.clj:52)
at java_time.graph$conversion_fn.invokeStatic(graph.clj:316)
at java_time.zone$zoned_date_time.invokeStatic(zone.clj:152)
assignable?
might be the problematic line since there is a >
in line 72.
Line 72 is comparing two numbers, why is that a problem? I'm not sure what's going on after looking at the code for 10 minutes. Seems like Types
must implement Comparable
in order to get inserted into the cache ConcurrentHashMap
. Not sure why this is happening under Graal.
Do you have any more ideas?
Re: Line 72, it's just what immediately stood out to me as an obvious comparator operation. i didn't put additional thought into understanding that code further.
As for ideas, I don't have much, but I did replace it with an invocation to the actual java.time constructor, ZonedDateTime
. That succeeded in compilation.
Sorry I'm not much help on the matter >.< I don't have intimate knowledge of how graal works.
It seems that I've got the same problem when using local-date
to construct date from string of given format, e.g. with only this code: (t/local-date "dd-MM-yyyy" "01-01-2000")
in the -main
function.
stack trace
Exception in thread "main" java.lang.ClassCastException: java_time.graph.Types cannot be cast to java.lang.Comparable
at clojure.lang.Util.compare(Util.java:153)
at clojure.lang.APersistentVector.compareTo(APersistentVector.java:439)
at java.util.concurrent.ConcurrentHashMap.compareComparables(ConcurrentHashMap.java:739)
at java.util.concurrent.ConcurrentHashMap$TreeBin.<init>(ConcurrentHashMap.java:2819)
at java.util.concurrent.ConcurrentHashMap.treeifyBin(ConcurrentHashMap.java:2676)
at java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1068)
at java.util.concurrent.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:1541)
at java_time.potemkin.util$fast_memoize$fn__1361.invoke(util.clj:50)
at java_time.graph.ConversionGraph$fn__1577.invoke(graph.clj:153)
at clojure.core$filter$fn__5911.invoke(core.clj:2821)
at clojure.lang.LazySeq.sval(LazySeq.java:42)
at clojure.lang.LazySeq.seq(LazySeq.java:58)
at clojure.lang.RT.seq(RT.java:535)
at clojure.core$seq__5419.invokeStatic(core.clj:139)
at clojure.core$reduce1.invokeStatic(core.clj:932)
at clojure.core$set.invokeStatic(core.clj:4101)
at clojure.core$set.invoke(core.clj:4093)
at java_time.graph.ConversionGraph.equivalent_targets(graph.clj:154)
at java_time.graph$graph_conversion_path.invokeStatic(graph.clj:193)
at java_time.graph$graph_conversion_path.invoke(graph.clj:188)
at java_time.graph$fn__1698.invokeStatic(graph.clj:303)
at java_time.graph$fn__1698.invoke(graph.clj:300)
at java_time.potemkin.util$fast_memoize$fn__1361.invoke(util.clj:52)
at java_time.graph$conversion_fn.invokeStatic(graph.clj:316)
at java_time.graph$conversion_fn.invoke(graph.clj:312)
at java_time.local$local_date.invokeStatic(local.clj:12)
at java_time.local$local_date.invoke(local.clj:12)
at myapp.core$_main.invokeStatic(core.clj:223)
at myapp.core$_main.doInvoke(core.clj:221)
at clojure.lang.RestFn.invoke(RestFn.java:397)
at clojure.lang.AFn.applyToHelper(AFn.java:152)
at clojure.lang.RestFn.applyTo(RestFn.java:132)
at myapp.core.main(Unknown Source)