/*
* This file is part of the Jikes RVM project (http://jikesrvm.org).
*
* This file is licensed to You under the Eclipse Public License (EPL);
* You may not use this file except in compliance with the License. You
* may obtain a copy of the License at
*
* http://www.opensource.org/licenses/eclipse-1.0.php
*
* See the COPYRIGHT.txt file distributed with this work for information
* regarding copyright ownership.
*/
package org.jikesrvm.adaptive.database.callgraph;
import org.jikesrvm.classloader.RVMMethod;
/**
* A call site is a pair: <RVMMethod, bcIndex>
*/
public final class CallSite {
/**
* Caller method
*/
private final RVMMethod method;
/**
* bytecode index of callsite in caller method
*/
private final int bcIndex;
/**
* @param m the RVMMethod containing the callsite
* @param bci the bytecode index of the callsite within m
*/
public CallSite(RVMMethod m, int bci) {
if (org.jikesrvm.VM.VerifyAssertions) org.jikesrvm.VM._assert(m != null);
method = m;
bcIndex = bci;
}
/**
* @return method containing the callsite
*/
public RVMMethod getMethod() {
return method;
}
/**
* @return call site's bytecode index in its method
*/
public int getBytecodeIndex() {
return bcIndex;
}
/**
* @return string representation of call site
*/
@Override
public String toString() {
return "<" + method + ", " + bcIndex + ">";
}
/**
* Determine if two call sites are the same. Exact match: no wild cards.
*
* @param obj call site to compare to
* @return {@code true} if call sites are the same; otherwise,
* return {@code false}
*/
@Override
public boolean equals(Object obj) {
if (obj instanceof CallSite) {
CallSite cs = (CallSite) obj;
return method.equals(cs.method) && bcIndex == cs.bcIndex;
} else {
return false;
}
}
/**
* @return hash code
*/
@Override
public int hashCode() {
return bcIndex + method.hashCode();
}
}