1 19 20 package edu.umd.cs.findbugs.ba; 21 22 import org.apache.bcel.Constants; 23 import org.apache.bcel.Repository; 24 import org.apache.bcel.classfile.JavaClass; 25 import org.apache.bcel.classfile.Method; 26 27 import edu.umd.cs.findbugs.classfile.MethodDescriptor; 28 29 36 public class JavaClassAndMethod { 37 private final JavaClass javaClass; 38 private final Method method; 39 40 46 public JavaClassAndMethod(JavaClass javaClass, Method method) { 47 this.javaClass = javaClass; 48 this.method = method; 49 } 50 51 57 public JavaClassAndMethod(XMethod method) throws ClassNotFoundException { 58 59 this.javaClass = Repository.lookupClass(method.getClassName()); 60 for(Method m : javaClass.getMethods()) 61 if (m.getName().equals(method.getName()) 62 && m.getSignature().equals(method.getSignature()) 63 && m.getAccessFlags() == method.getAccessFlags()) { 64 this.method = m; 65 return; 66 } 67 throw new IllegalArgumentException ("Can't find " + method); 68 } 69 70 73 public JavaClass getJavaClass() { 74 return javaClass; 75 } 76 77 80 public Method getMethod() { 81 return method; 82 } 83 84 87 public XMethod toXMethod() { 88 return XFactory.createXMethod(javaClass, method); 89 } 90 91 97 public MethodDescriptor toMethodDescriptor() { 98 return new MethodDescriptor( 99 getSlashedClassName(), 100 method.getName(), 101 method.getSignature(), 102 method.isStatic()); 103 } 104 105 private String getSlashedClassName() { 106 return javaClass.getConstantPool().getConstantString(javaClass.getClassNameIndex(), Constants.CONSTANT_Class); 107 } 108 109 @Override 110 public int hashCode() { 111 return javaClass.hashCode() + method.hashCode(); 112 } 113 114 @Override 115 public boolean equals(Object obj) { 116 if (obj == null || obj.getClass() != this.getClass()) 117 return false; 118 JavaClassAndMethod other = (JavaClassAndMethod) obj; 119 return javaClass.equals(other.javaClass) && method.equals(other.method); 120 } 121 122 @Override 123 public String toString() { 124 return SignatureConverter.convertMethodSignature(javaClass, method); 125 } 126 } 127 | Popular Tags |