/******************************************************************************
* Copyright (c) 2002 - 2012 IBM Corporation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*****************************************************************************/
package com.ibm.wala.cast.js.callgraph.fieldbased.flowgraph.vertices;
import com.ibm.wala.cast.js.ssa.JavaScriptInvoke;
import com.ibm.wala.cast.js.types.JavaScriptMethods;
import com.ibm.wala.classLoader.CallSiteReference;
/**
* A call vertex represents the possible callees of a function call or <code>new</code> expression.
*
* @author mschaefer
*
*/
public class CallVertex extends Vertex {
// method containing the call
private final FuncVertex func;
// PC of the call site
private final CallSiteReference site;
// the call instruction itself
private final JavaScriptInvoke invk;
CallVertex(FuncVertex func, CallSiteReference site, JavaScriptInvoke invk) {
this.func = func;
this.site = site;
this.invk = invk;
}
public FuncVertex getCaller() {
return func;
}
public CallSiteReference getSite() {
return site;
}
public JavaScriptInvoke getInstruction() {
return invk;
}
/**
* Does this call vertex correspond to a <code>new</code> instruction?
*/
public boolean isNew() {
return site.getDeclaredTarget() == JavaScriptMethods.ctorReference;
}
@Override
public <T> T accept(VertexVisitor<T> visitor) {
return visitor.visitCalleeVertex(this);
}
@Override
public String toString() {
return "Callee(" + func + ", " + site + ")";
}
}