Skip to content

Commit 023d053

Browse files
graememorganError Prone Team
authored and
Error Prone Team
committed
Get Choice off Guava's Optional/Predicate/Function types.
Optional was easier than you'd think: it's very contained. PiperOrigin-RevId: 735704195
1 parent d353a78 commit 023d053

17 files changed

+55
-50
lines changed

core/src/main/java/com/google/errorprone/refaster/BlockTemplate.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
import com.google.auto.value.AutoValue;
2121
import com.google.common.base.CharMatcher;
22-
import com.google.common.base.Optional;
2322
import com.google.common.collect.ImmutableClassToInstanceMap;
2423
import com.google.common.collect.ImmutableList;
2524
import com.google.common.collect.ImmutableMap;
@@ -38,6 +37,7 @@
3837
import java.io.StringWriter;
3938
import java.lang.annotation.Annotation;
4039
import java.util.Map;
40+
import java.util.Optional;
4141
import java.util.logging.Logger;
4242

4343
/**
@@ -99,7 +99,7 @@ public Iterable<BlockTemplateMatch> match(JCTree tree, Context context) {
9999
ImmutableList<JCStatement> targetStatements = ImmutableList.copyOf(block.getStatements());
100100
return matchesStartingAnywhere(block, 0, targetStatements, context)
101101
.findFirst()
102-
.or(List.<BlockTemplateMatch>nil());
102+
.orElse(List.nil());
103103
}
104104
return ImmutableList.of();
105105
}

core/src/main/java/com/google/errorprone/refaster/Choice.java

+12-8
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,16 @@
1919
import static com.google.common.base.Preconditions.checkNotNull;
2020

2121
import com.google.common.annotations.VisibleForTesting;
22-
import com.google.common.base.Function;
23-
import com.google.common.base.Optional;
24-
import com.google.common.base.Predicate;
2522
import com.google.common.collect.Iterables;
2623
import com.google.common.collect.Iterators;
2724
import com.google.errorprone.annotations.CanIgnoreReturnValue;
2825
import com.google.errorprone.annotations.ForOverride;
2926
import java.util.Collection;
3027
import java.util.Collections;
3128
import java.util.Iterator;
29+
import java.util.Optional;
30+
import java.util.function.Function;
31+
import java.util.function.Predicate;
3232

3333
/**
3434
* A representation of a choice with zero or more options, which may be evaluated lazily or
@@ -113,7 +113,7 @@ public Optional<T> findFirst() {
113113

114114
@Override
115115
public Choice<T> filter(Predicate<? super T> predicate) {
116-
return predicate.apply(t) ? this : Choice.<T>none();
116+
return predicate.test(t) ? this : Choice.<T>none();
117117
}
118118

119119
@Override
@@ -190,7 +190,7 @@ public String toString() {
190190
/** Returns the first valid option from this {@code Choice}. */
191191
public Optional<T> findFirst() {
192192
Iterator<T> itr = iterator();
193-
return itr.hasNext() ? Optional.of(itr.next()) : Optional.<T>absent();
193+
return itr.hasNext() ? Optional.of(itr.next()) : Optional.<T>empty();
194194
}
195195

