@Override public Iterator<ModuleEntry> getEntries() { return new NonNullSingletonIterator<>(this); }
@Override public Iterator<Pair<CGNode, NewSiteReference>> getCreationSites(CallGraph CG) { CGNode cgn = CG.getNode(node, Everywhere.EVERYWHERE); assert cgn != null : node; return NonNullSingletonIterator.make(Pair.make(cgn, NewSiteReference.make(instructionIndex, createdType))); }
@Override public Iterator<Pair<CGNode, NewSiteReference>> getCreationSites(CallGraph CG) { CGNode cgn = CG.getNode(node, Everywhere.EVERYWHERE); assert cgn != null : node; return NonNullSingletonIterator.make(Pair.make(cgn, NewSiteReference.make(instructionIndex, createdType))); }
@Override public Iterator<ModuleEntry> getEntries() { return new NonNullSingletonIterator<>(this); }
@Override public Iterator<SSAInstruction> iterator() { if (isEntryBlock() || isExitBlock() || getInstruction() == null) { return EmptyIterator.instance(); } else { return NonNullSingletonIterator.make(getInstruction()); } }
@Override public Iterator<ModuleEntry> getEntries() { return new NonNullSingletonIterator<>(this); }
@Override public Iterator<SSAInstruction> iterator() { if (isEntryBlock() || isExitBlock() || getInstruction() == null) { return EmptyIterator.instance(); } else { return NonNullSingletonIterator.make(getInstruction()); } }
@Override public Iterator<? extends ModuleEntry> getEntries() { return new NonNullSingletonIterator<ModuleEntry>(this); }
@Override public Iterator<Pair<CGNode, NewSiteReference>> getCreationSites(CallGraph CG) { MethodReference ctorRef = JavaScriptMethods.makeCtorReference(JavaScriptTypes.Function); Set<CGNode> f = CG.getNodes(ctorRef); CGNode ctor = null; for(CGNode n : f) { JavaScriptConstructor c = (JavaScriptConstructor) n.getMethod(); if (c.constructedType().equals(klass)) { ctor = n; break; } } // built in objects if (ctor == null) { return EmptyIterator.instance(); } Iterator<CGNode> callers = CG.getPredNodes(ctor); CGNode caller = callers.next(); assert !callers.hasNext(); Iterator<CallSiteReference> sites = CG.getPossibleSites(caller, ctor); CallSiteReference site = sites.next(); assert !sites.hasNext() : caller + " --> " + ctor + " @ " + site + " and " + sites.next() + '\n' + caller.getIR(); return NonNullSingletonIterator.make(Pair.make(caller, NewSiteReference.make(site.getProgramCounter(), klass.getReference()))); }
@Override public Iterator<? extends ModuleEntry> getEntries() { return new NonNullSingletonIterator<>(this); }
@Override public Iterator<Pair<CGNode, NewSiteReference>> getCreationSites(CallGraph CG) { MethodReference ctorRef = JavaScriptMethods.makeCtorReference(JavaScriptTypes.Function); Set<CGNode> f = CG.getNodes(ctorRef); CGNode ctor = null; for(CGNode n : f) { JavaScriptConstructor c = (JavaScriptConstructor) n.getMethod(); if (c.constructedType().equals(klass)) { ctor = n; break; } } // built in objects if (ctor == null) { return EmptyIterator.instance(); } Iterator<CGNode> callers = CG.getPredNodes(ctor); CGNode caller = callers.next(); assert !callers.hasNext(); Iterator<CallSiteReference> sites = CG.getPossibleSites(caller, ctor); CallSiteReference site = sites.next(); assert !sites.hasNext() : caller + " --> " + ctor + " @ " + site + " and " + sites.next() + '\n' + caller.getIR(); return NonNullSingletonIterator.make(Pair.make(caller, NewSiteReference.make(site.getProgramCounter(), klass.getReference()))); }
@Override public Iterator<? extends ModuleEntry> getEntries() { return new NonNullSingletonIterator<ModuleEntry>(this); }
@Override public Iterator<ModuleEntry> getEntries() { return new NonNullSingletonIterator<>(this); }
@Override public Iterator<? extends ModuleEntry> getEntries() { return new NonNullSingletonIterator<>(this); }
@Override public Iterator<ModuleEntry> getEntries() { return new NonNullSingletonIterator<>(this); }
@Override public Iterator<ModuleEntry> getEntries() { return new NonNullSingletonIterator<>(this); }
public static <T> NonNullSingletonIterator<T> make(T item) { return new NonNullSingletonIterator<>(item); }
public static <T> NonNullSingletonIterator<T> make(T item) { return new NonNullSingletonIterator<>(item); }
public static <T> NonNullSingletonIterator<T> make(T item) { return new NonNullSingletonIterator<>(item); }
/** * Construct a breadth-first enumerator starting with a particular node in a directed graph. * * @param G the graph whose nodes to enumerate */ public BFSPathFinder(Graph<T> G, T N, Predicate<T> f) { if (G == null) { throw new IllegalArgumentException("G is null"); } if (f == null) { throw new IllegalArgumentException("null f"); } this.G = G; this.roots = new NonNullSingletonIterator<>(N); this.filter = f; }