findUnimplementedInterfaceMethods(superInterfaces[i], visited, allMethods, toImplement);
findUnimplementedInterfaceMethods(superInterfaces[i], visited, allMethods, typeBinding.getPackage(), toImplement);
	private IMethodBinding[] evalUnimplementedMethods(ITypeBinding typeBinding) {		ArrayList allMethods= new ArrayList();		ArrayList toImplement= new ArrayList();				IMethodBinding[] typeMethods= typeBinding.getDeclaredMethods();		for (int i= 0; i < typeMethods.length; i++) {			IMethodBinding curr= typeMethods[i];			int modifiers= curr.getModifiers();			if (!curr.isConstructor() && !Modifier.isStatic(modifiers) && !Modifier.isPrivate(modifiers)) {				allMethods.add(curr);			}		}		ITypeBinding superClass= typeBinding.getSuperclass();		while (superClass != null) {			typeMethods= superClass.getDeclaredMethods();			for (int i= 0; i < typeMethods.length; i++) {				IMethodBinding curr= typeMethods[i];				int modifiers= curr.getModifiers();				if (!curr.isConstructor() && !Modifier.isStatic(modifiers) && !Modifier.isPrivate(modifiers)) {					if (findMethod(curr, allMethods) == null) {						allMethods.add(curr);					}				}			}			superClass= superClass.getSuperclass();		}			for (int i= 0; i < allMethods.size(); i++) {			IMethodBinding curr= (IMethodBinding) allMethods.get(i);			int modifiers= curr.getModifiers();			if ((Modifier.isAbstract(modifiers) || curr.getDeclaringClass().isInterface()) && (typeBinding != curr.getDeclaringClass())) {				// implement all abstract methods				toImplement.add(curr);			}		}		HashSet visited= new HashSet();		ITypeBinding curr= typeBinding;		while (curr != null) {			ITypeBinding[] superInterfaces= curr.getInterfaces();			for (int i= 0; i < superInterfaces.length; i++) {				findUnimplementedInterfaceMethods(superInterfaces[i], visited, allMethods, toImplement);			}			curr= curr.getSuperclass();		}				return (IMethodBinding[]) toImplement.toArray(new IMethodBinding[toImplement.size()]);	}