I've also had a lot of problems with def'ed forms. For example, if I do
this:
(def no-spacing (Spacing/createSpacing 0 0 0 false 0))
Which looks like this:
public static Spacing createSpacing(int minSpaces,
int maxSpaces,
int minLineFeeds,
boolean keepLineBreaks,
int keepBlankLines) {
return myFactory.createSpacing(minSpaces, maxSpaces, minLineFeeds,
keepLineBreaks, keepBlankLines);
}
myFactory is injected at some earlier point:
static void setFactory(SpacingFactory factory) {
myFactory = factory;
}
But during compilation that obviously hasn't happened and I get an NPE
during compilation. It's a little annoying that there really seems to be no
good way to create this value at namespace load time if I'm AOT compiling.
I can obviously defer it using defn with memoize or something, but that
seems clunky for what doesn't seem like that crazy a use case.
On 23 October 2013 15:21, Zach Oakes <[email protected]> wrote:
> Here's the error I get when I import LibGDX's Timer class:
>
> http://pastebin.com/q7wys8yi
>
>
> On Tuesday, October 22, 2013 9:55:16 PM UTC-4, Alex Miller wrote:
>>
>> I'd love to see a stack trace when that happens (could even be triggered
>> by dumping stack in your static initializer if nothing else).
>>
>> On Saturday, October 12, 2013 3:17:50 AM UTC-5, Wujek Srujek wrote:
>>>
>>> So you are saying compilation is trying to instantiate class and run
>>> static initializers? This seems very backward, are you sure?
>>>
>>>
>>> On Sat, Oct 12, 2013 at 8:30 AM, Zach Oakes <[email protected]> wrote:
>>>
>>>> I should add, I am aware I can bring in a class dynamically with
>>>> Class/forName, and that is what I ended up doing for the Timer class.
>>>> However, this is not always practical, and sometimes is simply not an
>>>> option if aot-compilation is required.
>>>>
>>>>
>>>> On Saturday, October 12, 2013 2:28:38 AM UTC-4, Zach Oakes wrote:
>>>>>
>>>>> I recently learned that merely importing a Java class in Clojure
>>>>> causes static initializers to be run. Sometimes, this causes compilation
>>>>> errors, because they are written with the assumption that they will only
>>>>> be
>>>>> run during runtime.
>>>>>
>>>>> I ran into this just now while trying to make a simple Clojure game
>>>>> with LibGDX. After simply importing its Timer class, I began getting
>>>>> compilation errors. The stack trace shows it is due to a static
>>>>> initializer<https://github.com/libgdx/libgdx/blob/511b557c1a2d23bf8110a05b0ef54cc20b7f958d/gdx/src/com/badlogic/gdx/utils/Timer.java#L32>attempting
>>>>> to instantiate the class!
>>>>>
>>>>> I also ran into this recently while trying to use RoboVM. My question
>>>>> is, do I have any options? I haven't found many discussions about this
>>>>> here
>>>>> or elsewhere. This surprises me, because it seems like something more
>>>>> people should be running into.
>>>>>
>>>> --
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Clojure" group.
>>>> To post to this group, send email to [email protected]
>>>> Note that posts from new members are moderated - please be patient with
>>>> your first post.
>>>> To unsubscribe from this group, send email to
>>>> [email protected]
>>>> For more options, visit this group at
>>>> http://groups.google.com/**group/clojure?hl=en<http://groups.google.com/group/clojure?hl=en>
>>>> ---
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Clojure" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> For more options, visit
>>>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out>
>>>> .
>>>>
>>>
>>> --
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to [email protected]
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/groups/opt_out.
>
--
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.