1 /* 2 * Copyright (C) 2013 The Dagger Authors. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package dagger.internal.codegen.base; 18 19 import java.util.Map; 20 import java.util.function.Function; 21 22 /** General utilities for the annotation processor. */ 23 public final class Util { 24 25 /** 26 * A version of {@link Map#computeIfAbsent(Object, Function)} that allows {@code mappingFunction} 27 * to update {@code map}. 28 */ reentrantComputeIfAbsent( Map<K, V> map, K key, Function<? super K, ? extends V> mappingFunction)29 public static <K, V> V reentrantComputeIfAbsent( 30 Map<K, V> map, K key, Function<? super K, ? extends V> mappingFunction) { 31 V value = map.get(key); 32 if (value == null) { 33 value = mappingFunction.apply(key); 34 if (value != null) { 35 map.put(key, value); 36 } 37 } 38 return value; 39 } 40 Util()41 private Util() {} 42 } 43