code: @Override
      public T addClasses(Class<?>... classes) throws IllegalArgumentException {
          Validate.notNull(classes, "Classes must be specified");
  
          for (final Class<?> clazz : classes) {
              Asset resource = new ClassAsset(clazz);
              ArchivePath location = new BasicPath(getClassesPath(), AssetUtil.getFullPathForClassResource(clazz));
              add(resource, location);
  
              // SHRINKWRAP-335, account for classes loaded from the
              // Bootstrap CL (some JDK impls may return null on class.getClassLoader)
              final ClassLoader loadingCl = clazz.getClassLoader();
              final ClassLoader adjustedCl = loadingCl == null ? ClassLoader.getSystemClassLoader() : loadingCl;
  
              // Get all inner classes and add them
              addPackages(false, new Filter<ArchivePath>() {
                  /**
                   * path = /package/MyClass$Test.class <br/>
                   * clazz = /package/MyClass.class <br/>
                   *
                   *
                   * @param path
                   *            The added classes
                   * @return
                   */
                  @Override
                  public boolean include(ArchivePath path) {
                      ArchivePath classArchivePath = AssetUtil.getFullPathForClassResource(clazz);
                      String expression = classArchivePath.get().replace(".class", "\\$.*");
                      return path.get().matches(expression);
                  };
              }, adjustedCl,
              // Assumes a null package is a class in the default package
                  clazz.getPackage() == null ? DEFAULT_PACKAGE_NAME : clazz.getPackage().getName());
          }
          return covarientReturn();
      }
docs: /*
  (non-Javadoc)
  
  @see org.jboss.declarchive.api.container.ClassContainer#addClasses(java.lang.Class<?>[])