Map-based implementation for ResultHolder.
| 32 | * Map-based implementation for {@link ResultHolder}. |
| 33 | */ |
| 34 | public abstract class AbstractResultHolder implements ResultHolder { |
| 35 | |
| 36 | /** |
| 37 | * Map from analysis ID to the corresponding analysis result. |
| 38 | */ |
| 39 | private final transient Map<String, Object> results = Maps.newHybridMap(); |
| 40 | |
| 41 | @Override |
| 42 | public <R> void storeResult(String key, R result) { |
| 43 | results.put(key, result); |
| 44 | } |
| 45 | |
| 46 | @Override |
| 47 | public boolean hasResult(String key) { |
| 48 | return results.containsKey(key); |
| 49 | } |
| 50 | |
| 51 | @Override |
| 52 | public <R> R getResult(String key) { |
| 53 | return (R) results.get(key); |
| 54 | } |
| 55 | |
| 56 | @Override |
| 57 | public <R> R getResult(String key, R defaultResult) { |
| 58 | return (R) results.getOrDefault(key, defaultResult); |
| 59 | } |
| 60 | |
| 61 | @Override |
| 62 | public <R> R getResult(String key, Supplier<R> supplier) { |
| 63 | return (R) results.computeIfAbsent(key, __ -> supplier.get()); |
| 64 | } |
| 65 | |
| 66 | @Override |
| 67 | public Collection<String> getKeys() { |
| 68 | return results.keySet(); |
| 69 | } |
| 70 | |
| 71 | @Override |
| 72 | public void clearResult(String key) { |
| 73 | results.remove(key); |
| 74 | } |
| 75 | |
| 76 | @Override |
| 77 | public void clearAll() { |
| 78 | results.clear(); |
| 79 | } |
| 80 | } |
nothing calls this directly
no test coverage detected