Java tutorial
/********************************************************************** * This file is part of "Object Teams Dynamic Runtime Environment" * * Copyright 2009, 2014 Oliver Frank and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Please visit http://www.eclipse.org/objectteams for updates and contact. * * Contributors: * Oliver Frank - Initial API and implementation * Stephan Herrmann - Initial API and implementation **********************************************************************/ package org.eclipse.objectteams.otredyn.bytecode.asm; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; import static org.eclipse.objectteams.otredyn.bytecode.asm.AsmBoundClass.ASM_API; /** * Adds an interface to the bytecode of a class * @author Oliver Frank * */ public class AddInterfaceAdapter extends ClassVisitor { private String interfaceName; public AddInterfaceAdapter(ClassVisitor cv, String interfaceName) { super(ASM_API, cv); this.interfaceName = interfaceName; } @Override public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { String[] newInterfaces = new String[interfaces.length + 1]; System.arraycopy(interfaces, 0, newInterfaces, 0, interfaces.length); newInterfaces[interfaces.length] = interfaceName; // Assumption: when it should potentially be a bound baseclass it may have to be public, too: access &= ~(Opcodes.ACC_PRIVATE | Opcodes.ACC_PROTECTED); access |= Opcodes.ACC_PUBLIC; super.visit(version, access, name, signature, superName, newInterfaces); } @Override public MethodVisitor visitMethod(int arg0, String arg1, String arg2, String arg3, String[] arg4) { return null; // also consider other visitors } }