Object (final JavaMethod method, final Object proxy, final Object[] args, final List<?> implementations) { @NonNls String methodName = method.getName(); if ("toString".equals(methodName)) { return "Merger: " + implementations; } if ("hashCode".equals(methodName)) { int result = 1; for (Object element : implementations) { result = 31 * result + element.hashCode(); } return result; } if ("equals".equals(methodName)) { final Object arg = args[0]; return arg instanceof MergedObject && implementations.equals(((MergedObject)arg).getImplementations()); } return null; }