Bug 138048

Summary: Web Inspector: Generate ObjC inspector protocol types and alternate dispatcher interfaces
Product: WebKit Reporter: Joseph Pecoraro <joepeck>
Component: Web InspectorAssignee: Joseph Pecoraro <joepeck>
Status: RESOLVED FIXED    
Severity: Normal CC: buildbot, burg, commit-queue, graouts, joepeck, rniwa, timothy, webkit-bug-importer
Priority: P2 Keywords: InRadar
Version: 528+ (Nightly build)   
Hardware: All   
OS: All   
Attachments:
Description Flags
[PATCH] Proposed Fix
burg: review+
[PACKAGE] Static and Generated Sources
none
[PATCH] Proposed Fix none

Description Joseph Pecoraro 2014-10-24 11:05:20 PDT
Now that we have support for augmenting the inspector protocol. Implement ObjC alternate dispatchers, and include ObjC Inspector Protocol types to do basic shape checking of protocol types (required arguments, etc).

These ObjC interfaces will actually be generated for a WebInspector.framework because we felt JavaScriptCore.framework was not the right place. This is the reason the python generator scripts are still exported as private headers.

Note, the generated ObjC relies on some static sources that exist outside the generator because they don't need to be generated. I'll attach these static sources and the resulting sources generated from CombinedDomains.json.
Comment 1 Radar WebKit Bug Importer 2014-10-24 11:05:43 PDT
<rdar://problem/18764961>
Comment 2 Joseph Pecoraro 2014-10-24 11:20:00 PDT
Created attachment 240416 [details]
[PATCH] Proposed Fix
Comment 3 Joseph Pecoraro 2014-10-24 11:21:13 PDT
Created attachment 240417 [details]
[PACKAGE] Static and Generated Sources
Comment 4 WebKit Commit Bot 2014-10-24 11:23:26 PDT
This patch modifies the inspector protocol generator. Please ensure that you have rebaselined any generator test results (i.e., by running `Tools/Scripts/run-inspector-generator-tests --reset-results`)
Comment 5 WebKit Commit Bot 2014-10-24 11:23:39 PDT
Attachment 240416 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_implementation.py:71:  [FrontendDispatcherImplementationGenerator._generate_dispatcher_implementations_for_domain] Instance of 'FrontendDispatcherImplementationGenerator' has no 'wrap_with_guard_for_domain' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_internal_header.py:58:  [ObjectiveCTypesInternalHeaderGenerator.generate_output] Instance of 'ObjectiveCTypesInternalHeaderGenerator' has no 'domains_to_generate' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_internal_header.py:59:  [ObjectiveCTypesInternalHeaderGenerator.generate_output] Instance of 'ObjectiveCTypesInternalHeaderGenerator' has no 'model' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_internal_header.py:62:  [ObjectiveCTypesInternalHeaderGenerator.generate_output] Instance of 'ObjectiveCTypesInternalHeaderGenerator' has no 'generate_license' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:85:  [BackendDispatcherHeaderGenerator._generate_alternate_handler_forward_declarations_for_domains] Instance of 'BackendDispatcherHeaderGenerator' has no 'wrap_with_guard_for_domain' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:107:  [BackendDispatcherHeaderGenerator._generate_handler_declarations_for_domain] Instance of 'BackendDispatcherHeaderGenerator' has no 'wrap_with_guard_for_domain' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:197:  [BackendDispatcherHeaderGenerator._generate_dispatcher_declarations_for_domain] Instance of 'BackendDispatcherHeaderGenerator' has no 'wrap_with_guard_for_domain' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_alternate_backend_dispatcher_header.py:78:  [AlternateBackendDispatcherHeaderGenerator._generate_handler_declarations_for_domain] Instance of 'AlternateBackendDispatcherHeaderGenerator' has no 'wrap_with_guard_for_domain' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:81:  [BackendDispatcherImplementationGenerator._generate_handler_class_destructor_for_domain] Instance of 'BackendDispatcherImplementationGenerator' has no 'wrap_with_guard_for_domain' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:101:  [BackendDispatcherImplementationGenerator._generate_dispatcher_implementations_for_domain] Instance of 'BackendDispatcherImplementationGenerator' has no 'wrap_with_guard_for_domain' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_backend_dispatcher_implementation.py:49:  [ObjectiveCConfigurationImplementationGenerator.domains_to_generate] Instance of 'ObjectiveCConfigurationImplementationGenerator' has no 'model' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_backend_dispatcher_implementation.py:66:  [ObjectiveCConfigurationImplementationGenerator.generate_output] Instance of 'ObjectiveCConfigurationImplementationGenerator' has no 'generate_license' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_backend_dispatcher_implementation.py:97:  [ObjectiveCConfigurationImplementationGenerator._generate_handler_implementation_for_command] Instance of 'ObjectiveCConfigurationImplementationGenerator' has no 'wrap_with_guard_for_domain' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_header.py:105:  [FrontendDispatcherHeaderGenerator._generate_dispatcher_declarations_for_domain] Instance of 'FrontendDispatcherHeaderGenerator' has no 'wrap_with_guard_for_domain' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_header.py:62:  [ObjectiveCHeaderGenerator.generate_output] Instance of 'ObjectiveCHeaderGenerator' has no 'domains_to_generate' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_header.py:63:  [ObjectiveCHeaderGenerator.generate_output] Instance of 'ObjectiveCHeaderGenerator' has no 'model' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_header.py:64:  [ObjectiveCHeaderGenerator.generate_output] Instance of 'ObjectiveCHeaderGenerator' has no 'model' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_header.py:65:  [ObjectiveCHeaderGenerator.generate_output] Instance of 'ObjectiveCHeaderGenerator' has no 'model' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_header.py:73:  [ObjectiveCHeaderGenerator.generate_output] Instance of 'ObjectiveCHeaderGenerator' has no 'generate_license' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_protocol_types_header.py:114:  [ProtocolTypesHeaderGenerator._generate_forward_declarations] Instance of 'ProtocolTypesHeaderGenerator' has no 'wrap_with_guard_for_domain' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_protocol_types_header.py:153:  [ProtocolTypesHeaderGenerator._generate_typedefs_for_domain] Instance of 'ProtocolTypesHeaderGenerator' has no 'wrap_with_guard_for_domain' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_protocol_types_header.py:172:  [ProtocolTypesHeaderGenerator._generate_builders_for_domain] Instance of 'ProtocolTypesHeaderGenerator' has no 'wrap_with_guard_for_domain' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:134:  [generate_from_specification] Undefined variable 'BackendCommandsGenerator'  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:140:  [generate_from_specification] Undefined variable 'ProtocolTypesImplementationGenerator'  [pylint/E0602] [5]
Total errors found: 24 in 35 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 6 Joseph Pecoraro 2014-10-24 11:24:07 PDT
Comment on attachment 240416 [details]
[PATCH] Proposed Fix

