Skip to content

Java Callable Wrappers should be emitted & built as part of Build #4278

Open
@jonpryor

Description

@jonpryor

Context: dotnet/android-libraries#56

Currently, binding projects only emit binding assemblies. They don't do any "sanity checking" to ensure that the binding assembly is usable.

Enter dotnet/android-libraries#56: the Xamarin.Google.Android.Material 1.1.0-rc1 NuGet package contains a bug, as it binds the com.google.android.material.button.MaterialButton.OnPressedChangeListener interface as Google.Android.Material.Button.MaterialButton/IOnPressedChangeListener. However, MaterialButton.OnPressedChangeListener is not public; it's (presumably?) package-private, and as such it cannot be used from outside of its containing package.

The result is that if an app tries to use the Xamarin.Google.Android.Material NuGet package, it will fail to build:

javac error JAVAC0000:  error: OnPressedChangeListener is not public in MaterialButton; cannot be accessed from outside package

This is in part a generator bug: dotnet/java-interop#572

That said, there is also a "defense in depth" argument to be made here: the binding built, but it should never have built in the first place!

To ensure that binding projects are actually usable, the Build target for binding projects should also:

  1. Generate the Java Callable Wrappers for the binding assembly, and
  2. Build the Java Callable Wrappers.

This would avoid the need to create a new App project which references the Binding project to ensure that it works, which may result in "false positives" (e.g. if the App test project is built in Release config, the types which emit the "invalid" Java Callable Wrappers may never be emitted, resulting in a "good App" but a "bad binding assembly").

Steps to Reproduce

Expected Behavior

Actual Behavior

Version Information

Log File

Metadata

Metadata

Assignees

Labels

Area: BindingsIssues in Java Library Binding projects.enhancementProposed change to current functionality.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions