code: private void extractFields(InstructionGroup group) {
          List<FieldNode> fields = group.getFields();
          for (InstructionGraphNode node : group.getNodes()) {
              if (node.isXLoad()) {
                  VarInsnNode insn = (VarInsnNode) node.getInstruction();
  
                  // check whether we already have a field for the var with this index
                  int index;
                  for (index = 0; index < fields.size(); index++) {
                      if (fields.get(index).access == insn.var) break;
                  }
  
                  // if we don't, create a new field for the var
                  if (index == fields.size()) {
                      // CAUTION, HACK!: for brevity we reuse the access field and the value field of the FieldNode
                      // for keeping track of the original var index as well as the FieldNodes Type (respectively)
                      // so we need to make sure that we correct for this when the field is actually written
                      Type type = node.getResultValue().getType();
                      fields.add(new FieldNode(insn.var, "field$" + index, type.getDescriptor(), null, type));
                  }
  
                  // normalize the instruction so instruction groups that are identical except for the variable
                  // indexes are still mapped to the same group class (name)
                  insn.var = index;
              }
          }
      }
docs: create FieldNodes for all xLoad instructions