comparison graal/com.oracle.max.base/src/com/sun/max/program/option/OptionSet.java @ 4142:bc8527f3071c

Adjust code base to new level of warnings.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Sun, 18 Dec 2011 05:24:06 +0100
parents e233f5660da4
children
comparison
equal deleted inserted replaced
4141:04d21be7a24f 4142:bc8527f3071c
95 * specifies if this option set allows unrecognized options to be present when 95 * specifies if this option set allows unrecognized options to be present when
96 * {@linkplain #parseArguments(String[]) parsing command line arguments} or 96 * {@linkplain #parseArguments(String[]) parsing command line arguments} or
97 * {@linkplain #loadOptions(OptionSet) loading options from another option set}. 97 * {@linkplain #loadOptions(OptionSet) loading options from another option set}.
98 */ 98 */
99 public OptionSet(boolean allowUnrecognizedOptions) { 99 public OptionSet(boolean allowUnrecognizedOptions) {
100 optionValues = new HashMap<String, String>(); 100 optionValues = new HashMap<>();
101 // Using a LinkedHashMap to preserve insertion order when iterating over values 101 // Using a LinkedHashMap to preserve insertion order when iterating over values
102 optionMap = new LinkedHashMap<String, Option>(); 102 optionMap = new LinkedHashMap<>();
103 optionSyntax = new HashMap<String, Syntax>(); 103 optionSyntax = new HashMap<>();
104 this.allowUnrecognizedOptions = allowUnrecognizedOptions; 104 this.allowUnrecognizedOptions = allowUnrecognizedOptions;
105 } 105 }
106 106
107 /** 107 /**
108 * Converts this option set into a list of command line arguments, to be used, for example, to pass to an external 108 * Converts this option set into a list of command line arguments, to be used, for example, to pass to an external
467 * The {@code getSortedOptions()} method retrieves the options from this option 467 * The {@code getSortedOptions()} method retrieves the options from this option
468 * set, sorting all options by their names. 468 * set, sorting all options by their names.
469 * @return an iterable collection of {@code Option} instances, sorted according to the name of each option 469 * @return an iterable collection of {@code Option} instances, sorted according to the name of each option
470 */ 470 */
471 public Iterable<Option<?>> getSortedOptions() { 471 public Iterable<Option<?>> getSortedOptions() {
472 final List<Option<?>> list = new LinkedList<Option<?>>(); 472 final List<Option<?>> list = new LinkedList<>();
473 final TreeSet<String> tree = new TreeSet<String>(); 473 final TreeSet<String> tree = new TreeSet<>();
474 for (String string : optionMap.keySet()) { 474 for (String string : optionMap.keySet()) {
475 tree.add(string); 475 tree.add(string);
476 } 476 }
477 for (String string : tree) { 477 for (String string : tree) {
478 list.add(optionMap.get(string)); 478 list.add(optionMap.get(string));
621 } 621 }
622 if (fieldType == boolean.class) { 622 if (fieldType == boolean.class) {
623 if (prefix.length() > 0) { 623 if (prefix.length() > 0) {
624 // setup a "-prefix+name" option 624 // setup a "-prefix+name" option
625 String plusName = prefix + ":+" + name; 625 String plusName = prefix + ":+" + name;
626 FieldOption<Boolean> plusOption = new FieldOption<Boolean>(plusName, object, field, (Boolean) defaultValue, OptionTypes.BLANK_BOOLEAN_TYPE, help); 626 FieldOption<Boolean> plusOption = new FieldOption<>(plusName, object, field, (Boolean) defaultValue, OptionTypes.BLANK_BOOLEAN_TYPE, help);
627 plusOption.nullValue = true; 627 plusOption.nullValue = true;
628 addOption(plusOption, Syntax.REQUIRES_BLANK); 628 addOption(plusOption, Syntax.REQUIRES_BLANK);
629 629
630 // setup a "-prefix-name" option 630 // setup a "-prefix-name" option
631 String minusName = prefix + ":-" + name; 631 String minusName = prefix + ":-" + name;
632 FieldOption<Boolean> minusOption = new FieldOption<Boolean>(minusName, object, field, (Boolean) defaultValue, OptionTypes.BLANK_BOOLEAN_TYPE, help); 632 FieldOption<Boolean> minusOption = new FieldOption<>(minusName, object, field, (Boolean) defaultValue, OptionTypes.BLANK_BOOLEAN_TYPE, help);
633 minusOption.nullValue = false; 633 minusOption.nullValue = false;
634 return addOption(minusOption, Syntax.REQUIRES_BLANK); 634 return addOption(minusOption, Syntax.REQUIRES_BLANK);
635 } 635 }
636 return addOption(new FieldOption<Boolean>(optionName, object, field, (Boolean) defaultValue, OptionTypes.BOOLEAN_TYPE, help)); 636 return addOption(new FieldOption<>(optionName, object, field, (Boolean) defaultValue, OptionTypes.BOOLEAN_TYPE, help));
637 637
638 } else if (fieldType == int.class) { 638 } else if (fieldType == int.class) {
639 return addOption(new FieldOption<Integer>(optionName, object, field, (Integer) defaultValue, OptionTypes.INT_TYPE, help)); 639 return addOption(new FieldOption<>(optionName, object, field, (Integer) defaultValue, OptionTypes.INT_TYPE, help));
640 } else if (fieldType == float.class) { 640 } else if (fieldType == float.class) {
641 return addOption(new FieldOption<Float>(optionName, object, field, (Float) defaultValue, OptionTypes.FLOAT_TYPE, help)); 641 return addOption(new FieldOption<>(optionName, object, field, (Float) defaultValue, OptionTypes.FLOAT_TYPE, help));
642 } else if (fieldType == long.class) { 642 } else if (fieldType == long.class) {
643 return addOption(new FieldOption<Long>(optionName, object, field, (Long) defaultValue, OptionTypes.LONG_TYPE, help)); 643 return addOption(new FieldOption<>(optionName, object, field, (Long) defaultValue, OptionTypes.LONG_TYPE, help));
644 } else if (fieldType == double.class) { 644 } else if (fieldType == double.class) {
645 return addOption(new FieldOption<Double>(optionName, object, field, (Double) defaultValue, OptionTypes.DOUBLE_TYPE, help)); 645 return addOption(new FieldOption<>(optionName, object, field, (Double) defaultValue, OptionTypes.DOUBLE_TYPE, help));
646 } else if (fieldType == String.class) { 646 } else if (fieldType == String.class) {
647 return addOption(new FieldOption<String>(optionName, object, field, (String) defaultValue, OptionTypes.STRING_TYPE, help)); 647 return addOption(new FieldOption<>(optionName, object, field, (String) defaultValue, OptionTypes.STRING_TYPE, help));
648 } else if (fieldType == File.class) { 648 } else if (fieldType == File.class) {
649 return addOption(new FieldOption<File>(optionName, object, field, (File) defaultValue, OptionTypes.FILE_TYPE, help)); 649 return addOption(new FieldOption<>(optionName, object, field, (File) defaultValue, OptionTypes.FILE_TYPE, help));
650 } else if (fieldType.isEnum()) { 650 } else if (fieldType.isEnum()) {
651 final Class<? extends Enum> enumClass = Utils.cast(fieldType); 651 final Class<? extends Enum> enumClass = Utils.cast(fieldType);
652 return addOption(makeEnumFieldOption(optionName, object, field, defaultValue, enumClass, help)); 652 return addOption(makeEnumFieldOption(optionName, object, field, defaultValue, enumClass, help));
653 } 653 }
654 return null; 654 return null;
655 } 655 }
656 656
657 private <T extends Enum<T>> FieldOption<T> makeEnumFieldOption(String name, Object object, Field field, Object defaultValue, Class<T> enumClass, String help) { 657 private static <T extends Enum<T>> FieldOption<T> makeEnumFieldOption(String name, Object object, Field field, Object defaultValue, Class<T> enumClass, String help) {
658 final OptionTypes.EnumType<T> optionType = new OptionTypes.EnumType<T>(enumClass); 658 final OptionTypes.EnumType<T> optionType = new OptionTypes.EnumType<>(enumClass);
659 final T defaultV = Utils.<T>cast(defaultValue); 659 final T defaultV = Utils.<T>cast(defaultValue);
660 return new FieldOption<T>(name, object, field, defaultV, optionType, help); 660 return new FieldOption<>(name, object, field, defaultV, optionType, help);
661 } 661 }
662 662
663 public Option<String> newStringOption(String name, String defaultValue, String help) { 663 public Option<String> newStringOption(String name, String defaultValue, String help) {
664 return addOption(new Option<String>(name, defaultValue, OptionTypes.STRING_TYPE, help)); 664 return addOption(new Option<>(name, defaultValue, OptionTypes.STRING_TYPE, help));
665 } 665 }
666 666
667 public Option<Integer> newIntegerOption(String name, Integer defaultValue, String help) { 667 public Option<Integer> newIntegerOption(String name, Integer defaultValue, String help) {
668 return addOption(new Option<Integer>(name, defaultValue, OptionTypes.INT_TYPE, help)); 668 return addOption(new Option<>(name, defaultValue, OptionTypes.INT_TYPE, help));
669 } 669 }
670 670
671 public Option<Long> newLongOption(String name, Long defaultValue, String help) { 671 public Option<Long> newLongOption(String name, Long defaultValue, String help) {
672 return addOption(new Option<Long>(name, defaultValue, OptionTypes.LONG_TYPE, help)); 672 return addOption(new Option<>(name, defaultValue, OptionTypes.LONG_TYPE, help));
673 } 673 }
674 674
675 public Option<Float> newFloatOption(String name, Float defaultValue, String help) { 675 public Option<Float> newFloatOption(String name, Float defaultValue, String help) {
676 return addOption(new Option<Float>(name, defaultValue, OptionTypes.FLOAT_TYPE, help)); 676 return addOption(new Option<>(name, defaultValue, OptionTypes.FLOAT_TYPE, help));
677 } 677 }
678 678
679 public Option<Double> newDoubleOption(String name, Double defaultValue, String help) { 679 public Option<Double> newDoubleOption(String name, Double defaultValue, String help) {
680 return addOption(new Option<Double>(name, defaultValue, OptionTypes.DOUBLE_TYPE, help)); 680 return addOption(new Option<>(name, defaultValue, OptionTypes.DOUBLE_TYPE, help));
681 } 681 }
682 682
683 public Option<List<String>> newStringListOption(String name, String defaultValue, String help) { 683 public Option<List<String>> newStringListOption(String name, String defaultValue, String help) {
684 return addOption(new Option<List<String>>(name, defaultValue == null ? null : OptionTypes.COMMA_SEPARATED_STRING_LIST_TYPE.parseValue(defaultValue), OptionTypes.COMMA_SEPARATED_STRING_LIST_TYPE, help)); 684 return addOption(new Option<>(name, defaultValue == null ? null : OptionTypes.COMMA_SEPARATED_STRING_LIST_TYPE.parseValue(defaultValue), OptionTypes.COMMA_SEPARATED_STRING_LIST_TYPE, help));
685 } 685 }
686 686
687 public Option<List<String>> newStringListOption(String name, String[] defaultValue, String help) { 687 public Option<List<String>> newStringListOption(String name, String[] defaultValue, String help) {
688 List<String> list = null; 688 List<String> list = null;
689 if (defaultValue != null) { 689 if (defaultValue != null) {
690 list = new ArrayList<String>(defaultValue.length); 690 list = new ArrayList<>(defaultValue.length);
691 list.addAll(Arrays.asList(defaultValue)); 691 list.addAll(Arrays.asList(defaultValue));
692 } 692 }
693 return addOption(new Option<List<String>>(name, list, OptionTypes.COMMA_SEPARATED_STRING_LIST_TYPE, help)); 693 return addOption(new Option<>(name, list, OptionTypes.COMMA_SEPARATED_STRING_LIST_TYPE, help));
694 } 694 }
695 695
696 public Option<List<String>> newStringListOption(String name, String defaultValue, char separator, String help) { 696 public Option<List<String>> newStringListOption(String name, String defaultValue, char separator, String help) {
697 final OptionTypes.StringListType type = new OptionTypes.StringListType(separator); 697 final OptionTypes.StringListType type = new OptionTypes.StringListType(separator);
698 return addOption(new Option<List<String>>(name, defaultValue == null ? null : type.parseValue(defaultValue), type, help)); 698 return addOption(new Option<>(name, defaultValue == null ? null : type.parseValue(defaultValue), type, help));
699 } 699 }
700 700
701 public <T> Option<List<T>> newListOption(String name, String defaultValue, Option.Type<T> elementOptionType, char separator, String help) { 701 public <T> Option<List<T>> newListOption(String name, String defaultValue, Option.Type<T> elementOptionType, char separator, String help) {
702 final OptionTypes.ListType<T> type = new OptionTypes.ListType<T>(separator, elementOptionType); 702 final OptionTypes.ListType<T> type = new OptionTypes.ListType<>(separator, elementOptionType);
703 return addOption(new Option<List<T>>(name, defaultValue == null ? null : type.parseValue(defaultValue), type, help)); 703 return addOption(new Option<>(name, defaultValue == null ? null : type.parseValue(defaultValue), type, help));
704 } 704 }
705 705
706 public Option<File> newFileOption(String name, String defaultValue, String help) { 706 public Option<File> newFileOption(String name, String defaultValue, String help) {
707 return newFileOption(name, OptionTypes.FILE_TYPE.parseValue(defaultValue), help); 707 return newFileOption(name, OptionTypes.FILE_TYPE.parseValue(defaultValue), help);
708 } 708 }
709 709
710 public Option<File> newFileOption(String name, File defaultValue, String help) { 710 public Option<File> newFileOption(String name, File defaultValue, String help) {
711 return addOption(new Option<File>(name, defaultValue, OptionTypes.FILE_TYPE, help)); 711 return addOption(new Option<>(name, defaultValue, OptionTypes.FILE_TYPE, help));
712 } 712 }
713 713
714 public Option<URL> newURLOption(String name, URL defaultValue, String help) { 714 public Option<URL> newURLOption(String name, URL defaultValue, String help) {
715 return addOption(new Option<URL>(name, defaultValue, OptionTypes.URL_TYPE, help)); 715 return addOption(new Option<>(name, defaultValue, OptionTypes.URL_TYPE, help));
716 } 716 }
717 717
718 public <T> Option<T> newInstanceOption(String name, Class<T> klass, T defaultValue, String help) { 718 public <T> Option<T> newInstanceOption(String name, Class<T> klass, T defaultValue, String help) {
719 return addOption(new Option<T>(name, defaultValue, OptionTypes.createInstanceOptionType(klass), help)); 719 return addOption(new Option<>(name, defaultValue, OptionTypes.createInstanceOptionType(klass), help));
720 } 720 }
721 721
722 public <T> Option<List<T>> newListInstanceOption(String name, String defaultValue, Class<T> klass, char separator, String help) { 722 public <T> Option<List<T>> newListInstanceOption(String name, String defaultValue, Class<T> klass, char separator, String help) {
723 final OptionTypes.ListType<T> type = OptionTypes.createInstanceListOptionType(klass, separator); 723 final OptionTypes.ListType<T> type = OptionTypes.createInstanceListOptionType(klass, separator);
724 return addOption(new Option<List<T>>(name, (defaultValue == null) ? null : type.parseValue(defaultValue), type, help)); 724 return addOption(new Option<>(name, (defaultValue == null) ? null : type.parseValue(defaultValue), type, help));
725 } 725 }
726 726
727 public Option<Boolean> newBooleanOption(String name, Boolean defaultValue, String help) { 727 public Option<Boolean> newBooleanOption(String name, Boolean defaultValue, String help) {
728 if (defaultValue != null && !defaultValue) { 728 if (defaultValue != null && !defaultValue) {
729 return addOption(new Option<Boolean>(name, defaultValue, OptionTypes.BOOLEAN_TYPE, help), Syntax.EQUALS_OR_BLANK); 729 return addOption(new Option<>(name, defaultValue, OptionTypes.BOOLEAN_TYPE, help), Syntax.EQUALS_OR_BLANK);
730 } 730 }
731 return addOption(new Option<Boolean>(name, defaultValue, OptionTypes.BOOLEAN_TYPE, help)); 731 return addOption(new Option<>(name, defaultValue, OptionTypes.BOOLEAN_TYPE, help));
732 } 732 }
733 733
734 public <T> Option<T> newOption(String name, String defaultValue, Option.Type<T> type, String help) { 734 public <T> Option<T> newOption(String name, String defaultValue, Option.Type<T> type, String help) {
735 return newOption(name, type.parseValue(defaultValue), type, Syntax.REQUIRES_EQUALS, help); 735 return newOption(name, type.parseValue(defaultValue), type, Syntax.REQUIRES_EQUALS, help);
736 } 736 }
737 737
738 public <T> Option<T> newOption(String name, T defaultValue, Option.Type<T> type, Syntax syntax, String help) { 738 public <T> Option<T> newOption(String name, T defaultValue, Option.Type<T> type, Syntax syntax, String help) {
739 return addOption(new Option<T>(name, defaultValue, type, help), syntax); 739 return addOption(new Option<>(name, defaultValue, type, help), syntax);
740 } 740 }
741 741
742 public <E extends Enum<E>> Option<E> newEnumOption(String name, E defaultValue, Class<E> enumClass, String help) { 742 public <E extends Enum<E>> Option<E> newEnumOption(String name, E defaultValue, Class<E> enumClass, String help) {
743 return addOption(new Option<E>(name, defaultValue, new OptionTypes.EnumType<E>(enumClass), help)); 743 return addOption(new Option<>(name, defaultValue, new OptionTypes.EnumType<>(enumClass), help));
744 } 744 }
745 745
746 public <E extends Enum<E>> Option<List<E>> newEnumListOption(String name, Iterable<E> defaultValue, Class<E> enumClass, String help) { 746 public <E extends Enum<E>> Option<List<E>> newEnumListOption(String name, Iterable<E> defaultValue, Class<E> enumClass, String help) {
747 final List<E> list; 747 final List<E> list;
748 if (defaultValue == null) { 748 if (defaultValue == null) {
749 list = null; 749 list = null;
750 } else if (defaultValue instanceof List) { 750 } else if (defaultValue instanceof List) {
751 list = Utils.cast(defaultValue); 751 list = Utils.cast(defaultValue);
752 } else if (defaultValue instanceof Collection) { 752 } else if (defaultValue instanceof Collection) {
753 final Collection<E> collection = Utils.cast(defaultValue); 753 final Collection<E> collection = Utils.cast(defaultValue);
754 list = new ArrayList<E>(collection); 754 list = new ArrayList<>(collection);
755 } else { 755 } else {
756 list = new ArrayList<E>(); 756 list = new ArrayList<>();
757 for (E value : defaultValue) { 757 for (E value : defaultValue) {
758 list.add(value); 758 list.add(value);
759 } 759 }
760 } 760 }
761 final Option<List<E>> option = new Option<List<E>>(name, list, new OptionTypes.EnumListType<E>(enumClass, ','), help); 761 final Option<List<E>> option = new Option<>(name, list, new OptionTypes.EnumListType<>(enumClass, ','), help);
762 return addOption(option); 762 return addOption(option);
763 } 763 }
764 764
765 public Option<File> newConfigOption(String name, File defaultFile, String help) { 765 public Option<File> newConfigOption(String name, File defaultFile, String help) {
766 return addOption(new Option<File>(name, defaultFile, new OptionTypes.ConfigFile(this), help)); 766 return addOption(new Option<>(name, defaultFile, new OptionTypes.ConfigFile(this), help));
767 } 767 }
768 } 768 }