package rocks.inspectit.agent.java.instrumentation.asm; import info.novatec.inspectit.org.objectweb.asm.Type; import rocks.inspectit.agent.java.hooking.IHookDispatcher; /** * Constants that are often used in the instrumenters like type and method descriptions. * * @author Ivan Senic * */ public interface IInstrumenterConstant { /** * Class name where our IAgent exists as a field. */ String AGENT_INTERNAL_NAME = "rocks/inspectit/agent/java/Agent"; /** * Internal name of our IAgent. */ String IAGENT_INTERNAL_NAME = "rocks/inspectit/agent/java/IAgent"; /** * Internal name of our IHookDispatcher. */ String IHOOK_DISPATCHER_INTERNAL_NAME = "rocks/inspectit/agent/java/hooking/IHookDispatcher"; /** * {@link Throwable} internal name. */ String THROWABLE_INTERNAL_NAME = Type.getInternalName(Throwable.class); /** * Descriptor of our IAgent. */ String IAGENT_DESCRIPTOR = "L" + IAGENT_INTERNAL_NAME + ";"; /** * Internal name of get IHookDispatcher method. */ String GET_IHOOK_DISPATCHER_DESCRIPTOR = "()L" + IHOOK_DISPATCHER_INTERNAL_NAME + ";"; /** * {@link IHookDispatcher#dispatchMethodBeforeBody(long, Object, Object[])} descriptor. */ String DISPATCH_METHOD_BEFORE_BODY_DESCRIPTOR = Type.getMethodDescriptor(Type.VOID_TYPE, Type.LONG_TYPE, Type.getType(Object.class), Type.getType(Object[].class)); /** * {@link IHookDispatcher#dispatchFirstMethodAfterBody(long, Object, Object[], Object)} and * {@link IHookDispatcher#dispatchSecondMethodAfterBody(long, Object, Object[], Object)} * descriptor. */ String DISPATCH_METHOD_AFTER_BODY_DESCRIPTOR = Type.getMethodDescriptor(Type.VOID_TYPE, Type.LONG_TYPE, Type.getType(Object.class), Type.getType(Object[].class), Type.getType(Object.class)); /** * {@link IHookDispatcher#dispatchBeforeCatch(long, Object)} descriptor. */ String DISPATCH_BEFORE_CATCH_DESCRIPTOR = Type.getMethodDescriptor(Type.VOID_TYPE, Type.LONG_TYPE, Type.getType(Object.class));; /** * {@link IHookDispatcher#dispatchConstructorBeforeBody(long, Object[])} descriptor. */ String DISPATCH_CONSTRUCTOR_BEFORE_BODY_DESCRIPTOR = Type.getMethodDescriptor(Type.VOID_TYPE, Type.LONG_TYPE, Type.getType(Object[].class)); /** * {@link IHookDispatcher#dispatchConstructorAfterBody(long, Object, Object[])} descriptor. */ String DISPATCH_CONSTRUCTOR_AFTER_BODY_DESCRIPTOR = Type.getMethodDescriptor(Type.VOID_TYPE, Type.LONG_TYPE, Type.getType(Object.class), Type.getType(Object[].class)); /** * {@link IHookDispatcher#dispatchConstructorBeforeCatch(long, Object)} descriptor. */ String DISPATCH_CONSTRUCTOR_BEFORE_CATCH_DESCRIPTOR = Type.getMethodDescriptor(Type.VOID_TYPE, Type.LONG_TYPE, Type.getType(Object.class)); /** * {@link IHookDispatcher#dispatchConstructorOnThrowInBody(long, Object, Object[], Object)} * descriptor. */ String DISPATCH_CONSTRUCTOR_ON_THROW_BODY_DESCRIPTOR = Type.getMethodDescriptor(Type.VOID_TYPE, Type.LONG_TYPE, Type.getType(Object.class), Type.getType(Object[].class), Type.getType(Object.class)); /** * {@link IHookDispatcher#dispatchSpecialMethodBeforeBody(long, Object, Object[])} descriptor. */ String DISPATCH_SPECIAL_METHOD_BEFORE_BODY_DESCRIPTOR = Type.getMethodDescriptor(Type.getType(Object.class), Type.LONG_TYPE, Type.getType(Object.class), Type.getType(Object[].class)); /** * {@link IHookDispatcher#dispatchSpecialMethodAfterBody(long, Object, Object[], Object)} * descriptor. */ String DISPATCH_SPECIAL_METHOD_AFTER_BODY_DESCRIPTOR = Type.getMethodDescriptor(Type.getType(Object.class), Type.LONG_TYPE, Type.getType(Object.class), Type.getType(Object[].class), Type.getType(Object.class)); // primitive wrappers cached Type BOOLEAN_WRAPPER_TYPE = Type.getType(Boolean.class); // NOCHK Type CHAR_WRAPPER_TYPE = Type.getType(Character.class); // NOCHK Type BYTE_WRAPPER_TYPE = Type.getType(Byte.class); // NOCHK Type SHORT_WRAPPER_TYPE = Type.getType(Short.class); // NOCHK Type INT_WRAPPER_TYPE = Type.getType(Integer.class); // NOCHK Type FLOAT_WRAPPER_TYPE = Type.getType(Float.class); // NOCHK Type LONG_WRAPPER_TYPE = Type.getType(Long.class); // NOCHK Type DOUBLE_WRAPPER_TYPE = Type.getType(Double.class); // NOCHK /** * Object type cached. */ Type OBJECT_TYPE = Type.getType(Object.class); /** * Object[] type cached. */ Type OBJECT_ARRAY_TYPE = Type.getType(Object.class); }