Instead of having a code-gened Dart function registry for each ObjCBlock type, there's now a single registry that lives in package:objective_c
Added a dispose_port field to the captured variables section of the ObjCBlock struct. This is set to the send port of a RawReceivePort that deletes functions from the registry.
Added a native disposeObjCBlockWithClosure function that sends the block ID to the dispose_port. The dispose_helper field of the block is set to this function.
Had to split objective_c_runtime.h into objective_c_runtime_types.h and objective_c_runtime_functions.h to resolve some build issues.
Now that there's native code in package:objective_c, the tests have to build it, so I added test/setup.dart. The ffigen test setup script also has to call this, since ffigen's ObjC tests need it. These tests also need to DynamicLibrary.open that dylib.
Details
| Package | Changed Files |
| :--- | :--- |
Changes to files need to be [accounted for](https://github.com/dart-lang/ecosystem/wiki/Changelog) in their respective changelogs.
Coverage :warning:
Details
| File | Coverage |
| :--- | :--- |
|pkgs/ffigen/lib/src/code_generator/objc_block.dart| :broken_heart: Not covered |
|pkgs/ffigen/lib/src/code_generator/objc_built_in_functions.dart| :broken_heart: Not covered |
|pkgs/objective_c/example/lib/main.dart| :broken_heart: Not covered |
|pkgs/objective_c/lib/objective_c.dart| :broken_heart: Not covered |
|pkgs/objective_c/lib/src/c_bindings_generated.dart| :broken_heart: Not covered |
|pkgs/objective_c/lib/src/internal.dart| :broken_heart: Not covered |
|pkgs/objective_c/lib/src/ns_data.dart| :broken_heart: Not covered |
|pkgs/objective_c/lib/src/objective_c_bindings_generated.dart| :broken_heart: Not covered |
This check for [test coverage](https://github.com/dart-lang/ecosystem/wiki/Test-Coverage) is informational (issues shown here will not fail the PR).
This check can be disabled by tagging the PR with `skip-coverage-check`.
License Headers :heavy_check_mark:
Details
```
// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
```
| Files |
| :--- |
| _no missing headers_ |
All source files should start with a [license header](https://github.com/dart-lang/ecosystem/wiki/License-Header).
Unrelated files missing license headers
| Files |
| :--- |
|pkgs/ffi/example/main.dart|
|pkgs/ffigen/example/libclang-example/generated_bindings.dart|
|pkgs/ffigen/example/shared_bindings/generate.dart|
|pkgs/ffigen/example/shared_bindings/lib/generated/a_gen.dart|
|pkgs/ffigen/example/shared_bindings/lib/generated/a_shared_b_gen.dart|
|pkgs/ffigen/example/shared_bindings/lib/generated/base_gen.dart|
|pkgs/ffigen/example/simple/generated_bindings.dart|
|pkgs/ffigen/lib/src/config_provider/config_spec.dart|
|pkgs/ffigen/lib/src/header_parser/clang_bindings/clang_bindings.dart|
|pkgs/ffigen/test/collision_tests/expected_bindings/_expected_decl_decl_collision_bindings.dart|
|pkgs/ffigen/test/collision_tests/expected_bindings/_expected_decl_symbol_address_collision_bindings.dart|
|pkgs/ffigen/test/collision_tests/expected_bindings/_expected_decl_type_name_collision_bindings.dart|
|pkgs/ffigen/test/collision_tests/expected_bindings/_expected_reserved_keyword_collision_bindings.dart|
|pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_comment_markup_bindings.dart|
|pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_dart_handle_bindings.dart|
|pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_forward_decl_bindings.dart|
|pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_functions_bindings.dart|
|pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_imported_types_bindings.dart|
|pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_native_func_typedef_bindings.dart|
|pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_opaque_dependencies_bindings.dart|
|pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_packed_structs_bindings.dart|
|pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_regress_384_bindings.dart|
|pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_struct_fptr_fields_bindings.dart|
|pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_typedef_bindings.dart|
|pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_unions_bindings.dart|
|pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_varargs_bindings.dart|
|pkgs/ffigen/test/large_integration_tests/_expected_cjson_bindings.dart|
|pkgs/ffigen/test/large_integration_tests/_expected_libclang_bindings.dart|
|pkgs/ffigen/test/large_integration_tests/_expected_sqlite_bindings.dart|
|pkgs/ffigen/test/native_test/_expected_native_test_bindings.dart|
|pkgs/jni/lib/src/lang/jcharacter.dart|
|pkgs/jni/lib/src/third_party/generated_bindings.dart|
|pkgs/jni/lib/src/third_party/global_env_extensions.dart|
|pkgs/jni/lib/src/third_party/jni_bindings_generated.dart|
|pkgs/jnigen/android_test_runner/lib/main.dart|
|pkgs/jnigen/example/in_app_java/lib/android_utils.dart|
|pkgs/jnigen/example/kotlin_plugin/example/lib/main.dart|
|pkgs/jnigen/example/kotlin_plugin/lib/kotlin_bindings.dart|
|pkgs/jnigen/example/kotlin_plugin/lib/kotlin_plugin.dart|
|pkgs/jnigen/example/pdfbox_plugin/lib/pdfbox_plugin.dart|
|pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/pdmodel/PDDocument.dart|
|pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/pdmodel/PDDocumentInformation.dart|
|pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/pdmodel/_package.dart|
|pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/text/PDFTextStripper.dart|
|pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/text/_package.dart|
|pkgs/jnigen/lib/src/bindings/descriptor.dart|
|pkgs/jnigen/lib/src/elements/elements.g.dart|
|pkgs/jnigen/test/jackson_core_test/third_party/bindings/com/fasterxml/jackson/core/_package.dart|
|pkgs/jnigen/tool/command_runner.dart|
Package publish validation :heavy_check_mark:
Details
| Package | Version | Status |
| :--- | ---: | :--- |
| package:ffi | 2.1.2 | already published at pub.dev |
| package:ffigen | 12.0.0-wip | WIP (no publish necessary) |
| package:jni | 0.9.0-wip | WIP (no publish necessary) |
| package:jnigen | 0.9.0-wip | WIP (no publish necessary) |
| package:native_assets_builder | 0.6.1 | already published at pub.dev |
| package:native_assets_cli | 0.5.4 | already published at pub.dev |
| package:native_toolchain_c | 0.4.1 | already published at pub.dev |
| package:objective_c | 0.0.1-wip | WIP (no publish necessary) |
Documentation at https://github.com/dart-lang/ecosystem/wiki/Publishing-automation.
coverage: 91.319% (+0.01%) from 91.309%
when pulling 37fc754814702cc4e191f774b24cea289027e748 on blockdelete
into 042af360a7e0d3ee01b6c7b09507721d2a90cbdf on main.
Changes:
dispose_port
field to the captured variables section of theObjCBlock
struct. This is set to the send port of aRawReceivePort
that deletes functions from the registry.disposeObjCBlockWithClosure
function that sends the block ID to thedispose_port
. Thedispose_helper
field of the block is set to this function.DynamicLibrary.open
that dylib.NSData.dataWithBytes_length_
to fix the tests (see https://github.com/dart-lang/native/issues/1107)Fixes #204