Right, my Spacing problem is not related to the static initializer problem
(which I also suffer from) but it is another example of (what seems to me)
a fairly standard pattern that I can't use in Clojure if I AOT and which
doesn't have an obvious workaround.


On 24 October 2013 03:32, Alex Miller <a...@puredanger.com> wrote:

> Agreed - merely importing this class shouldn't be an issue (which is the
> issue at hand).
>
> If you need to configure Spacing, you should do that prior to using it in
> your def, but that should work fine. If that needs to happen at runtime,
> then you shouldn't do this in a def.
>
>
> On Wednesday, October 23, 2013 9:01:15 AM UTC-5, Aaron Cohen wrote:
>
>> I'm not sure if this is related to the original problem.
>>
>>  How is the setFactory method expected to be invoked, through some sort
>> of dependency injection framework?
>>
>>
>> On Wed, Oct 23, 2013 at 7:06 AM, Colin Fleming <colin.ma...@gmail.com>wrote:
>>
>>>  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 <zso...@gmail.com> 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 <zso...@gmail.com> 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 clo...@googlegroups.com
>>>>>>> Note that posts from new members are moderated - please be patient
>>>>>>> with your first post.
>>>>>>> To unsubscribe from this group, send email to
>>>>>>> clojure+u...@googlegroups.com
>>>>>>> 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 clojure+u...@googlegroups.com.
>>>>>>> For more options, visit 
>>>>>>> https://groups.google.com/**grou**ps/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 clo...@googlegroups.com
>>>> Note that posts from new members are moderated - please be patient with
>>>> your first post.
>>>> To unsubscribe from this group, send email to
>>>> clojure+u...@**googlegroups.com
>>>> 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 clojure+u...@**googlegroups.com.
>>>> 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 clo...@googlegroups.com
>>> Note that posts from new members are moderated - please be patient with
>>> your first post.
>>> To unsubscribe from this group, send email to
>>> clojure+u...@**googlegroups.com
>>> 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 clojure+u...@**googlegroups.com.
>>> 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 clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> 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 clojure+unsubscr...@googlegroups.com.
> 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 clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
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 clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to