View in context: https://bugs.webkit.org/attachment.cgi?id=240416&action=review

> Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:101
> +    # Generate ObjC types, command handlers, and event dispatchers for a subset of domains.
> +
> +    DOMAINS_ON_TOP_OF_JAVASCRIPT_DOMAINS = ['CSS', 'DOM', 'DOMStorage', 'Network', 'Page']

Despite the whitelist, I have tested that we can generate type/command/event interfaces for all domains. However we do not anticipate needing to generate ObjC interfaces for all domains (e.g. ApplicationCache, LayerTree, ...) so we only generate for a subset of domains. Tweaked in the functions below for each generator.
Comment 7 Brian Burg 2014-10-29 15:45:45 PDT
Comment on attachment 240416 [details]
[PATCH] Proposed Fix

View in context: https://bugs.webkit.org/attachment.cgi?id=240416&action=review

> Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:39
> +def strip_comment_markers(str):

strip_block_comment_delimiters

> Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:54
> +for key, value in _OBJC_IDENTIFIER_RENAME_MAP.items():

Map comprehension: dict((v,k) for k, v in map.iteritems())

> Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:65
> +    def category_of_type(_type):

I prefer from_type, category_from_type or category_for_type.

> Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:67
> +            if _type.raw_name() == 'string':

_type.raw_name() is 'string'

> Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:69
> +            if  _type.raw_name() == 'object' or _type.raw_name() == 'any':

_type.raw_name() in ['object', 'any']

>> Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:101
>> +    DOMAINS_ON_TOP_OF_JAVASCRIPT_DOMAINS = ['CSS', 'DOM', 'DOMStorage', 'Network', 'Page']
> 
> Despite the whitelist, I have tested that we can generate type/command/event interfaces for all domains. However we do not anticipate needing to generate ObjC interfaces for all domains (e.g. ApplicationCache, LayerTree, ...) so we only generate for a subset of domains. Tweaked in the functions below for each generator.

