class ExecuteInlineInstruction extends MethodInvocationInstruction implements OdexInstruction {

  private Method targetMethod = null;

  public ExecuteInlineInstruction(Instruction instruction, int codeAddress) {
    super(instruction, codeAddress);
  }

  @Override
  public void deOdex(DexFile parentFile, Method method, ClassPath cp) {
    if (!(parentFile instanceof DexBackedOdexFile)) {
      throw new RuntimeException("ODEX instruction in non-ODEX file");
    }
    DexBackedOdexFile odexFile = (DexBackedOdexFile) parentFile;

    InlineMethodResolver inlineMethodResolver = InlineMethodResolver.createInlineMethodResolver(odexFile.getOdexVersion());
    MethodAnalyzer analyzer = new MethodAnalyzer(cp, method, inlineMethodResolver, false);
    targetMethod = inlineMethodResolver.resolveExecuteInline(new AnalyzedInstruction(analyzer, instruction, -1, -1));
  }

  @Override
  public void jimplify(DexBody body) {
    int acccessFlags = targetMethod.getAccessFlags();
    if (AccessFlags.STATIC.isSet(acccessFlags)) {
      jimplifyStatic(body);
    } else if (AccessFlags.PRIVATE.isSet(acccessFlags)) {
      jimplifySpecial(body);
    } else {
      jimplifyVirtual(body);
    }
  }

  /**
   * Return the indices used in this instruction.
   *
   * @return a list of register indices
   */
  protected List<Integer> getUsedRegistersNums() {<FILL_FUNCTION_BODY>}

}

    if (instruction instanceof Instruction35mi) {
      return getUsedRegistersNums((Instruction35mi) instruction);
    } else if (instruction instanceof Instruction3rmi) {
      return getUsedRegistersNums((Instruction3rmi) instruction);
    }
    throw new RuntimeException("Instruction is not an ExecuteInline");
  
<methods>public void <init>(org.jf.dexlib2.iface.instruction.Instruction, int) ,public void finalize(soot.dexpler.DexBody, soot.dexpler.instructions.DexlibAbstractInstruction) ,public Set<soot.Type> introducedTypes() <variables>protected soot.jimple.AssignStmt assign,protected soot.jimple.InvokeExpr invocation