Title: [215698] trunk/Source/_javascript_Core
Revision
215698
Author
joep...@webkit.org
Date
2017-04-24 15:02:06 -0700 (Mon, 24 Apr 2017)

Log Message

Web Inspector: ObjC RWIProtocol codegen should better handle optional members
https://bugs.webkit.org/show_bug.cgi?id=171251
<rdar://problem/31697002>

Reviewed by Brian Burg.

* inspector/scripts/codegen/generate_objc_protocol_types_implementation.py:
(ObjCProtocolTypesImplementationGenerator._generate_getter_for_member):
* inspector/scripts/codegen/objc_generator.py:
(ObjCGenerator.protocol_to_objc_expression_for_member):
(ObjCGenerator.protocol_to_objc_code_block_for_object_member):
Always be safe and nil check object property accesses, optional or not.

* inspector/scripts/tests/generic/expected/type-declaration-object-type.json-result:
* inspector/scripts/tests/generic/expected/type-requiring-runtime-casts.json-result:
Rebaselined inspector generator tests.

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (215697 => 215698)


--- trunk/Source/_javascript_Core/ChangeLog	2017-04-24 21:43:50 UTC (rev 215697)
+++ trunk/Source/_javascript_Core/ChangeLog	2017-04-24 22:02:06 UTC (rev 215698)
@@ -1,3 +1,22 @@
+2017-04-24  Joseph Pecoraro  <pecor...@apple.com>
+
+        Web Inspector: ObjC RWIProtocol codegen should better handle optional members
+        https://bugs.webkit.org/show_bug.cgi?id=171251
+        <rdar://problem/31697002>
+
+        Reviewed by Brian Burg.
+
+        * inspector/scripts/codegen/generate_objc_protocol_types_implementation.py:
+        (ObjCProtocolTypesImplementationGenerator._generate_getter_for_member):
+        * inspector/scripts/codegen/objc_generator.py:
+        (ObjCGenerator.protocol_to_objc_expression_for_member):
+        (ObjCGenerator.protocol_to_objc_code_block_for_object_member):
+        Always be safe and nil check object property accesses, optional or not.
+
+        * inspector/scripts/tests/generic/expected/type-declaration-object-type.json-result:
+        * inspector/scripts/tests/generic/expected/type-requiring-runtime-casts.json-result:
+        Rebaselined inspector generator tests.
+
 2017-04-24  Saam Barati  <sbar...@apple.com>
 
         ASSERTION FAILED: m_table seen with workers/wasm-hashset LayoutTests

Modified: trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_protocol_types_implementation.py (215697 => 215698)


--- trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_protocol_types_implementation.py	2017-04-24 21:43:50 UTC (rev 215697)
+++ trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_protocol_types_implementation.py	2017-04-24 22:02:06 UTC (rev 215698)
@@ -31,7 +31,7 @@
 
 from generator import Generator, ucfirst
 from models import ObjectType, EnumType, Frameworks
-from objc_generator import ObjCGenerator
+from objc_generator import ObjCTypeCategory, ObjCGenerator
 from objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates
 
 log = logging.getLogger('global')
@@ -206,10 +206,18 @@
         var_name = ObjCGenerator.identifier_to_objc_identifier(member.member_name)
         getter_method = ObjCGenerator.objc_getter_method_for_member(declaration, member)
         basic_expression = '[super %s:@"%s"]' % (getter_method, member.member_name)
