您的位置:首页 > 编程语言

【代码重构 & JDT】判断一个方法是否是实现重写,继承重写和递归

2017-07-06 15:07 781 查看
1. 方法是否是实现重写

public static boolean methodIsImplemented(IMethodBinding methodBinding){

ITypeBinding typeBinding = methodBinding.getDeclaringClass();
List<IMethodBinding> allIMethodBindings = new ArrayList<IMethodBinding>();//存放所有实现类的方法,用于和指定方法比较

//找所有实现的方法
for(ITypeBinding impledITypeBinding : typeBinding.getInterfaces()){
for(IMethodBinding binding : impledITypeBinding.getDeclaredMethods()){
allIMethodBindings.add(binding);
}
}

for(IMethodBinding mBinding : allIMethodBindings){

if(methodBinding.overrides(mBinding)){
return true;
}
}

return false;
}


2. 方法是否是继承重写

public static boolean methodIsOverride(IMethodBinding methodBinding){

ITypeBinding typeBinding2 = methodBinding.getDeclaringClass();
List<IMethodBinding> allIMethodBindings = new ArrayList<IMethodBinding>();//存放所有父类的方法,用于和指定方法比较

//找所有父类的方法
while(typeBinding2.getSuperclass() != null){
ITypeBinding superITypeBinding = typeBinding2.getSuperclass();
for(IMethodBinding binding : superITypeBinding.getDeclaredMethods()){
allIMethodBindings.add(binding);
}
typeBinding2 = superITypeBinding;
}

for(IMethodBinding mBinding : allIMethodBindings){
if(methodBinding.overrides(mBinding)){
return true;
}
}

return false;
}

3. 方法是否是递归
static boolean isRecursive = false;
public static boolean methodIsRecursive(MethodDeclaration methodDeclaration){
final IMethod method = (IMethod)methodDeclaration.resolveBinding().getJavaElement();
//判断是否是递归
methodDeclaration.accept(new ASTVisitor() {
public boolean visit(MethodInvocation node){
if(node.getName().toString().equals(method.getElementName())){
if(((IMethod)node.resolveMethodBinding().getJavaElement()).equals(method)){
isRecursive = true;
}
}
return true;
}
});
return isRecursive;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