class JavaDCRInstrumenter extends AbstractDCRInstrumenter {

  private void instrumentClass(Class<?> targetClass,
                               Recorder recorder,
                               InstrumentationFilter filter)
    throws NonInstrumentableTypeException {

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

    for (Constructor<?> constructor : targetClass.getDeclaredConstructors()) {
       getContext().add(targetClass, constructor, recorder);
    }

    // Instrument the static methods declared by the target class. Ignore
    // any parent class.
    for (Method method : targetClass.getDeclaredMethods()) {
      if (Modifier.isStatic(method.getModifiers()) &&
          filter.matches(method)) {
        getContext().add(targetClass, method, TargetSource.CLASS, recorder);
      }
    }

//    Class<?> c = targetClass;
//
//    do {
//      for (Method method : c.getDeclaredMethods()) {
//        if (Modifier.isStatic(method.getModifiers())) {
//          instrument(c, method, recorder);
//        }
//      }
//
//      c = c.getSuperclass();
//    }
//    while (isInstrumentable(c));
  }

  public  JavaDCRInstrumenter(DCRContext context);

}