Top Description Fields Constructors Methods
org.codehaus.groovy.runtime.m12n

public abstract Class SimpleExtensionModule

extends ExtensionModule
Class Inheritance
Known Direct Subclasses
org.codehaus.groovy.runtime.m12n.MetaInfExtensionModule
Imports
groovy.lang.MetaMethod, org.codehaus.groovy.reflection.CachedClass, .CachedMethod, .ReflectionCache, org.codehaus.groovy.runtime.metaclass.NewInstanceMetaMethod, .NewStaticMetaMethod, java.util.LinkedList, .List, java.util.logging.Logger

An extension module which provides extension methods using a org.codehaus.groovy.runtime.DefaultGroovyMethods-like implementation, that is to say using static methods defined in an "extension class".

For commodity, multiple extension classes may be defined in a single module, including classes used to define new static methods.

Modules are required to implement the getInstanceMethodsExtensionClasses for classes defining new instance methods, and getStaticMethodsExtensionClasses() for classes defining static methods.

For example, to define a module adding methods to the String class, you can write a helper class:

class StringExtension {
    public static int count(String self, char c) {
        int result = 0;
        for (int i=0;i<self.length(); i++) {
            if (self.charAt(i)==c) result++;
        }
        return result;
    }
}

This class defines a single static method taking the string instance as first argument, allowing to define a new instance method on the String class:

String#count(char c)
.

To define a new static method on a class, as the static modifier is already used for instance methods, you must use another helper class, for example:

class StaticStringExtension {
    public static void foo(String self) { System.out.println("foo"); }
}

The first argument of the method is only used to tell the class for which we add a static method. You can now define an extension module:

class MyStringModule extends SimpleExtensionModule {
    // ...

    public List<Class> getInstanceMethodsExtensionClasses() {
        return Collections.singletonList(StringExtension.class);
    }

    public List<Class> getStaticMethodsExtensionClasses() {
        return Collections.singletonList(StaticStringExtension.class);
    }
}
Since
2.0.0

Field Summary

Modifier and TypeField and Description
private static final Logger

Constructor Summary

AccessConstructor and Description
public
SimpleExtensionModule(final String moduleName, final String moduleVersion)

Method Summary

Modifier and TypeMethod and Description
private static void
createMetaMethods(final Class<T> extensionClass, final List<MetaMethod> metaMethods, final boolean isStatic)

public abstract List<Class<T>>

Returns:

the list of classes defining new instance methods.
getInstanceMethodsExtensionClasses
()

public List<MetaMethod>
public abstract List<Class<T>>

Returns:

the list of classes defining new static methods.
getStaticMethodsExtensionClasses
()

Inherited from org.codehaus.groovy.runtime.m12n.ExtensionModule:
getNamegetVersiontoString

Field Detail

LOGback to summary
private static final Logger LOG

Constructor Detail

SimpleExtensionModuleback to summary
public SimpleExtensionModule(final String moduleName, final String moduleVersion)

Method Detail

createMetaMethodsback to summary
private static void createMetaMethods(final Class<T> extensionClass, final List<MetaMethod> metaMethods, final boolean isStatic)
getInstanceMethodsExtensionClassesback to summary
public abstract List<Class<T>> getInstanceMethodsExtensionClasses()
Returns:List<Class<T>>

the list of classes defining new instance methods.

getMetaMethodsback to summary
public List<MetaMethod> getMetaMethods()

Implements abstract org.codehaus.groovy.runtime.m12n.ExtensionModule.getMetaMethods.

Annotations
@Override
getStaticMethodsExtensionClassesback to summary
public abstract List<Class<T>> getStaticMethodsExtensionClasses()
Returns:List<Class<T>>

the list of classes defining new static methods.