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

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;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值