diff options
3 files changed, 77 insertions, 2 deletions
diff --git a/common/src/main/java/com/google/auto/common/AnnotationValues.java b/common/src/main/java/com/google/auto/common/AnnotationValues.java index a5db2cca..296bacd1 100644 --- a/common/src/main/java/com/google/auto/common/AnnotationValues.java +++ b/common/src/main/java/com/google/auto/common/AnnotationValues.java @@ -15,8 +15,8 @@ */ package com.google.auto.common; +import static com.google.auto.common.MoreStreams.toImmutableList; import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.collect.ImmutableList.toImmutableList; import com.google.common.base.Equivalence; import com.google.common.collect.ImmutableList; diff --git a/common/src/main/java/com/google/auto/common/MoreStreams.java b/common/src/main/java/com/google/auto/common/MoreStreams.java new file mode 100644 index 00000000..934514ab --- /dev/null +++ b/common/src/main/java/com/google/auto/common/MoreStreams.java @@ -0,0 +1,75 @@ +/* + * Copyright 2021 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.auto.common; + +import static java.util.stream.Collectors.collectingAndThen; +import static java.util.stream.Collectors.toList; + +import com.google.common.collect.ImmutableBiMap; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Maps; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collector; +import java.util.stream.Collectors; + +/** + * A utility class that provides Android compatible alternatives to Guava's streaming APIs. + * + * <p>This is useful when the Android flavor of Guava somehow finds its way onto the processor + * classpath. + */ +public final class MoreStreams { + + /** Returns a collector for an {@link ImmutableList}. */ + public static <T> Collector<T, ?, ImmutableList<T>> toImmutableList() { + return collectingAndThen(toList(), ImmutableList::copyOf); + } + + /** Returns a collector for an {@link ImmutableSet}. */ + public static <T> Collector<T, ?, ImmutableSet<T>> toImmutableSet() { + return collectingAndThen(toList(), ImmutableSet::copyOf); + } + + /** Returns a collector for an {@link ImmutableMap}. */ + public static <T, K, V> Collector<T, ?, ImmutableMap<K, V>> toImmutableMap( + Function<? super T, K> keyMapper, Function<? super T, V> valueMapper) { + return Collectors.mapping( + value -> Maps.immutableEntry(keyMapper.apply(value), valueMapper.apply(value)), + Collector.of( + ImmutableMap::builder, + (ImmutableMap.Builder<K, V> builder, Map.Entry<K, V> entry) -> builder.put(entry), + (left, right) -> left.putAll(right.build()), + ImmutableMap.Builder::build)); + } + + /** Returns a collector for an {@link ImmutableBiMap}. */ + public static <T, K, V> Collector<T, ?, ImmutableBiMap<K, V>> toImmutableBiMap( + Function<? super T, K> keyMapper, Function<? super T, V> valueMapper) { + return Collectors.mapping( + value -> Maps.immutableEntry(keyMapper.apply(value), valueMapper.apply(value)), + Collector.of( + ImmutableBiMap::builder, + (ImmutableBiMap.Builder<K, V> builder, Map.Entry<K, V> entry) -> builder.put(entry), + (left, right) -> left.putAll(right.build()), + ImmutableBiMap.Builder::build)); + } + + private MoreStreams() {} +} diff --git a/common/src/main/java/com/google/auto/common/SimpleAnnotationMirror.java b/common/src/main/java/com/google/auto/common/SimpleAnnotationMirror.java index 7d508e32..bbaf8fc9 100644 --- a/common/src/main/java/com/google/auto/common/SimpleAnnotationMirror.java +++ b/common/src/main/java/com/google/auto/common/SimpleAnnotationMirror.java @@ -16,8 +16,8 @@ package com.google.auto.common; +import static com.google.auto.common.MoreStreams.toImmutableMap; import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.collect.ImmutableMap.toImmutableMap; import static javax.lang.model.util.ElementFilter.methodsIn; import com.google.common.base.Joiner; |