CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-cglib--cglib-nodep

Code generation library for creating dynamic proxies, bean utilities, and fast reflection alternatives with bundled dependencies

Pending
Overview
Eval results
Files

transformation-utilities.mddocs/

Transformation Utilities

Bytecode transformation utilities for modifying classes at load time or generating transformed versions of existing classes. These utilities provide the foundation for advanced class manipulation and dynamic behavior modification.

Core Imports

import net.sf.cglib.transform.TransformingClassLoader;
import net.sf.cglib.transform.ClassTransformer;
import net.sf.cglib.transform.ClassFilter;
import net.sf.cglib.transform.ClassTransformerFactory;
import net.sf.cglib.transform.MethodFilter;

Capabilities

TransformingClassLoader

Class loader that applies transformations to classes as they are loaded.

/**
 * Class loader that applies transformations to classes as they are loaded
 */
public class TransformingClassLoader extends AbstractClassLoader {
    /**
     * Create transforming class loader
     * @param parent Parent class loader
     * @param filter Filter for classes to transform
     * @param t Factory for creating transformers
     */
    public TransformingClassLoader(ClassLoader parent, ClassFilter filter, ClassTransformerFactory t);
}

Usage Examples:

// Create filter for classes to transform
ClassFilter filter = new ClassFilter() {
    public boolean accept(String className) {
        return className.startsWith("com.mycompany.");
    }
};

// Create transformer factory
ClassTransformerFactory factory = new ClassTransformerFactory() {
    public ClassTransformer newInstance() {
        return new MyCustomTransformer();
    }
};

// Create transforming class loader
TransformingClassLoader loader = new TransformingClassLoader(
    Thread.currentThread().getContextClassLoader(),
    filter,
    factory
);

// Load and use transformed classes
Class<?> transformedClass = loader.loadClass("com.mycompany.MyClass");
Object instance = transformedClass.newInstance();

ClassTransformer

Abstract base class for implementing class transformations.

/**
 * Abstract base class for class transformations
 */
public abstract class ClassTransformer extends ClassVisitor {
    /**
     * Default constructor
     */
    public ClassTransformer();
    
    /**
     * Constructor with ASM API version
     * @param opcode ASM API version
     */
    public ClassTransformer(int opcode);
    
    /**
     * Set the target visitor for the transformation chain
     * @param target Target class visitor
     */
    public abstract void setTarget(ClassVisitor target);
}

ClassFilter

Interface for filtering classes during transformation.

/**
 * Interface for filtering classes during transformation
 */
public interface ClassFilter {
    /**
     * Determine if a class should be processed
     * @param className Fully qualified class name
     * @return true if class should be processed
     */
    boolean accept(String className);
}

Usage Examples:

// Filter by package prefix
ClassFilter packageFilter = new ClassFilter() {
    public boolean accept(String className) {
        return className.startsWith("com.myapp.");
    }
};

// Filter by class name pattern
ClassFilter patternFilter = new ClassFilter() {
    public boolean accept(String className) {
        return className.endsWith("Service") || className.endsWith("Repository");
    }
};

// Combine filters
ClassFilter combinedFilter = new ClassFilter() {
    public boolean accept(String className) {
        return packageFilter.accept(className) && patternFilter.accept(className);
    }
};

ClassTransformerFactory

Factory interface for creating class transformers.

/**
 * Factory for creating class transformers
 */
public interface ClassTransformerFactory {
    /**
     * Create new transformer instance
     * @return New ClassTransformer instance
     */
    ClassTransformer newInstance();
}

MethodFilter

Interface for filtering methods during transformation.

/**
 * Interface for filtering methods during transformation
 */
public interface MethodFilter {
    /**
     * Determine if a method should be processed
     * @param access Method access flags
     * @param name Method name
     * @param desc Method descriptor
     * @param signature Method signature (may be null)
     * @param exceptions Exception types thrown (may be null)
     * @return true if method should be processed
     */
    boolean accept(int access, String name, String desc, String signature, String[] exceptions);
}

