docs: @Requires({
      "bytecode != null",
      "contracts != null"
    })
    @Ensures("result != null")
    protected byte[] instrumentWithContracts(byte[] bytecode,
                                             ContractAnalyzer contracts) {
      ClassReader reader = new ClassReader(bytecode);
      ClassWriter writer =
          new NonLoadingClassWriter(reader,
                                    ClassWriter.COMPUTE_FRAMES |
                                    ClassWriter.COMPUTE_MAXS);
  
      SpecificationClassAdapter adapter =
          new SpecificationClassAdapter(writer, contracts);
      reader.accept(adapter, ClassReader.EXPAND_FRAMES);
  
      return writer.toByteArray();
    }