Skip to content

Commit 4554b38

Browse files
Make the Darwin compat story for struct/event renames better (project-chip#28012)
* Refactor struct/event codegen in Darwin a bit. This makes the cluster and struct/event names into inline partial parameters. This changeset has been tested to not modify the generated code at all. * Make our renamed struct/event codegen more backwards compatible. When we just moved all the members to the super-class, it left the subclass in a situation where none of its properties are available in the release where the subclass itself is available. This change restores those properties on the subclasses. The @dynamic in implementations is needed to avoid compiler errors.
1 parent e6f610b commit 4554b38

File tree

4 files changed

+726
-23
lines changed

4 files changed

+726
-23
lines changed

src/darwin/Framework/CHIP/templates/MTRStructsObjc-src.zapt

+28-8
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,18 @@ NS_ASSUME_NONNULL_BEGIN
6363

6464
{{! Takes the name of the struct to use as structName. }}
6565
{{#*inline "oldNameImpl"}}
66-
{{#if (isSupported (compatClusterNameRemapping parent.name) struct=structName)}}
67-
@implementation MTR{{compatClusterNameRemapping parent.name}}Cluster{{structName}} : MTR{{asUpperCamelCase parent.name preserveAcronyms=true}}Cluster{{asUpperCamelCase name preserveAcronyms=true}}
66+
{{#if (isSupported cluster struct=structName)}}
67+
@implementation MTR{{cluster}}Cluster{{structName}} : MTR{{asUpperCamelCase parent.name preserveAcronyms=true}}Cluster{{asUpperCamelCase name preserveAcronyms=true}}
68+
{{#zcl_struct_items}}
69+
{{#if (isSupported ../cluster struct=../structName structField=(asStructPropertyName label))}}
70+
@dynamic {{asStructPropertyName label}};
71+
{{/if}}
72+
{{#if (hasOldName ../cluster struct=../structName structField=(asStructPropertyName label))}}
73+
{{#if (isSupported ../cluster struct=../structName structField=(oldName ../cluster struct=../structName structField=(asStructPropertyName label)))}}
74+
@dynamic {{oldName ../cluster struct=../structName structField=(asStructPropertyName label)}};
75+
{{/if}}
76+
{{/if}}
77+
{{/zcl_struct_items}}
6878
@end
6979
{{/if}}
7080
{{/inline}}
@@ -73,9 +83,9 @@ NS_ASSUME_NONNULL_BEGIN
7383
{{#if (or oldStructName
7484
(hasOldName (asUpperCamelCase parent.name preserveAcronyms=true)))}}
7585
{{#if oldStructName}}
76-
{{> oldNameImpl structName=oldStructName}}
86+
{{> oldNameImpl cluster=(compatClusterNameRemapping parent.name) structName=oldStructName}}
7787
{{else}}
78-
{{> oldNameImpl structName=(asUpperCamelCase name preserveAcronyms=true)}}
88+
{{> oldNameImpl cluster=(compatClusterNameRemapping parent.name) structName=(asUpperCamelCase name preserveAcronyms=true)}}
7989
{{/if}}
8090
{{/if}}
8191
{{/inline}}
@@ -136,9 +146,19 @@ NS_ASSUME_NONNULL_BEGIN
136146
{{/if}}
137147
{{! Takes the name of the event to use as eventName. }}
138148
{{#*inline "oldNameImpl"}}
139-
{{#if (isSupported (compatClusterNameRemapping parent.name) event=eventName)}}
149+
{{#if (isSupported cluster event=eventName)}}
140150

141-
@implementation MTR{{compatClusterNameRemapping parent.name}}Cluster{{eventName}}Event : MTR{{asUpperCamelCase parent.name preserveAcronyms=true}}Cluster{{asUpperCamelCase name preserveAcronyms=true}}Event
151+
@implementation MTR{{cluster}}Cluster{{eventName}}Event : MTR{{asUpperCamelCase parent.name preserveAcronyms=true}}Cluster{{asUpperCamelCase name preserveAcronyms=true}}Event
152+
{{#zcl_event_fields}}
153+
{{#if (isSupported ../cluster event=../eventName eventField=(asStructPropertyName name))}}
154+
@dynamic {{asStructPropertyName name}};
155+
{{/if}}
156+
{{#if (hasOldName ../cluster event=../eventName eventField=(asStructPropertyName name))}}
157+
{{#if (isSupported ../cluster event=../eventName eventField=(oldName ../cluster event=../eventName eventField=(asStructPropertyName name)))}}
158+
@dynamic {{oldName ../cluster event=../event eventField=(asStructPropertyName name)}};
159+
{{/if}}
160+
{{/if}}
161+
{{/zcl_event_fields}}
142162
@end
143163
{{/if}}
144164
{{/inline}}
@@ -147,9 +167,9 @@ NS_ASSUME_NONNULL_BEGIN
147167
{{#if (or oldEventName
148168
(hasOldName (asUpperCamelCase parent.name preserveAcronyms=true)))}}
149169
{{#if oldEventName}}
150-
{{> oldNameImpl eventName=oldEventName}}
170+
{{> oldNameImpl cluster=(compatClusterNameRemapping parent.name) eventName=oldEventName}}
151171
{{else}}
152-
{{> oldNameImpl eventName=(asUpperCamelCase name preserveAcronyms=true)}}
172+
{{> oldNameImpl cluster=(compatClusterNameRemapping parent.name) eventName=(asUpperCamelCase name preserveAcronyms=true)}}
153173
{{/if}}
154174
{{/if}}
155175
{{/inline}}

src/darwin/Framework/CHIP/templates/MTRStructsObjc.zapt

+22-15
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,20 @@ NS_ASSUME_NONNULL_BEGIN
88
{{#zcl_structs}}
99
{{#*inline "interfaceDecl"}}
1010
{{#zcl_struct_items}}
11-
{{#if (isSupported (asUpperCamelCase ../../name preserveAcronyms=true) struct=../struct structField=(asStructPropertyName label))}}
12-
{{> struct_field_decl cluster=parent.parent.name type=type label=label}} {{availability (asUpperCamelCase ../../name preserveAcronyms=true) struct=../struct structField=(asStructPropertyName label) deprecationMessage=(concat "Please use MTR" (asUpperCamelCase ../../name preserveAcronyms=true) "Cluster" (asUpperCamelCase ../name preserveAcronyms=true))}};
11+
{{#if (isSupported ../cluster struct=../struct structField=(asStructPropertyName label))}}
12+
{{> struct_field_decl cluster=../cluster type=type label=label}} {{availability (asUpperCamelCase ../cluster preserveAcronyms=true) struct=../struct structField=(asStructPropertyName label) deprecationMessage=(concat "Please use MTR" (asUpperCamelCase ../../name preserveAcronyms=true) "Cluster" (asUpperCamelCase ../name preserveAcronyms=true))}};
1313
{{/if}}
14-
{{#if (hasOldName (asUpperCamelCase ../../name preserveAcronyms=true) struct=(asUpperCamelCase ../name preserveAcronyms=true) structField=(asStructPropertyName label))}}
15-
{{#if (isSupported (asUpperCamelCase ../../name preserveAcronyms=true) struct=(asUpperCamelCase ../name preserveAcronyms=true) structField=(oldName (asUpperCamelCase ../../name preserveAcronyms=true) struct=(asUpperCamelCase ../name preserveAcronyms=true) structField=(asStructPropertyName label)))}}
16-
{{> struct_field_decl cluster=../../name type=type label=(oldName (asUpperCamelCase ../../name preserveAcronyms=true) struct=(asUpperCamelCase ../name preserveAcronyms=true) structField=(asStructPropertyName label))}} {{availability (asUpperCamelCase ../../name preserveAcronyms=true) struct=(asUpperCamelCase ../name preserveAcronyms=true) structField=(oldName (asUpperCamelCase ../../name preserveAcronyms=true) struct=(asUpperCamelCase ../name preserveAcronyms=true) structField=(asStructPropertyName label)) deprecationMessage=(concat "Please use " (asStructPropertyName label))}};
14+
{{#if (hasOldName ../cluster struct=../struct structField=(asStructPropertyName label))}}
15+
{{#if (isSupported ../cluster struct=../struct structField=(oldName ../cluster struct=../struct structField=(asStructPropertyName label)))}}
16+
{{> struct_field_decl cluster=../cluster type=type label=(oldName ../cluster struct=../struct structField=(asStructPropertyName label))}} {{availability ../cluster struct=../struct structField=(oldName ../cluster struct=../struct structField=(asStructPropertyName label)) deprecationMessage=(concat "Please use " (asStructPropertyName label))}};
1717
{{/if}}
1818
{{/if}}
1919
{{/zcl_struct_items}}
2020
{{/inline}}
2121
{{#if (isSupported (asUpperCamelCase parent.name preserveAcronyms=true) struct=(asUpperCamelCase name preserveAcronyms=true))}}
2222
{{availability (asUpperCamelCase parent.name preserveAcronyms=true) struct=(asUpperCamelCase name preserveAcronyms=true) deprecationMessage="This struct is unused and will be removed"}}
2323
@interface MTR{{asUpperCamelCase parent.name preserveAcronyms=true}}Cluster{{asUpperCamelCase name preserveAcronyms=true}} : NSObject <NSCopying>
24-
{{> interfaceDecl struct=(asUpperCamelCase name preserveAcronyms=true)}}
24+
{{> interfaceDecl cluster=(asUpperCamelCase parent.name preserveAcronyms=true) struct=(asUpperCamelCase name preserveAcronyms=true)}}
2525
@end
2626

2727
{{/if}}
@@ -30,7 +30,9 @@ NS_ASSUME_NONNULL_BEGIN
3030
{{#if (isSupported (compatClusterNameRemapping parent.name) struct=structName)}}
3131
{{availability (compatClusterNameRemapping parent.name) struct=structName deprecationMessage=(concat "Please use MTR" (asUpperCamelCase parent.name preserveAcronyms=true) "Cluster" (asUpperCamelCase name preserveAcronyms=true))}}
3232
@interface MTR{{compatClusterNameRemapping parent.name}}Cluster{{structName}} : MTR{{asUpperCamelCase parent.name preserveAcronyms=true}}Cluster{{asUpperCamelCase name preserveAcronyms=true}}
33+
{{> interfaceDecl cluster=(compatClusterNameRemapping parent.name) struct=structName}}
3334
@end
35+
3436
{{/if}}
3537
{{/inline}}
3638
{{! Takes the old name of the struct, if any, as oldStructName. }}
@@ -48,28 +50,33 @@ NS_ASSUME_NONNULL_BEGIN
4850
{{/zcl_structs}}
4951

5052
{{#zcl_events}}
51-
{{#if (isSupported (asUpperCamelCase parent.name preserveAcronyms=true) event=(asUpperCamelCase name preserveAcronyms=true))}}
52-
{{availability (asUpperCamelCase parent.name preserveAcronyms=true) event=(asUpperCamelCase name preserveAcronyms=true)}}
53-
@interface MTR{{asUpperCamelCase parent.name preserveAcronyms=true}}Cluster{{asUpperCamelCase name preserveAcronyms=true}}Event : NSObject <NSCopying>
53+
{{#*inline "interfaceDecl"}}
5454
{{#zcl_event_fields}}
55-
{{#if (isSupported (asUpperCamelCase ../../name preserveAcronyms=true) event=(asUpperCamelCase ../name preserveAcronyms=true) eventField=(asStructPropertyName name))}}
56-
{{> struct_field_decl cluster=parent.parent.name type=type label=name}} {{availability (asUpperCamelCase ../../name preserveAcronyms=true) event=(asUpperCamelCase ../name preserveAcronyms=true) eventField=(asStructPropertyName name)}};
55+
{{#if (isSupported ../cluster event=../event eventField=(asStructPropertyName name))}}
56+
{{> struct_field_decl cluster=../cluster type=type label=name}} {{availability ../cluster event=../event eventField=(asStructPropertyName name) deprecationMessage=(concat "Please use MTR" (asUpperCamelCase ../../name preserveAcronyms=true) "Cluster" (asUpperCamelCase ../name preserveAcronyms=true) "Event")}};
5757
{{/if}}
58-
{{#if (hasOldName (asUpperCamelCase ../parent.name preserveAcronyms=true) event=(asUpperCamelCase ../name preserveAcronyms=true) eventField=(asStructPropertyName name))}}
59-
{{#if (isSupported (asUpperCamelCase ../../name preserveAcronyms=true) event=(asUpperCamelCase ../name preserveAcronyms=true) eventField=(oldName (asUpperCamelCase ../parent.name preserveAcronyms=true) event=(asUpperCamelCase ../name preserveAcronyms=true) eventField=(asStructPropertyName name)))}}
60-
{{> struct_field_decl cluster=parent.parent.name type=type label=(oldName (asUpperCamelCase ../parent.name preserveAcronyms=true) event=(asUpperCamelCase ../name preserveAcronyms=true) eventField=(asStructPropertyName name))}} {{availability (asUpperCamelCase ../../name preserveAcronyms=true) event=(asUpperCamelCase ../name preserveAcronyms=true) eventField=(oldName (asUpperCamelCase ../parent.name preserveAcronyms=true) event=(asUpperCamelCase ../name preserveAcronyms=true) eventField=(asStructPropertyName name)) deprecationMessage=(concat "Please use " (asStructPropertyName name))}};
58+
{{#if (hasOldName ../cluster event=../event eventField=(asStructPropertyName name))}}
59+
{{#if (isSupported ../cluster event=../event eventField=(oldName ../cluster event=../event eventField=(asStructPropertyName name)))}}
60+
{{> struct_field_decl cluster=../cluster type=type label=(oldName ../cluster event=../event eventField=(asStructPropertyName name))}} {{availability ../cluster event=../event eventField=(oldName ../cluster event=../event eventField=(asStructPropertyName name)) deprecationMessage=(concat "Please use " (asStructPropertyName name))}};
6161
{{/if}}
6262
{{/if}}
6363
{{/zcl_event_fields}}
64+
{{/inline}}
65+
{{#if (isSupported (asUpperCamelCase parent.name preserveAcronyms=true) event=(asUpperCamelCase name preserveAcronyms=true))}}
66+
{{availability (asUpperCamelCase parent.name preserveAcronyms=true) event=(asUpperCamelCase name preserveAcronyms=true)}}
67+
@interface MTR{{asUpperCamelCase parent.name preserveAcronyms=true}}Cluster{{asUpperCamelCase name preserveAcronyms=true}}Event : NSObject <NSCopying>
68+
{{> interfaceDecl cluster=(asUpperCamelCase parent.name preserveAcronyms=true) event=(asUpperCamelCase name preserveAcronyms=true)}}
6469
@end
70+
6571
{{/if}}
6672
{{! Takes the name of the event to use as eventName. }}
6773
{{#*inline "oldNameDecl"}}
6874
{{#if (isSupported (compatClusterNameRemapping parent.name) event=eventName)}}
69-
7075
{{availability (compatClusterNameRemapping parent.name) event=eventName deprecationMessage=(concat "Please use MTR" (asUpperCamelCase parent.name preserveAcronyms=true) "Cluster" (asUpperCamelCase name preserveAcronyms=true) "Event")}}
7176
@interface MTR{{compatClusterNameRemapping parent.name}}Cluster{{eventName}}Event : MTR{{asUpperCamelCase parent.name preserveAcronyms=true}}Cluster{{asUpperCamelCase name preserveAcronyms=true}}Event
77+
{{> interfaceDecl cluster=(compatClusterNameRemapping parent.name) event=eventName}}
7278
@end
79+
7380
{{/if}}
7481
{{/inline}}
7582
{{! Takes the old name of the event, if any, as oldEventName. }}

0 commit comments

Comments
 (0)