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.util;
014
015 import org.jikesrvm.classloader.MethodReference;
016
017 /**
018 * A unresolved call site is a pair: <MethodReference, bcIndex>
019 */
020 public final class UnResolvedCallSite {
021
022 /**
023 * Caller method
024 */
025 private final MethodReference methodRef;
026
027 /**
028 * bytecode index of callsite in caller method
029 */
030 private final int bcIndex;
031
032 /**
033 * @param m the MethodReference containing the callsite
034 * @param bci the bytecode index of the callsite within m
035 */
036 public UnResolvedCallSite(MethodReference m, int bci) {
037 if (org.jikesrvm.VM.VerifyAssertions) org.jikesrvm.VM._assert(m != null);
038 methodRef = m;
039 bcIndex = bci;
040 }
041
042 /**
043 * @return method containing the callsite
044 */
045 public MethodReference getMethodRef() { return methodRef; }
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 "<" + methodRef + ", " + 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 UnResolvedCallSite) {
067 UnResolvedCallSite cs = (UnResolvedCallSite) obj;
068 return methodRef.equals(cs.methodRef) && bcIndex == cs.bcIndex;
069 } else {
070 return false;
071 }
072 }
073
074 /**
075 * @return hash code
076 */
077 public int hashCode() {
078 return bcIndex + methodRef.hashCode();
079 }
080 }