blob: 13a7ac87925e7b368e1789bd67e3882d02ce533d [file]
// Copyright (c) 2022, 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;
import com.google.common.collect.ImmutableList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class ParseFlagInfoImpl implements ParseFlagInfo {
public static ParseFlagInfoImpl flag0(String flag, String... help) {
return flag(flag, Collections.emptyList(), Arrays.asList(help));
}
public static ParseFlagInfoImpl flag1(String flag, String arg, String... help) {
return flag(flag, Collections.singletonList(arg), Arrays.asList(help));
}
public static ParseFlagInfoImpl flag2(String flag, String arg1, String arg2, String... help) {
return flag(flag, ImmutableList.of(arg1, arg2), Arrays.asList(help));
}
private static String fmt(String flag, List<String> args) {
StringBuilder builder = new StringBuilder(flag);
for (String arg : args) {
builder.append(" ").append(arg);
}
return builder.toString();
}
public static ParseFlagInfoImpl flag(String flag, List<String> args, List<String> help) {
return new ParseFlagInfoImpl(flag, fmt(flag, args), Collections.emptyList(), help);
}
// Note that the raw flag may be non-representable as in the case of the family of flags for
// assertions.
@SuppressWarnings({"FieldCanBeLocal", "unused"})
private final String rawFlag;
private final String flagWithArgs;
private final List<String> alternatives;
private final List<String> flagHelp;
public ParseFlagInfoImpl(
String rawFlag, String flagWithArgs, List<String> alternatives, List<String> flagHelp) {
// Raw flag may be null if it does not have a unique definition.
assert flagWithArgs != null;
assert alternatives != null;
assert flagHelp != null;
this.rawFlag = rawFlag;
this.flagWithArgs = flagWithArgs;
this.alternatives = alternatives;
this.flagHelp = flagHelp;
}
@Override
public String getFlagFormat() {
return flagWithArgs;
}
@Override
public List<String> getFlagFormatAlternatives() {
return alternatives;
}
@Override
public List<String> getFlagHelp() {
return flagHelp;
}
}