-        conversion_expression = self.protocol_to_objc_expression_for_member(declaration, member, basic_expression)
-        lines = []
-        lines.append('- (%s)%s' % (objc_type, var_name))
-        lines.append('{')
-        lines.append('    return %s;' % conversion_expression)
-        lines.append('}')
+        category = ObjCTypeCategory.category_for_type(member.type)
+        if category is ObjCTypeCategory.Object:
+            lines = []
+            lines.append('- (%s)%s' % (objc_type, var_name))
+            lines.append('{')
+            lines.append(self.protocol_to_objc_code_block_for_object_member(declaration, member, basic_expression))
+            lines.append('}')
+        else:
+            conversion_expression = self.protocol_to_objc_expression_for_member(declaration, member, basic_expression)
+            lines = []
+            lines.append('- (%s)%s' % (objc_type, var_name))
+            lines.append('{')
+            lines.append('    return %s;' % conversion_expression)
+            lines.append('}')
         return '\n'.join(lines)

Modified: trunk/Source/_javascript_Core/inspector/scripts/codegen/objc_generator.py (215697 => 215698)


--- trunk/Source/_javascript_Core/inspector/scripts/codegen/objc_generator.py	2017-04-24 21:43:50 UTC (rev 215697)
+++ trunk/Source/_javascript_Core/inspector/scripts/codegen/objc_generator.py	2017-04-24 22:02:06 UTC (rev 215698)
@@ -446,8 +446,7 @@
                 return 'fromProtocolString<%s>(%s).value()' % (self.objc_enum_name_for_non_anonymous_enum(member.type), sub_expression)
             return sub_expression
         if category is ObjCTypeCategory.Object:
-            objc_class = self.objc_class_for_type(member.type)
-            return '[[%s alloc] initWithInspectorObject:[%s toInspectorObject].get()]' % (objc_class, sub_expression)
+            raise Exception("protocol_to_objc_expression_for_member does not support an Object type. See: protocol_to_objc_code_block_for_object_member")
         if category is ObjCTypeCategory.Array:
             protocol_type = ObjCGenerator.protocol_type_for_type(member.type.element_type)
             objc_class = self.objc_class_for_type(member.type.element_type)
@@ -460,6 +459,15 @@
                 return 'objcIntegerArray(%s)' % sub_expression
             return 'objcArray<%s>(%s)' % (objc_class, sub_expression)
 
+    def protocol_to_objc_code_block_for_object_member(self, declaration, member, sub_expression):
+        objc_class = self.objc_class_for_type(member.type)
+        lines = []
+        lines.append('    %sJSONObject *object = %s;' % (ObjCGenerator.OBJC_STATIC_PREFIX, sub_expression))
+        lines.append('    if (!object)')
+        lines.append('        return nil;')
+        lines.append('    return [[%s alloc] initWithInspectorObject:[%s toInspectorObject].get()];' % (objc_class, sub_expression))
+        return '\n'.join(lines)
+
     def payload_to_objc_expression_for_member(self, declaration, member):
         _type = member.type
         if isinstance(_type, AliasedType):

Modified: trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-declaration-object-type.json-result (215697 => 215698)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-declaration-object-type.json-result	2017-04-24 21:43:50 UTC (rev 215697)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-declaration-object-type.json-result	2017-04-24 22:02:06 UTC (rev 215698)
@@ -1926,6 +1926,9 @@
 
 - (RWIProtocolJSONObject *)values
 {
+    RWIProtocolJSONObject *object = [super objectForKey:@"values"];
+    if (!object)
+        return nil;
     return [[RWIProtocolJSONObject alloc] initWithInspectorObject:[[super objectForKey:@"values"] toInspectorObject].get()];
 }
 
@@ -1936,6 +1939,9 @@
 
 - (RWIProtocolJSONObject *)payload
 {
+    RWIProtocolJSONObject *object = [super objectForKey:@"payload"];
+    if (!object)
+        return nil;
     return [[RWIProtocolJSONObject alloc] initWithInspectorObject:[[super objectForKey:@"payload"] toInspectorObject].get()];
 }
 
@@ -1946,6 +1952,9 @@
 
 - (TestProtocolDatabaseError *)error
 {
+    RWIProtocolJSONObject *object = [super objectForKey:@"error"];
+    if (!object)
+        return nil;
     return [[TestProtocolDatabaseError alloc] initWithInspectorObject:[[super objectForKey:@"error"] toInspectorObject].get()];
 }
 
