test/runtime/8003720/Asmator.java

Thu, 01 May 2014 14:57:02 -0700

author
amurillo
date
Thu, 01 May 2014 14:57:02 -0700
changeset 6651
4bc28e6b9aba
parent 4305
dad48145e775
child 6876
710a3c8b516e
permissions
-rw-r--r--

Added tag hs25.20-b13 for changeset 798f5b02be89

     1 /*
     2  * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     8  *
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    12  * version 2 for more details (a copy is included in the LICENSE file that
    13  * accompanied this code).
    14  *
    15  * You should have received a copy of the GNU General Public License version
    16  * 2 along with this work; if not, write to the Free Software Foundation,
    17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    18  *
    19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    20  * or visit www.oracle.com if you need additional information or have any
    21  * questions.
    22  *
    23  */
    25 import jdk.internal.org.objectweb.asm.*;
    27 class Asmator {
    28     static byte[] fixup(byte[] buf) throws java.io.IOException {
    29         ClassReader cr = new ClassReader(buf);
    30         ClassWriter cw = new ClassWriter(0);
    31         ClassVisitor cv = new ClassVisitor(Opcodes.ASM4, cw) {
    32             public MethodVisitor visitMethod(
    33                 final int access,
    34                 final String name,
    35                 final String desc,
    36                 final String signature,
    37                 final String[] exceptions)
    38             {
    39                 MethodVisitor mv = super.visitMethod(access,
    40                         name,
    41                         desc,
    42                         signature,
    43                         exceptions);
    44                 if (mv == null)  return null;
    45                 if (name.equals("callme")) {
    46                     // make receiver go dead!
    47                     mv.visitInsn(Opcodes.ACONST_NULL);
    48                     mv.visitVarInsn(Opcodes.ASTORE, 0);
    49                 }
    50                 return mv;
    51             }
    52         };
    53         cr.accept(cv, 0);
    54         return cw.toByteArray();
    55     }
    56 }

mercurial