001 /*
002 * This file is part of the Jikes RVM project (http://jikesrvm.org).
003 *
004 * This file is licensed to You under the Eclipse Public License (EPL);
005 * You may not use this file except in compliance with the License. You
006 * may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/eclipse-1.0.php
009 *
010 * See the COPYRIGHT.txt file distributed with this work for information
011 * regarding copyright ownership.
012 */
013 package org.jikesrvm.adaptive.database.callgraph;
014
015 import org.jikesrvm.classloader.RVMMethod;
016
017 /**
018 * A call site is a pair: <RVMMethod, bcIndex>
019 */
020 public final class CallSite {
021
022 /**
023 * Caller method
024 */
025 private final RVMMethod method;
026
027 /**
028 * bytecode index of callsite in caller method
029 */
030 private final int bcIndex;
031
032 /**
033 * @param m the RVMMethod containing the callsite
034 * @param bci the bytecode index of the callsite within m
035 */
036 public CallSite(RVMMethod m, int bci) {
037 if (org.jikesrvm.VM.VerifyAssertions) org.jikesrvm.VM._assert(m != null);
038 method = m;
039 bcIndex = bci;
040 }
041
042 /**
043 * @return method containing the callsite
044 */
045 public RVMMethod getMethod() { return method; }
046
047 /**
048 * @return call site's bytecode index in its method
049 */
050 public int getBytecodeIndex() {return bcIndex;}
051
052 /**
053 * @return string representation of call site
054 */
055 public String toString() {
056 return "<" + method + ", " + bcIndex + ">";
057 }
058
059 /**
060 * Determine if two call sites are the same. Exact match: no wild cards.
061 *
062 * @param obj call site to compare to
063 * @return true if call sites are the same; otherwise, return false
064 */
065 public boolean equals(Object obj) {
066 if (obj instanceof CallSite) {
067 CallSite cs = (CallSite) obj;
068 return method.equals(cs.method) && bcIndex == cs.bcIndex;
069 } else {
070 return false;
071 }
072 }
073
074 /**
075 * @return hash code
076 */
077 public int hashCode() {
078 return bcIndex + method.hashCode();
079 }
080 }