public T lookup(final CacheReference<T> reference) {
        final T value = reverse.get(reference);
        if(MISSING_ITEM == value) {
            log.warn(String.format("Lookup failed for %s in reverse cache", reference));
            return null;
        }
        return value;
    }
@Test
    public void testLookup() {
        final Cache<Path> cache = new ReverseLookupCache<>(new PathCache(1), 1);
        assertNull(cache.lookup(new SimplePathPredicate(new Path("/", EnumSet.of(Path.Type.directory)))));
        final AttributedList<Path> list = new AttributedList<>();
        final Path directory = new Path("p", EnumSet.of(Path.Type.directory));
        final Path file1 = new Path(directory, "name1", EnumSet.of(Path.Type.file));
        list.add(file1);
        final Path file2 = new Path(directory, "name2", EnumSet.of(Path.Type.file));
        list.add(file2);
        cache.put(directory, list);
        assertNotNull(cache.lookup(new DefaultPathPredicate(file1)));
        assertNotNull(cache.lookup(new DefaultPathPredicate(file2)));
    }