Java 类java.lang.instrument.ClassDefinition 实例源码

项目:jforgame    文件:MyAgent.java   
public static void agentmain(String args,Instrumentation inst){
    try{
        System.err.println("传进来的参数为"+args);
        File f = new File(args);
        byte[] targetClassFile = new byte[(int)f.length()];
        DataInputStream dis = new DataInputStream(new FileInputStream(f));
        dis.readFully(targetClassFile);
        dis.close();

        DynamicClassLoader myLoader = new DynamicClassLoader();
        Class targetClazz = myLoader.findClass(targetClassFile);
        System.err.println("目标class类全路径为"+targetClazz.getName());
        ClassDefinition clazzDef = new ClassDefinition(Class.forName(targetClazz.getName()), targetClassFile);
        inst.redefineClasses(clazzDef);

        System.err.println("重新定义"+args+"完成!!");

    }catch(Exception e){
        e.printStackTrace();
    }
}
项目:OpenJSharp    文件:InstrumentationImpl.java   
public void
redefineClasses(ClassDefinition...  definitions)
        throws  ClassNotFoundException {
    if (!isRedefineClassesSupported()) {
        throw new UnsupportedOperationException("redefineClasses is not supported in this environment");
    }
    if (definitions == null) {
        throw new NullPointerException("null passed as 'definitions' in redefineClasses");
    }
    for (int i = 0; i < definitions.length; ++i) {
        if (definitions[i] == null) {
            throw new NullPointerException("element of 'definitions' is null in redefineClasses");
        }
    }
    if (definitions.length == 0) {
        return; // short-circuit if there are no changes requested
    }

    redefineClasses0(mNativeAgent, definitions);
}
项目:jdk8u-jdk    文件:InstrumentationImpl.java   
public void
redefineClasses(ClassDefinition...  definitions)
        throws  ClassNotFoundException {
    if (!isRedefineClassesSupported()) {
        throw new UnsupportedOperationException("redefineClasses is not supported in this environment");
    }
    if (definitions == null) {
        throw new NullPointerException("null passed as 'definitions' in redefineClasses");
    }
    for (int i = 0; i < definitions.length; ++i) {
        if (definitions[i] == null) {
            throw new NullPointerException("element of 'definitions' is null in redefineClasses");
        }
    }
    if (definitions.length == 0) {
        return; // short-circuit if there are no changes requested
    }

    redefineClasses0(mNativeAgent, definitions);
}
项目:openjdk-jdk10    文件:InstrumentationImpl.java   
public void
redefineClasses(ClassDefinition...  definitions)
        throws  ClassNotFoundException {
    if (!isRedefineClassesSupported()) {
        throw new UnsupportedOperationException("redefineClasses is not supported in this environment");
    }
    if (definitions == null) {
        throw new NullPointerException("null passed as 'definitions' in redefineClasses");
    }
    for (int i = 0; i < definitions.length; ++i) {
        if (definitions[i] == null) {
            throw new NullPointerException("element of 'definitions' is null in redefineClasses");
        }
    }
    if (definitions.length == 0) {
        return; // short-circuit if there are no changes requested
    }

    redefineClasses0(mNativeAgent, definitions);
}
项目:openjdk9    文件:InstrumentationImpl.java   
public void
redefineClasses(ClassDefinition...  definitions)
        throws  ClassNotFoundException {
    if (!isRedefineClassesSupported()) {
        throw new UnsupportedOperationException("redefineClasses is not supported in this environment");
    }
    if (definitions == null) {
        throw new NullPointerException("null passed as 'definitions' in redefineClasses");
    }
    for (int i = 0; i < definitions.length; ++i) {
        if (definitions[i] == null) {
            throw new NullPointerException("element of 'definitions' is null in redefineClasses");
        }
    }
    if (definitions.length == 0) {
        return; // short-circuit if there are no changes requested
    }

    redefineClasses0(mNativeAgent, definitions);
}
项目:light    文件:JavaAgent.java   
public static boolean redefineClasses(ClassDefinition[] classDefinitions)
{
    try
    {
        if (isRedefineClassesSupported())
        {
            getInstrumentation().redefineClasses(classDefinitions);

            return true;
        }
    }
    catch (Throwable throwable)
    {
        if (classDefinitions != null)
        {
            for (ClassDefinition classDefinition : classDefinitions)
            {
                logger.info(classDefinition.getDefinitionClass().toString());
            }
        }

        logger.log(Level.INFO, throwable.getMessage(), throwable);
    }

    return false;
}
项目:jdk8u_jdk    文件:InstrumentationImpl.java   
public void
redefineClasses(ClassDefinition...  definitions)
        throws  ClassNotFoundException {
    if (!isRedefineClassesSupported()) {
        throw new UnsupportedOperationException("redefineClasses is not supported in this environment");
    }
    if (definitions == null) {
        throw new NullPointerException("null passed as 'definitions' in redefineClasses");
    }
    for (int i = 0; i < definitions.length; ++i) {
        if (definitions[i] == null) {
            throw new NullPointerException("element of 'definitions' is null in redefineClasses");
        }
    }
    if (definitions.length == 0) {
        return; // short-circuit if there are no changes requested
    }

    redefineClasses0(mNativeAgent, definitions);
}
项目:lookaside_java-1.8.0-openjdk    文件:InstrumentationImpl.java   
public void
redefineClasses(ClassDefinition...  definitions)
        throws  ClassNotFoundException {
    if (!isRedefineClassesSupported()) {
        throw new UnsupportedOperationException("redefineClasses is not supported in this environment");
    }
    if (definitions == null) {
        throw new NullPointerException("null passed as 'definitions' in redefineClasses");
    }
    for (int i = 0; i < definitions.length; ++i) {
        if (definitions[i] == null) {
            throw new NullPointerException("element of 'definitions' is null in redefineClasses");
        }
    }
    if (definitions.length == 0) {
        return; // short-circuit if there are no changes requested
    }

    redefineClasses0(mNativeAgent, definitions);
}
项目:jreloader    文件:Transformer.java   
private void reload(Entry e)
    throws IOException, ClassNotFoundException, UnmodifiableClassException {
    System.err.println(e.file);
    cdefs.clear();
    if (e.loaderRef != null) {
        ClassLoader cl = e.loaderRef.get();
        if (cl != null) {
            request(e, cl);
            if (e.children != null) {
                for (Entry ce : e.children) {
                    request(ce, cl);
                }
            }
            // System.err.println(cdefs);
            Agent.inst.redefineClasses(cdefs.toArray(new ClassDefinition[0]));
        } else {
            e.loaderRef = null;
        }
    }
}
项目:infobip-open-jdk-8    文件:InstrumentationImpl.java   
public void
redefineClasses(ClassDefinition...  definitions)
        throws  ClassNotFoundException {
    if (!isRedefineClassesSupported()) {
        throw new UnsupportedOperationException("redefineClasses is not supported in this environment");
    }
    if (definitions == null) {
        throw new NullPointerException("null passed as 'definitions' in redefineClasses");
    }
    for (int i = 0; i < definitions.length; ++i) {
        if (definitions[i] == null) {
            throw new NullPointerException("element of 'definitions' is null in redefineClasses");
        }
    }
    if (definitions.length == 0) {
        return; // short-circuit if there are no changes requested
    }

    redefineClasses0(mNativeAgent, definitions);
}
项目:jdk8u-dev-jdk    文件:InstrumentationImpl.java   
public void
redefineClasses(ClassDefinition...  definitions)
        throws  ClassNotFoundException {
    if (!isRedefineClassesSupported()) {
        throw new UnsupportedOperationException("redefineClasses is not supported in this environment");
    }
    if (definitions == null) {
        throw new NullPointerException("null passed as 'definitions' in redefineClasses");
    }
    for (int i = 0; i < definitions.length; ++i) {
        if (definitions[i] == null) {
            throw new NullPointerException("element of 'definitions' is null in redefineClasses");
        }
    }
    if (definitions.length == 0) {
        return; // short-circuit if there are no changes requested
    }

    redefineClasses0(mNativeAgent, definitions);
}
项目:Lucee    文件:PhysicalClassLoader.java   
@Override
public synchronized Class<?> loadClass(String name, byte[] barr) throws UnmodifiableClassException {
    Class<?> clazz=null;
    try {
        clazz = loadClass(name,false,false); // we do not load existing class from disk
    } catch (ClassNotFoundException cnf) {}

    // if class already exists
    if(clazz!=null) {
        try {
            InstrumentationFactory.getInstrumentation(config).redefineClasses(new ClassDefinition(clazz,barr));
        } 
        catch (ClassNotFoundException e) {
            // the documentation clearly sais that this exception only exists for backward compatibility and never happen
        }
        return clazz;
    }
    // class not exists yet
    return _loadClass(name, barr);
}
项目:Lucee    文件:MemoryClassLoader.java   
@Override
public synchronized Class<?> loadClass(String name, byte[] barr) throws UnmodifiableClassException {
    Class<?> clazz=null;
    try {
        clazz = loadClass(name);
    } catch (ClassNotFoundException cnf) {}

    // if class already exists
    if(clazz!=null) {
        try {
            InstrumentationFactory.getInstrumentation(config).redefineClasses(new ClassDefinition(clazz,barr));
        } 
        catch (ClassNotFoundException e) {
            // the documentation clearly sais that this exception only exists for backward compatibility and never happen
        }
        aprint.e("redefined:memory:"+clazz.getName());
        return clazz;
    }
    // class not exists yet
    return _loadClass(name, barr);
}
项目:jdk7-jdk    文件:InstrumentationImpl.java   
public void
redefineClasses(ClassDefinition[]   definitions)
        throws  ClassNotFoundException {
    if (!isRedefineClassesSupported()) {
        throw new UnsupportedOperationException("redefineClasses is not supported in this environment");
    }
    if (definitions == null) {
        throw new NullPointerException("null passed as 'definitions' in redefineClasses");
    }
    for (int i = 0; i < definitions.length; ++i) {
        if (definitions[i] == null) {
            throw new NullPointerException("element of 'definitions' is null in redefineClasses");
        }
    }
    if (definitions.length == 0) {
        return; // short-circuit if there are no changes requested
    }

    redefineClasses0(mNativeAgent, definitions);
}
项目:openjdk-source-code-learn    文件:InstrumentationImpl.java   
public void
redefineClasses(ClassDefinition[]   definitions)
        throws  ClassNotFoundException {
    if (!isRedefineClassesSupported()) {
        throw new UnsupportedOperationException("redefineClasses is not supported in this environment");
    }
    if (definitions == null) {
        throw new NullPointerException("null passed as 'definitions' in redefineClasses");
    }
    for (int i = 0; i < definitions.length; ++i) {
        if (definitions[i] == null) {
            throw new NullPointerException("element of 'definitions' is null in redefineClasses");
        }
    }
    if (definitions.length == 0) {
        return; // short-circuit if there are no changes requested
    }

    redefineClasses0(mNativeAgent, definitions);
}
项目:OLD-OpenJDK8    文件:InstrumentationImpl.java   
public void
redefineClasses(ClassDefinition...  definitions)
        throws  ClassNotFoundException {
    if (!isRedefineClassesSupported()) {
        throw new UnsupportedOperationException("redefineClasses is not supported in this environment");
    }
    if (definitions == null) {
        throw new NullPointerException("null passed as 'definitions' in redefineClasses");
    }
    for (int i = 0; i < definitions.length; ++i) {
        if (definitions[i] == null) {
            throw new NullPointerException("element of 'definitions' is null in redefineClasses");
        }
    }
    if (definitions.length == 0) {
        return; // short-circuit if there are no changes requested
    }

    redefineClasses0(mNativeAgent, definitions);
}
项目:openjdk-jdk7u-jdk    文件:InstrumentationImpl.java   
public void
redefineClasses(ClassDefinition[]   definitions)
        throws  ClassNotFoundException {
    if (!isRedefineClassesSupported()) {
        throw new UnsupportedOperationException("redefineClasses is not supported in this environment");
    }
    if (definitions == null) {
        throw new NullPointerException("null passed as 'definitions' in redefineClasses");
    }
    for (int i = 0; i < definitions.length; ++i) {
        if (definitions[i] == null) {
            throw new NullPointerException("element of 'definitions' is null in redefineClasses");
        }
    }
    if (definitions.length == 0) {
        return; // short-circuit if there are no changes requested
    }

    redefineClasses0(mNativeAgent, definitions);
}
项目:openjdk-icedtea7    文件:InstrumentationImpl.java   
public void
redefineClasses(ClassDefinition[]   definitions)
        throws  ClassNotFoundException {
    if (!isRedefineClassesSupported()) {
        throw new UnsupportedOperationException("redefineClasses is not supported in this environment");
    }
    if (definitions == null) {
        throw new NullPointerException("null passed as 'definitions' in redefineClasses");
    }
    for (int i = 0; i < definitions.length; ++i) {
        if (definitions[i] == null) {
            throw new NullPointerException("element of 'definitions' is null in redefineClasses");
        }
    }
    if (definitions.length == 0) {
        return; // short-circuit if there are no changes requested
    }

    redefineClasses0(mNativeAgent, definitions);
}
项目:HotswapAgent    文件:InstrumentationRedefiner.java   
public void redefineClasses(Map<Class<?>, byte[]> classes) throws ClassNotFoundException,
        UnmodifiableClassException {

    if (PluginManager.getInstance().getInstrumentation() == null) {
        throw new IllegalStateException("Instrumentation agent is not properly installed!");
    }

    ClassDefinition[] definitions = new ClassDefinition[classes.size()];
    int i = 0;
    for (Map.Entry<Class<?>, byte[]> entry : classes.entrySet()) {
        definitions[i++] = new ClassDefinition(entry.getKey(), entry.getValue());
        URL classResource = getClassResource(entry.getKey());

        try (OutputStream fileWriter = new FileOutputStream(new File(classResource.toURI()))) {
            fileWriter.write(entry.getValue());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    PluginManager.getInstance().getInstrumentation().redefineClasses(definitions);
}
项目:HotswapAgent    文件:PluginManager.java   
/**
 * Redefine the supplied set of classes using the supplied bytecode.
 *
 * This method operates on a set in order to allow interdependent changes to more than one class at the same time
 * (a redefinition of class A can require a redefinition of class B).
 *
 * @param reloadMap class -> new bytecode
 * @see java.lang.instrument.Instrumentation#redefineClasses(java.lang.instrument.ClassDefinition...)
 */
public void hotswap(Map<Class<?>, byte[]> reloadMap) {
    if (instrumentation == null) {
        throw new IllegalStateException("Plugin manager is not correctly initialized - no instrumentation available.");
    }

    synchronized (reloadMap) {
        ClassDefinition[] definitions = new ClassDefinition[reloadMap.size()];
        String[] classNames = new String[reloadMap.size()];
        int i = 0;
        for (Map.Entry<Class<?>, byte[]> entry : reloadMap.entrySet()) {
            classNames[i] = entry.getKey().getName();
            definitions[i++] = new ClassDefinition(entry.getKey(), entry.getValue());
        }
        try {
            LOGGER.reload("Reloading classes {} (autoHotswap)", Arrays.toString(classNames));
            synchronized (hotswapLock) {
                instrumentation.redefineClasses(definitions);
            }
            LOGGER.debug("... reloaded classes {} (autoHotswap)", Arrays.toString(classNames));
        } catch (Exception e) {
            throw new IllegalStateException("Unable to redefine classes", e);
        }
        reloadMap.clear();
    }
}
项目:incubator-netbeans    文件:AgentWorker.java   
@Override
public void redefine(ClassBytecodes[] cbcs) throws ClassInstallException, NotImplementedException, EngineTerminationException {
    int count = cbcs.length;
    boolean[] status = new boolean[cbcs.length];
    int success = 0;
    NbRemoteLoader ldr = prepareClassLoader();
    for (int i = 0; i < count; i++) {
        String name = cbcs[i].name();
        byte[] replaceBytecode = cbcs[i].bytecodes();
        Long id = ldr.getClassId(name);
        if (id != null) {
            Class defined = ldr.getClassOfId(id);
            try {
                agent.getInstrumentation().redefineClasses(
                        new ClassDefinition(defined, replaceBytecode)
                );
                status[i] = true;
                success++;
            } catch (ClassNotFoundException | UnmodifiableClassException ex) {
                Logger.getLogger(AgentWorker.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        if (success < count) {
            throw new ClassInstallException("Could not redefine classes", status);
        }
    }
}
项目:Recaf    文件:Agent.java   
/**
 * Update edits made to classes in the current VM.
 */
public static void apply() {
    try {
        Recaf.INSTANCE.logging.info("Applying class redefinintions:");
        ClassDefinition[] definitions = Marker.getDefinitions();
        for (ClassDefinition define : definitions) {
            Recaf.INSTANCE.logging.info(define.getDefinitionClass().getName(), 1);
        }
        instrument.redefineClasses(definitions);
        Recaf.INSTANCE.logging.info("Done applying redefinitions.");

    } catch (Exception e) {
        Recaf.INSTANCE.logging.error(e);
    }
}
项目:Recaf    文件:Marker.java   
public static ClassDefinition[] getDefinitions() throws Exception {
    Class[] classes = getClasses();
    ClassDefinition[] definitions = new ClassDefinition[classes.length];
    for (int i = 0; i < classes.length; i++) {
        Class clazz = classes[i];
        byte[] clazzBytes = Asm.toBytes(getNode(clazz));
        definitions[i] = new ClassDefinition(clazz, clazzBytes);
    }
    return definitions;
}
项目:jdk8u-jdk    文件:RedefineMethodWithAnnotationsApp.java   
private static void doRedefine(Class<?> clazz) throws Exception {
    // Load the second version of this class.
    File f = new File(clazz.getName() + ".class");
    System.out.println("Reading test class from " + f);
    InputStream redefineStream = new FileInputStream(f);

    byte[] redefineBuffer = NamedBuffer.loadBufferFromStream(redefineStream);

    ClassDefinition redefineParamBlock = new ClassDefinition(
            clazz, redefineBuffer);

    RedefineMethodWithAnnotationsAgent.getInstrumentation().redefineClasses(
            new ClassDefinition[] {redefineParamBlock});
}
项目:jdk8u-jdk    文件:RedefineMethodInBacktraceApp.java   
private static void doRedefine(Class<?> clazz) throws Exception {
    // Load the second version of this class.
    File f = new File(clazz.getName() + ".class");
    System.out.println("Reading test class from " + f.getAbsolutePath());
    InputStream redefineStream = new FileInputStream(f);

    byte[] redefineBuffer = NamedBuffer.loadBufferFromStream(redefineStream);

    ClassDefinition redefineParamBlock = new ClassDefinition(
            clazz, redefineBuffer);

    RedefineMethodInBacktraceAgent.getInstrumentation().redefineClasses(
            new ClassDefinition[] {redefineParamBlock});
}
项目:openjdk-jdk10    文件:RedefineTest.java   
static void redefine() {
    if (instr == null) {
        System.out.println("NOT REDEFINED");
        return;
    }
    ClassDefinition cd = new ClassDefinition(CLS, getClassFile(1));
    try {
        instr.redefineClasses(cd);
    } catch (Exception e) {
        throw new Error(e);
    }
    System.out.println("REDEFINED");
}
项目:openjdk-jdk10    文件:RedefineMethodWithAnnotationsApp.java   
private static void doRedefine(Class<?> clazz) throws Exception {
    // Load the second version of this class.
    File f = new File(clazz.getName() + ".class");
    System.out.println("Reading test class from " + f);
    InputStream redefineStream = new FileInputStream(f);

    byte[] redefineBuffer = NamedBuffer.loadBufferFromStream(redefineStream);

    ClassDefinition redefineParamBlock = new ClassDefinition(
            clazz, redefineBuffer);

    RedefineMethodWithAnnotationsAgent.getInstrumentation().redefineClasses(
            new ClassDefinition[] {redefineParamBlock});
}
项目:openjdk-jdk10    文件:RedefineClassWithNativeMethodAgent.java   
public static void premain(String agentArgs, final Instrumentation inst) throws Exception {
    String s = agentArgs.substring(0, agentArgs.indexOf(".class"));
    clz = Class.forName(s.replace('/', '.'));
    InputStream in;
    Module m = clz.getModule();
    if (m != null) {
        in = m.getResourceAsStream(agentArgs);
    } else {
        ClassLoader loader =
            RedefineClassWithNativeMethodAgent.class.getClassLoader();
        in = loader.getResourceAsStream(agentArgs);
    }
    if (in == null) {
        throw new Exception("Cannot find class: " + agentArgs);
    }
    byte[] buffer = in.readAllBytes();

    new Timer(true).schedule(new TimerTask() {
        public void run() {
            try {
                System.out.println("Instrumenting");
                ClassDefinition cld = new ClassDefinition(clz, buffer);
                inst.redefineClasses(new ClassDefinition[] { cld });
            }
            catch (Exception e) { e.printStackTrace(); }
        }
    }, 500);
}
项目:openjdk-jdk10    文件:RedefineMethodInBacktraceApp.java   
private static void doRedefine(Class<?> clazz) throws Exception {
    // Load the second version of this class.
    File f = new File(clazz.getName() + ".class");
    System.out.println("Reading test class from " + f.getAbsolutePath());
    InputStream redefineStream = new FileInputStream(f);

    byte[] redefineBuffer = NamedBuffer.loadBufferFromStream(redefineStream);

    ClassDefinition redefineParamBlock = new ClassDefinition(
            clazz, redefineBuffer);

    RedefineMethodInBacktraceAgent.getInstrumentation().redefineClasses(
            new ClassDefinition[] {redefineParamBlock});
}
项目:openjdk9    文件:RedefineTest.java   
static void redefine() {
    if (instr == null) {
        System.out.println("NOT REDEFINED");
        return;
    }
    ClassDefinition cd = new ClassDefinition(CLS, getClassFile(1));
    try {
        instr.redefineClasses(cd);
    } catch (Exception e) {
        throw new Error(e);
    }
    System.out.println("REDEFINED");
}
项目:openjdk9    文件:RedefineMethodWithAnnotationsApp.java   
private static void doRedefine(Class<?> clazz) throws Exception {
    // Load the second version of this class.
    File f = new File(clazz.getName() + ".class");
    System.out.println("Reading test class from " + f);
    InputStream redefineStream = new FileInputStream(f);

    byte[] redefineBuffer = NamedBuffer.loadBufferFromStream(redefineStream);

    ClassDefinition redefineParamBlock = new ClassDefinition(
            clazz, redefineBuffer);

    RedefineMethodWithAnnotationsAgent.getInstrumentation().redefineClasses(
            new ClassDefinition[] {redefineParamBlock});
}
项目:openjdk9    文件:RedefineClassWithNativeMethodAgent.java   
public static void premain(String agentArgs, final Instrumentation inst) throws Exception {
    String s = agentArgs.substring(0, agentArgs.indexOf(".class"));
    clz = Class.forName(s.replace('/', '.'));
    InputStream in;
    Module m = clz.getModule();
    if (m != null) {
        in = m.getResourceAsStream(agentArgs);
    } else {
        ClassLoader loader =
            RedefineClassWithNativeMethodAgent.class.getClassLoader();
        in = loader.getResourceAsStream(agentArgs);
    }
    if (in == null) {
        throw new Exception("Cannot find class: " + agentArgs);
    }
    byte[] buffer = in.readAllBytes();

    new Timer(true).schedule(new TimerTask() {
        public void run() {
            try {
                System.out.println("Instrumenting");
                ClassDefinition cld = new ClassDefinition(clz, buffer);
                inst.redefineClasses(new ClassDefinition[] { cld });
            }
            catch (Exception e) { e.printStackTrace(); }
        }
    }, 500);
}
项目:openjdk9    文件:RedefineMethodInBacktraceApp.java   
private static void doRedefine(Class<?> clazz) throws Exception {
    // Load the second version of this class.
    File f = new File(clazz.getName() + ".class");
    System.out.println("Reading test class from " + f.getAbsolutePath());
    InputStream redefineStream = new FileInputStream(f);

    byte[] redefineBuffer = NamedBuffer.loadBufferFromStream(redefineStream);

    ClassDefinition redefineParamBlock = new ClassDefinition(
            clazz, redefineBuffer);

    RedefineMethodInBacktraceAgent.getInstrumentation().redefineClasses(
            new ClassDefinition[] {redefineParamBlock});
}
项目:bytescope    文件:BytescopeAttachment.java   
public void redefineClasses(List<String> classNameList) {
    HashSet<String> paramSet = new HashSet<String>();
    for (int i = 0; i < classNameList.size(); i++) {
        String className = classNameList.get(i);
        paramSet.add(className);
    }

    Class[] classes = inst.getAllLoadedClasses();
    ArrayList<ClassDefinition> definitionList = new ArrayList<ClassDefinition>();
    boolean allSuccess = true;
    for (int i = 0; paramSet.size() > 0 && i < classes.length; i++) {
        if (paramSet.contains(classes[i].getName())) {
            try {
                byte[] buff = ClassUtil.getByteCode(classes[i]);
                if (buff == null) {
                    continue;
                }
                definitionList.add(new ClassDefinition(classes[i], buff));
                paramSet.remove(classes[i].getName());
            } catch (Exception e) {
                allSuccess = false;
                Logger.error(e);
                break;
            }
        }
    }
    if (definitionList.size() > 0 && allSuccess) {
        AgentTransformer transformer = new AgentTransformer();
        inst.addTransformer(transformer);

        try {
            inst.redefineClasses(definitionList.toArray(new ClassDefinition[definitionList.size()]));
        } catch (Throwable th) {
            throw new RuntimeException("Failed to redefine classes", th);
        } finally {
            inst.removeTransformer(transformer);
        }
    }
}
项目:jdk8u_jdk    文件:RedefineMethodWithAnnotationsApp.java   
private static void doRedefine(Class<?> clazz) throws Exception {
    // Load the second version of this class.
    File f = new File(clazz.getName() + ".class");
    System.out.println("Reading test class from " + f);
    InputStream redefineStream = new FileInputStream(f);

    byte[] redefineBuffer = NamedBuffer.loadBufferFromStream(redefineStream);

    ClassDefinition redefineParamBlock = new ClassDefinition(
            clazz, redefineBuffer);

    RedefineMethodWithAnnotationsAgent.getInstrumentation().redefineClasses(
            new ClassDefinition[] {redefineParamBlock});
}
项目:jdk8u_jdk    文件:RedefineMethodInBacktraceApp.java   
private static void doRedefine(Class<?> clazz) throws Exception {
    // Load the second version of this class.
    File f = new File(clazz.getName() + ".class");
    System.out.println("Reading test class from " + f.getAbsolutePath());
    InputStream redefineStream = new FileInputStream(f);

    byte[] redefineBuffer = NamedBuffer.loadBufferFromStream(redefineStream);

    ClassDefinition redefineParamBlock = new ClassDefinition(
            clazz, redefineBuffer);

    RedefineMethodInBacktraceAgent.getInstrumentation().redefineClasses(
            new ClassDefinition[] {redefineParamBlock});
}
项目:lookaside_java-1.8.0-openjdk    文件:RedefineMethodWithAnnotationsApp.java   
private static void doRedefine(Class<?> clazz) throws Exception {
    // Load the second version of this class.
    File f = new File(clazz.getName() + ".class");
    System.out.println("Reading test class from " + f);
    InputStream redefineStream = new FileInputStream(f);

    byte[] redefineBuffer = NamedBuffer.loadBufferFromStream(redefineStream);

    ClassDefinition redefineParamBlock = new ClassDefinition(
            clazz, redefineBuffer);

    RedefineMethodWithAnnotationsAgent.getInstrumentation().redefineClasses(
            new ClassDefinition[] {redefineParamBlock});
}
项目:lookaside_java-1.8.0-openjdk    文件:RedefineMethodInBacktraceApp.java   
private static void doRedefine(Class<?> clazz) throws Exception {
    // Load the second version of this class.
    File f = new File(clazz.getName() + ".class");
    System.out.println("Reading test class from " + f.getAbsolutePath());
    InputStream redefineStream = new FileInputStream(f);

    byte[] redefineBuffer = NamedBuffer.loadBufferFromStream(redefineStream);

    ClassDefinition redefineParamBlock = new ClassDefinition(
            clazz, redefineBuffer);

    RedefineMethodInBacktraceAgent.getInstrumentation().redefineClasses(
            new ClassDefinition[] {redefineParamBlock});
}
项目:SBTHotswap    文件:AgentMain.java   
private static ClassDefinition createReDefinition(File from){
    try {
        final byte[] bytes = Files.readAllBytes(from.toPath());
        final ClassType type = ClassFileInput.readClassType(new ByteArrayInputStream(bytes));
        final String name = type.getName();
        Class clazz = Class.forName(name);
        return new ClassDefinition(clazz, bytes);
    } catch (Exception e) {
        System.err.println("Failed to create definition for " + from.getAbsolutePath());
        e.printStackTrace();
        return null;
    }
}
项目:scouter    文件:AgentConfigure.java   
@RequestHandler(RequestCmd.REDEFINE_CLASSES)
public Pack redefineClasses(Pack param) {
    final MapPack p = new MapPack();
    ListValue classLv = ((MapPack) param).getList("class");
    HashSet<String> paramSet = new HashSet<String>();
    for (int i = 0; i < classLv.size(); i++) {
        String className = classLv.getString(i);
        paramSet.add(className);
    }
    Class[] classes = JavaAgent.getInstrumentation().getAllLoadedClasses();
    ArrayList<ClassDefinition> definitionList = new ArrayList<ClassDefinition>();
    boolean allSuccess = true;
    for (int i = 0; paramSet.size() > 0 && i < classes.length; i++) {
        if (paramSet.contains(classes[i].getName())) {
            try {
                byte[] buff = ClassUtil.getByteCode(classes[i]);
                if (buff == null) {
                    continue;
                }
                definitionList.add(new ClassDefinition(classes[i], buff));
                paramSet.remove(classes[i].getName());
            } catch (Exception e) {
                p.put("success", new BooleanValue(false));
                p.put("error", e.toString());
                allSuccess = false;
                break;
            }
        }
    }
    if (definitionList.size() > 0 && allSuccess) {
        try {
            JavaAgent.getInstrumentation().redefineClasses(definitionList.toArray(new ClassDefinition[definitionList.size()]));
            p.put("success", new BooleanValue(true));
        } catch (Throwable th) {
            p.put("success", new BooleanValue(false));
            p.put("error", th.toString());
        }
    }
    return p;
}