code: function finalizeMixinMerge(classDef) {
    const propNames = Object.keys(classDef.properties || {});
    propNames.forEach((name) => {
      if (classDef['__' + name]) {
  
        // NOTE: Modes are currently applied to properties, but we do not yet support OVERWRITE mode.
        const setters = Util.sortBy(classDef['__' + name].filter(def => def.set), (setter) => {
          switch (setter.mode) {
            case registerComponent.MODES.BEFORE:
              return 1;
            case registerComponent.MODES.AFTER:
              return 3;
            default:
              return 2;
          }
        });
        classDef['__set_' + name] = setters.map(setter => setter.set);
      }
    });
  
    const methodNames = Object.keys(classDef.methods || {});
  
    methodNames.forEach((methodName) => {
      const methodDef = classDef.methods[methodName];
      let methodList = [
        ...methodDef.methodsBefore,
        ...methodDef.methodsMiddle,
        ...methodDef.methodsAfter,
        ...methodDef.methodLast,
      ];
      if (methodDef.lock) methodList = [methodDef.lock, ...methodDef.methodLast];
  
      // For each method, either set the method to be the function, or set it to be the
      // getTheMethod function which assembles all of the conditionals and mixins into a single function.
      if (methodList.length === 1 && !methodDef.conditional.length) {
        classDef.methods[methodName] = methodList[0];
      } else {
        classDef['__method_' + methodName] = methodList;
        classDef.methods[methodName] = getTheMethod(classDef, methodDef.conditional, classDef['__method_' + methodName]);
      }
    });
  }
docs: /*
  Merge all mixin function definitions into a single function call.
  
  @method finalizeMixinMerge
  @param {Object} classDef
  @private