switch (seen) { case ALOAD_0: case ALOAD_1: case ALOAD_2: case ALOAD_3: register = seen - ALOAD_0; Method m = dbc.getMethod(); lvt = m.getLocalVariableTable(); cls = null; if (lvt != null) { lv = lvt.getLocalVariable(register); try { String clsName = Type.getType(lv.getSignature()).toString(); cls = org.apache.bcel.Repository.lookupClass(clsName); } catch (ClassNotFoundException cnfe) {  } } push(new Item(Item.OBJECT_TYPE, cls)); break;  case INVOKEVIRTUAL: String signature = dbc.getSigConstantOperand(); Type[] argTypes = Type.getArgumentTypes(signature); pop(argTypes.length); Type returnType = Type.getReturnType(signature); System.out.println(returnType); if (!"V".equals(returnType.getSignature())) { push(new Item(Item.UNKNOWN_TYPE)); } break; }
try { switch (seen) { case ALOAD_0: case ALOAD_1: case ALOAD_2: case ALOAD_3: register = seen - ALOAD_0; Method m = dbc.getMethod(); lvt = m.getLocalVariableTable(); if (lvt != null) { lv = lvt.getLocalVariable(register); signature = lv.getSignature(); } pushBySignature(signature); break;  case INVOKEVIRTUAL: case INVOKESPECIAL: signature = dbc.getSigConstantOperand(); Type[] argTypes = Type.getArgumentTypes(signature); pop(argTypes.length); pushBySignature(Type.getReturnType(signature).getSignature()); break;  default: throw new UnsupportedOperationException("OpCode not supported yet" ); } } catch (Exception e) {    stack.clear(); }
 	public void sawOpcode(DismantleBytecode dbc, int seen) { 		int register; 		LocalVariableTable lvt; 		LocalVariable lv; 		JavaClass cls; 		 		switch (seen) { 			case ALOAD_0: 			case ALOAD_1: 			case ALOAD_2: 			case ALOAD_3: 				register = seen - ALOAD_0; 				Method m = dbc.getMethod(); 				lvt = m.getLocalVariableTable(); 				cls = null; 				if (lvt != null) { 					lv = lvt.getLocalVariable(register); 					try { 						String clsName = Type.getType(lv.getSignature()).toString(); 						cls = org.apache.bcel.Repository.lookupClass(clsName); 					} catch (ClassNotFoundException cnfe) { 						//report? probably not 					}  				} 				push(new Item(Item.OBJECT_TYPE, cls)); 				break; 				 			case INVOKEVIRTUAL: 				String signature = dbc.getSigConstantOperand(); 				Type[] argTypes = Type.getArgumentTypes(signature); 				pop(argTypes.length); 				Type returnType = Type.getReturnType(signature); 				System.out.println(returnType); 				if (!"V".equals(returnType.getSignature())) {					push(new Item(Item.UNKNOWN_TYPE));//we can do better here 				} 				break; 		} 	}