| // 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 com.android.tools.r8.utils.internal.StringUtils; | |
| 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); | |
| } | |
| } |