-
Notifications
You must be signed in to change notification settings - Fork 40
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[jnigen] Implement multiple interfaces #1584
base: main
Are you sure you want to change the base?
Conversation
PR Health
Coverage
|
File | Coverage |
---|---|
pkgs/jni/example/lib/main.dart | 💔 Not covered |
pkgs/jni/lib/jni.dart | 💔 Not covered |
pkgs/jni/lib/src/accessors.dart | 💔 Not covered |
pkgs/jni/lib/src/jimplementer.dart | 💔 Not covered |
pkgs/jni/lib/src/jni.dart | 💔 Not covered |
pkgs/jni/lib/src/third_party/jni_bindings_generated.dart | 💔 Not covered |
pkgs/jnigen/example/in_app_java/lib/android_utils.dart | 💔 Not covered |
pkgs/jnigen/example/kotlin_plugin/lib/kotlin_bindings.dart | 💔 Not covered |
pkgs/jnigen/example/notification_plugin/lib/notifications.dart | 💔 Not covered |
pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/pdmodel/PDDocument.dart | 💔 Not covered |
pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/pdmodel/PDDocumentInformation.dart | 💔 Not covered |
pkgs/jnigen/example/pdfbox_plugin/lib/src/third_party/org/apache/pdfbox/text/PDFTextStripper.dart | 💔 Not covered |
pkgs/jnigen/lib/src/bindings/dart_generator.dart | 💔 Not covered |
pkgs/jnigen/lib/src/bindings/renamer.dart | 💔 Not covered |
This check for 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 ⚠️
// 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 |
---|
pkgs/jni/lib/src/third_party/jni_bindings_generated.dart |
pkgs/jnigen/example/in_app_java/lib/android_utils.dart |
pkgs/jnigen/example/kotlin_plugin/lib/kotlin_bindings.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/text/PDFTextStripper.dart |
All source files should start with a license header.
Unrelated files missing license headers
Files |
---|
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/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_enum_int_mimic_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/jnigen/android_test_runner/lib/main.dart |
pkgs/jnigen/example/kotlin_plugin/example/lib/main.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/_package.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 |
pkgs/native_assets_builder/test_data/native_dynamic_linking/bin/native_dynamic_linking.dart |
pkgs/swift2objc/lib/src/config.dart |
pkgs/swift2objc/lib/src/generate_wrapper.dart |
pkgs/swift2objc/lib/src/generator/_core/utils.dart |
pkgs/swift2objc/lib/src/generator/generator.dart |
pkgs/swift2objc/lib/src/generator/generators/class_generator.dart |
pkgs/swift2objc/lib/src/parser/parsers/declaration_parsers/parse_initializer_declaration.dart |
pkgs/swift2objc/lib/src/parser/parsers/declaration_parsers/parse_property_declaration.dart |
pkgs/swift2objc/lib/src/transformer/_core/unique_namer.dart |
pkgs/swift2objc/lib/src/transformer/_core/utils.dart |
pkgs/swift2objc/lib/src/transformer/transformers/transform_property.dart |
This check can be disabled by tagging the PR with skip-license-check
.
Package publish validation ✔️
Package | Version | Status |
---|---|---|
package:ffi | 2.1.3 | already published at pub.dev |
package:ffigen | 15.0.0-wip | WIP (no publish necessary) |
package:jni | 0.12.0-wip | WIP (no publish necessary) |
package:jnigen | 0.12.0-wip | WIP (no publish necessary) |
package:native_assets_cli | 0.8.1-wip | WIP (no publish necessary) |
package:objective_c | 2.1.0-wip | WIP (no publish necessary) |
package:swift2objc | 0.0.1-wip | WIP (no publish necessary) |
package:swiftgen | 0.0.1-wip | WIP (no publish necessary) |
Documentation at https://github.com/dart-lang/ecosystem/wiki/Publishing-automation.
@@ -59,7 +59,8 @@ extension JniResultMethods on JniResult { | |||
} | |||
|
|||
JReference get reference { | |||
return JGlobalReference(objectPointer); | |||
final pointer = objectPointer; | |||
return pointer == nullptr ? jNullReference : JGlobalReference(pointer); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not related to this PR, but have you considered using Dart's null
instead of jNullReference
? That's what the ObjC bindings do. It means you get Dart's null safety for free.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Every Java object can be null, so it creates a lot of question mark noise. Could be an option though.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh wait you mean only for the reference type? Yeah I could do that!
Close #1579. Close #1021.
Feel free to suggest better names for the classes and methods!
For the full guide, read
pkgs/jnigen/docs/interface_implementation.md
.JImplementer
which is basically a proxy object builder. You add the implementations to it usingFoo.implementIn(implementer, implementation)
, and once you're done, you can create an instance viaimplementer.implement()
. Implementing a single interface is still done viaFoo.implement(impl)
.PortProxy
class – now calledPortProxyBuilder
– which now has a map of interfaces to the pair of function pointer and port. (function pointer is used to invoke when on the same thread, port is used when on different threads. Once the Java object is GC'd, a cleanup message is sent to all the ports to be closed.Foo
to be$Foo
instead of$FooImpl
as suggested by @lrhn.Foo
is called$Foo
instead of$FooImpl
they can theoretically collide with another interface calledFooType
, where the type class ofFoo
is$FooType
, and the implementation class ofFooType
is also$FooType
. If we make the type class to beFoo$Type
instead, it can collide with an inner class ofFoo
namedType
. So maybe it should be something like$Foo$Type
.