public void analyzeCode(MethodIdentifier methodIdent, BytecodeInfo bytecode) {
		this.bytecode = bytecode;
		TodoQueue modifiedQueue = new TodoQueue();
		MethodInfo minfo = bytecode.getMethodInfo();

		for (Iterator iter = bytecode.getInstructions().iterator(); iter
				.hasNext();) {
			Instruction instr = (Instruction) iter.next();
			instr.setTmpInfo(null);
		}

		StackLocalInfo firstInfo = new StackLocalInfo(bytecode.getMaxLocals(),
				minfo.isStatic(), minfo.getType(), modifiedQueue);
		firstInfo.instr = (Instruction) bytecode.getInstructions().get(0);
		firstInfo.instr.setTmpInfo(firstInfo);
		firstInfo.enqueue();
		runtime.setFieldListener(methodIdent);
		while (modifiedQueue.first != null) {
			StackLocalInfo info = modifiedQueue.first;
			modifiedQueue.first = info.nextOnQueue;
			info.nextOnQueue = null;
			handleOpcode(info, methodIdent);
		}
		runtime.setFieldListener(null);

		Handler[] handlers = bytecode.getExceptionHandlers();
		for (int i = 0; i < handlers.length; i++) {
			if (handlers[i].catcher.getTmpInfo() != null
					&& handlers[i].type != null)
				Main.getClassBundle().reachableClass(handlers[i].type);
		}
		for (Iterator iter = bytecode.getInstructions().iterator(); iter
				.hasNext();) {
			Instruction instr = (Instruction) iter.next();
			StackLocalInfo info = (StackLocalInfo) instr.getTmpInfo();
			if (info != null) {
				if (info.constInfo.flags == 0)
					instr.setTmpInfo(unknownConstInfo);
				else
					instr.setTmpInfo(info.constInfo);
			}
		}
	}