public SourceIncludes read(Decoder decoder) throws Exception {
   SourceIncludes sourceIncludes = new DefaultSourceIncludes();
   sourceIncludes.getQuotedIncludes().addAll(stringListSerializer.read(decoder));
   sourceIncludes.getSystemIncludes().addAll(stringListSerializer.read(decoder));
   sourceIncludes.getMacroIncludes().addAll(stringListSerializer.read(decoder));
   return sourceIncludes;
 }
  public Set<ResolvedInclude> resolveIncludes(File sourceFile, SourceIncludes includes) {
    Set<ResolvedInclude> dependencies = new LinkedHashSet<ResolvedInclude>();
    searchForDependencies(
        dependencies, prependSourceDir(sourceFile, includePaths), includes.getQuotedIncludes());
    searchForDependencies(dependencies, includePaths, includes.getSystemIncludes());
    if (!includes.getMacroIncludes().isEmpty()) {
      dependencies.add(new ResolvedInclude(includes.getMacroIncludes().get(0), null));
    }

    return dependencies;
  }
 public void write(Encoder encoder, SourceIncludes value) throws Exception {
   stringListSerializer.write(encoder, value.getQuotedIncludes());
   stringListSerializer.write(encoder, value.getSystemIncludes());
   stringListSerializer.write(encoder, value.getMacroIncludes());
 }