//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 com.puppycrawl.tools.checkstyle.api.Scope;
import com.puppycrawl.tools.checkstyle.bcel.ReferenceVisitor;
import com.puppycrawl.tools.checkstyle.bcel.classfile.JavaClassDefinition;
import com.puppycrawl.tools.checkstyle.bcel.classfile.MethodDefinition;
/**
* Checks for unused methods
* @author Rick Giles
*/
public class UnusedMethodCheck
extends AbstractReferenceCheck
{
/** @see AbstractReferenceCheck */
public void setScope(String aScopeName)
{
super.setScope(aScopeName);
((ReferenceVisitor) getVisitor()).addMethodScope(
Scope.getInstance(aScopeName));
}
/** @see com.puppycrawl.tools.checkstyle.bcel.IObjectSetVisitor */
public void leaveSet(Set aJavaClasses)
{
final Iterator it = aJavaClasses.iterator();
while (it.hasNext()) {
final JavaClass javaClass = (JavaClass) it.next();
final String className = javaClass.getClassName();
final JavaClassDefinition classDef = findJavaClassDef(javaClass);
final MethodDefinition[] methodDefs = classDef.getMethodDefs();
for (int i = 0; i < methodDefs.length; i++) {
if (!classDef.hasReference(methodDefs[i], getReferenceDAO())) {
final Method method = methodDefs[i].getMethod();
if (!ignore(className, method)) {
log(
javaClass,
0,
"unused.method",
new Object[] {methodDefs[i]});
}
}
}
}
}
/** @see AbstractReferenceCheck */
public boolean ignore(String aClassName, Method aMethod)
{
final String methodName = aMethod.getName();
return (super.ignore(aClassName, aMethod)
|| methodName.equals("<init>")
|| methodName.equals("<clinit>"));
}
}