1 19 20 package edu.umd.cs.findbugs; 21 22 import org.apache.bcel.Repository; 23 import org.apache.bcel.classfile.JavaClass; 24 import org.apache.bcel.classfile.Method; 25 26 import edu.umd.cs.findbugs.visitclass.Constants2; 27 28 public class Lookup 29 implements Constants2 { 30 public static JavaClass 31 findSuperImplementor(JavaClass clazz, String name, String signature, BugReporter bugReporter) { 32 try { 33 JavaClass c = 34 findImplementor(Repository.getSuperClasses(clazz), 35 name, signature); 36 return c; 37 } catch (ClassNotFoundException e) { 38 bugReporter.reportMissingClass(e); 39 return clazz; 40 } 41 } 42 43 public static String 44 findSuperImplementor(String clazz, String name, String signature, BugReporter bugReporter) { 45 try { 46 JavaClass c = 47 findImplementor(Repository.getSuperClasses(clazz), 48 name, signature); 49 return (c != null) ? c.getClassName() : clazz; 50 } catch (ClassNotFoundException e) { 51 bugReporter.reportMissingClass(e); 52 return clazz; 53 } 54 } 55 56 public static JavaClass 57 findImplementor(JavaClass[] clazz, String name, String signature) { 58 59 for (JavaClass aClazz : clazz) { 60 Method m = findImplementation(aClazz, name, signature); 61 if (m != null) { 62 if ((m.getAccessFlags() & ACC_ABSTRACT) != 0) 63 return null; 64 else 65 return aClazz; 66 } 67 } 68 return null; 69 } 70 71 public static Method 72 findImplementation(JavaClass clazz, String name, String signature) { 73 Method[] m = clazz.getMethods(); 74 for (Method aM : m) 75 if (aM.getName().equals(name) 76 && aM.getSignature().equals(signature) 77 && ((aM.getAccessFlags() & ACC_PRIVATE) == 0) 78 && ((aM.getAccessFlags() & ACC_STATIC) == 0) 79 ) 80 return aM; 81 return null; 82 } 83 } 84 | Popular Tags |