下面列出了org.objectweb.asm.Opcodes# AASTORE 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public void visitInsn(int opcode) {
switch (opcode) {
case Opcodes.AALOAD:
case Opcodes.LALOAD:
case Opcodes.FALOAD:
case Opcodes.DALOAD:
case Opcodes.IALOAD:
invokeBeforeSharedVariableRead();
break;
case Opcodes.AASTORE:
case Opcodes.IASTORE:
case Opcodes.LASTORE:
case Opcodes.FASTORE:
case Opcodes.DASTORE:
invokeBeforeSharedVariableWrite();
break;
}
super.visitInsn(opcode);
}
@Override
public void visitCode()
{
super.visitCode();
if(methodData.hasHookAt(HookPosition.METHOD_START))
{
HookData hookData = methodData.getHook(HookPosition.METHOD_START);
super.visitLdcInsn(className + "." + methodName + "|start");
if(hookData.collectsParams())
{
super.visitIntInsn(Opcodes.BIPUSH, paramCount);
super.visitTypeInsn(Opcodes.ANEWARRAY, "java/lang/Object");
for(byte i = 0; i < paramCount; i++)
{
super.visitInsn(Opcodes.DUP);
super.visitIntInsn(Opcodes.BIPUSH, i);
super.visitVarInsn(Opcodes.ALOAD, i);
super.visitInsn(Opcodes.AASTORE);
}
}
// TODO: Custom class path
super.visitMethodInsn(Opcodes.INVOKESTATIC,
"tk/wurst_client/hooks/HookManager", "hook",
"(Ljava/lang/String;"
+ (hookData.collectsParams() ? "[Ljava/lang/Object;" : "")
+ ")V", false);
}
}
@Override
public void visitInsn(int opcode)
{
if(methodData.hasHookAt(HookPosition.METHOD_END) && opcode >= 172
&& opcode <= 177)
{
HookData hookData = methodData.getHook(HookPosition.METHOD_END);
super.visitLdcInsn(className + "." + methodName + "|end");
if(hookData.collectsParams())
{
super.visitIntInsn(Opcodes.BIPUSH, paramCount);
super.visitTypeInsn(Opcodes.ANEWARRAY, "java/lang/Object");
for(byte i = 0; i < paramCount; i++)
{
super.visitInsn(Opcodes.DUP);
super.visitIntInsn(Opcodes.BIPUSH, i);
super.visitVarInsn(Opcodes.ALOAD, i);
super.visitInsn(Opcodes.AASTORE);
}
}
// TODO: Custom class path
super.visitMethodInsn(Opcodes.INVOKESTATIC,
"tk/wurst_client/hooks/HookManager", "hook",
"(Ljava/lang/String;"
+ (hookData.collectsParams() ? "[Ljava/lang/Object;" : "")
+ ")V", false);
}
super.visitInsn(opcode);
}
public final void astore(Type type) {
switch (type.getOpcode(Opcodes.IASTORE)) {
case Opcodes.IASTORE:
iastore();
return;
case Opcodes.LASTORE:
lastore();
return;
case Opcodes.FASTORE:
fastore();
return;
case Opcodes.DASTORE:
dastore();
return;
case Opcodes.AASTORE:
aastore();
return;
case Opcodes.BASTORE:
bastore();
return;
case Opcodes.CASTORE:
castore();
return;
case Opcodes.SASTORE:
sastore();
return;
default:
throw new IllegalArgumentException();
}
}
/**
* {@inheritDoc}
*/
public int getStorageOpcode() {
return Opcodes.AASTORE;
}