code: function mergeProperties(ci) {
      var propertiesClass = [].concat(ci.propertiesClass || ci.properties || []);
      if (ci.hasOwnProperty('accessors')) {
          for (var prop in ci.accessors) {
              if (ci.inputsClass && ci.inputsClass.find(i => i.name == prop)) {
                  // 同时出现在inputsClass里的，需要剔除
                  continue;
              }
              var info = ci.accessors[prop];
              var desc = info.getSignature && info.getSignature.description ? info.getSignature.description : '';
              desc += info.setSignature && info.setSignature.description ? info.setSignature.description : '';
              var type = info.getSignature ? (info.getSignature.returnType || info.getSignature.type) :
                  info.setSignature ? info.setSignature.args[0].type : '';
              propertiesClass.push({
                  name: info.name, description: desc, type: type,
                  readOnly: !info.hasOwnProperty('setSignature')
              });
          }
      }
      propertiesClass.forEach(p => {
          if (p.readOnly || !p.modifierKind) return;
          p.readOnly = p.modifierKind.includes(READ_ONLY);
      });
      return propertiesClass;
  }
docs: 这块有点绕，当一个属性被拆开为getter/setter后，ci.propertiesClass就找不到他了 但是会出现在ci.accessors里，而ci.accessors里还有一部分同时出现在inputsClass里的，需要剔除