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

Posted 同学少年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码重构 & 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;





以上是关于代码重构 & JDT判断一个方法是否是实现重写,继承重写和递归的主要内容,如果未能解决你的问题,请参考以下文章

代码重构 & JDT编程实现全部代码修改撤销(包括重构且不弹出确认框)

代码重构 & JDT修改Eclipse重构撤回的深度限制

代码重构 & JDT遍历AST,获取每个节点的所有直接子节点

代码重构 & JDT遍历AST,获取每个节点的所有直接子节点

代码重构 & JDT获取指定目录下Java文件对应的ICompilationUnit (可获取Binding)

代码重构 & JDT获取指定目录下Java文件对应的ICompilationUnit (可获取Binding)