Checkstyle 可寻找:·不能使用的或者多余的输入 ·空格更好的地方不使用跳格符
源代码在线查看: hiddenstaticmethodcheck.java
//Tested with BCEL-5.1
//http://jakarta.apache.org/builds/jakarta-bcel/release/v5.1/
package com.puppycrawl.tools.checkstyle.bcel.checks;
import java.util.Iterator;
import java.util.Set;
import org.apache.bcel.classfile.JavaClass;
import org.apache.bcel.classfile.Method;
import org.apache.bcel.generic.Type;
import com.puppycrawl.tools.checkstyle.api.Scope;
import com.puppycrawl.tools.checkstyle.bcel.ReferenceVisitor;
/**
* Checks for fields that hide fields in superclasses
* @author Daniel Grenner
*/
public class HiddenStaticMethodCheck
extends AbstractReferenceCheck
{
/** @see AbstractReferenceCheck */
public void setScope(String aFrom)
{
super.setScope(aFrom);
((ReferenceVisitor) getVisitor()).addFieldScope(
Scope.getInstance(aFrom));
}
/** @see com.puppycrawl.tools.checkstyle.bcel.IObjectSetVisitor */
public void visitObject(Object aJavaClass)
{
final JavaClass javaClass = (JavaClass) aJavaClass;
final String className = javaClass.getClassName();
final JavaClass[] superClasses = javaClass.getSuperClasses();
final Method[] methods = javaClass.getMethods();
// Check all methods
for (int i = 0; i < methods.length; i++) {
final Method method = methods[i];
// Check that the method is a possible match
if (!method.isPrivate() && method.isStatic()) {
// Go through all their superclasses
for (int j = 0; j < superClasses.length; j++) {
final JavaClass superClass = superClasses[j];
final String superClassName = superClass.getClassName();
final Method[] superClassMethods = superClass.getMethods();
// Go through the methods of the superclasses
for (int k = 0; k < superClassMethods.length; k++) {
final Method superClassMethod = superClassMethods[k];
if (superClassMethod.getName().equals(method.getName()) &&
!ignore(className, method)) {
Type[] methodTypes = method.getArgumentTypes();
Type[] superTypes = superClassMethod.
getArgumentTypes();
if (methodTypes.length == superTypes.length) {
boolean match = true;
for (int arg = 0; arg < methodTypes.length; arg++) {
if (!methodTypes[arg].equals(superTypes[arg])) {
match = false;
}
}
// Same method parameters
if (match) {
log(
javaClass,
0,
"hidden.static.method",
new Object[] {method, superClassName});
}
}
}
}
}
}
}
}
/** @see AbstractReferenceCheck */
public boolean ignore(String aClassName, Method aMethod) {
final String methodName = aMethod.getName();
return (/*super.ignore(aClassName, aMethod)
|| */methodName.equals("")
|| methodName.equals("")
|| methodName.equals("class$")
|| aMethod.toString().indexOf("[Synthetic]") > -1);
}
}
|
相关资源 |
|
-
Checkstyle 可寻找:·不能使用的或者多余的输入 ·空格更好的地方不使用跳格符
-
此程序如调试后能使用,请您在百忙中抽出一点点时间,
把调试好的程序打包发给我们.为了您和大家都能使用到无错的代码,
也为了程序的质量,请大家贡献自己的一份力量,为创建更好的学习环境,
让我们一起
-
一个求进制的c++算法,希望能给大家带来帮助!如果大家有更好的,别忘记发给我啊! emil:wyx32893039@163.com
-
本文目前模糊C-均值聚类算法不适用于有噪声和样本不均衡等问题,借助改进算法AFCM和WFCM的思想,提出另一种新的聚类算法。它是AFCM和WAFCM结合的一种算法,但有着更好的健壮性和聚类效果。
-
类的测试程序告诉初学者如何更好的建立工程
-
全面详尽的介绍了base64,是base64的技术文献,有帮大家更好的理解base64
-
flash+xml做交互考试系统的尝试,也许大家会有更好的做法
-
是关于JAVA中的关于输入输出流的一些例子
可以让大家更好的了解输入输出流
|