class JavaDCRInstrumenter extends AbstractDCRInstrumenter {

  private void instrumentInstance(Object target,
                                  Recorder recorder,
                                  InstrumentationFilter filter)
    throws NonInstrumentableTypeException {

    Class<?> c = target.getClass();

    if (c.isArray()) {
      throw new NonInstrumentableTypeException("Can't instrument arrays");
    }

    do {
      for (Method method : c.getDeclaredMethods()) {
        if (!Modifier.isStatic(method.getModifiers()) &&
            filter.matches(method)) {
          getContext().add(target,
                           method,
                           TargetSource.FIRST_PARAMETER,
                           recorder);
        }
      }

      c = c.getSuperclass();
    }
    while (getContext().isInstrumentable(c));
  }

  public  JavaDCRInstrumenter(DCRContext context);

}