NameAndSignature.java revision 9287:40bd4478a362
1189251Ssam/* 2189251Ssam * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. 3189251Ssam * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4189251Ssam * 5252726Srpaulo * This code is free software; you can redistribute it and/or modify it 6252726Srpaulo * under the terms of the GNU General Public License version 2 only, as 7189251Ssam * published by the Free Software Foundation. 8189251Ssam * 9189251Ssam * This code is distributed in the hope that it will be useful, but WITHOUT 10189251Ssam * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11189251Ssam * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12214734Srpaulo * version 2 for more details (a copy is included in the LICENSE file that 13214734Srpaulo * accompanied this code). 14189251Ssam * 15189251Ssam * You should have received a copy of the GNU General Public License version 16189251Ssam * 2 along with this work; if not, write to the Free Software Foundation, 17189251Ssam * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18189251Ssam * 19189251Ssam * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20189251Ssam * or visit www.oracle.com if you need additional information or have any 21189251Ssam * questions. 22189251Ssam */ 23189251Ssampackage jdk.vm.ci.runtime.test; 24189251Ssam 25189251Ssamimport java.lang.reflect.Method; 26189251Ssamimport java.util.Arrays; 27189251Ssam 28189251Ssamimport jdk.vm.ci.meta.MetaAccessProvider; 29189251Ssamimport jdk.vm.ci.meta.ResolvedJavaMethod; 30189251Ssamimport jdk.vm.ci.meta.ResolvedJavaType; 31189251Ssamimport jdk.vm.ci.meta.Signature; 32189251Ssamimport jdk.vm.ci.runtime.JVMCI; 33189251Ssam 34189251Ssamclass NameAndSignature { 35189251Ssam 36189251Ssam public static final MetaAccessProvider metaAccess = JVMCI.getRuntime().getHostJVMCIBackend().getMetaAccess(); 37189251Ssam 38189251Ssam final String name; 39189251Ssam final Class<?> returnType; 40189251Ssam final Class<?>[] parameterTypes; 41189251Ssam 42189251Ssam public NameAndSignature(Method m) { 43189251Ssam this.name = m.getName(); 44189251Ssam this.returnType = m.getReturnType(); 45189251Ssam this.parameterTypes = m.getParameterTypes(); 46189251Ssam } 47189251Ssam 48189251Ssam @Override 49189251Ssam public boolean equals(Object obj) { 50189251Ssam if (obj instanceof NameAndSignature) { 51189251Ssam NameAndSignature s = (NameAndSignature) obj; 52189251Ssam return s.returnType == returnType && name.equals(s.name) && Arrays.equals(s.parameterTypes, parameterTypes); 53189251Ssam } 54189251Ssam return false; 55189251Ssam } 56189251Ssam 57189251Ssam @Override 58189251Ssam public int hashCode() { 59189251Ssam return name.hashCode(); 60189251Ssam } 61189251Ssam 62189251Ssam @Override 63189251Ssam public String toString() { 64189251Ssam StringBuilder sb = new StringBuilder(name + "("); 65189251Ssam String sep = ""; 66189251Ssam for (Class<?> p : parameterTypes) { 67189251Ssam sb.append(sep); 68189251Ssam sep = ", "; 69189251Ssam sb.append(p.getName()); 70189251Ssam } 71189251Ssam return sb.append(')').append(returnType.getName()).toString(); 72189251Ssam } 73189251Ssam 74189251Ssam public boolean signatureEquals(ResolvedJavaMethod m) { 75189251Ssam Signature s = m.getSignature(); 76189251Ssam ResolvedJavaType declaringClass = m.getDeclaringClass(); 77189251Ssam if (!s.getReturnType(declaringClass).resolve(declaringClass).equals(metaAccess.lookupJavaType(returnType))) { 78189251Ssam return false; 79189251Ssam } 80189251Ssam if (s.getParameterCount(false) != parameterTypes.length) { 81189251Ssam return false; 82189251Ssam } 83189251Ssam for (int i = 0; i < parameterTypes.length; i++) { 84189251Ssam if (!s.getParameterType(i, declaringClass).resolve(declaringClass).equals(metaAccess.lookupJavaType(parameterTypes[i]))) { 85189251Ssam return false; 86189251Ssam } 87189251Ssam } 88189251Ssam return true; 89189251Ssam } 90189251Ssam} 91189251Ssam