aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar fwe <fwe@google.com>2017-08-25 22:12:32 +0200
committerGravatar Vladimir Moskva <vladmos@google.com>2017-08-28 16:08:24 +0200
commit0047fdcb4f9afc69ad8891169810bd752f28dd17 (patch)
tree544c2ad3d0170e00c04b6671d1e9b1dbe3554c0c /src/main
parent363413110f3a63a11d900864be1852adbaed2899 (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.java26
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);
}
/**