docs: function protectStaticMethod(name, meta, constructor) {
          constructor[cacheKeyword].methods[name] = meta.implementation;
  
          if (meta.isPrivate) {
              Object.defineProperty(constructor, name, {
                  get: function get() {
                      var method = constructor[cacheKeyword].methods[name],
                          currCaller;
  
                      currCaller = process._dejavu.caller;
  
                      if (currCaller && (currCaller.method[$name] || currCaller.method[$anonymous]) && meta.allowed === currCaller.constructorId) {
                          return method;
                      }
  
                      throw new Error('Cannot access private static method "' + name + '" of class "' + constructor.prototype.$name + '".');
                  },
                  set: function set(newVal) {
                      if (!constructor[$class].locked || constructor[$class].forceUnlocked) {
                          constructor[cacheKeyword].methods[name] = newVal;
                      } else {
                          throw new Error('Cannot set private static method "' + name + '" of class "' + constructor.prototype.$name + '".');
                      }
                  },
                  configurable: false,
                  enumerable: true
              });
          } else if (meta.isProtected) {
              Object.defineProperty(constructor, name, {
                  get: function get() {
                      var method = constructor[cacheKeyword].methods[name],
                          currCaller;
  
                      currCaller = process._dejavu.caller;
  
                      if (currCaller && (currCaller.method[$name] || currCaller.method[$anonymous]) && (contains(meta.allowed, currCaller.constructorId) || constructor.prototype instanceof currCaller.constructor)) {
                          return method;
                      }
  
                      throw new Error('Cannot access protected static method "' + name + '" of class "' + constructor.prototype.$name + '".');
                  },
                  set: function set(newVal) {
                      if (!constructor[$class].locked || constructor[$class].forceUnlocked) {
                          constructor[cacheKeyword].methods[name] = newVal;
                      } else {
                          throw new Error('Cannot set protected static method "' + name + '" of class "' + constructor.prototype.$name + '".');
                      }
                  },
                  configurable: false,
                  enumerable: true
              });
          } else {
              Object.defineProperty(constructor, name, {
                  get: function get() {
                      return constructor[cacheKeyword].methods[name];
                  },
                  set: function set(newVal) {
                      if (!constructor[$class].locked || constructor[$class].forceUnlocked) {
                          constructor[cacheKeyword].methods[name] = newVal;
                      } else {
                          throw new Error('Cannot set public static method "' + name + '" of class "' + constructor.prototype.$name + '".');
                      }
                  },
                  configurable: false,
                  enumerable: true
              });
          }
      }