/*
* Copyright 2004-2010 Brian S O'Neill
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.cojen.classfile;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
/**
* Delegates all method calls to another CodeAssembler. Override any method to
* track activity or change the way code is generated.
*
* @author Brian S O'Neill
*/
public class DelegatedCodeAssembler implements CodeAssembler {
protected final CodeAssembler mAssembler;
public DelegatedCodeAssembler(CodeAssembler assembler) {
if (assembler == null) {
throw new IllegalArgumentException();
}
mAssembler = assembler;
}
public int getParameterCount() {
return mAssembler.getParameterCount();
}
public LocalVariable getParameter(int index) {
return mAssembler.getParameter(index);
}
public LocalVariable createLocalVariable(String name, TypeDesc type) {
return mAssembler.createLocalVariable(name, type);
}
public Label createLabel() {
return mAssembler.createLabel();
}
public void exceptionHandler(Location startLocation,
Location endLocation,
String catchClassName) {
mAssembler.exceptionHandler
(startLocation, endLocation, catchClassName);
}
public void mapLineNumber(int lineNumber) {
mAssembler.mapLineNumber(lineNumber);
}
public void inline(Object code) {
mAssembler.inline(code);
}
public void loadNull() {
mAssembler.loadNull();
}
public void loadConstant(String value) {
mAssembler.loadConstant(value);
}
public void loadConstant(TypeDesc type) {
mAssembler.loadConstant(type);
}
public void loadConstant(boolean value) {
mAssembler.loadConstant(value);
}
public void loadConstant(int value) {
mAssembler.loadConstant(value);
}
public void loadConstant(long value) {
mAssembler.loadConstant(value);
}
public void loadConstant(float value) {
mAssembler.loadConstant(value);
}
public void loadConstant(double value) {
mAssembler.loadConstant(value);
}
public void loadLocal(LocalVariable local) {
mAssembler.loadLocal(local);
}
public void loadThis() {
mAssembler.loadThis();
}
public void storeLocal(LocalVariable local) {
mAssembler.storeLocal(local);
}
public void loadFromArray(TypeDesc type) {
mAssembler.loadFromArray(type);
}
public void storeToArray(TypeDesc type) {
mAssembler.storeToArray(type);
}
public void loadField(String fieldName,
TypeDesc type) {
mAssembler.loadField(fieldName, type);
}
public void loadField(String className,
String fieldName,
TypeDesc type) {
mAssembler.loadField(className, fieldName, type);
}
public void loadField(TypeDesc classDesc,
String fieldName,
TypeDesc type) {
mAssembler.loadField(classDesc, fieldName, type);
}
public void loadStaticField(String fieldName,
TypeDesc type) {
mAssembler.loadStaticField(fieldName, type);
}
public void loadStaticField(String className,
String fieldName,
TypeDesc type) {
mAssembler.loadStaticField(className, fieldName, type);
}
public void loadStaticField(TypeDesc classDesc,
String fieldName,
TypeDesc type) {
mAssembler.loadStaticField(classDesc, fieldName, type);
}
public void storeField(String fieldName,
TypeDesc type) {
mAssembler.storeField(fieldName, type);
}
public void storeField(String className,
String fieldName,
TypeDesc type) {
mAssembler.storeField(className, fieldName, type);
}
public void storeField(TypeDesc classDesc,
String fieldName,
TypeDesc type) {
mAssembler.storeField(classDesc, fieldName, type);
}
public void storeStaticField(String fieldName,
TypeDesc type) {
mAssembler.storeStaticField(fieldName, type);
}
public void storeStaticField(String className,
String fieldName,
TypeDesc type) {
mAssembler.storeStaticField(className, fieldName, type);
}
public void storeStaticField(TypeDesc classDesc,
String fieldName,
TypeDesc type) {
mAssembler.storeStaticField(classDesc, fieldName, type);
}
public void returnVoid() {
mAssembler.returnVoid();
}
public void returnValue(TypeDesc type) {
mAssembler.returnValue(type);
}
public void convert(TypeDesc fromType, TypeDesc toType) {
mAssembler.convert(fromType, toType);
}
public void convert(TypeDesc fromType, TypeDesc toType, int fpConvertMode) {
mAssembler.convert(fromType, toType, fpConvertMode);
}
public void invoke(Method method) {
mAssembler.invoke(method);
}
public void invokeVirtual(String methodName,
TypeDesc ret,
TypeDesc[] params) {
mAssembler.invokeVirtual(methodName, ret, params);
}
public void invokeVirtual(String className,
String methodName,
TypeDesc ret,
TypeDesc[] params) {
mAssembler.invokeVirtual(className, methodName, ret, params);
}
public void invokeVirtual(TypeDesc classDesc,
String methodName,
TypeDesc ret,
TypeDesc[] params) {
mAssembler.invokeVirtual(classDesc, methodName, ret, params);
}
public void invokeStatic(String methodName,
TypeDesc ret,
TypeDesc[] params) {
mAssembler.invokeStatic(methodName, ret, params);
}
public void invokeStatic(String className,
String methodName,
TypeDesc ret,
TypeDesc[] params) {
mAssembler.invokeStatic(className, methodName, ret, params);
}
public void invokeStatic(TypeDesc classDesc,
String methodName,
TypeDesc ret,
TypeDesc[] params) {
mAssembler.invokeStatic(classDesc, methodName, ret, params);
}
public void invokeInterface(String className,
String methodName,
TypeDesc ret,
TypeDesc[] params) {
mAssembler.invokeInterface(className, methodName, ret, params);
}
public void invokeInterface(TypeDesc classDesc,
String methodName,
TypeDesc ret,
TypeDesc[] params) {
mAssembler.invokeInterface(classDesc, methodName, ret, params);
}
public void invokePrivate(String methodName,
TypeDesc ret,
TypeDesc[] params) {
mAssembler.invokePrivate(methodName, ret, params);
}
public void invokeSuper(Method method) {
mAssembler.invokeSuper(method);
}
public void invokeSuper(String superClassName,
String methodName,
TypeDesc ret,
TypeDesc[] params) {
mAssembler.invokeSuper(superClassName, methodName, ret, params);
}
public void invokeSuper(TypeDesc superClassDesc,
String methodName,
TypeDesc ret,
TypeDesc[] params) {
mAssembler.invokeSuper(superClassDesc, methodName, ret, params);
}
public void invoke(Constructor constructor) {
mAssembler.invoke(constructor);
}
public void invokeConstructor(TypeDesc[] params) {
mAssembler.invokeConstructor(params);
}
public void invokeConstructor(String className, TypeDesc[] params) {
mAssembler.invokeConstructor(className, params);
}
public void invokeConstructor(TypeDesc classDesc, TypeDesc[] params) {
mAssembler.invokeConstructor(classDesc, params);
}
public void invokeSuperConstructor(TypeDesc[] params) {
mAssembler.invokeSuperConstructor(params);
}
public void newObject(TypeDesc type) {
mAssembler.newObject(type);
}
public void newObject(TypeDesc type, int dimensions) {
mAssembler.newObject(type, dimensions);
}
public void dup() {
mAssembler.dup();
}
public void dupX1() {
mAssembler.dupX1();
}
public void dupX2() {
mAssembler.dupX2();
}
public void dup2() {
mAssembler.dup2();
}
public void dup2X1() {
mAssembler.dup2X1();
}
public void dup2X2() {
mAssembler.dup2X2();
}
public void pop() {
mAssembler.pop();
}
public void pop2() {
mAssembler.pop2();
}
public void swap() {
mAssembler.swap();
}
public void swap2() {
mAssembler.swap2();
}
public void branch(Location location) {
mAssembler.branch(location);
}
public void ifNullBranch(Location location, boolean choice) {
mAssembler.ifNullBranch(location, choice);
}
public void ifEqualBranch(Location location, boolean choice) {
mAssembler.ifEqualBranch(location, choice);
}
public void ifZeroComparisonBranch(Location location, String choice)
throws IllegalArgumentException {
mAssembler.ifZeroComparisonBranch(location, choice);
}
public void ifComparisonBranch(Location location, String choice)
throws IllegalArgumentException {
mAssembler.ifComparisonBranch(location, choice);
}
public void ifComparisonBranch(Location location, String choice, TypeDesc type)
throws IllegalArgumentException {
mAssembler.ifComparisonBranch(location, choice, type);
}
public void switchBranch(int[] cases,
Location[] locations, Location defaultLocation) {
mAssembler.switchBranch(cases, locations, defaultLocation);
}
public void jsr(Location location) {
mAssembler.jsr(location);
}
public void ret(LocalVariable local) {
mAssembler.ret(local);
}
public void math(byte opcode) {
mAssembler.math(opcode);
}
public void arrayLength() {
mAssembler.arrayLength();
}
public void throwObject() {
mAssembler.throwObject();
}
public void checkCast(TypeDesc type) {
mAssembler.checkCast(type);
}
public void instanceOf(TypeDesc type) {
mAssembler.instanceOf(type);
}
public void integerIncrement(LocalVariable local, int amount) {
mAssembler.integerIncrement(local, amount);
}
public void monitorEnter() {
mAssembler.monitorEnter();
}
public void monitorExit() {
mAssembler.monitorExit();
}
public void nop() {
mAssembler.nop();
}
public void breakpoint() {
mAssembler.breakpoint();
}
}