@@ -2092,6 +2101,9 @@
 
 - (RWIProtocolJSONObject *)values
 {
+    RWIProtocolJSONObject *object = [super objectForKey:@"values"];
+    if (!object)
+        return nil;
     return [[RWIProtocolJSONObject alloc] initWithInspectorObject:[[super objectForKey:@"values"] toInspectorObject].get()];
 }
 
@@ -2102,6 +2114,9 @@
 
 - (RWIProtocolJSONObject *)payload
 {
+    RWIProtocolJSONObject *object = [super objectForKey:@"payload"];
+    if (!object)
+        return nil;
     return [[RWIProtocolJSONObject alloc] initWithInspectorObject:[[super objectForKey:@"payload"] toInspectorObject].get()];
 }
 
@@ -2112,6 +2127,9 @@
 
 - (TestProtocolDatabaseError *)error
 {
+    RWIProtocolJSONObject *object = [super objectForKey:@"error"];
+    if (!object)
+        return nil;
     return [[TestProtocolDatabaseError alloc] initWithInspectorObject:[[super objectForKey:@"error"] toInspectorObject].get()];
 }
 
@@ -2376,6 +2394,9 @@
 
 - (RWIProtocolJSONObject *)values
 {
+    RWIProtocolJSONObject *object = [super objectForKey:@"values"];
+    if (!object)
+        return nil;
     return [[RWIProtocolJSONObject alloc] initWithInspectorObject:[[super objectForKey:@"values"] toInspectorObject].get()];
 }
 
@@ -2386,6 +2407,9 @@
 
 - (RWIProtocolJSONObject *)payload
 {
+    RWIProtocolJSONObject *object = [super objectForKey:@"payload"];
+    if (!object)
+        return nil;
     return [[RWIProtocolJSONObject alloc] initWithInspectorObject:[[super objectForKey:@"payload"] toInspectorObject].get()];
 }
 
@@ -2396,6 +2420,9 @@
 
 - (TestProtocolDatabaseError *)error
 {
+    RWIProtocolJSONObject *object = [super objectForKey:@"error"];
+    if (!object)
+        return nil;
     return [[TestProtocolDatabaseError alloc] initWithInspectorObject:[[super objectForKey:@"error"] toInspectorObject].get()];
 }
 

Modified: trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-requiring-runtime-casts.json-result (215697 => 215698)


--- trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-requiring-runtime-casts.json-result	2017-04-24 21:43:50 UTC (rev 215697)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-requiring-runtime-casts.json-result	2017-04-24 22:02:06 UTC (rev 215698)
@@ -1546,6 +1546,9 @@
 
 - (TestProtocolTestRecursiveObject1 *)tree
 {
+    RWIProtocolJSONObject *object = [super objectForKey:@"tree"];
+    if (!object)
+        return nil;
     return [[TestProtocolTestRecursiveObject1 alloc] initWithInspectorObject:[[super objectForKey:@"tree"] toInspectorObject].get()];
 }
 
@@ -1577,6 +1580,9 @@
 
 - (TestProtocolTestRecursiveObject2 *)obj
 {
+    RWIProtocolJSONObject *object = [super objectForKey:@"obj"];
+    if (!object)
+        return nil;
     return [[TestProtocolTestRecursiveObject2 alloc] initWithInspectorObject:[[super objectForKey:@"obj"] toInspectorObject].get()];
 }
 
@@ -1608,6 +1614,9 @@
 
 - (TestProtocolTestRecursiveObject1 *)obj
 {
+    RWIProtocolJSONObject *object = [super objectForKey:@"obj"];
+    if (!object)
+        return nil;
     return [[TestProtocolTestRecursiveObject1 alloc] initWithInspectorObject:[[super objectForKey:@"obj"] toInspectorObject].get()];
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to