// Path: flagz-java/src/main/java/org/flagz/Flag.java
// public interface Flag<T> extends Supplier<T>, Consumer<T> {
// 
//   /** Returns the value of this flag. */
//   T get();
// 
//   /** Returns the default value of this flag. */
//   T defaultValue();
// 
//   /** Sets the value of this flag. */
//   void accept(T flagValue);
// 
//   /**
//    * Returns the user-visible flag name.
//    */
//   String name();
// 
//   /**
//    * Returns a user-visible alternative name for the flag, if any.
//    */
//   @Nullable
//   String altName();
// 
//   /**
//    * Returns the user-visible help string of the flag.
//    */
//   String help();
// 
// 
//   Flag<T> withValidator(Predicate<T> predicate);
// 
//   /**
//    * Add a listener for changes to this flag.
//    *
//    * Whenever the flag is changed (parsed from command line, or set dynamically), the given
//    * listener will be called.
//    */
//   Flag<T> withListener(Consumer<T> predicate);
// }
// 
// Path: flagz-java/src/main/java/org/flagz/Flagz.java
// public class Flagz {
// 
//   @FlagInfo(name = "help", altName = "h", help = "display this help menu")
//   private static final Flag<Boolean> showHelp = Flagz.valueOf(false);
// 
//   protected Flagz() {
//   }
// 
//   public static <N extends Number> Flag<N> valueOf(N defaultValue) {
//     return new PrimitiveFlagField.NumberFlagField<>(defaultValue);
//   }
// 
//   public static Flag<Boolean> valueOf(Boolean defaultValue) {
//     return new PrimitiveFlagField.BooleanFlagField(defaultValue);
//   }
// 
//   public static <E extends Enum<E>> Flag<E> valueOf(E defaultValue) {
//     return new PrimitiveFlagField.EnumFlagField<>(defaultValue);
//   }
// 
//   public static Flag<String> valueOf(String defaultValue) {
//     return new PrimitiveFlagField.StringFlagField(defaultValue);
//   }
// 
//   public static <K, V> Flag<Map<K, V>> valueOf(Map<K, V> defaultMap) {
//     return new ContainerFlagField.MapFlagField<>(defaultMap, HashMap::new);
//   }
// 
//   public static <V> Flag<List<V>> valueOf(List<V> defaultList) {
//     return new ContainerFlagField.CollectionFlagField<>(defaultList, ArrayList::new);
//   }
// 
//   public static <V> Flag<Set<V>> valueOf(Set<V> defaultSet) {
//     return new ContainerFlagField.CollectionFlagField<>(defaultSet, HashSet::new);
//   }
// 
// 
//   /**
//    * Parses the command line arguments and updates as necessary all {@link Flag}
//    * objects annotated with {@link FlagInfo}.
//    *
//    * If "--help" of "-h" is passed in at the command line, then the help menu
//    * will be printed and the JVM will exit with a 0 exit status.
//    *
//    * @param args            command line arguments in the form
//    *                        "--defaultFlagName=value --booleanFlag -c=foo ..."
//    * @param packagePrefixes list of Java packages to be scanned for Flag objects, keeping the scope
//    *                        narrow makes it start fast. By default an empty list is used, meaning
//    *                        all classes will be reflected on.
//    * @param objects         Set of objects that should be reflected to discover non-static final
//    *                        {@link Flag} fields.
//    * @return A registry that can be used for accessing all flags.
//    */
//   public static FlagFieldRegistry parse(String[] args, List<String> packagePrefixes,
//                                         Set<Object> objects) {
//     Set<FlagFieldScanner> scanners = ImmutableSet.of(
//         new FlagFieldScanner.ObjectBoundFinalScanner(objects),
//         new FlagFieldScanner.StaticFinalScanner(packagePrefixes));
//     FlagFieldRegistry registry = new FlagFieldRegistry(scanners);
//     registry.init();
//     registry.parseAll(Utils.parseArgsToFieldMap(args));
// 
//     if (showHelp.get()) {
//       Utils.printHelpPage(registry.allFields());
//       System.exit(0);
//     }
//     return registry;
//   }
// 
// 
//   public static FlagFieldRegistry parse(String[] args) {
//     return parse(args, ImmutableList.<String>of(), ImmutableSet.<Object>of());
//   }
// }


import com.google.common.collect.ImmutableList;
import org.flagz.Flag;
import org.flagz.FlagInfo;
import org.flagz.Flagz;
import java.util.List;
package org.flagz.testclasses;



/**
 * Set of flags that are useful for testing of {@link Flagz}.
 */
public class StaticFlags {

