package org.stagemonitor.core.instrument;
import net.bytebuddy.matcher.ElementMatcher;
public class CachedClassLoaderMatcher extends ElementMatcher.Junction.AbstractBase<ClassLoader> {
private final WeakConcurrentMap<ClassLoader, Boolean> cache = new WeakConcurrentMap.WithInlinedExpunction<ClassLoader, Boolean>();
private final ElementMatcher<ClassLoader> delegate;
public static ElementMatcher.Junction.AbstractBase<ClassLoader> cached(ElementMatcher<ClassLoader> delegate) {
return new CachedClassLoaderMatcher(delegate);
}
private CachedClassLoaderMatcher(ElementMatcher<ClassLoader> delegate) {
this.delegate = delegate;
}
@Override
public boolean matches(ClassLoader target) {
final Boolean result = cache.get(target);
if (result != null) {
return result;
} else {
final boolean delegateResult = delegate.matches(target);
cache.put(target, delegateResult);
return delegateResult;
}
}
}