private <T, K> T getFromCache(CtElement element, K key, Supplier<T> valueResolver) { Map<K, T> cache = (Map<K, T>) element.getMetadata(CACHE_KEY); if (cache == null) { cache = new HashMap<>(); element.putMetadata(CACHE_KEY, cache); } return MapUtils.getOrCreate(cache, key, valueResolver); }
/** * Checks if the given element has already been amplified * * @param element * @return */ protected boolean hasBeenAmplified(CtElement element) { return (element.getMetadata(METADATA_KEY) != null && (boolean) element.getMetadata(METADATA_KEY)); }
@Override public DefaultJavaPrettyPrinter scan(CtElement e) { if (e != null && e.getMetadata("isMoved") == null) { return super.scan(e); } return this; } };
@Override public DefaultJavaPrettyPrinter scan(CtElement e) { if (e != null && e.getMetadata("isMoved") == null) { return super.scan(e); } return this; } };
@Override public Stream<CtMethod<?>> amplify(CtMethod<?> testMethod, int iteration) { List<T> originals = this.getOriginals(testMethod); List<T> reducedOriginals = this.reduceAlreadyAmplifiedElements(originals); return reducedOriginals.stream() .filter(reducedOriginal -> reducedOriginal.getMetadata(METADATA_KEY) == null || !(boolean) reducedOriginal.getMetadata(METADATA_KEY) ).flatMap(original -> this.amplify(original, testMethod) .stream() .map(amplified -> this.replace(original, amplified, testMethod)) ); } }