org.knopflerfish.framework
Class ClassPatcher

java.lang.Object
  extended by org.knopflerfish.framework.ClassPatcher

public class ClassPatcher
extends java.lang.Object

This class contains byte code-manipulation functions for patching loaded bundle classes with custom wrapper methods.

It uses the ASM library (http://asm.objectweb.org)

See the resource file /patches.props for a list of patched methods. This file references code in ClassPatcherWrappers.

See Also:
ClassPatcherWrappers

Field Summary
protected  boolean bDumpClasses
           
protected  BundleClassLoader classLoader
           
protected  java.util.Hashtable matchProps
           
protected static java.util.Map patchers
           
protected  LDAPExpr patchesFilter
           
static java.lang.String PROP_BID
           
static java.lang.String PROP_CLASSNAME
           
static java.lang.String PROP_LOCATION
           
static java.lang.String PROP_METHODACCESS
           
static java.lang.String PROP_METHODDESC
           
static java.lang.String PROP_METHODNAME
           
protected  java.util.Map wrappers
           
 
Constructor Summary
protected ClassPatcher(BundleClassLoader classLoader)
           
 
Method Summary
protected  void addPatch(java.lang.String from, java.lang.String to, boolean defActive, boolean bStatic, java.lang.String filter)
           
protected  void dumpClassBytes(java.lang.String className, byte[] classBytes)
          Dump a byte array to a .class file
protected  void dumpInfo()
           
static ClassPatcher getInstance(BundleClassLoader classLoader)
           
protected  void init()
           
protected  void loadWrappers(java.lang.String urlS)
           
protected  void loadWrappersFromInputStream(java.io.InputStream is)
           
protected  void makeMatchProps()
           
protected static void parseSignature(java.lang.String sig, java.lang.String[] r)
           
 byte[] patch(java.lang.String className, byte[] classBytes)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

patchers

protected static java.util.Map patchers

classLoader

protected BundleClassLoader classLoader

matchProps

protected java.util.Hashtable matchProps

PROP_CLASSNAME

public static final java.lang.String PROP_CLASSNAME
See Also:
Constant Field Values

PROP_BID

public static final java.lang.String PROP_BID
See Also:
Constant Field Values

PROP_LOCATION

public static final java.lang.String PROP_LOCATION
See Also:
Constant Field Values

PROP_METHODNAME

public static final java.lang.String PROP_METHODNAME
See Also:
Constant Field Values

PROP_METHODACCESS

public static final java.lang.String PROP_METHODACCESS
See Also:
Constant Field Values

PROP_METHODDESC

public static final java.lang.String PROP_METHODDESC
See Also:
Constant Field Values

patchesFilter

protected LDAPExpr patchesFilter

bDumpClasses

protected boolean bDumpClasses

wrappers

protected java.util.Map wrappers
Constructor Detail

ClassPatcher

protected ClassPatcher(BundleClassLoader classLoader)
Method Detail

getInstance

public static ClassPatcher getInstance(BundleClassLoader classLoader)

init

protected void init()

patch

public byte[] patch(java.lang.String className,
                    byte[] classBytes)

loadWrappers

protected void loadWrappers(java.lang.String urlS)

loadWrappersFromInputStream

protected void loadWrappersFromInputStream(java.io.InputStream is)
                                    throws java.io.IOException
Throws:
java.io.IOException

parseSignature

protected static void parseSignature(java.lang.String sig,
                                     java.lang.String[] r)

addPatch

protected void addPatch(java.lang.String from,
                        java.lang.String to,
                        boolean defActive,
                        boolean bStatic,
                        java.lang.String filter)

dumpInfo

protected void dumpInfo()

makeMatchProps

protected void makeMatchProps()

dumpClassBytes

protected void dumpClassBytes(java.lang.String className,
                              byte[] classBytes)
Dump a byte array to a .class file