docs: function (report, arg) {
              // a null report means callback was asynchronous
              // PROFILING // var profilingId = this.$startMeasure("react to controller report (DropDownTextInput)");
              if (report) {
                  var openDropdown = report.displayDropDown;
                  var repositionDropDown = report.repositionDropDown;
                  this.$TextInput._reactToControllerReport.call(this, report, arg);
                  // check that widget has not been disposed
                  if (this._cfg) {
                      if (openDropdown === true && !this._dropdownPopup) {
                          this._openDropdown();
                      } else if (openDropdown === false && this._dropdownPopup) {
                          this._closeDropdown();
                      } else if (repositionDropDown && this._dropdownPopup) {
                          this._reopenDropdown();
                          // Note: an alternative here would be to call this._dropdownPopup.updatePosition()
                          // instead of closing and re-opening the popup. This would avoid loosing
                          // the current scrolling position in some cases, but, it could perhaps introduce
                          // some regressions in other cases.
                      }
                  }
              }
              // PROFILING // this.$stopMeasure(profilingId);
          }