Usage Examples:

// Filter public methods only
MethodFilter publicMethodFilter = new MethodFilter() {
    public boolean accept(int access, String name, String desc, String signature, String[] exceptions) {
        return (access & Opcodes.ACC_PUBLIC) != 0;
    }
};

// Filter by method name
MethodFilter nameFilter = new MethodFilter() {
    public boolean accept(int access, String name, String desc, String signature, String[] exceptions) {
        return name.startsWith("get") || name.startsWith("set");
    }
};

// Filter by return type
MethodFilter returnTypeFilter = new MethodFilter() {
    public boolean accept(int access, String name, String desc, String signature, String[] exceptions) {
        return desc.endsWith(")V"); // void return type
    }
};

ClassTransformerChain

Chains multiple class transformers together.

/**
 * Chains multiple class transformers together
 */
public class ClassTransformerChain extends AbstractClassTransformer {
    /**
     * Create transformation chain
     * @param transformers Array of transformers to chain
     */
    public ClassTransformerChain(ClassTransformer[] transformers);
}

MethodFilterTransformer

Applies method filtering during class transformation.

/**
 * Applies method filtering during class transformation
 */
public class MethodFilterTransformer extends AbstractClassTransformer {
    /**
     * Create method filter transformer
     * @param filter Method filter to apply
     * @param transformer Transformer for filtered methods
     */
    public MethodFilterTransformer(MethodFilter filter, MethodTransformer transformer);
}

ClassVisitorTee

Duplicates class visitor calls to multiple targets.

/**
 * Duplicates class visitor calls to multiple targets
 */
public class ClassVisitorTee extends ClassVisitor {
    /**
     * Create visitor tee
     * @param cv1 First class visitor
     * @param cv2 Second class visitor
     */
    public ClassVisitorTee(ClassVisitor cv1, ClassVisitor cv2);
}

MethodVisitorTee

Duplicates method visitor calls to multiple targets.

/**
 * Duplicates method visitor calls to multiple targets
 */
public class MethodVisitorTee extends MethodVisitor {
    /**
     * Create method visitor tee
     * @param mv1 First method visitor
     * @param mv2 Second method visitor
     */
    public MethodVisitorTee(MethodVisitor mv1, MethodVisitor mv2);
}

FieldVisitorTee

Duplicates field visitor calls to multiple targets.

/**
 * Duplicates field visitor calls to multiple targets
 */
public class FieldVisitorTee extends FieldVisitor {
    /**
     * Create field visitor tee
     * @param fv1 First field visitor
     * @param fv2 Second field visitor
     */
    public FieldVisitorTee(FieldVisitor fv1, FieldVisitor fv2);
}

Usage Patterns

Basic Class Transformation

// Create custom transformer
public class LoggingTransformer extends ClassTransformer {
    public void setTarget(ClassVisitor target) {
        // Implementation here
    }
    
    @Override
    public MethodVisitor visitMethod(int access, String name, String desc, 
                                   String signature, String[] exceptions) {
        MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions);
        return new LoggingMethodVisitor(mv, name);
    }
}

// Use with transforming class loader
ClassFilter filter = className -> className.startsWith("com.example.");
ClassTransformerFactory factory = () -> new LoggingTransformer();
TransformingClassLoader loader = new TransformingClassLoader(
    getClass().getClassLoader(), filter, factory);

Method Filtering and Transformation

// Filter methods for transformation
MethodFilter filter = (access, name, desc, signature, exceptions) -> {
    return (access & Opcodes.ACC_PUBLIC) != 0 && !name.equals("<init>");
};

// Apply transformation to filtered methods
MethodFilterTransformer transformer = new MethodFilterTransformer(
    filter, 
    new TimingMethodTransformer()
);

Install with Tessl CLI

npx tessl i tessl/maven-cglib--cglib-nodep

docs

bean-utilities.md

core-utilities.md

index.md

proxy-enhancement.md

reflection-utilities.md

transformation-utilities.md

utility-classes.md

tile.json