  @FlagInfo(help = "for testing of resolution with no name argument")
// Path: flagz-java/src/main/java/org/flagz/Flag.java
// public interface Flag<T> extends Supplier<T>, Consumer<T> {
// 
//   /** Returns the value of this flag. */
//   T get();
// 
//   /** Returns the default value of this flag. */
//   T defaultValue();
// 
//   /** Sets the value of this flag. */
//   void accept(T flagValue);
// 
//   /**
//    * Returns the user-visible flag name.
//    */
//   String name();
// 
//   /**
//    * Returns a user-visible alternative name for the flag, if any.
//    */
//   @Nullable
//   String altName();
// 
//   /**
//    * Returns the user-visible help string of the flag.
//    */
//   String help();
// 
// 
//   Flag<T> withValidator(Predicate<T> predicate);
// 
//   /**
//    * Add a listener for changes to this flag.
//    *
//    * Whenever the flag is changed (parsed from command line, or set dynamically), the given
//    * listener will be called.
//    */
//   Flag<T> withListener(Consumer<T> predicate);
// }
// 
// Path: flagz-java/src/main/java/org/flagz/Flagz.java
// public class Flagz {
// 
//   @FlagInfo(name = "help", altName = "h", help = "display this help menu")
//   private static final Flag<Boolean> showHelp = Flagz.valueOf(false);
// 
//   protected Flagz() {
//   }
// 
//   public static <N extends Number> Flag<N> valueOf(N defaultValue) {
//     return new PrimitiveFlagField.NumberFlagField<>(defaultValue);
//   }
// 
//   public static Flag<Boolean> valueOf(Boolean defaultValue) {
//     return new PrimitiveFlagField.BooleanFlagField(defaultValue);
//   }
// 
//   public static <E extends Enum<E>> Flag<E> valueOf(E defaultValue) {
//     return new PrimitiveFlagField.EnumFlagField<>(defaultValue);
//   }
// 
//   public static Flag<String> valueOf(String defaultValue) {
//     return new PrimitiveFlagField.StringFlagField(defaultValue);
//   }
// 
//   public static <K, V> Flag<Map<K, V>> valueOf(Map<K, V> defaultMap) {
//     return new ContainerFlagField.MapFlagField<>(defaultMap, HashMap::new);
//   }
// 
//   public static <V> Flag<List<V>> valueOf(List<V> defaultList) {
//     return new ContainerFlagField.CollectionFlagField<>(defaultList, ArrayList::new);
//   }
// 
//   public static <V> Flag<Set<V>> valueOf(Set<V> defaultSet) {
//     return new ContainerFlagField.CollectionFlagField<>(defaultSet, HashSet::new);
//   }
// 
// 
//   /**
//    * Parses the command line arguments and updates as necessary all {@link Flag}
//    * objects annotated with {@link FlagInfo}.
//    *
//    * If "--help" of "-h" is passed in at the command line, then the help menu
//    * will be printed and the JVM will exit with a 0 exit status.
//    *
//    * @param args            command line arguments in the form
//    *                        "--defaultFlagName=value --booleanFlag -c=foo ..."
//    * @param packagePrefixes list of Java packages to be scanned for Flag objects, keeping the scope
//    *                        narrow makes it start fast. By default an empty list is used, meaning
//    *                        all classes will be reflected on.
//    * @param objects         Set of objects that should be reflected to discover non-static final
//    *                        {@link Flag} fields.
//    * @return A registry that can be used for accessing all flags.
//    */
//   public static FlagFieldRegistry parse(String[] args, List<String> packagePrefixes,
//                                         Set<Object> objects) {
//     Set<FlagFieldScanner> scanners = ImmutableSet.of(
//         new FlagFieldScanner.ObjectBoundFinalScanner(objects),
//         new FlagFieldScanner.StaticFinalScanner(packagePrefixes));
//     FlagFieldRegistry registry = new FlagFieldRegistry(scanners);
//     registry.init();
//     registry.parseAll(Utils.parseArgsToFieldMap(args));
// 
//     if (showHelp.get()) {
//       Utils.printHelpPage(registry.allFields());
//       System.exit(0);
//     }
//     return registry;
//   }
// 
// 
//   public static FlagFieldRegistry parse(String[] args) {
//     return parse(args, ImmutableList.<String>of(), ImmutableSet.<Object>of());
//   }
// }


// Path: flagz-java/src/test/java/org/flagz/testclasses/StaticFlags.java
import com.google.common.collect.ImmutableList;
import org.flagz.Flag;
import org.flagz.FlagInfo;
import org.flagz.Flagz;
import java.util.List;

package org.flagz.testclasses;



/**
 * Set of flags that are useful for testing of {@link Flagz}.
 */
public class StaticFlags {

  @FlagInfo(help = "for testing of resolution with no name argument")
  public static final Flag<Integer> testFieldNameFlag = Flagz.valueOf(0);