public static LocalList make(DalvInsnList insns) {
    int sz = insns.size();

    /*
     * Go through the insn list, looking for all the local
     * variable pseudoinstructions, splitting out LocalSnapshots
     * into separate per-variable starts, adding explicit ends
     * wherever a variable is replaced or moved, and collecting
     * these and all the other local variable "activity"
     * together into an output list (without the other insns).
     *
     * Note: As of this writing, this method won't be handed any
     * insn lists that contain local ends, but I (danfuzz) expect
     * that to change at some point, when we start feeding that
     * info explicitly into the rop layer rather than only trying
     * to infer it. So, given that expectation, this code is
     * written to deal with them.
     */

    MakeState state = new MakeState(sz);

    for (int i = 0; i < sz; i++) {
      DalvInsn insn = insns.get(i);

      if (insn instanceof LocalSnapshot) {
        RegisterSpecSet snapshot = ((LocalSnapshot) insn).getLocals();
        state.snapshot(insn.getAddress(), snapshot);
      } else if (insn instanceof LocalStart) {
        RegisterSpec local = ((LocalStart) insn).getLocal();
        state.startLocal(insn.getAddress(), local);
      }
    }

    LocalList result = state.finish();

    if (DEBUG) {
      debugVerify(result);
    }

    return result;
  }
Constructs an instance for the given method, based on the given block order and intermediate
local information.

@param insns {@code non-null;} instructions to convert
@return {@code non-null;} the constructed list
android/android_framework/dex-maker/src/main/java/com/android/dx/dex/code/LocalList.java