package com.ibm.wala.cast.js.callgraph.fieldbased.flowgraph.vertices; import java.util.Iterator; import com.ibm.wala.classLoader.IClass; import com.ibm.wala.classLoader.IMethod; import com.ibm.wala.classLoader.NewSiteReference; import com.ibm.wala.ipa.callgraph.CGNode; import com.ibm.wala.ipa.callgraph.CallGraph; import com.ibm.wala.ipa.callgraph.impl.Everywhere; import com.ibm.wala.types.TypeReference; import com.ibm.wala.util.collections.NonNullSingletonIterator; import com.ibm.wala.util.collections.Pair; public class CreationSiteVertex extends Vertex implements ObjectVertex { private final IMethod node; private final int instructionIndex; private final TypeReference createdType; public CreationSiteVertex(IMethod node, int instructionIndex, TypeReference createdType) { super(); this.node = node; this.instructionIndex = instructionIndex; this.createdType = createdType; } @Override public IClass getConcreteType() { return node.getClassHierarchy().lookupClass(createdType); } public IMethod getMethod() { return node; } @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 <T> T accept(VertexVisitor<T> visitor) { return visitor.visitCreationSiteVertex(this); } }