Skip to content

Commit e449acf

Browse files
committed
Replace Guava functional helpers with streams
1 parent bd65e59 commit e449acf

15 files changed

+63
-187
lines changed

pom.xml

+1
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
<dependency>
6464
<groupId>com.google.guava</groupId>
6565
<artifactId>guava</artifactId>
66+
<version>21.0</version>
6667
</dependency>
6768

6869
<!-- for testing -->

src/main/java/io/airlift/airline/Accessor.java

+3-9
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package io.airlift.airline;
22

3-
import com.google.common.base.Function;
4-
import com.google.common.base.Joiner;
53
import com.google.common.collect.ImmutableList;
64
import com.google.common.collect.Iterables;
75

@@ -19,6 +17,7 @@
1917

2018
import static com.google.common.base.Preconditions.checkArgument;
2119
import static java.util.Objects.requireNonNull;
20+
import static java.util.stream.Collectors.joining;
2221

2322
public class Accessor
2423
{
@@ -38,13 +37,8 @@ public Accessor(Iterable<Field> path)
3837
checkArgument(!Iterables.isEmpty(path), "path is empty");
3938

4039
this.path = ImmutableList.copyOf(path);
41-
this.name = this.path.get(0).getDeclaringClass().getSimpleName() + "." + Joiner.on('.').join(Iterables.transform(this.path, new Function<Field, String>()
42-
{
43-
public String apply(Field field)
44-
{
45-
return field.getName();
46-
}
47-
}));
40+
this.name = this.path.get(0).getDeclaringClass().getSimpleName() + "." +
41+
this.path.stream().map(Field::getName).collect(joining("."));
4842

4943
Field field = this.path.get(this.path.size() - 1);
5044
multiValued = Collection.class.isAssignableFrom(field.getType());

src/main/java/io/airlift/airline/Cli.java

+14-12
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,9 @@
1818

1919
package io.airlift.airline;
2020

21-
import com.google.common.base.Function;
2221
import com.google.common.base.Preconditions;
2322
import com.google.common.collect.ImmutableList;
2423
import com.google.common.collect.ImmutableMap;
25-
import com.google.common.collect.Iterables;
2624
import io.airlift.airline.model.ArgumentsMetadata;
2725
import io.airlift.airline.model.CommandGroupMetadata;
2826
import io.airlift.airline.model.CommandMetadata;
@@ -36,8 +34,13 @@
3634
import java.util.Map;
3735

3836
import static com.google.common.base.Preconditions.checkArgument;
37+
import static com.google.common.collect.ImmutableList.toImmutableList;
38+
import static com.google.common.collect.Streams.stream;
3939
import static io.airlift.airline.ParserUtil.createInstance;
4040
import static io.airlift.airline.ParserUtil.injectOptions;
41+
import static io.airlift.airline.model.MetadataLoader.loadCommand;
42+
import static io.airlift.airline.model.MetadataLoader.loadCommandGroup;
43+
import static io.airlift.airline.model.MetadataLoader.loadCommands;
4144
import static java.util.Objects.requireNonNull;
4245

4346
public class Cli<C>
@@ -74,19 +77,18 @@ private Cli(String name,
7477

7578
CommandMetadata defaultCommandMetadata = null;
7679
if (defaultCommand != null) {
77-
defaultCommandMetadata = MetadataLoader.loadCommand(defaultCommand);
80+
defaultCommandMetadata = loadCommand(defaultCommand);
7881
}
7982

80-
List<CommandMetadata> defaultCommandGroup = MetadataLoader.loadCommands(defaultGroupCommands);
83+
List<CommandMetadata> defaultCommandGroup = loadCommands(defaultGroupCommands);
8184

82-
List<CommandGroupMetadata> commandGroups = ImmutableList.copyOf(Iterables.transform(groups, new Function<GroupBuilder<C>, CommandGroupMetadata>()
83-
{
84-
@Override
85-
public CommandGroupMetadata apply(GroupBuilder<C> group)
86-
{
87-
return MetadataLoader.loadCommandGroup(group.name, group.description, MetadataLoader.loadCommand(group.defaultCommand), MetadataLoader.loadCommands(group.commands));
88-
}
89-
}));
85+
List<CommandGroupMetadata> commandGroups = stream(groups)
86+
.map(group -> loadCommandGroup(
87+
group.name,
88+
group.description,
89+
loadCommand(group.defaultCommand),
90+
loadCommands(group.commands)))
91+
.collect(toImmutableList());
9092

9193
this.metadata = MetadataLoader.loadGlobal(name, description, defaultCommandMetadata, defaultCommandGroup, commandGroups);
9294
}

src/main/java/io/airlift/airline/CommandSuggester.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public class CommandSuggester
1919
public Iterable<String> suggest()
2020
{
2121
ImmutableList.Builder<String> suggestions = ImmutableList.<String>builder()
22-
.addAll(concat(transform(command.getCommandOptions(), OptionMetadata.optionsGetter())));
22+
.addAll(concat(transform(command.getCommandOptions(), OptionMetadata::getOptions)));
2323

2424
if (command.getArguments() != null) {
2525
suggestions.add("--");

src/main/java/io/airlift/airline/GlobalSuggester.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ public class GlobalSuggester
2020
public Iterable<String> suggest()
2121
{
2222
return concat(
23-
transform(metadata.getCommandGroups(), CommandGroupMetadata.nameGetter()),
24-
transform(metadata.getDefaultGroupCommands(), CommandMetadata.nameGetter()),
25-
concat(transform(metadata.getOptions(), OptionMetadata.optionsGetter()))
23+
transform(metadata.getCommandGroups(), CommandGroupMetadata::getName),
24+
transform(metadata.getDefaultGroupCommands(), CommandMetadata::getName),
25+
concat(transform(metadata.getOptions(), OptionMetadata::getOptions))
2626
);
2727
}
2828
}

src/main/java/io/airlift/airline/GlobalUsageSummary.java

+6-16
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,17 @@
11
package io.airlift.airline;
22

3-
import com.google.common.base.Function;
4-
import com.google.common.collect.Collections2;
53
import com.google.common.collect.ImmutableList;
64
import io.airlift.airline.model.CommandGroupMetadata;
75
import io.airlift.airline.model.CommandMetadata;
86
import io.airlift.airline.model.GlobalMetadata;
9-
import io.airlift.airline.model.OptionMetadata;
107

11-
import java.util.ArrayList;
128
import java.util.List;
139
import java.util.Map;
1410
import java.util.TreeMap;
1511

1612
import static com.google.common.base.MoreObjects.firstNonNull;
1713
import static com.google.common.base.Preconditions.checkArgument;
18-
import static io.airlift.airline.UsageHelper.toUsage;
14+
import static com.google.common.collect.ImmutableList.toImmutableList;
1915
import static java.util.stream.Collectors.toList;
2016

2117
public class GlobalUsageSummary
@@ -58,17 +54,11 @@ public void usage(GlobalMetadata global, UsagePrinter out)
5854
//
5955

6056
// build arguments
61-
List<String> commandArguments = new ArrayList<>();
62-
commandArguments.addAll(Collections2.transform(global.getOptions(), new Function<OptionMetadata, String>()
63-
{
64-
public String apply(OptionMetadata option)
65-
{
66-
if (option.isHidden()) {
67-
return null;
68-
}
69-
return toUsage(option);
70-
}
71-
}));
57+
List<String> commandArguments = global.getOptions().stream()
58+
.filter(option -> !option.isHidden())
59+
.map(UsageHelper::toUsage)
60+
.collect(toImmutableList());
61+
7262
out.newPrinterWithHangingIndent(8)
7363
.append("usage:")
7464
.append(global.getName())

src/main/java/io/airlift/airline/GroupSuggester.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ public class GroupSuggester
1919
public Iterable<String> suggest()
2020
{
2121
return concat(
22-
transform(group.getCommands(), CommandMetadata.nameGetter()),
23-
concat(transform(group.getOptions(), OptionMetadata.optionsGetter()))
22+
transform(group.getCommands(), CommandMetadata::getName),
23+
concat(transform(group.getOptions(), OptionMetadata::getOptions))
2424
);
2525
}
2626
}

src/main/java/io/airlift/airline/Parser.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public ParseState parse(GlobalMetadata metadata, Iterable<String> params)
3838

3939
// parse group
4040
if (tokens.hasNext()) {
41-
CommandGroupMetadata group = find(metadata.getCommandGroups(), compose(equalTo(tokens.peek()), CommandGroupMetadata.nameGetter()), null);
41+
CommandGroupMetadata group = find(metadata.getCommandGroups(), compose(equalTo(tokens.peek()), CommandGroupMetadata::getName), null);
4242
if (group != null) {
4343
tokens.next();
4444
state = state.withGroup(group).pushContext(Context.GROUP);
@@ -54,7 +54,7 @@ public ParseState parse(GlobalMetadata metadata, Iterable<String> params)
5454
}
5555

5656
if (tokens.hasNext()) {
57-
CommandMetadata command = find(expectedCommands, compose(equalTo(tokens.peek()), CommandMetadata.nameGetter()), null);
57+
CommandMetadata command = find(expectedCommands, compose(equalTo(tokens.peek()), CommandMetadata::getName), null);
5858
if (command == null) {
5959
while (tokens.hasNext()) {
6060
state = state.withUnparsedInput(tokens.next());

src/main/java/io/airlift/airline/UsageHelper.java

+21-70
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,16 @@
11
package io.airlift.airline;
22

3-
import com.google.common.base.Function;
4-
import com.google.common.base.Joiner;
53
import com.google.common.collect.ComparisonChain;
6-
import com.google.common.collect.ImmutableList;
7-
import com.google.common.collect.Lists;
84
import io.airlift.airline.model.ArgumentsMetadata;
95
import io.airlift.airline.model.CommandMetadata;
106
import io.airlift.airline.model.OptionMetadata;
117

12-
import javax.annotation.Nullable;
13-
148
import java.util.Comparator;
159
import java.util.List;
1610
import java.util.Set;
1711

18-
import static com.google.common.collect.Iterables.filter;
19-
import static com.google.common.collect.Iterables.transform;
20-
import static io.airlift.airline.model.OptionMetadata.isHiddenPredicate;
12+
import static com.google.common.collect.ImmutableList.toImmutableList;
13+
import static java.util.stream.Collectors.joining;
2114

2215
public class UsageHelper
2316
{
@@ -54,35 +47,21 @@ public int compare(CommandMetadata o1, CommandMetadata o2)
5447

5548
public static String toDescription(OptionMetadata option)
5649
{
57-
Set<String> options = option.getOptions();
58-
StringBuilder stringBuilder = new StringBuilder();
59-
60-
final String argumentString;
61-
if (option.getArity() > 0) {
62-
argumentString = Joiner.on(" ").join(Lists.transform(ImmutableList.of(option.getTitle()), new Function<String, String>()
63-
{
64-
public String apply(@Nullable String argument)
65-
{
66-
return "<" + argument + ">";
67-
}
68-
}));
69-
}
70-
else {
71-
argumentString = null;
72-
}
73-
74-
Joiner.on(", ").appendTo(stringBuilder, transform(options, new Function<String, String>()
75-
{
76-
public String apply(@Nullable String option)
77-
{
78-
if (argumentString != null) {
79-
return option + " " + argumentString;
80-
}
81-
return option;
82-
}
83-
}));
50+
return optionString(option, ", ");
51+
}
8452

85-
return stringBuilder.toString();
53+
private static String optionString(OptionMetadata option, String delimiter)
54+
{
55+
String argument = (option.getArity() > 0) ? ("<" + option.getTitle() + ">") : null;
56+
57+
return option.getOptions().stream()
58+
.map(value -> {
59+
if (argument != null) {
60+
return value + " " + argument;
61+
}
62+
return value;
63+
})
64+
.collect(joining(delimiter));
8665
}
8766

8867
public static String toDescription(ArgumentsMetadata arguments)
@@ -107,32 +86,7 @@ public static String toUsage(OptionMetadata option)
10786
stringBuilder.append('(');
10887
}
10988

110-
final String argumentString;
111-
if (option.getArity() > 0) {
112-
argumentString = Joiner.on(" ").join(transform(ImmutableList.of(option.getTitle()), new Function<String, String>()
113-
{
114-
public String apply(@Nullable String argument)
115-
{
116-
return "<" + argument + ">";
117-
}
118-
}));
119-
}
120-
else {
121-
argumentString = null;
122-
}
123-
124-
Joiner.on(" | ").appendTo(stringBuilder, transform(options, new Function<String, String>()
125-
{
126-
public String apply(@Nullable String option)
127-
{
128-
if (argumentString != null) {
129-
return option + " " + argumentString;
130-
}
131-
else {
132-
return option;
133-
}
134-
}
135-
}));
89+
stringBuilder.append(optionString(option, " | "));
13690

13791
if (options.size() > 1) {
13892
stringBuilder.append(')');
@@ -174,12 +128,9 @@ public static String toUsage(ArgumentsMetadata arguments)
174128

175129
public static List<String> toSynopsisUsage(List<OptionMetadata> options)
176130
{
177-
return ImmutableList.copyOf(transform(filter(options, isHiddenPredicate()), new Function<OptionMetadata, String>()
178-
{
179-
public String apply(OptionMetadata option)
180-
{
181-
return toUsage(option);
182-
}
183-
}));
131+
return options.stream()
132+
.filter(input -> !input.isHidden())
133+
.map(UsageHelper::toUsage)
134+
.collect(toImmutableList());
184135
}
185136
}

src/main/java/io/airlift/airline/model/CommandGroupMetadata.java

-12
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package io.airlift.airline.model;
22

3-
import com.google.common.base.Function;
43
import com.google.common.collect.ImmutableList;
54

65
import java.util.List;
@@ -60,15 +59,4 @@ public String toString()
6059
sb.append('}');
6160
return sb.toString();
6261
}
63-
64-
public static Function<CommandGroupMetadata, String> nameGetter()
65-
{
66-
return new Function<CommandGroupMetadata, String>()
67-
{
68-
public String apply(CommandGroupMetadata input)
69-
{
70-
return input.getName();
71-
}
72-
};
73-
}
7462
}

src/main/java/io/airlift/airline/model/CommandMetadata.java

-12
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package io.airlift.airline.model;
22

3-
import com.google.common.base.Function;
43
import com.google.common.collect.ImmutableList;
54
import io.airlift.airline.Accessor;
65

@@ -104,15 +103,4 @@ public String toString()
104103
sb.append('}');
105104
return sb.toString();
106105
}
107-
108-
public static Function<CommandMetadata, String> nameGetter()
109-
{
110-
return new Function<CommandMetadata, String>()
111-
{
112-
public String apply(CommandMetadata input)
113-
{
114-
return input.getName();
115-
}
116-
};
117-
}
118106
}

0 commit comments

Comments
 (0)