code: public static <S extends Storable> ClassFile createStorableClassFile(
              ClassInjector ci, Class<S> type, boolean isAbstract, String aSourcefileName)
      {
          ClassFile cf;
          if (type.isInterface()) {
              cf = new ClassFile(ci.getClassName());
              cf.addInterface(type);
          } else {
              cf = new ClassFile(ci.getClassName(), type);
          }
  
          if (isAbstract) {
              Modifiers modifiers = cf.getModifiers().toAbstract(true);
              cf.setModifiers(modifiers);
          }
          cf.addInterface(Storable.class);
          cf.addInterface(Cloneable.class);
          cf.markSynthetic();
          cf.setSourceFile(aSourcefileName);
          cf.setTarget("1.5");
          return cf;
      }
docs: Define a classfile appropriate for most Storables.  Specifically:
  <ul>
  <li>implements Storable</li>
  <li>implements Cloneable
  <li>abstract if appropriate
  <li>marked synthetic
  <li>targetted for java version 1.5
  </ul>
  @param ci ClassInjector for the storable
  @param type specific Storable implementation to generate
  @param isAbstract true if the class should be abstract
  @param aSourcefileName identifier for the classfile, typically the factory class name
  @return ClassFile object ready to have methods added.