Changeset 178599 in webkit


Ignore:
Timestamp:
Jan 16, 2015 1:40:23 PM (9 years ago)
Author:
Brian Burg
Message:

Web Inspector: code generator should fail on duplicate parameter and member names
https://bugs.webkit.org/show_bug.cgi?id=140555

Reviewed by Timothy Hatcher.

  • inspector/scripts/codegen/models.py:

(find_duplicates): Add a helper function to find duplicates in a list.
(Protocol.parse_type_declaration):
(Protocol.parse_command):
(Protocol.parse_event):

  • inspector/scripts/tests/expected/fail-on-duplicate-command-call-parameter-names.json-error: Added.
  • inspector/scripts/tests/expected/fail-on-duplicate-command-return-parameter-names.json-error: Added.
  • inspector/scripts/tests/expected/fail-on-duplicate-event-parameter-names.json-error: Added.
  • inspector/scripts/tests/expected/fail-on-duplicate-type-member-names.json-error: Added.
  • inspector/scripts/tests/fail-on-duplicate-command-call-parameter-names.json: Added.
  • inspector/scripts/tests/fail-on-duplicate-command-return-parameter-names.json: Added.
  • inspector/scripts/tests/fail-on-duplicate-event-parameter-names.json: Added.
  • inspector/scripts/tests/fail-on-duplicate-type-member-names.json: Added.
Location:
trunk/Source/JavaScriptCore
Files:
8 added
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r178591 r178599  
     12015-01-16  Brian J. Burg  <burg@cs.washington.edu>
     2
     3        Web Inspector: code generator should fail on duplicate parameter and member names
     4        https://bugs.webkit.org/show_bug.cgi?id=140555
     5
     6        Reviewed by Timothy Hatcher.
     7
     8        * inspector/scripts/codegen/models.py:
     9        (find_duplicates): Add a helper function to find duplicates in a list.
     10        (Protocol.parse_type_declaration):
     11        (Protocol.parse_command):
     12        (Protocol.parse_event):
     13        * inspector/scripts/tests/expected/fail-on-duplicate-command-call-parameter-names.json-error: Added.
     14        * inspector/scripts/tests/expected/fail-on-duplicate-command-return-parameter-names.json-error: Added.
     15        * inspector/scripts/tests/expected/fail-on-duplicate-event-parameter-names.json-error: Added.
     16        * inspector/scripts/tests/expected/fail-on-duplicate-type-member-names.json-error: Added.
     17        * inspector/scripts/tests/fail-on-duplicate-command-call-parameter-names.json: Added.
     18        * inspector/scripts/tests/fail-on-duplicate-command-return-parameter-names.json: Added.
     19        * inspector/scripts/tests/fail-on-duplicate-event-parameter-names.json: Added.
     20        * inspector/scripts/tests/fail-on-duplicate-type-member-names.json: Added.
     21
    1222015-01-16  Michael Saboff  <msaboff@apple.com>
    223
  • trunk/Source/JavaScriptCore/inspector/scripts/codegen/models.py

    r175385 r178599  
    2626
    2727import logging
     28import collections
    2829
    2930log = logging.getLogger('global')
     
    3233def ucfirst(str):
    3334    return str[:1].upper() + str[1:]
     35
     36
     37def find_duplicates(l):
     38    return [key for key, count in collections.Counter(l).items() if count > 1]
    3439
    3540
     
    327332            type_members.extend([self.parse_type_member(member) for member in json['properties']])
    328333
     334        duplicate_names = find_duplicates([member.member_name for member in type_members])
     335        if len(duplicate_names) > 0:
     336            raise ParseException("Malformed domain specification: type declaration for %s has duplicate member names" % json['id'])
     337
    329338        type_ref = TypeReference(json['type'], json.get('$ref'), json.get('enum'), json.get('items'))
    330339        return TypeDeclaration(json['id'], type_ref, json.get("description", ""), type_members)
     
    349358            call_parameters.extend([self.parse_call_or_return_parameter(parameter) for parameter in json['parameters']])
    350359
     360            duplicate_names = find_duplicates([param.parameter_name for param in call_parameters])
     361            if len(duplicate_names) > 0:
     362                raise ParseException("Malformed domain specification: call parameter list for command %s has duplicate parameter names" % json['name'])
     363
    351364        if 'returns' in json:
    352365            if not isinstance(json['returns'], list):
     
    354367            return_parameters.extend([self.parse_call_or_return_parameter(parameter) for parameter in json['returns']])
    355368
     369            duplicate_names = find_duplicates([param.parameter_name for param in return_parameters])
     370            if len(duplicate_names) > 0:
     371                raise ParseException("Malformed domain specification: return parameter list for command %s has duplicate parameter names" % json['name'])
     372
    356373        return Command(json['name'], call_parameters, return_parameters, json.get('description', ""), json.get('async', False))
    357374
     
    366383                raise ParseException("Malformed event specification: parameters is not an array")
    367384            event_parameters.extend([self.parse_call_or_return_parameter(parameter) for parameter in json['parameters']])
     385
     386            duplicate_names = find_duplicates([param.parameter_name for param in event_parameters])
     387            if len(duplicate_names) > 0:
     388                raise ParseException("Malformed domain specification: parameter list for event %s has duplicate parameter names" % json['name'])
    368389
    369390        return Event(json['name'], event_parameters, json.get('description', ""))
Note: See TracChangeset for help on using the changeset viewer.