Generators don't have client classes. Poor choice of words. What I had
in mind is that when Generators are loaded they might reference a
couple of client classes that are defined in some module. Now from
Generators perspective this is all loaded in SystemCL. I am afraid
that the TypeOracleClassLoader would not ignore these and the
generator would blow up with ClassCastException.

On Jul 24, 12:37 am, Alen Vrecko <alen_vre...@yahoo.com> wrote:
> > > What I have in mind is: Make the special CL per Generator. I'd set the
> > > CL to the Thread therefore Generators can access this functionality
> > > transparently by currentThread().getContextClassLoader() and modify
> > > TypeOracle to return classes in annotations from the special CL.
> > > Shouldn't be that difficult.
>
> > Why would you propose a separate CL per Generator?
>
> I am thinking that the TypeOracleClassLoader would define the client
> classes minus the client classes of the generator. In the example the
> special CL would include FooModule and MyInjector but not @GinModules
> since it is part of the generator. Should by any chance @GinModules be
> loaded in the TOCL and returned by MyInjector the Generator would fail
> with ClassCastException since it is expecting @GinModules loaded from
> SystemCL. At least this is to my understanding of CL. Besides
> reloading parts of the generator code, this includes the generator
> client code, I think that we agree is better to leave it out.
>
> I guess it could be just 1 TypeOracleClassLoader but it should know
> which client classes to ignore and return the ignored classes from
> SystemCL. I was thinking if the generator doesn't touch the
> TypeOracleClassLoader there is no loss. But if it wants something from
> it then the TOCL should inspect the generator and remove any possible
> client classes of the generator. Should there be just 1 CL it should
> remove the client code from all known generators since we don't want
> any surprises later on?
>
>
>
> > I'm not sure automatically setting the thread context CL is the best idea,
> > that would be a definite behavioral change and not necessarily the best
> > design.
>
> The reason why I wanted to do this is that Gin could work with new
> classes without any changes to source. Yeah. Not the way to design
> code. Could have thought about it better. You're right there are
> better ways.
>
> > I'd prefer an accessor on GeneratorContext, so that such a CL could
> > be lazily created only by generators that actually need it.
>
> Ok. This sounds fine to me. In Compile only mode I think we should
> return just the CL that loaded the hosted mode.
>
> > If an
> > individual Generator wants to push/pop the TCCL as part of its normal
> > operation for the benefit of some library, that seems better to me.
>
> Agreed. Good point.
>
>
>
> > > On Jul 23, 8:15 pm, Scott Blum <sco...@google.com> wrote:
> > > > If I follow you, I think that basically is what I was thinking.  Except
> > > > let's not continue calling it CCL (CompilingClassLoader, which is
> > > actually
> > > > even a misnomer these days).  It's a similar idea but this would be
> > > > separate.  Perhaps we can call it "ClientModelClassLoader" or
> > > > "ClientReflectingClassLoader" or "TypeOracleAsClassLoader".
>
> > > > On Thu, Jul 23, 2009 at 12:16 PM, Alen Vrecko <alen_vre...@yahoo.com>
> > > wrote:
>
> > > > > Separate the machine from the materials. I think this is good idea.
>
> > > > > Right now if you do a rename let say rename FooModule to BarModule
>
> > > > > @GinModules(FooModule.class) -> @GinModules(BarModule.class)
> > > > > public class MyInjector{....}
>
> > > > > and refresh the TypeOracleMediator will blow up with an NPE when
> > > > > trying to get the annotation (ClassNotFound).
>
> > > > > Maybe it should return BarModule.class from the special class loader?
>
> > > > > It shouldn't break the generator unless it is a moving part of a
> > > > > generator.
>
> > > > > How about a special classloader that is aware of the generator and
> > > > > gives only classes from ccl that are not a moving part of the
> > > > > generator (not in source or super source or recursive source/ssource
> > > > > of dependencies of the generator, libraries aren't in ccl anyway)?
>
> > > > > In the above case MyInjector and BarModule would be loaded from CCL
> > > > > while GinModules from System (since it is part of the generator).
>
> > > > > This way libraries and generators can be left in the system cl.
>
> > > > > On Jul 22, 7:30 pm, Scott Blum <sco...@google.com> wrote:
> > > > > > Brian, do you know if Guice allows you to specify a ClassLoader 
> > > > > > other
> > > > > than
> > > > > > the "active" one?
> > > > > > In principle, I would be okay with GeneratorContext providing a
> > > special
> > > > > > "other" ClassLoader to generators that contained only client code; 
> > > > > > it
> > > > > would
> > > > > > have exactly what TypeOracle does.and just be another way to get the
> > > > > exact
> > > > > > same information.
>
> > > > > > I just think we need to separate the machine from the materials. :)
>
>
--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---

Reply via email to