public static <T, S extends T> Iterator<S> filter(Iterator<T> iterator, final Class<S> cls) { return new MapIterator<>(new FilterIterator<>(iterator, cls::isInstance), cls::cast); } }
@Override public Iterator<? extends BasicBlockInContext<IExplodedBasicBlock>> getCalledNodes(BasicBlockInContext<IExplodedBasicBlock> call) { final Predicate<BasicBlockInContext<IExplodedBasicBlock>> isEntryFilter = BasicBlockInContext::isEntryBlock; return new FilterIterator<>(getSuccNodes(call), isEntryFilter); }
@Override protected Iterator<T> getConnected(T n) { return new FilterIterator<>(G.getSuccNodes(n), filter); } };
@Override @SuppressWarnings({ "unchecked", "rawtypes" }) public Iterator<AbstractStatement> getStatements() { return new FilterIterator(graph.iterator(), AbstractStatement.class::isInstance); }
@Override public Iterator<? extends INodeWithNumber> getVariables() { return new FilterIterator<>(graph.iterator(), x -> x != null); }
@Override public Iterator<? extends INodeWithNumber> getVariables() { return new FilterIterator<>(graph.iterator(), x -> x != null); }
@Override protected Iterator<T> getConnected(T n) { return new FilterIterator<>(G.getSuccNodes(n), filter); } };
@Override protected Iterator<T> getConnected(T n) { return new FilterIterator<>(G.getSuccNodes(n), filter); } };
@Override protected Iterator<? extends T> getConnected(T n) { final List<T> cp = currentPath(); return new FilterIterator<>(G.getSuccNodes(n), o -> ! cp.contains(o)); }
@Override protected Iterator<? extends T> getConnected(T n) { final List<T> cp = currentPath(); return new FilterIterator<>(G.getSuccNodes(n), o -> ! cp.contains(o)); }
@Override protected Iterator<? extends T> getConnected(T n) { final List<T> cp = currentPath(); return new FilterIterator<>(G.getSuccNodes(n), o -> ! cp.contains(o)); }
@Override public Iterator<Pair<CGNode, NewSiteReference>> getCreationSites(CallGraph CG) { return new MapIterator<>( new FilterIterator<>( CG.getNodes(method.getReference()).iterator(), o -> o.getMethod().equals(method) ), object -> Pair.make(object, site)); } }
public Iterator<FieldReference> iterateFields(CGNode node, Predicate<SSAInstruction> filter) { return new MapIterator<>( new FilterIterator<>(getIR(node).iterateNormalInstructions(), filter), object -> ((SSAFieldAccessInstruction)object).getDeclaredField()); }
/** * @return the rt.jar (1.4) or core.jar (1.5) file, or null if not found. */ private JarFile getRtJar() { return RtJar.getRtJar( new MapIterator<Module,JarFile>( new FilterIterator<>(getModules(getPrimordialLoader()).iterator(), JarFileModule.class::isInstance), M -> ((JarFileModule) M).getJarFile())); }
@Override public Iterator<CallSiteReference> getPossibleSites(final CGNode src, final CGNode target) { return new FilterIterator<>(getInterpreter(src).iterateCallSites(src), o -> getPossibleTargets(src, o).contains(target)); }
@Override public Iterator<CallSiteReference> getPossibleSites(final CGNode src, final CGNode target) { return new FilterIterator<>(getInterpreter(src).iterateCallSites(src), o -> getPossibleTargets(src, o).contains(target)); }
Iterator<T> iterateExceptionalPredecessors(T N) { if (N.equals(exit())) { return new FilterIterator<>(iterator(), o -> { int i = getNumber(o); return exceptionalToExit.get(i); }); } else { return exceptionalEdgeManager.getPredNodes(N); } }
Iterator<T> iterateExceptionalPredecessors(T N) { if (N.equals(exit())) { return new FilterIterator<>(iterator(), o -> { int i = getNumber(o); return exceptionalToExit.get(i); }); } else { return exceptionalEdgeManager.getPredNodes(N); } }
@Override public Iterator<Pair<CGNode, NewSiteReference>> getCreationSites(CallGraph CG) { return new MapIterator<>( new FilterIterator<>( getNode().iterateNewSites(), o -> o.getDeclaredType().equals(getConcreteType().getReference())), object -> Pair.make(getNode(), object)); } }
@Override public Iterator<NewSiteReference> iterateNewSites(CGNode node) { return new MapIterator<>( new FilterIterator<>( node.getIR().iterateAllInstructions(), SSANewInstruction.class::isInstance), object -> ((SSANewInstruction)object).getNewSite() ); } };