groovy.util
Class ProxyGenerator

java.lang.Object
  extended by groovy.util.ProxyGenerator

public class ProxyGenerator
extends java.lang.Object

Classes to generate 'Proxy' objects which implement interfaces, maps of closures and/or extend classes/delegates.

Author:
Paul King, Guillaume Laforge

Field Summary
private  boolean debug
           
private  boolean emptyMethods
           
private  java.util.List groovyObjectMethods
           
static ProxyGenerator INSTANCE
           
private  java.util.List objectMethods
           
private  java.lang.ClassLoader override
           
 
Constructor Summary
ProxyGenerator()
           
 
Method Summary
private  void addMapOrDummyCall(java.util.Map map, java.lang.StringBuffer buffer, java.lang.reflect.Method method)
           
private  void addMethodBody(java.lang.StringBuffer buffer, java.lang.String method, java.lang.Class[] parameterTypes)
           
private  java.lang.Class[] addMethodPrefix(java.lang.StringBuffer buffer, java.lang.reflect.Method method)
           
private  void addMethodSuffix(java.lang.StringBuffer buffer)
           
private  void addNewMapCall(java.lang.StringBuffer buffer, java.lang.String methodName)
           
private  void addOverridingMapCall(java.lang.StringBuffer buffer, java.lang.reflect.Method method, boolean closureIndicator)
           
private  void addUnsupportedBody(java.lang.StringBuffer buffer)
           
private  void addWrappedCall(java.lang.StringBuffer buffer, java.lang.reflect.Method method, java.util.Map map)
           
private  void addWrappedMethodBody(java.lang.StringBuffer buffer, java.lang.reflect.Method method, java.lang.Class[] parameterTypes)
           
private  boolean containsEquivalentMethod(java.util.Collection<java.lang.reflect.Method> publicAndProtectedMethods, java.lang.reflect.Method candidate)
           
 boolean getDebug()
           
 boolean getEmptyMethods()
           
private  java.util.List<java.lang.reflect.Method> getInheritedMethods(java.lang.Class baseClass, java.util.List<java.lang.reflect.Method> methods)
           
 java.lang.ClassLoader getOverride()
           
 java.lang.String getSimpleName(java.lang.Class c)
          TODO once we switch to Java 1.5 bt default, use Class#getSimpleName() directly
private  boolean hasMatchingParameterTypes(java.lang.reflect.Method method, java.lang.reflect.Method candidate)
           
 java.lang.Object instantiateAggregate(java.util.List interfaces)
           
 java.lang.Object instantiateAggregate(java.util.Map closureMap, java.util.List interfaces)
           
 java.lang.Object instantiateAggregate(java.util.Map closureMap, java.util.List interfaces, java.lang.Class clazz)
           
 java.lang.Object instantiateAggregate(java.util.Map closureMap, java.util.List interfaces, java.lang.Class clazz, java.lang.Object[] constructorArgs)
           
 java.lang.Object instantiateAggregateFromBaseClass(java.lang.Class clazz)
           
 java.lang.Object instantiateAggregateFromBaseClass(Closure cl, java.lang.Class clazz)
           
 java.lang.Object instantiateAggregateFromBaseClass(java.util.Map map, java.lang.Class clazz)
           
 java.lang.Object instantiateAggregateFromBaseClass(java.util.Map map, java.lang.Class clazz, java.lang.Object[] constructorArgs)
           
 java.lang.Object instantiateAggregateFromInterface(java.lang.Class clazz)
           
 java.lang.Object instantiateAggregateFromInterface(java.util.Map map, java.lang.Class clazz)
           
 java.lang.Object instantiateDelegate(java.util.List interfaces, java.lang.Object delegate)
           
 java.lang.Object instantiateDelegate(java.util.Map closureMap, java.util.List interfaces, java.lang.Object delegate)
           
 java.lang.Object instantiateDelegate(java.lang.Object delegate)
           
 java.lang.Object instantiateDelegateWithBaseClass(java.util.Map closureMap, java.util.List interfaces, java.lang.Object delegate)
           
 java.lang.Object instantiateDelegateWithBaseClass(java.util.Map closureMap, java.util.List interfaces, java.lang.Object delegate, java.lang.Class baseClass)
           
 java.lang.Object instantiateDelegateWithBaseClass(java.util.Map closureMap, java.util.List interfaces, java.lang.Object delegate, java.lang.Class baseClass, java.lang.String name)
           
 void setDebug(boolean debug)
          Instructs ProxyGenerator to dump generated Groovy source code to standard output during construction.
 void setEmptyMethods(boolean emptyMethods)
          Changes generated methods to have empty implementations.
private static void setMetaClass(MetaClass metaClass)
           
 void setOverride(java.lang.ClassLoader override)
           
 java.lang.String shortName(java.lang.String name)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

INSTANCE

public static final ProxyGenerator INSTANCE

override

private java.lang.ClassLoader override

debug

private boolean debug

emptyMethods

private boolean emptyMethods

objectMethods

private java.util.List objectMethods

groovyObjectMethods

private java.util.List groovyObjectMethods
Constructor Detail

ProxyGenerator

public ProxyGenerator()
Method Detail

getDebug

public boolean getDebug()

setDebug

public void setDebug(boolean debug)
Instructs ProxyGenerator to dump generated Groovy source code to standard output during construction. This is useful for debugging purposes but should be turned off in production.

Parameters:
debug - true if you want generated source to be printed

getEmptyMethods

