};
}
		private boolean mayBeDirectlyRecursive() {			Assert.isTrue(!hasSuperReferences());						class RecursionChecker extends ASTVisitor {				private boolean fMethodMayBeRecursive= false;								public boolean mayBeRecursive() {					fMethodNode.accept(this);					return fMethodMayBeRecursive;					}								public boolean visit(MethodInvocation invocation) {					IMethodBinding binding= invocation.resolveMethodBinding();					if (binding == null){						fMethodMayBeRecursive= true;						return false;					}											if(!isSelfSend(invocation))						return true;										if(hasSameSignature(binding)){						fMethodMayBeRecursive= true; 						return false;					}										return true;				}								private boolean hasSameSignature(IMethodBinding other) {					if(!getName().equals(other.getName()))						return false;					return hasSameParameterTypes(other);				}								private boolean hasSameParameterTypes(IMethodBinding other) {					ITypeBinding[] mine= getParameterTypes();					ITypeBinding[] others= other.getParameterTypes();					if(mine.length != others.length)						return false;											for(int i= 0; i < mine.length; i++)						if(!mine[i].getKey().equals(others[i].getKey()))							return false;												return true;				}								private boolean isSelfSend(MethodInvocation invocation) {					if(isStatic(invocation))						return false;					Expression receiver= invocation.getExpression();					return    receiver == null							|| receiver instanceof ThisExpression;				}								private boolean isStatic(MethodInvocation invocation) {					return JdtFlags.isStatic(invocation.resolveMethodBinding());				}								};						RecursionChecker checker= new RecursionChecker();			return checker.mayBeRecursive();		}