In case anyone is interested in a workaround for this, I managed to "fix"
my compilation by stubbing out the problematic classes and putting the
stubs ahead of the real classes in the classpath when I compile. Where
those stubs return other objects that are required during static
initialisation, I create those classes with Mockito. I feel dirty all over
but it does work.

I'm also tinkering with a fork of Clojure in the background that uses ASM
Types instead of Class objects. It's still a long way from done but it's
looking like that might provide a solution for compilation, at least. I'll
report back if I ever get it working.


On 15 December 2013 14:05, Colin Fleming <colin.mailingl...@gmail.com>wrote:

> I've just spent some time today looking at the compiler code, and
> unfortunately I think the answer is "no". When a symbol is imported,
> Clojure currently instantiates the Class object using Class.forName() and
> stores that in the namespace's mapping. At the point the Class is
> instantiated, static initializers are run. So the only way to avoid that is
> not instantiate the Class and store something else in the mapping.
>
> Alex's suggestion above to store the string representing the class name
> and load the class on demand might work for REPL style development but
> won't work for AOT compilation since reflection is used to find fields,
> methods etc on the class during compilation. The only solution that I can
> see that would work for AOT would be to store some sort of class wrapper
> object which reads the class bytecode to get that information without
> instantiating the class.
>
> However both of these suggestions break a fairly fundamental assumption -
> that importing a class creates a mapping from its name to a Class object. I
> have no idea what sort of code might be out there making that assumption,
> but it's probably fair to assume there could be a lot of it. At some point
> I might look into creating a fork of Clojure I just use to AOT compile.
>
>
> On 12 December 2013 03:41, Robin Heggelund Hansen <skinney...@gmail.com>wrote:
>
>> Is this something that is fixable?
>>
>> --
>> --
>> 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