code: static ImmutableList<MemberDefinition> extractProperties(
        Node descriptor,
        PolymerClassDefinition.DefinitionType defType,
        AbstractCompiler compiler,
        @Nullable Node constructor) {
      Node properties = descriptor;
      if (defType == PolymerClassDefinition.DefinitionType.ObjectLiteral) {
        properties = NodeUtil.getFirstPropMatchingKey(descriptor, "properties");
      }
      if (properties == null) {
        return ImmutableList.of();
      }
  
      Map<String, JSDocInfo> constructorPropertyJsDoc = new HashMap<>();
      if (constructor != null) {
        collectConstructorPropertyJsDoc(constructor, constructorPropertyJsDoc);
      }
  
      ImmutableList.Builder<MemberDefinition> members = ImmutableList.builder();
      for (Node keyNode : properties.children()) {
        // The JSDoc for a Polymer property in the constructor should win over the JSDoc in the
        // Polymer properties configuration object.
        JSDocInfo constructorJsDoc = constructorPropertyJsDoc.get(keyNode.getString());
        JSDocInfo propertiesConfigJsDoc = NodeUtil.getBestJSDocInfo(keyNode);
        JSDocInfo bestJsDoc;
        if (constructorJsDoc != null) {
          bestJsDoc = constructorJsDoc;
          if (propertiesConfigJsDoc != null) {
            // Warn if the user put JSDoc in both places.
            compiler.report(JSError.make(keyNode, POLYMER_MISPLACED_PROPERTY_JSDOC));
          }
        } else {
          bestJsDoc = propertiesConfigJsDoc;
        }
        members.add(new MemberDefinition(bestJsDoc, keyNode, keyNode.getFirstChild()));
      }
      return members.build();
    }
docs: Finds a list of {@link MemberDefinition}s for the {@code properties} block of the given
  descriptor Object literal.
  
  @param descriptor The Polymer properties configuration object literal node.
  @param constructor If we are finding the properties of an ES6 class, the constructor function
  node for that class, otherwise null. We'll prefer JSDoc from property initialization
  statements in this constructor over the JSDoc within the Polymer properties configuration
  object.