public boolean getEmptyMethods()

setEmptyMethods

public void setEmptyMethods(boolean emptyMethods)
Changes generated methods to have empty implementations. Methods in generated aggregates not supplied in a closures map or base class are given 'default' implementations. The implementation will normally throw an UnsupportedOperationException but setting this boolean will leave it empty.

Parameters:
emptyMethods - true if you want generated methods to be empty

getOverride

public java.lang.ClassLoader getOverride()

setOverride

public void setOverride(java.lang.ClassLoader override)

instantiateAggregateFromBaseClass

public java.lang.Object instantiateAggregateFromBaseClass(java.lang.Class clazz)

instantiateAggregateFromBaseClass

public java.lang.Object instantiateAggregateFromBaseClass(java.util.Map map,
                                                          java.lang.Class clazz)

instantiateAggregateFromBaseClass

public java.lang.Object instantiateAggregateFromBaseClass(Closure cl,
                                                          java.lang.Class clazz)

instantiateAggregateFromBaseClass

public java.lang.Object instantiateAggregateFromBaseClass(java.util.Map map,
                                                          java.lang.Class clazz,
                                                          java.lang.Object[] constructorArgs)

instantiateAggregateFromInterface

public java.lang.Object instantiateAggregateFromInterface(java.lang.Class clazz)

instantiateAggregateFromInterface

public java.lang.Object instantiateAggregateFromInterface(java.util.Map map,
                                                          java.lang.Class clazz)

instantiateAggregate

public java.lang.Object instantiateAggregate(java.util.List interfaces)

instantiateAggregate

public java.lang.Object instantiateAggregate(java.util.Map closureMap,
                                             java.util.List interfaces)

instantiateAggregate

public java.lang.Object instantiateAggregate(java.util.Map closureMap,
                                             java.util.List interfaces,
                                             java.lang.Class clazz)

instantiateAggregate

public java.lang.Object instantiateAggregate(java.util.Map closureMap,
                                             java.util.List interfaces,
                                             java.lang.Class clazz,
                                             java.lang.Object[] constructorArgs)

instantiateDelegate

public java.lang.Object instantiateDelegate(java.lang.Object delegate)

instantiateDelegate

public java.lang.Object instantiateDelegate(java.util.List interfaces,
                                            java.lang.Object delegate)

instantiateDelegate

public java.lang.Object instantiateDelegate(java.util.Map closureMap,
                                            java.util.List interfaces,
                                            java.lang.Object delegate)

instantiateDelegateWithBaseClass

public java.lang.Object instantiateDelegateWithBaseClass(java.util.Map closureMap,
                                                         java.util.List interfaces,
                                                         java.lang.Object delegate)

instantiateDelegateWithBaseClass

public java.lang.Object instantiateDelegateWithBaseClass(java.util.Map closureMap,
                                                         java.util.List interfaces,
                                                         java.lang.Object delegate,
                                                         java.lang.Class baseClass)

instantiateDelegateWithBaseClass

public java.lang.Object instantiateDelegateWithBaseClass(java.util.Map closureMap,
                                                         java.util.List interfaces,
                                                         java.lang.Object delegate,
                                                         java.lang.Class baseClass,
                                                         java.lang.String name)

addWrappedCall

private void addWrappedCall(java.lang.StringBuffer buffer,
                            java.lang.reflect.Method method,
                            java.util.Map map)

containsEquivalentMethod

private boolean containsEquivalentMethod(java.util.Collection<java.lang.reflect.Method> publicAndProtectedMethods,
                                         java.lang.reflect.Method candidate)

hasMatchingParameterTypes

private boolean hasMatchingParameterTypes(java.lang.reflect.Method method,
                                          java.lang.reflect.Method candidate)

getInheritedMethods

private java.util.List<java.lang.reflect.Method> getInheritedMethods(java.lang.Class baseClass,
                                                                     java.util.List<java.lang.reflect.Method> methods)

addNewMapCall

private void addNewMapCall(java.lang.StringBuffer buffer,
                           java.lang.String methodName)

addOverridingMapCall

private void addOverridingMapCall(java.lang.StringBuffer buffer,
                                  java.lang.reflect.Method method,
                                  boolean closureIndicator)

addMapOrDummyCall

private void addMapOrDummyCall(java.util.Map map,
                               java.lang.StringBuffer buffer,
                               java.lang.reflect.Method method)

addUnsupportedBody

private void addUnsupportedBody(java.lang.StringBuffer buffer)

addMethodPrefix

private java.lang.Class[] addMethodPrefix(java.lang.StringBuffer buffer,
                                          java.lang.reflect.Method method)

addMethodBody

private void addMethodBody(java.lang.StringBuffer buffer,
                           java.lang.String method,
                           java.lang.Class[] parameterTypes)

addWrappedMethodBody

private void addWrappedMethodBody(java.lang.StringBuffer buffer,
                                  java.lang.reflect.Method method,
                                  java.lang.Class[] parameterTypes)

addMethodSuffix

private void addMethodSuffix(java.lang.StringBuffer buffer)

getSimpleName

public java.lang.String getSimpleName(java.lang.Class c)
TODO once we switch to Java 1.5 bt default, use Class#getSimpleName() directly

Parameters:
c - the class of which we want the readable simple name
Returns:
the readable simple name

shortName

public java.lang.String shortName(java.lang.String name)

setMetaClass

private static void setMetaClass(MetaClass metaClass)


Copyright © ${year} The Codehaus. All Rights Reserved.