This name is weird, why not call it WEBCORE_DOMAINS_TO_GENERATE?

> Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:171
> +    def objc_accessor_type_for_raw_name(raw_name):

(Applies throughout) use str in ['a', 'b', ...] to tighten these lines.

> Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:197
> +    def objc_class_for_raw_name(raw_name):

It's not obvious to me (not on ObjC expert) when either of these methods are more appropriate.

> Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:209
> +    def protocol_type_for_raw_name(raw_name):

(Next two methods) Is this different from what the C++ generator does? If so, why?

> Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:257
> +    def objc_accessor_type_for_member_internal(_type):

(Several cases below) In similar code for C++ generator, it first unwraps aliased types then does instance checks. I think I prefer this to explicit depth-1 recursion.
Comment 8 Joseph Pecoraro 2014-10-29 16:19:00 PDT
Comment on attachment 240416 [details]
[PATCH] Proposed Fix

View in context: https://bugs.webkit.org/attachment.cgi?id=240416&action=review

>>> Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:101
>>> +    DOMAINS_ON_TOP_OF_JAVASCRIPT_DOMAINS = ['CSS', 'DOM', 'DOMStorage', 'Network', 'Page']
>> 
>> Despite the whitelist, I have tested that we can generate type/command/event interfaces for all domains. However we do not anticipate needing to generate ObjC interfaces for all domains (e.g. ApplicationCache, LayerTree, ...) so we only generate for a subset of domains. Tweaked in the functions below for each generator.
> 
> This name is weird, why not call it WEBCORE_DOMAINS_TO_GENERATE?

Yeah, a better name would be just DOMAINS_TO_GENERATE. It is already in an "ObjC" named class. This will be for WebInspector.framework not WebCore.

>> Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:209
>> +    def protocol_type_for_raw_name(raw_name):
> 
> (Next two methods) Is this different from what the C++ generator does? If so, why?

I should work towards removing these. Originally I generated ObjC types on top of TypeBuilder/Inspector::Protocol so I built these up as I went. I then switched to just making ObjC types on top of InspectorObject/Inspector::Unchecked, and these got left behind but are kinda used in one case to figure out a particular array conversion.

I had a FIXME comment to convert to using the C++ generator versions and never did it. I believe there was some subtle difference but I can't remember now. I'll add back the FIXME and look into removing them.
Comment 9 Brian Burg 2014-10-29 18:55:22 PDT
Comment on attachment 240416 [details]
[PATCH] Proposed Fix

View in context: https://bugs.webkit.org/attachment.cgi?id=240416&action=review

Overall it looks quite good and clean. Miscellaneous comments that apply across many files, and should be addressed:

 * #if ENABLE(FEATURE) guards are not emitted for most generated files. Test case: generate-domains-with-feature-guards.json
 * Why aren't RWIProtocol.h, RWIProtocolJSONObjectInternal.h, etc included in this patch?
 * Will WebInspector.framework be added to the Xcode solution? Not sure where the generated files end up... or is the generated code used only externally?

Please post a revised patch before landing. :)

> Source/JavaScriptCore/ChangeLog:26
> +        Event dispather interfaces are straight forward, just packaging up the arguments and sending

typo: 'dispatcher'

> Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:325
> +        if category == ObjCTypeCategory.Simple or category == ObjCTypeCategory.String:

(multiple places)

category in [...]

> Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:329
> +        if category == ObjCTypeCategory.Object:

(multiple places)

if category is ObjcTypeCategory.Array:

> Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_backend_dispatcher_implementation.py:49
> +        return filter(ObjCGenerator.should_generate_domain_command_handler_filter(self.model()), Generator.domains_to_generate(self))

(Applies to all new generators)

In lieu of returning filter function objects, you can use functools.partial to do the equivalent of JavaScript's Function.prototype.bind:

import functools

...

return filter(functools.partial(ObjCGenerator.should_generator_domain_command_handler, self.model()), Generator.domains_to_generate(self))

> Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_backend_dispatcher_implementation.py:102
> +        # FIXME: Throw exception for nil required return parameters.

Please file a bug and add the bugzilla link here.

> Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_configuration_header.py:88
> +    def _variableNamePrefixForDomain(self, domain):

use_lower_case_names_please

> Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_configuration_implementation.py:61
> +        self._command_filter = ObjCGenerator.should_generate_domain_command_handler_filter(self.model())

I would go this way, passing in the domain and command. Then callsites don't need to duplicate this code.

def _should_generate_commands():
    return domain.commands and ...

> Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_configuration_implementation.py:73
> +        lines = []

I would have made this into a template. It's long and the two stray .extends are hard to see.

> Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_configuration_implementation.py:93
> +            if domain.commands and self._command_filter(domain):

See above.

> Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_configuration_implementation.py:102
> +    def _generate_ivars(self, domains):

Is 'ivars' an ObjC term?

> Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_configuration_implementation.py:144
> +    def _variableNamePrefixForDomain(self, domain):

This guy again. Maybe he should be in ObjCGenerator.

> Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_conversion_helpers.py:46
> +class ObjectiveCConversionHelpersGenerator(Generator):

Why ObjC in some places but ObjectiveC here? I like the short version.

> Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_header.py:67
> +        # FIXME: Currently we generate enums/types for all types in the type_domains.

Bug number!

> Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_header.py:70
> +        # of event_domains.

typo: 'or'

> Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_header.py:113
> +                    add_whitespace_separator(lines)

Can this be add_newline() instead?

> Source/JavaScriptCore/inspector/scripts/tests/expected/commands-with-async-attribute.json-result:1623
> +// DO NOT EDIT THIS FILE. It is automatically generated from commands-with-async-attribute.json

Now that we have umpteen generators, this comment should also say which generator created the file :)
Of course, this can be a separate bug.

> Source/JavaScriptCore/inspector/scripts/tests/expected/commands-with-async-attribute.json-result:1630
> +

I wish there was an easy way for the generator to say "don't bother outputting this file for test results".
Comment 10 Joseph Pecoraro 2014-10-30 12:15:41 PDT
(In reply to comment #9)
> Comment on attachment 240416 [details]
> [PATCH] Proposed Fix
> 
> View in context:
> https://bugs.webkit.org/attachment.cgi?id=240416&action=review
> 
> Overall it looks quite good and clean. Miscellaneous comments that apply
> across many files, and should be addressed:
> 
>  * #if ENABLE(FEATURE) guards are not emitted for most generated files. Test
> case: generate-domains-with-feature-guards.json

This is intentional. I did not want to generate ENABLE guards for the ObjC files, hence the change to wrap_with_guard_for_domain which doesn't include wraps:

    def wrap_with_guard_for_domain(self, domain, text):
        if self.model().framework is Frameworks.WebInspector:
            return text
        ...


>  * Why aren't RWIProtocol.h, RWIProtocolJSONObjectInternal.h, etc included
> in this patch?
>  * Will WebInspector.framework be added to the Xcode solution? Not sure
> where the generated files end up... or is the generated code used only
> externally?

The WebInspector.framework will remain external for now.

The static RWIProtocolJSONObject* files live in that project. I didn't include them here because, being static, it is more convenient to put them in the project they are a part of. I realize that is a bit backwards, since the generated code depends on them, but they are rather small. Exporting them from JSC as private headers is possible, but inconvenient (we have build phases that check ObjC class prefixes exported from the frameworks that we would need to open up to the "RWI" prefix).


> Please post a revised patch before landing. :)

Okay!
Comment 11 Joseph Pecoraro 2014-10-30 13:39:00 PDT
Created attachment 240692 [details]
[PATCH] Proposed Fix

