/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.internal.gosu.ir.compiler.bytecode;
import gw.internal.ext.org.objectweb.asm.*;
public class GosuMethodVisitor implements MethodVisitor
{
private boolean _bJumpOrReturnOrThrow;
private MethodVisitor _mv;
public GosuMethodVisitor( MethodVisitor methodVisitor )
{
_mv = methodVisitor;
}
public boolean isLastInstructionJumpOrReturnOrThrow()
{
return _bJumpOrReturnOrThrow;
}
@Override
public AnnotationVisitor visitAnnotationDefault()
{
return _mv.visitAnnotationDefault();
}
@Override
public AnnotationVisitor visitAnnotation( String s, boolean b )
{
return _mv.visitAnnotation( s, b );
}
@Override
public AnnotationVisitor visitParameterAnnotation( int i, String s, boolean b )
{
return _mv.visitParameterAnnotation( i, s, b );
}
@Override
public void visitAttribute( Attribute attribute )
{
_mv.visitAttribute( attribute );
}
@Override
public void visitCode()
{
_mv.visitCode();
}
@Override
public void visitFrame( int i, int i2, Object[] objects, int i3, Object[] objects2 )
{
_mv.visitFrame( i, i2, objects, i3, objects2 );
}
@Override
public void visitInsn( int i )
{
switch (i)
{
case Opcodes.IRETURN:
case Opcodes.LRETURN:
case Opcodes.FRETURN:
case Opcodes.DRETURN:
case Opcodes.ARETURN:
case Opcodes.RETURN:
case Opcodes.ATHROW:
case Opcodes.GOTO:
_bJumpOrReturnOrThrow = true;
break;
default:
_bJumpOrReturnOrThrow = false;
}
_mv.visitInsn( i );
}
@Override
public void visitIntInsn( int i, int i2 )
{
_bJumpOrReturnOrThrow = false;
_mv.visitIntInsn( i, i2 );
}
@Override
public void visitVarInsn( int i, int i2 )
{
_bJumpOrReturnOrThrow = false;
_mv.visitVarInsn( i, i2 );
}
@Override
public void visitTypeInsn( int i, String s )
{
_bJumpOrReturnOrThrow = false;
_mv.visitTypeInsn( i, s );
}
@Override
public void visitFieldInsn( int i, String s, String s2, String s3 )
{
_bJumpOrReturnOrThrow = false;
_mv.visitFieldInsn( i, s, s2, s3 );
}
@Override
public void visitMethodInsn( int i, String s, String s2, String s3 )
{
_bJumpOrReturnOrThrow = false;
_mv.visitMethodInsn( i, s, s2, s3 );
}
@Override
public void visitJumpInsn( int i, Label label )
{
_bJumpOrReturnOrThrow = i == Opcodes.GOTO;
_mv.visitJumpInsn( i, label );
}
@Override
public void visitLabel( Label label )
{
_bJumpOrReturnOrThrow = false;
_mv.visitLabel( label );
}
@Override
public void visitLdcInsn( Object o )
{
_bJumpOrReturnOrThrow = false;
_mv.visitLdcInsn( o );
}
@Override
public void visitIincInsn( int i, int i2 )
{
_bJumpOrReturnOrThrow = false;
_mv.visitIincInsn( i, i2 );
}
@Override
public void visitTableSwitchInsn( int i, int i2, Label label, Label[] labels )
{
_bJumpOrReturnOrThrow = false;
_mv.visitTableSwitchInsn( i, i2, label, labels );
}
@Override
public void visitLookupSwitchInsn( Label label, int[] ints, Label[] labels )
{
_bJumpOrReturnOrThrow = false;
_mv.visitLookupSwitchInsn( label, ints, labels );
}
@Override
public void visitMultiANewArrayInsn( String s, int i )
{
_bJumpOrReturnOrThrow = false;
_mv.visitMultiANewArrayInsn( s, i );
}
@Override
public void visitTryCatchBlock( Label label, Label label2, Label label3, String s )
{
_bJumpOrReturnOrThrow = false;
_mv.visitTryCatchBlock( label, label2, label3, s );
}
@Override
public void visitLocalVariable( String s, String s2, String s3, Label label, Label label2, int i )
{
_mv.visitLocalVariable( s, s2, s3, label, label2, i );
}
@Override
public void visitLineNumber( int i, Label label )
{
_mv.visitLineNumber( i, label );
}
@Override
public void visitMaxs( int i, int i2 )
{
_mv.visitMaxs( i, i2 );
}
@Override
public void visitEnd()
{
_mv.visitEnd();
}
}