// Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

package com.android.tools.r8.utils;

import com.android.tools.r8.origin.Origin;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

public class FlagFile {

  private static class FlagFileOrigin extends Origin {
    private final Path path;

    protected FlagFileOrigin(Path path) {
      super(Origin.root());
      this.path = path;
    }

    @Override
    public String part() {
      return "flag file argument: '@" + path + "'";
    }
  }

  public static String[] expandFlagFiles(String[] args, Reporter reporter) {
    List<String> flags = new ArrayList<>(args.length);
    for (String arg : args) {
      if (arg.startsWith("@")) {
        Path flagFilePath = Paths.get(arg.substring(1));
        try {
          flags.addAll(Files.readAllLines(flagFilePath));
        } catch (IOException e) {
          Origin origin = new FlagFileOrigin(flagFilePath);
          reporter.error(new ExceptionDiagnostic(e, origin));
        }
      } else {
        flags.add(arg);
      }
    }
    return flags.toArray(new String[flags.size()]);
  }
}