196196
/**
@@ -229,7 +229,11 @@ public <R> Choice<R> mapIfPresent(Function<? super T, Optional<R>> function) {
229229
return new Choice<R>() {
230230
@Override
231231
protected Iterator<R> iterator() {
232-
return Optional.presentInstances(Iterables.transform(thisChoice.asIterable(), function))
232+
return Iterables.transform(
233+
Iterables.filter(
234+
Iterables.transform(thisChoice.asIterable(), function::apply),
235+
Optional::isPresent),
236+
Optional::get)
233237
.iterator();
234238
}
235239
};
@@ -242,7 +246,7 @@ public <R> Choice<R> map(Function<? super T, R> function) {
242246
return new Choice<R>() {
243247
@Override
244248
protected Iterator<R> iterator() {
245-
return Iterators.transform(thisChoice.iterator(), function);
249+
return Iterators.transform(thisChoice.iterator(), function::apply);
246250
}
247251
};
248252
}
@@ -275,7 +279,7 @@ public Choice<T> filter(Predicate<? super T> predicate) {
275279
return new Choice<T>() {
276280
@Override
277281
protected Iterator<T> iterator() {
278-
return Iterators.filter(thisChoice.iterator(), predicate);
282+
return Iterators.filter(thisChoice.iterator(), predicate::test);
279283
}
280284

281285
@Override

core/src/main/java/com/google/errorprone/refaster/ExpressionTemplate.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222

2323
import com.google.auto.value.AutoValue;
2424
import com.google.common.base.Function;
25-
import com.google.common.base.Optional;
2625
import com.google.common.collect.ImmutableClassToInstanceMap;
2726
import com.google.common.collect.ImmutableList;
2827
import com.google.common.collect.ImmutableMap;
@@ -57,6 +56,7 @@
5756
import java.io.StringWriter;
5857
import java.lang.annotation.Annotation;
5958
import java.util.Map;
59+
import java.util.Optional;
6060
import java.util.logging.Logger;
6161
import org.jspecify.annotations.Nullable;
6262

@@ -209,7 +209,7 @@ public Optional<Unifier> apply(Unifier unifier) {
209209
unifier, inliner, new Warner(target), expectedTypes, actualTypes);
210210
} catch (CouldNotResolveImportException e) {
211211
logger.log(FINE, "Failure to resolve import", e);
212-
return Optional.absent();
212+
return Optional.empty();
213213
}
214214
}
215215
});

core/src/main/java/com/google/errorprone/refaster/Inliner.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
package com.google.errorprone.refaster;
1818

19-
import com.google.common.base.Optional;
2019
import com.google.common.collect.ImmutableSet;
2120
import com.google.common.collect.Maps;
2221
import com.google.common.collect.Sets;
@@ -45,6 +44,7 @@
4544
import com.sun.tools.javac.util.Name;
4645
import com.sun.tools.javac.util.Names;
4746
import java.util.Map;
47+
import java.util.Optional;
4848
import java.util.Set;
4949

5050
/**
@@ -180,7 +180,7 @@ public <V> V getBinding(Bindings.Key<V> key) {
180180
}
181181

182182
public <V> Optional<V> getOptionalBinding(Bindings.Key<V> key) {
183-
return Optional.fromNullable(bindings.getBinding(key));
183+
return Optional.ofNullable(bindings.getBinding(key));
184184
}
185185

186186
public <R> com.sun.tools.javac.util.List<R> inlineList(

core/src/main/java/com/google/errorprone/refaster/PlaceholderMethod.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
package com.google.errorprone.refaster;
1616

1717
import com.google.auto.value.AutoValue;
18-
import com.google.common.base.Predicate;
1918
import com.google.common.base.Predicates;
2019
import com.google.common.collect.ClassToInstanceMap;
2120
import com.google.common.collect.ImmutableClassToInstanceMap;
@@ -32,13 +31,15 @@
3231
import com.google.errorprone.refaster.annotation.Placeholder;
3332
import com.sun.source.tree.ExpressionTree;
3433
import com.sun.source.tree.Tree;
34+
import com.sun.source.tree.Tree.Kind;
3535
import com.sun.tools.javac.tree.JCTree.JCExpression;
3636
import com.sun.tools.javac.tree.JCTree.JCStatement;
3737
import com.sun.tools.javac.util.List;
3838
import java.io.Serializable;
3939
import java.lang.annotation.Annotation;
4040
import java.util.Arrays;
4141
import java.util.Set;
42+
import java.util.function.Predicate;
4243

4344
/**
4445
* Representation of a {@code Refaster} placeholder method, which can represent an arbitrary
@@ -62,7 +63,7 @@ static PlaceholderMethod create(
6263
annotations.containsKey(NotMatches.class)
6364
? UTemplater.getValue(annotations.getInstance(NotMatches.class))
6465
: null;
65-
Predicate<Tree.Kind> allowedKinds =
66+
Predicate<Kind> allowedKinds =
6667
annotations.containsKey(OfKind.class)
6768
? Predicates.<Tree.Kind>in(Arrays.asList(annotations.getInstance(OfKind.class).value()))
6869
: Predicates.<Tree.Kind>alwaysTrue();
@@ -74,7 +75,7 @@ public boolean matches(ExpressionTree t, VisitorState state) {
7475
return (allowsIdentity || !(t instanceof PlaceholderParamIdent))
7576
&& (matchesClass == null || matchesClass.newInstance().matches(t, state))
7677
&& (notMatchesClass == null || !notMatchesClass.newInstance().matches(t, state))
77-
&& allowedKinds.apply(t.getKind());
78+
&& allowedKinds.test(t.getKind());
7879
} catch (ReflectiveOperationException e) {
7980
throw new RuntimeException(e);
8081
}

core/src/main/java/com/google/errorprone/refaster/Template.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
import static java.util.logging.Level.FINE;
2020

21-
import com.google.common.base.Optional;
2221
import com.google.common.collect.ImmutableClassToInstanceMap;
2322
import com.google.common.collect.ImmutableList;
2423
import com.google.common.collect.ImmutableMap;
@@ -76,6 +75,7 @@
7675
import java.lang.reflect.Method;
7776
import java.util.ArrayList;
7877
import java.util.Collection;
78+
import java.util.Optional;
7979
import java.util.logging.Logger;
8080
import org.jspecify.annotations.Nullable;
8181

@@ -223,15 +223,15 @@ protected Optional<Unifier> typecheck(
223223
}
224224

225225
if (!checkBounds(unifier, inliner, warner)) {
226-
return Optional.absent();
226+
return Optional.empty();
227227
}
228228
return Optional.of(unifier);
229229
} catch (CouldNotResolveImportException e) {
230230
logger.log(FINE, "Failure to resolve an import", e);
231-
return Optional.absent();
231+
return Optional.empty();
232232
} catch (InferException e) {
233233
logger.log(FINE, "No valid instantiation found: " + e.getMessage());
234-
return Optional.absent();
234+
return Optional.empty();
235235
}
236236
}
237237

core/src/main/java/com/google/errorprone/refaster/UBlank.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ public Choice<UnifierWithUnconsumedStatements> apply(UnifierWithUnconsumedStatem
111111
public com.sun.tools.javac.util.List<JCStatement> inlineStatements(Inliner inliner) {
112112
ListBuffer<JCStatement> buffer = new ListBuffer<>();
113113
for (StatementTree stmt :
114-
inliner.getOptionalBinding(key()).or(ImmutableList.<StatementTree>of())) {
114+
inliner.getOptionalBinding(key()).orElse(ImmutableList.<StatementTree>of())) {
115115
buffer.add((JCStatement) stmt);
116116
}
117117
return buffer.toList();

core/src/main/java/com/google/errorprone/refaster/UBlock.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package com.google.errorprone.refaster;
1818

1919
import com.google.auto.value.AutoValue;
20-
import com.google.common.base.Optional;
2120
import com.google.common.collect.ImmutableList;
2221
import com.sun.source.tree.BlockTree;
2322
import com.sun.source.tree.StatementTree;
@@ -26,6 +25,7 @@
2625
import com.sun.tools.javac.tree.JCTree.JCStatement;
2726
import com.sun.tools.javac.util.ListBuffer;
2827
import java.util.List;
28+
import java.util.Optional;
2929

3030
/**
3131
* {@link UTree} representation of a {@link BlockTree}.
@@ -58,7 +58,7 @@ static Choice<Unifier> unifyStatementList(
5858
(UnifierWithUnconsumedStatements state) ->
5959
state.unconsumedStatements().isEmpty()
6060
? Optional.of(state.unifier())
61-
: Optional.<Unifier>absent());
61+
: Optional.<Unifier>empty());
6262
}
6363

6464
static com.sun.tools.javac.util.List<JCStatement> inlineStatementList(

core/src/main/java/com/google/errorprone/refaster/UIf.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
import com.google.auto.value.AutoValue;
2020
import com.google.common.base.Function;
21-
import com.google.common.base.Optional;
2221
import com.google.common.collect.ImmutableList;
2322
import com.google.common.collect.Iterables;
2423
import com.google.errorprone.refaster.ControlFlowVisitor.Result;
@@ -27,6 +26,7 @@
2726
import com.sun.source.tree.TreeVisitor;
2827
import com.sun.tools.javac.tree.JCTree.JCStatement;
2928
import com.sun.tools.javac.util.List;
29+
import java.util.Optional;
3030
import org.jspecify.annotations.Nullable;
3131

3232
/**
@@ -143,7 +143,7 @@ private static Function<Unifier, Choice<Unifier>> unifyUStatementWithSingleState
143143
(UnifierWithUnconsumedStatements stateAfterThen) ->
144144
stateAfterThen.unconsumedStatements().isEmpty()
145145
? Optional.of(stateAfterThen.unifier())
146-
: Optional.<Unifier>absent());
146+
: Optional.<Unifier>empty());
147147
})
148148
.flatMap(
149149
unifierAfterThen -> {

core/src/main/java/com/google/errorprone/refaster/ULabeledStatement.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ static class Key extends Bindings.Key<CharSequence> {
4747
static @Nullable Name inlineLabel(@Nullable CharSequence label, Inliner inliner) {
4848
return (label == null)
4949
? null
50-
: inliner.asName(inliner.getOptionalBinding(new Key(label)).or(label));
50+
: inliner.asName(inliner.getOptionalBinding(new Key(label)).orElse(label));
5151
}
5252

5353
@Override

core/src/main/java/com/google/errorprone/refaster/ULambda.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import static com.google.errorprone.refaster.Unifier.unifyList;
2121

2222
import com.google.auto.value.AutoValue;
23-
import com.google.common.base.Optional;
2423
import com.google.common.collect.ImmutableList;
2524
import com.sun.source.tree.LambdaExpressionTree;
2625
import com.sun.source.tree.TreeVisitor;
@@ -33,6 +32,7 @@
3332
import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
3433
import com.sun.tools.javac.util.List;
3534
import com.sun.tools.javac.util.ListBuffer;
35+
import java.util.Optional;
3636

3737
/**
3838
* {@code UTree} representation of a {@code LambdaExpressionTree}.

core/src/main/java/com/google/errorprone/refaster/ULocalVarIdent.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@
1717
package com.google.errorprone.refaster;
1818

1919
import com.google.auto.value.AutoValue;
20-
import com.google.common.base.Optional;
2120
import com.google.errorprone.util.ASTHelpers;
2221
import com.sun.source.tree.IdentifierTree;
2322
import com.sun.tools.javac.tree.JCTree.JCIdent;
2423
import java.util.Objects;
24+
import java.util.Optional;
2525

2626
/**
2727
* Identifier corresponding to a template local variable.

core/src/main/java/com/google/errorprone/refaster/UPlaceholderExpression.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import com.google.auto.value.AutoValue;
2020
import com.google.common.base.Functions;
2121
import com.google.common.base.MoreObjects;
22-
import com.google.common.base.Optional;
2322
import com.google.common.collect.Collections2;
2423
import com.google.common.collect.ImmutableList;
2524
import com.google.common.collect.ImmutableMap;
@@ -36,6 +35,7 @@
3635
import com.sun.tools.javac.util.List;
3736
import com.sun.tools.javac.util.Names;
3837
import java.util.Map;
38+
import java.util.Optional;
3939

4040
/**
4141
* {@code UTree} representation of an invocation of a placeholder method.
@@ -180,19 +180,19 @@ protected Choice<Unifier> defaultAction(Tree node, Unifier unifier) {
180180
if (prevBinding != null) {
181181
return prevBinding.toString().equals(state.result().toString())
182182
? Optional.of(resultUnifier)
183-
: Optional.<Unifier>absent();
183+
: Optional.<Unifier>empty();
184184
}
185185
JCExpression result = state.result();
186186
if (!placeholder()
187187
.matcher()
188188
.matches(result, UMatches.makeVisitorState(expr, resultUnifier))) {
189-
return Optional.absent();
189+
return Optional.empty();
190190
}
191191
result.type = expr.type;
192192
resultUnifier.putBinding(placeholder().exprKey(), result);
193193
return Optional.of(resultUnifier);
194194
} else {
195-
return Optional.absent();
195+
return Optional.empty();
196196
}
197197
});
198198
}

0 commit comments

Comments
 (0)