KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > puppycrawl > tools > checkstyle > bcel > checks > HiddenStaticMethodCheck


1 //Tested with BCEL-5.1
2
//http://jakarta.apache.org/builds/jakarta-bcel/release/v5.1/
3

4 package com.puppycrawl.tools.checkstyle.bcel.checks;
5
6 import java.util.Iterator JavaDoc;
7 import java.util.Set JavaDoc;
8
9 import org.apache.bcel.classfile.JavaClass;
10 import org.apache.bcel.classfile.Method;
11 import org.apache.bcel.generic.Type;
12 import com.puppycrawl.tools.checkstyle.api.Scope;
13 import com.puppycrawl.tools.checkstyle.bcel.ReferenceVisitor;
14
15 /**
16  * Checks for fields that hide fields in superclasses
17  * @author Daniel Grenner
18  */

19 public class HiddenStaticMethodCheck
20     extends AbstractReferenceCheck
21 {
22     /** @see AbstractReferenceCheck */
23     public void setScope(String JavaDoc aFrom)
24     {
25         super.setScope(aFrom);
26         ((ReferenceVisitor) getVisitor()).addFieldScope(
27             Scope.getInstance(aFrom));
28     }
29
30     /** @see com.puppycrawl.tools.checkstyle.bcel.IObjectSetVisitor */
31     public void visitObject(Object JavaDoc aJavaClass)
32     {
33         final JavaClass javaClass = (JavaClass) aJavaClass;
34         final String JavaDoc className = javaClass.getClassName();
35         final JavaClass[] superClasses = javaClass.getSuperClasses();
36         final Method[] methods = javaClass.getMethods();
37         // Check all methods
38
for (int i = 0; i < methods.length; i++) {
39             final Method method = methods[i];
40             // Check that the method is a possible match
41
if (!method.isPrivate() && method.isStatic()) {
42                 // Go through all their superclasses
43
for (int j = 0; j < superClasses.length; j++) {
44                     final JavaClass superClass = superClasses[j];
45                     final String JavaDoc superClassName = superClass.getClassName();
46                     final Method[] superClassMethods = superClass.getMethods();
47                     // Go through the methods of the superclasses
48
for (int k = 0; k < superClassMethods.length; k++) {
49                         final Method superClassMethod = superClassMethods[k];
50                         if (superClassMethod.getName().equals(method.getName()) &&
51                             !ignore(className, method)) {
52                             Type[] methodTypes = method.getArgumentTypes();
53                             Type[] superTypes = superClassMethod.
54                                 getArgumentTypes();
55                             if (methodTypes.length == superTypes.length) {
56                                 boolean match = true;
57                                 for (int arg = 0; arg < methodTypes.length; arg++) {
58                                     if (!methodTypes[arg].equals(superTypes[arg])) {
59                                         match = false;
60                                     }
61                                 }
62                                 // Same method parameters
63
if (match) {
64                                     log(
65                                         javaClass,
66                                         0,
67                                         "hidden.static.method",
68                                         new Object JavaDoc[] {method, superClassName});
69                                 }
70                             }
71                         }
72                     }
73                 }
74             }
75         }
76     }
77
78     /** @see AbstractReferenceCheck */
79     public boolean ignore(String JavaDoc aClassName, Method aMethod) {
80         final String JavaDoc methodName = aMethod.getName();
81         return (/*super.ignore(aClassName, aMethod)
82                 || */
methodName.equals("<init>")
83                 || methodName.equals("<clinit>")
84                 || methodName.equals("class$")
85                 || aMethod.toString().indexOf("[Synthetic]") > -1);
86     }
87
88 }
89
Popular Tags