docs: function parseMembers(params, constructor, isFinal) {
          var opts = { isFinal: !!isFinal },
              key,
              value,
              cache = {},
              unallowed;
  
          // Add each method metadata, verifying its signature
          if (hasOwn(params, '$statics')) {
              // Check if is an object
              if (!isObject(params.$statics)) {
                  throw new Error('$statics definition of class "' + params.$name + '" must be an object.');
              }
  
              // Check reserved keywords
              checkKeywords(params.$statics, 'statics');
  
              // Check unallowed keywords
              unallowed = testKeywords(params.$statics);
              if (unallowed) {
                  throw new Error('$statics ' + (isFinal ? 'inside $finals ' : '') + ' of class "' + constructor.prototype.$name + '" contains an unallowed keyword: "' + unallowed + '".');
              }
  
              opts.isStatic = true;
  
              for (key in params.$statics) {
                  value = params.$statics[key];
  
                  if (isFunction(value) && !value[$class] && !value[$interface]) {
                      addMethod(key, value, constructor, opts);
                  } else {
                      addProperty(key, value, constructor, opts);
                  }
              }
  
              delete opts.isStatic;
              delete params.$statics;
          }
  
          // Save certain keywords in the cache for the loop bellow to work faster
          if (hasOwn(params, '$implements')) {
              cache.$implements = params.$implements;
              delete params.$implements;
          }
  
          if (hasOwn(params, '$abstracts')) {
              cache.$abstracts = params.$abstracts;
              delete params.$abstracts;
          }
  
          for (key in params) {
              value = params[key];
  
              if (isFunction(value) && !value[$class] && !value[$interface]) {
                  addMethod(key, value, constructor, opts);
              } else {
                  addProperty(key, value, constructor, opts);
              }
          }
  
          // Restore from cache
          mixIn(params, cache);
      }