Skip to content
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] JObject is now composed of JReference instead of inheriting it. #982

Merged
merged 2 commits into from
Mar 8, 2024

Conversation

HosseinYousefi
Copy link
Member

This is the first PR to refactor JObject as specified in #981 broken down to ease the review process.

  • It's not ideal to always write .reference.pointer, so in the following PRs this will be changed, so instead the "primitive" methods require a JReference directly.
  • .fromRef constructor still gets a Pointer<Void>, this will change to get a JReference.
  • Other kinds of JReferences will be added.

Copy link

github-actions bot commented Mar 6, 2024

PR Health

Coverage ⚠️

Details
File Coverage
pkgs/jni/lib/jni.dart 💔 Not covered
pkgs/jni/lib/src/jarray.dart 💔 Not covered
pkgs/jni/lib/src/jobject.dart 💔 Not covered
pkgs/jni/lib/src/jreference.dart 💔 Not covered
pkgs/jni/lib/src/jvalues.dart 💔 Not covered
pkgs/jni/lib/src/lang/jboolean.dart 💔 Not covered
pkgs/jni/lib/src/lang/jbyte.dart 💔 Not covered
pkgs/jni/lib/src/lang/jcharacter.dart 💔 Not covered
pkgs/jni/lib/src/lang/jdouble.dart 💔 Not covered
pkgs/jni/lib/src/lang/jfloat.dart 💔 Not covered
pkgs/jni/lib/src/lang/jinteger.dart 💔 Not covered
pkgs/jni/lib/src/lang/jlong.dart 💔 Not covered
pkgs/jni/lib/src/lang/jnumber.dart 💔 Not covered
pkgs/jni/lib/src/lang/jshort.dart 💔 Not covered
pkgs/jni/lib/src/lang/jstring.dart 💔 Not covered
pkgs/jni/lib/src/nio/jbuffer.dart 💔 Not covered
pkgs/jni/lib/src/nio/jbyte_buffer.dart 💔 Not covered
pkgs/jni/lib/src/util/jiterator.dart 💔 Not covered
pkgs/jni/lib/src/util/jlist.dart 💔 Not covered
pkgs/jni/lib/src/util/jmap.dart 💔 Not covered
pkgs/jni/lib/src/util/jset.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/example/lib/main.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

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 ⚠️

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
pkgs/jni/lib/src/lang/jcharacter.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/ffi/example/main.dart
pkgs/ffigen/example/libclang-example/generated_bindings.dart
pkgs/ffigen/example/objective_c/avf_audio_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/example/swift/swift_api_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/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/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/_init.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/c_based/dart_bindings/com/fasterxml/jackson/core/_package.dart
pkgs/jnigen/test/jackson_core_test/third_party/dart_only/dart_bindings/com/fasterxml/jackson/core/_package.dart
pkgs/jnigen/tool/command_runner.dart

This check can be disabled by tagging the PR with skip-license-check

Package publish validation ✔️

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.8.0-wip WIP (no publish necessary)
package:jnigen 0.8.0-wip WIP (no publish necessary)
package:native_assets_builder 0.5.0 already published at pub.dev
package:native_assets_cli 0.4.3-wip WIP (no publish necessary)

Documentation at https://github.com/dart-lang/ecosystem/wiki/Publishing-automation.

@coveralls
Copy link

Coverage Status

coverage: 90.486% (-0.3%) from 90.766%
when pulling d53c7f2 on refactor-jreference-1
into 7eefc74 on main.

@dcharkes
Copy link
Collaborator

dcharkes commented Mar 7, 2024

@mosuem is the redness here on the Health bot still bmw-tech/dart_apitool#177 ?

Copy link
Collaborator

@dcharkes dcharkes left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My eyes! .pointer .pointer .pointer

I've reviewed jobject.dart and jreference.dart

Were there any other files meaningfully changed?

_finalizer.attach(this, _reference, detach: this);
}

sealed class JReference {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider abstract final. sealed promises exhaustiveness, which means adding things to the hierarchy later would be a breaking change.

https://dart.dev/language/modifier-reference

This potentially enables us to have multiple kinds of JReferences like JGlobalReference and JWeakGlobalReference or a global reference that is not managed by a native finalizer.

And it looks like we do want to introduce more types later.

@@ -1,5 +1,7 @@
## 0.8.0-wip

- **Breaking Change**: `JObject.reference` now returns a `JReference` instead of
`Pointer<Void>`.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe point to umbrella issue so that users know where to look for a rationale.

@HosseinYousefi
Copy link
Member Author

I will make the suggested changes in the following PR. No meaningful changes outside the two files you mentioned.

Thanks @dcharkes!

@HosseinYousefi HosseinYousefi merged commit 3555b62 into main Mar 8, 2024
29 of 32 checks passed
@HosseinYousefi HosseinYousefi deleted the refactor-jreference-1 branch March 8, 2024 09:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants