findUnimplementedInterfaceMethods(superInterfaces[i], visited, allMethods, toImplement);
findUnimplementedInterfaceMethods(superInterfaces[i], visited, allMethods, currPack, toImplement);
	private void findUnimplementedInterfaceMethods(ITypeBinding typeBinding, HashSet visited, ArrayList allMethods, ArrayList toImplement) {		if (visited.add(typeBinding)) {			IMethodBinding[] typeMethods= typeBinding.getDeclaredMethods();			for (int i= 0; i < typeMethods.length; i++) {				IMethodBinding curr= typeMethods[i];				IMethodBinding impl= findMethod(curr, allMethods);				if (impl == null || ((curr.getExceptionTypes().length < impl.getExceptionTypes().length) && !Modifier.isFinal(impl.getModifiers()))) {					if (impl != null) {						allMethods.remove(impl);					}					// implement an interface method when it does not exist in the hierarchy					// or when it throws less exceptions that the implemented					toImplement.add(curr);					allMethods.add(curr);				}			}			ITypeBinding[] superInterfaces= typeBinding.getInterfaces();			for (int i= 0; i < superInterfaces.length; i++) {				findUnimplementedInterfaceMethods(superInterfaces[i], visited, allMethods, toImplement);			}		}	}