Avoid using Dart_New for semantics (#16849)

This commit is contained in:
Dan Field 2020-02-28 10:31:03 -08:00 committed by GitHub
parent cc0e21b5d2
commit e47fa0bee9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 19 additions and 12 deletions

View File

@ -805,7 +805,12 @@ class SemanticsUpdateBuilder extends NativeFieldWrapperClass2 {
///
/// The returned object can be passed to [Window.updateSemantics] to actually
/// update the semantics retained by the system.
SemanticsUpdate build() native 'SemanticsUpdateBuilder_build';
SemanticsUpdate build() {
final SemanticsUpdate semanticsUpdate = SemanticsUpdate._();
_build(semanticsUpdate);
return semanticsUpdate;
}
void _build(SemanticsUpdate outSemanticsUpdate) native 'SemanticsUpdateBuilder_build';
}
/// An opaque object representing a batch of semantics updates.

View File

@ -20,11 +20,12 @@ IMPLEMENT_WRAPPERTYPEINFO(ui, SemanticsUpdate);
DART_BIND_ALL(SemanticsUpdate, FOR_EACH_BINDING)
fml::RefPtr<SemanticsUpdate> SemanticsUpdate::create(
SemanticsNodeUpdates nodes,
CustomAccessibilityActionUpdates actions) {
return fml::MakeRefCounted<SemanticsUpdate>(std::move(nodes),
std::move(actions));
void SemanticsUpdate::create(Dart_Handle semantics_update_handle,
SemanticsNodeUpdates nodes,
CustomAccessibilityActionUpdates actions) {
auto semantics_update = fml::MakeRefCounted<SemanticsUpdate>(
std::move(nodes), std::move(actions));
semantics_update->AssociateWithDartWrapper(semantics_update_handle);
}
SemanticsUpdate::SemanticsUpdate(SemanticsNodeUpdates nodes,

View File

@ -21,9 +21,9 @@ class SemanticsUpdate : public RefCountedDartWrappable<SemanticsUpdate> {
public:
~SemanticsUpdate() override;
static fml::RefPtr<SemanticsUpdate> create(
SemanticsNodeUpdates nodes,
CustomAccessibilityActionUpdates actions);
static void create(Dart_Handle semantics_update_handle,
SemanticsNodeUpdates nodes,
CustomAccessibilityActionUpdates actions);
SemanticsNodeUpdates takeNodes();

View File

@ -121,8 +121,9 @@ void SemanticsUpdateBuilder::updateCustomAction(int id,
actions_[id] = action;
}
fml::RefPtr<SemanticsUpdate> SemanticsUpdateBuilder::build() {
return SemanticsUpdate::create(std::move(nodes_), std::move(actions_));
void SemanticsUpdateBuilder::build(Dart_Handle semantics_update_handle) {
SemanticsUpdate::create(semantics_update_handle, std::move(nodes_),
std::move(actions_));
}
} // namespace flutter

View File

@ -58,7 +58,7 @@ class SemanticsUpdateBuilder
std::string hint,
int overrideId);
fml::RefPtr<SemanticsUpdate> build();
void build(Dart_Handle semantics_update_handle);
static void RegisterNatives(tonic::DartLibraryNatives* natives);