@Override
 public int hashCode() {
   int result = methodMatcher.hashCode();
   result = 31 * result + handler.hashCode();
   result = 31 * result + attributeAppenderFactory.hashCode();
   result = 31 * result + methodTransformer.hashCode();
   return result;
 }
 @Override
 public boolean equals(Object other) {
   if (this == other) return true;
   if (other == null || getClass() != other.getClass()) return false;
   Entry entry = (Entry) other;
   return methodMatcher.equals(entry.methodMatcher)
       && handler.equals(entry.handler)
       && attributeAppenderFactory.equals(entry.attributeAppenderFactory)
       && methodTransformer.equals(entry.methodTransformer);
 }
 /**
  * Transforms this entry into a prepared state.
  *
  * @param instrumentedType The instrumented type.
  * @param methodDescription The non-transformed method to be implemented.
  * @param methodTypes The method types this method represents.
  * @return A prepared version of this entry.
  */
 protected Prepared.Entry asPreparedEntry(
     TypeDescription instrumentedType,
     MethodDescription methodDescription,
     Set<MethodDescription.TypeToken> methodTypes) {
   return new Prepared.Entry(
       handler,
       attributeAppenderFactory,
       methodTransformer.transform(instrumentedType, methodDescription),
       methodTypes);
 }