Skip to content

[Mono.Android] Mark JavaFinalize() as [Obsolete]#11424

Open
jonathanpeppers wants to merge 2 commits into
mainfrom
jonathanpeppers/obsolete-java-finalize
Open

[Mono.Android] Mark JavaFinalize() as [Obsolete]#11424
jonathanpeppers wants to merge 2 commits into
mainfrom
jonathanpeppers/obsolete-java-finalize

Conversation

@jonathanpeppers
Copy link
Copy Markdown
Member

Java's Object.finalize() has been deprecated since JDK 9 and is marked for removal. The correct pattern for cleanup in .NET Android is to override Dispose(bool disposing) or use the C# destructor, not JavaFinalize().

Overriding JavaFinalize() can also cause issues where the Java GC calls finalize() on a Java wrapper even when C# still holds a live reference to the managed object, leading to ObjectDisposedException (see #2072).

Changes

  • Mark Object.JavaFinalize() as [Obsolete] via binding metadata to guide users toward the correct disposal patterns.

Companion PR

Closes #10192

Java's Object.finalize() has been deprecated since JDK 9 and is marked
for removal. The correct pattern for cleanup in .NET Android is to
override Dispose(bool disposing) or use the C# destructor, not
JavaFinalize().

Overriding JavaFinalize() can also cause issues where the Java GC calls
finalize() on a Java wrapper even when C# still holds a live reference
to the managed object, leading to ObjectDisposedException (see #2072).

Mark JavaFinalize() as [Obsolete] via binding metadata to guide users
toward the correct disposal patterns.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings May 20, 2026 16:20
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Marks the managed binding for java.lang.Object.finalize() (JavaFinalize()) as deprecated so consumers are guided away from overriding Java finalization and toward the recommended .NET Android cleanup patterns.

Changes:

  • Add a deprecation message for java.lang.Object.finalize() in binding metadata (intended to surface as [Obsolete] on JavaFinalize()).

Comment thread src/Mono.Android/metadata Outdated
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
@jonathanpeppers
Copy link
Copy Markdown
Member Author

Let's wait to merge this when this lands in dotnet/maui/net11.0 branch:

If we merge now, the MAUI integration lane will fail.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Setup copilot development environment

3 participants