| // 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.Diagnostic; |
| 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; |
| import java.util.function.Consumer; |
| |
| 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, Consumer<Diagnostic> errorConsumer) { |
| 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); |
| errorConsumer.accept(new ExceptionDiagnostic(e, origin)); |
| } |
| } else { |
| flags.add(arg); |
| } |
| } |
| return flags.toArray(StringUtils.EMPTY_ARRAY); |
| } |
| } |