Skip to content

Commit 86c55dd

Browse files
authored
Refactor Semantics in preparation for ARC migration (flutter#52729)
Split the too-large `Semantics` [MRC to ARC migration](flutter#137801) into two PRs: this one, which refactors, and the next which will actually do the migration. 1. Use properties instead of their backing ivars (except in the usual init, dealloc, getters/setters) 2. For Foundation collections prefer `copy` over `strong`. 3. Dot notation for properties 4. Change `privateSetParent:` to instead use a `readwrite` property in `SemanticsObject ()`. 5. Switch the `semanticsObject` property from `weak` to `retain` to get the synthesized property (keeping it as `weak` is a compilation error in MRC) but I'll swap it back to a `weak` in the ARC migration PR coming next. 6. `SemanticsObjectTest` fails on my machine and passes on CI. Switched the cleaner `CGRectEqualToRect` (and related) checks to instead assert x, y, width, height so we can see the value when it fails: ``` ((CGSizeEqualToSize( scrollView.contentSize, CGSizeMake((w + scrollExtentMax) * effectivelyScale, h * effectivelyScale))) is true) failed ``` becomes: ``` ((scrollView.contentSize.height) equal to (h * effectivelyScale)) failed: ("33.3333333333") is not equal to ("33.333336") ``` Use `XCTAssertEqualWithAccuracy` now that I can see it's a floating point precision issue.
1 parent 57832bd commit 86c55dd

4 files changed

Lines changed: 216 additions & 198 deletions

File tree

shell/platform/darwin/ios/framework/Source/FlutterSemanticsScrollView.mm

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -25,81 +25,81 @@ - (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent*)event {
2525
// UIScrollView class, the base class.
2626

2727
- (BOOL)isAccessibilityElement {
28-
if (![_semanticsObject isAccessibilityBridgeAlive]) {
28+
if (![self.semanticsObject isAccessibilityBridgeAlive]) {
2929
return NO;
3030
}
3131

32-
if ([_semanticsObject isAccessibilityElement]) {
32+
if (self.semanticsObject.isAccessibilityElement) {
3333
return YES;
3434
}
3535
if (self.contentSize.width > self.frame.size.width ||
3636
self.contentSize.height > self.frame.size.height) {
3737
// In SwitchControl or VoiceControl, the isAccessibilityElement must return YES
3838
// in order to use scroll actions.
39-
return ![_semanticsObject bridge]->isVoiceOverRunning();
39+
return ![self.semanticsObject bridge]->isVoiceOverRunning();
4040
} else {
4141
return NO;
4242
}
4343
}
4444

4545
- (NSString*)accessibilityLabel {
46-
return [_semanticsObject accessibilityLabel];
46+
return self.semanticsObject.accessibilityLabel;
4747
}
4848

4949
- (NSAttributedString*)accessibilityAttributedLabel {
50-
return [_semanticsObject accessibilityAttributedLabel];
50+
return self.semanticsObject.accessibilityAttributedLabel;
5151
}
5252

5353
- (NSString*)accessibilityValue {
54-
return [_semanticsObject accessibilityValue];
54+
return self.semanticsObject.accessibilityValue;
5555
}
5656

5757
- (NSAttributedString*)accessibilityAttributedValue {
58-
return [_semanticsObject accessibilityAttributedValue];
58+
return self.semanticsObject.accessibilityAttributedValue;
5959
}
6060

6161
- (NSString*)accessibilityHint {
62-
return [_semanticsObject accessibilityHint];
62+
return self.semanticsObject.accessibilityHint;
6363
}
6464

6565
- (NSAttributedString*)accessibilityAttributedHint {
66-
return [_semanticsObject accessibilityAttributedHint];
66+
return self.semanticsObject.accessibilityAttributedHint;
6767
}
6868

6969
- (BOOL)accessibilityActivate {
70-
return [_semanticsObject accessibilityActivate];
70+
return [self.semanticsObject accessibilityActivate];
7171
}
7272

7373
- (void)accessibilityIncrement {
74-
[_semanticsObject accessibilityIncrement];
74+
[self.semanticsObject accessibilityIncrement];
7575
}
7676

7777
- (void)accessibilityDecrement {
78-
[_semanticsObject accessibilityDecrement];
78+
[self.semanticsObject accessibilityDecrement];
7979
}
8080

8181
- (BOOL)accessibilityScroll:(UIAccessibilityScrollDirection)direction {
82-
return [_semanticsObject accessibilityScroll:direction];
82+
return [self.semanticsObject accessibilityScroll:direction];
8383
}
8484

8585
- (BOOL)accessibilityPerformEscape {
86-
return [_semanticsObject accessibilityPerformEscape];
86+
return [self.semanticsObject accessibilityPerformEscape];
8787
}
8888

8989
- (void)accessibilityElementDidBecomeFocused {
90-
[_semanticsObject accessibilityElementDidBecomeFocused];
90+
[self.semanticsObject accessibilityElementDidBecomeFocused];
9191
}
9292

9393
- (void)accessibilityElementDidLoseFocus {
94-
[_semanticsObject accessibilityElementDidLoseFocus];
94+
[self.semanticsObject accessibilityElementDidLoseFocus];
9595
}
9696

9797
- (id)accessibilityContainer {
98-
return [_semanticsObject accessibilityContainer];
98+
return self.semanticsObject.accessibilityContainer;
9999
}
100100

101101
- (NSInteger)accessibilityElementCount {
102-
return [[_semanticsObject children] count];
102+
return self.semanticsObject.children.count;
103103
}
104104

105105
@end

shell/platform/darwin/ios/framework/Source/SemanticsObject.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ constexpr float kScrollExtentMaxForInf = 1000;
3838
* The parent of this node in the node tree. Will be nil for the root node and
3939
* during transient state changes.
4040
*/
41-
@property(nonatomic, assign) SemanticsObject* parent;
41+
@property(nonatomic, assign, readonly) SemanticsObject* parent;
4242

4343
/**
4444
* The accessibility bridge that this semantics object is attached to. This
@@ -64,13 +64,13 @@ constexpr float kScrollExtentMaxForInf = 1000;
6464
* Direct children of this semantics object. Each child's `parent` property must
6565
* be equal to this object.
6666
*/
67-
@property(nonatomic, strong) NSArray<SemanticsObject*>* children;
67+
@property(nonatomic, copy) NSArray<SemanticsObject*>* children;
6868

6969
/**
7070
* Direct children of this semantics object in hit test order. Each child's `parent` property
7171
* must be equal to this object.
7272
*/
73-
@property(nonatomic, strong) NSArray<SemanticsObject*>* childrenInHitTestOrder;
73+
@property(nonatomic, copy) NSArray<SemanticsObject*>* childrenInHitTestOrder;
7474

7575
/**
7676
* The UIAccessibility that represents this object.
@@ -231,7 +231,7 @@ constexpr float kScrollExtentMaxForInf = 1000;
231231
bridge:(fml::WeakPtr<flutter::AccessibilityBridgeIos>)bridge
232232
NS_DESIGNATED_INITIALIZER;
233233

234-
@property(nonatomic, weak) SemanticsObject* semanticsObject;
234+
@property(nonatomic, assign) SemanticsObject* semanticsObject;
235235

236236
@end
237237

0 commit comments

Comments
 (0)