org.codehaus.groovy.runtime.metaclass
Class ReflectorLoader

java.lang.Object
  extended by java.lang.ClassLoader
      extended by org.codehaus.groovy.runtime.metaclass.ReflectorLoader

public class ReflectorLoader
extends ClassLoader

Reflector creation helper. This class is used to define the Refloctor classes. For each ClassLoader such a loader will be created by MetaClass. Special about this loader is, that it knows the classes form the Groovy Runtime. The Reflector class is resolved in different ways: During the definition of a class Reflector will resolve to the Reflector class of the runtime, even if there is another Reflector class in the parent loader. After the new class is defined Reflector will resolve like other Groovy classes. This loader is able to resolve all Groovy classes even if the parent does not know them, but the parent serves first (Reflector during a class definition is different).

Version:
$Revision: 16709 $
Author:
Jochen Theodorou

Constructor Summary
ReflectorLoader(ClassLoader parent)
          creates a RelfectorLoader.
 
Method Summary
 Class defineClass(String name, byte[] bytecode, ProtectionDomain domain)
          helper method to define Reflector classes.
protected  Class findClass(String name)
          Tries to find a Groovy class.
 Class getLoadedClass(String name)
          try to load one of the defined Reflector classes by name.
protected  Class loadClass(String name, boolean resolve)
          Loads a class per name.
 
Methods inherited from class java.lang.ClassLoader
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findLibrary, findLoadedClass, findResource, findResources, findSystemClass, getPackage, getPackages, getParent, getResource, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ReflectorLoader

public ReflectorLoader(ClassLoader parent)
creates a RelfectorLoader.

Parameters:
parent - the parent loader. This should never be null!
Method Detail

findClass

protected Class findClass(String name)
                   throws ClassNotFoundException
Tries to find a Groovy class.

Overrides:
findClass in class ClassLoader
Returns:
the class if found
Throws:
ClassNotFoundException - if not found

loadClass

protected Class loadClass(String name,
                          boolean resolve)
                   throws ClassNotFoundException
Loads a class per name. Unlike a normal loadClass this version behaves different during a class definition. In that case it checks if the class we want to load is Reflector and returns class if the check is successful. If it is not during a class definition it just calls the super class version of loadClass.

Overrides:
loadClass in class ClassLoader
Parameters:
name - of the class to load
resolve - is true if the class should be resolved
Throws:
ClassNotFoundException
See Also:
Reflector, ClassLoader.loadClass(String, boolean)

defineClass

public Class defineClass(String name,
                         byte[] bytecode,
                         ProtectionDomain domain)
helper method to define Reflector classes.

Parameters:
name - of the Reflector
bytecode - the bytecode
domain - the protection domain
Returns:
the generated class

getLoadedClass

public Class getLoadedClass(String name)
try to load one of the defined Reflector classes by name.

Parameters:
name - of the Reflector class
Returns:
the Reflector class if defined else null.

Copyright © 2003-2010 The Codehaus. All rights reserved.