This should address all review comments except the functools.partial as I didn't see it being too much of a benefit. That can always be cleaned up later if you consider it cleaner.
Comment 12 WebKit Commit Bot 2014-10-30 13:41:36 PDT
Attachment 240692 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_implementation.py:71:  [FrontendDispatcherImplementationGenerator._generate_dispatcher_implementations_for_domain] Instance of 'FrontendDispatcherImplementationGenerator' has no 'wrap_with_guard_for_domain' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_internal_header.py:58:  [ObjectiveCTypesInternalHeaderGenerator.generate_output] Instance of 'ObjectiveCTypesInternalHeaderGenerator' has no 'domains_to_generate' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_internal_header.py:59:  [ObjectiveCTypesInternalHeaderGenerator.generate_output] Instance of 'ObjectiveCTypesInternalHeaderGenerator' has no 'model' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_internal_header.py:62:  [ObjectiveCTypesInternalHeaderGenerator.generate_output] Instance of 'ObjectiveCTypesInternalHeaderGenerator' has no 'generate_license' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:85:  [BackendDispatcherHeaderGenerator._generate_alternate_handler_forward_declarations_for_domains] Instance of 'BackendDispatcherHeaderGenerator' has no 'wrap_with_guard_for_domain' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:107:  [BackendDispatcherHeaderGenerator._generate_handler_declarations_for_domain] Instance of 'BackendDispatcherHeaderGenerator' has no 'wrap_with_guard_for_domain' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:197:  [BackendDispatcherHeaderGenerator._generate_dispatcher_declarations_for_domain] Instance of 'BackendDispatcherHeaderGenerator' has no 'wrap_with_guard_for_domain' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_alternate_backend_dispatcher_header.py:78:  [AlternateBackendDispatcherHeaderGenerator._generate_handler_declarations_for_domain] Instance of 'AlternateBackendDispatcherHeaderGenerator' has no 'wrap_with_guard_for_domain' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:81:  [BackendDispatcherImplementationGenerator._generate_handler_class_destructor_for_domain] Instance of 'BackendDispatcherImplementationGenerator' has no 'wrap_with_guard_for_domain' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:101:  [BackendDispatcherImplementationGenerator._generate_dispatcher_implementations_for_domain] Instance of 'BackendDispatcherImplementationGenerator' has no 'wrap_with_guard_for_domain' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_backend_dispatcher_implementation.py:49:  [ObjectiveCConfigurationImplementationGenerator.domains_to_generate] Instance of 'ObjectiveCConfigurationImplementationGenerator' has no 'model' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_backend_dispatcher_implementation.py:66:  [ObjectiveCConfigurationImplementationGenerator.generate_output] Instance of 'ObjectiveCConfigurationImplementationGenerator' has no 'generate_license' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_backend_dispatcher_implementation.py:97:  [ObjectiveCConfigurationImplementationGenerator._generate_handler_implementation_for_command] Instance of 'ObjectiveCConfigurationImplementationGenerator' has no 'wrap_with_guard_for_domain' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_header.py:105:  [FrontendDispatcherHeaderGenerator._generate_dispatcher_declarations_for_domain] Instance of 'FrontendDispatcherHeaderGenerator' has no 'wrap_with_guard_for_domain' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_header.py:62:  [ObjectiveCHeaderGenerator.generate_output] Instance of 'ObjectiveCHeaderGenerator' has no 'domains_to_generate' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_header.py:63:  [ObjectiveCHeaderGenerator.generate_output] Instance of 'ObjectiveCHeaderGenerator' has no 'model' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_header.py:64:  [ObjectiveCHeaderGenerator.generate_output] Instance of 'ObjectiveCHeaderGenerator' has no 'model' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_header.py:65:  [ObjectiveCHeaderGenerator.generate_output] Instance of 'ObjectiveCHeaderGenerator' has no 'model' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_header.py:73:  [ObjectiveCHeaderGenerator.generate_output] Instance of 'ObjectiveCHeaderGenerator' has no 'generate_license' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_protocol_types_header.py:114:  [ProtocolTypesHeaderGenerator._generate_forward_declarations] Instance of 'ProtocolTypesHeaderGenerator' has no 'wrap_with_guard_for_domain' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_protocol_types_header.py:153:  [ProtocolTypesHeaderGenerator._generate_typedefs_for_domain] Instance of 'ProtocolTypesHeaderGenerator' has no 'wrap_with_guard_for_domain' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_protocol_types_header.py:172:  [ProtocolTypesHeaderGenerator._generate_builders_for_domain] Instance of 'ProtocolTypesHeaderGenerator' has no 'wrap_with_guard_for_domain' member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py:167:  trailing whitespace  [pep8/W291] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:134:  [generate_from_specification] Undefined variable 'BackendCommandsGenerator'  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:140:  [generate_from_specification] Undefined variable 'ProtocolTypesImplementationGenerator'  [pylint/E0602] [5]
Total errors found: 25 in 35 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 13 WebKit Commit Bot 2014-10-30 15:09:05 PDT
Comment on attachment 240692 [details]
[PATCH] Proposed Fix

Clearing flags on attachment: 240692

Committed r175385: <http://trac.webkit.org/changeset/175385>
Comment 14 WebKit Commit Bot 2014-10-30 15:09:10 PDT
All reviewed patches have been landed.  Closing bug.