work(method.getName(), encoder); work(method.getSignature(), encoder);
work(digest, method.getName(), encoder); work(digest, method.getSignature(), encoder);  try { MethodHash methodHash = new MethodHash().computeHash(method); methodHashMap.put(XMethodFactory.createXMethod(javaClass, method), methodHash); } catch (NoSuchAlgorithmException e) { throw new IllegalStateException("No algorithm for computing method hash", e); }
	public ClassHash computeHash() {		Method[] methodList = new Method[javaClass.getMethods().length];				// Sort methods		System.arraycopy(javaClass.getMethods(), 0, methodList, 0, javaClass.getMethods().length);		Arrays.sort(methodList, new Comparator<Method>() {			public int compare(Method o1, Method o2) {				// sort by name, then signature				int cmp = o1.getName().compareTo(o2.getName());				if (cmp != 0)					return cmp;				return o1.getSignature().compareTo(o2.getSignature());							}		});				// Compute digest of names and signatures, in order		CharsetEncoder encoder = Charset.forName("UTF-8").newEncoder();		for (int i = 0; i < methodList.length; ++i) {			Method method = methodList[i];			work(method.getName(), encoder); 			work(method.getSignature(), encoder); 		}				hash = digest.digest();				return this;	}