144N/A/*
2362N/A * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
144N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
144N/A *
144N/A * This code is free software; you can redistribute it and/or modify it
144N/A * under the terms of the GNU General Public License version 2 only, as
144N/A * published by the Free Software Foundation.
144N/A *
144N/A * This code is distributed in the hope that it will be useful, but WITHOUT
144N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
144N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
144N/A * version 2 for more details (a copy is included in the LICENSE file that
144N/A * accompanied this code).
144N/A *
144N/A * You should have received a copy of the GNU General Public License version
144N/A * 2 along with this work; if not, write to the Free Software Foundation,
144N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
144N/A *
2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2362N/A * or visit www.oracle.com if you need additional information or have any
2362N/A * questions.
144N/A */
144N/A
144N/Aimport java.io.*;
144N/Aimport java.lang.instrument.*;
144N/A
144N/Apublic class RedefineMethodAddInvokeApp {
144N/A public static void main(String args[]) throws Exception {
144N/A System.out.println("Hello from RedefineMethodAddInvokeApp!");
144N/A
144N/A new RedefineMethodAddInvokeApp().doTest();
144N/A
144N/A System.exit(0);
144N/A }
144N/A
144N/A private void doTest() throws Exception {
144N/A RedefineMethodAddInvokeTarget target =
144N/A new RedefineMethodAddInvokeTarget();
144N/A
144N/A System.out.println("RedefineMethodAddInvokeApp: invoking myMethod()");
144N/A target.test(0); // invoke the original myMethod()
144N/A
144N/A // add myMethod1()
144N/A do_redefine(1);
144N/A
144N/A System.out.println("RedefineMethodAddInvokeApp: invoking myMethod1()");
144N/A target.test(1); // invoke myMethod1()
144N/A
144N/A // add myMethod2()
144N/A do_redefine(2);
144N/A
144N/A System.out.println("RedefineMethodAddInvokeApp: invoking myMethod2()");
144N/A target.test(2); // invoke myMethod2()
144N/A }
144N/A
144N/A private static void do_redefine(int counter) throws Exception {
144N/A File f = new File("RedefineMethodAddInvokeTarget_" + counter +
144N/A ".class");
144N/A System.out.println("Reading test class from " + f);
144N/A InputStream redefineStream = new FileInputStream(f);
144N/A
144N/A byte[] redefineBuffer = NamedBuffer.loadBufferFromStream(redefineStream);
144N/A
144N/A ClassDefinition redefineParamBlock = new ClassDefinition(
144N/A RedefineMethodAddInvokeTarget.class, redefineBuffer);
144N/A
144N/A RedefineMethodAddInvokeAgent.getInstrumentation().redefineClasses(
144N/A new ClassDefinition[] {redefineParamBlock});
144N/A }
144N/A}