KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > edu > umd > cs > findbugs > Lookup


1 /*
2  * FindBugs - Find bugs in Java programs
3  * Copyright (C) 2003,2004 University of Maryland
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18  */

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 JavaDoc name, String JavaDoc signature, BugReporter bugReporter) {
32         try {
33             JavaClass c =
34                     findImplementor(Repository.getSuperClasses(clazz),
35                             name, signature);
36             return c;
37         } catch (ClassNotFoundException JavaDoc e) {
38             bugReporter.reportMissingClass(e);
39             return clazz;
40         }
41     }
42
43     public static String JavaDoc
44             findSuperImplementor(String JavaDoc clazz, String JavaDoc name, String JavaDoc 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 JavaDoc e) {
51             bugReporter.reportMissingClass(e);
52             return clazz;
53         }
54     }
55
56     public static JavaClass
57             findImplementor(JavaClass[] clazz, String JavaDoc name, String JavaDoc 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 JavaDoc name, String JavaDoc 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