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: {@code <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 @Override 056 public String toString() { 057 return "<" + methodRef + ", " + bcIndex + ">"; 058 } 059 060 /** 061 * Determine if two call sites are the same. Exact match: no wild cards. 062 * 063 * @param obj call site to compare to 064 * @return {@code true} if call sites are the same; otherwise, return {@code fales} 065 */ 066 @Override 067 public boolean equals(Object obj) { 068 if (obj instanceof UnResolvedCallSite) { 069 UnResolvedCallSite cs = (UnResolvedCallSite) obj; 070 return methodRef.equals(cs.methodRef) && bcIndex == cs.bcIndex; 071 } else { 072 return false; 073 } 074 } 075 076 /** 077 * @return hash code 078 */ 079 @Override 080 public int hashCode() { 081 return bcIndex + methodRef.hashCode(); 082 } 083 }