diff options
author | fwe <fwe@google.com> | 2017-08-25 22:12:32 +0200 |
---|---|---|
committer | Vladimir Moskva <vladmos@google.com> | 2017-08-28 16:08:24 +0200 |
commit | 0047fdcb4f9afc69ad8891169810bd752f28dd17 (patch) | |
tree | 544c2ad3d0170e00c04b6671d1e9b1dbe3554c0c /src/main | |
parent | 363413110f3a63a11d900864be1852adbaed2899 (diff) |
Refactoring: OptionsParser now uses the visitor pattern to iterate over Blaze options.
This change is in preparation for unknown commit which also needs to iterate over all options, but has to execute a different action than getOptionsCompletion().
As a result, applying the visitor patterns helps to avoid duplicate iteration code.
PiperOrigin-RevId: 166515117
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/com/google/devtools/common/options/OptionsParser.java | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/src/main/java/com/google/devtools/common/options/OptionsParser.java b/src/main/java/com/google/devtools/common/options/OptionsParser.java index d4e430509a..36d11895b2 100644 --- a/src/main/java/com/google/devtools/common/options/OptionsParser.java +++ b/src/main/java/com/google/devtools/common/options/OptionsParser.java @@ -33,7 +33,9 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.function.Consumer; import java.util.function.Function; +import java.util.function.Predicate; import java.util.stream.Collectors; import javax.annotation.Nullable; @@ -623,22 +625,30 @@ public class OptionsParser implements OptionsProvider { * more details on the format for the flag completion. */ public String getOptionsCompletion() { - OptionsData data = impl.getOptionsData(); StringBuilder desc = new StringBuilder(); + visitOptions( + optionDefinition -> + optionDefinition.getDocumentationCategory() != OptionDocumentationCategory.UNDOCUMENTED, + optionDefinition -> OptionsUsage.getCompletion(optionDefinition, desc)); + + return desc.toString(); + } + + public void visitOptions( + Predicate<OptionDefinition> predicate, Consumer<OptionDefinition> visitor) { + Preconditions.checkNotNull(predicate, "Missing predicate."); + Preconditions.checkNotNull(visitor, "Missing visitor."); + + OptionsData data = impl.getOptionsData(); data.getOptionsClasses() // List all options .stream() .flatMap(optionsClass -> data.getOptionDefinitionsFromClass(optionsClass).stream()) // Sort field for deterministic ordering .sorted(OptionDefinition.BY_OPTION_NAME) - .filter( - optionDefinition -> - optionDefinition.getDocumentationCategory() - != OptionDocumentationCategory.UNDOCUMENTED) - .forEach(optionDefinition -> OptionsUsage.getCompletion(optionDefinition, desc)); - - return desc.toString(); + .filter(predicate) + .forEach(visitor); } /** |