[Mono.Android] Fix generated code build warnings - #12835
Open
simonrozsival wants to merge 2 commits into
Open
simonrozsival wants to merge 2 commits into
simonrozsival wants to merge 2 commits into
Conversation
The bottom of this stack fixed every handwritten warning in
`Mono.Android.csproj` and trimmed `$(NoWarn)` down to the set that only
generated code still needed. This change fixes those at the source, in the
binding generator and `jnienv-gen`, and removes `$(NoWarn)` entirely along
with the `Mono.Android.csproj` entry in `$(_AllowProjectWarnings)`.
Roughly 1600 of the ~1690 warnings were the generator not emitting `new`
on a member that hides an inherited one (CS0108/CS0114), so `GenBase` now
models C# hiding rules:
* A class hides members of its base classes, an interface hides members
of its base interfaces. Base interfaces that are const sugar or
non-public are excluded, matching `BoundInterface.AddImplements()`.
* Methods hide only on a matching signature (an unnecessary `new` is
CS0109), while fields, properties and nested types hide by name alone.
* `new` is invalid on an `override` (CS0113) or an explicit interface
implementation (CS0106), so `IsShadow` is computed after the managed
override fixups.
* Only a class inherits `Java.Lang.Object`, so `ToString()`/`Equals()`/
`Clone()` on an interface must not be marked `new`.
* The generated callback infrastructure (`_members`, `cb_`, `n_`,
`__n_`, `Get*Handler`) hides the enclosing type's members when a type
is nested inside one of its own base types.
`Xamarin.SourceWriter.FieldWriter` also had to move `new` ahead of
`static`/`readonly`/`const`, since `public const new int` does not parse.
The remaining diagnostics are inherent to projecting the Java API surface
- deprecated Java types used by non-deprecated members, `finalize()`,
disagreeing nullness annotations, and base members that are hand-bound
rather than generated - so generated files now carry a documented, narrow
`#pragma warning disable` block instead. CS0109 is deliberately left
enabled so an over-applied `new` still fails the build.
Also in this change:
* `jnienv-gen` emits `#nullable enable` and a nullable `NewArray`
parameter, which fixes RS0041 in `JNIEnv.g.cs`. The resulting
nullability annotations are reflected in `PublicAPI.Shipped.txt`.
* The listener event helpers no longer emit unused weak implementor
fields (CS0169).
* `JavaCallableWrappers.targets` uses `--release` instead of
`-source`/`-target`, and lists itself in `Inputs` so the target is
invalidated when it changes.
* `PublicAPI.Unshipped.txt` for API-37.1 and API-37.2 was stale. The
duplicate entries in their `PublicAPI.Shipped.txt` were masking every
RS0016/RS0017 the analyzer would otherwise have reported.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Contributor
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Critical issues remain in Java release-version handling, interface property shadowing, and override modifier computation.
Get a fresh assessment by requesting another Copilot review.
Review effort: Lite
Findings: 3
Open (4)
What changed in this PR
Fixes generated Mono.Android build warnings by correcting member-hiding code generation, narrowing suppressions, updating JNI nullability, and improving Java callable-wrapper compilation.
Changes:
- Corrects generated
newmodifiers and modifier ordering. - Adds targeted generated-code warning suppressions.
- Updates JNI nullability and
javac --releasehandling. - Refreshes generator fixtures and API baselines.
- Removes obsolete project-level warning allowances.
| File | Summary |
|---|---|
src/Mono.Android/Mono.Android.csproj |
Removes obsolete warning suppressions. |
external/Java.Interop/tools/generator/SourceWriters/PeerMembersField.cs |
Updates generated member handling. |
external/Java.Interop/tools/generator/SourceWriters/InterfaceMemberAlternativeClass.cs |
Updates interface member generation. |
external/Java.Interop/tools/generator/SourceWriters/InterfaceInvokerMethod.cs |
Updates generated invoker methods. |
external/Java.Interop/tools/generator/SourceWriters/InterfaceConstsClass.cs |
Updates interface constant generation. |
external/Java.Interop/tools/generator/SourceWriters/BoundProperty.cs |
Updates property hiding logic. |
external/Java.Interop/tools/generator/SourceWriters/BoundMethodAbstractDeclaration.cs |
Updates abstract method modifiers. |
external/Java.Interop/tools/generator/SourceWriters/BoundMethod.cs |
Updates method hiding logic. |
external/Java.Interop/tools/generator/SourceWriters/BoundInterfacePropertyDeclaration.cs |
Updates interface property modifiers. |
external/Java.Interop/tools/generator/SourceWriters/BoundInterfaceMethodDeclaration.cs |
Updates interface method modifiers. |
external/Java.Interop/tools/generator/SourceWriters/BoundInterface.cs |
Updates interface generation. |
external/Java.Interop/tools/generator/SourceWriters/BoundFieldAsProperty.cs |
Updates field-backed property generation. |
external/Java.Interop/tools/generator/SourceWriters/BoundField.cs |
Updates field generation. |
external/Java.Interop/tools/generator/SourceWriters/BoundClass.cs |
Updates class generation. |
external/Java.Interop/tools/generator/SourceWriters/BoundAbstractProperty.cs |
Updates abstract property modifiers. |
external/Java.Interop/tools/generator/Java.Interop.Tools.Generator.ObjectModel/InterfaceGen.cs |
Updates interface warning output. |
external/Java.Interop/tools/generator/Java.Interop.Tools.Generator.ObjectModel/ClassGen.cs |
Updates class warning output. |
external/Java.Interop/tests/generator-Tests/Unit-Tests/CodeGeneratorExpectedResults/XAJavaInterop1/WriteInterfaceRedeclaredDefaultMethod.txt |
Refreshes expected output. |
external/Java.Interop/tests/generator-Tests/Unit-Tests/CodeGeneratorExpectedResults/JavaInterop1/WriteInterfaceRedeclaredDefaultMethod.txt |
Refreshes expected output. |
external/Java.Interop/tests/generator-Tests/Unit-Tests/CodeGeneratorExpectedResults/Common/WriteInterfaceRedeclaredDefaultMethod.txt |
Refreshes expected output. |
external/Java.Interop/tests/generator-Tests/expected.xaji/TestInterface/Test.ME.TestInterfaceImplementation.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/TestInterface/Test.ME.ITestInterface.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/TestInterface/Test.ME.IGenericPropertyInterface.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/TestInterface/Test.ME.IGenericInterface.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/TestInterface/Test.ME.GenericStringPropertyImplementation.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/TestInterface/Test.ME.GenericStringImplementation.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/TestInterface/Test.ME.GenericObjectPropertyImplementation.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/TestInterface/Test.ME.GenericImplementation.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/TestInterface/Java.Util.ICollection.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/TestInterface/Java.Lang.String.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/TestInterface/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/TestInterface/IInterfaceWithoutNamespace.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/TestInterface/ClassWithoutNamespace.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Streams/Java.Lang.Throwable.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Streams/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Streams/Java.IO.OutputStream.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Streams/Java.IO.IOException.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Streams/Java.IO.InputStream.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Streams/Java.IO.FilterOutputStream.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/StaticProperties/Xamarin.Test.SomeObject.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/StaticProperties/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/StaticMethods/Xamarin.Test.SomeObject.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/StaticMethods/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/StaticFields/Xamarin.Test.SomeObject.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/StaticFields/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/ParameterXPath/Xamarin.Test.A.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/ParameterXPath/Java.Util.IList.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/ParameterXPath/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/ParameterXPath/Java.Lang.Integer.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/NormalProperties/Xamarin.Test.SomeObject.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/NormalProperties/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/NormalMethods/Xamarin.Test.SomeObject.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/NormalMethods/Xamarin.Test.C.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/NormalMethods/Xamarin.Test.A.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/NormalMethods/Java.Lang.Throwable.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/NormalMethods/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/NormalMethods/Java.Lang.Integer.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/NormalMethods/Java.Lang.Class.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/NonStaticFields/Xamarin.Test.SomeObject.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/NonStaticFields/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/NestedTypes/Xamarin.Test.NotificationCompatBase.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/NestedTypes/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/java.util.List/Xamarin.Test.SomeObject.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/java.util.List/Java.Util.IList.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/java.util.List/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/java.lang.Object/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/java.lang.Enum/Java.Lang.State.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/java.lang.Enum/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/java.lang.Enum/Java.Lang.IComparable.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/java.lang.Enum/Java.Lang.Enum.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/InterfaceMethodsConflict/Xamarin.Test.SomeObject2.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/InterfaceMethodsConflict/Xamarin.Test.SomeObject.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/InterfaceMethodsConflict/Xamarin.Test.II2.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/InterfaceMethodsConflict/Xamarin.Test.II1.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/InterfaceMethodsConflict/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/GenericArguments/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/CSharpKeywords/Xamarin.Test.CSharpKeywords.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/CSharpKeywords/Java.Lang.Throwable.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/CSharpKeywords/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Core_Jar2Xml/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Core_Jar2Xml/Android.Views.View.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Core_Jar2Xml/Android.Text.SpannableStringInternal.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Core_Jar2Xml/Android.Text.SpannableString.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Core_Jar2Xml/Android.Text.ISpanned.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Core_Jar2Xml/Android.Text.ISpannable.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Core_ClassParse/Xamarin.Test.Invalidnames.InvalidNameMembers.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Core_ClassParse/Xamarin.Test.Invalidnames.In.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Core_ClassParse/Xamarin.Google.Composable.MyClass.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Core_ClassParse/Java.Lang.String.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Core_ClassParse/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Constructors/Xamarin.Test.SomeObject2.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Constructors/Xamarin.Test.SomeObject.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Constructors/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Arrays/Xamarin.Test.SomeObject.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Arrays/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Android.Graphics.Color/Xamarin.Test.SomeObject.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Android.Graphics.Color/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Adapters/Xamarin.Test.ISpinnerAdapter.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Adapters/Xamarin.Test.IAdapter.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Adapters/Xamarin.Test.GenericReturnObject.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Adapters/Xamarin.Test.AdapterView.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Adapters/Xamarin.Test.AbsSpinner.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/Adapters/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/AccessModifiers/Xamarin.Test.TestClass.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/AccessModifiers/Xamarin.Test.PublicFinalClass.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/AccessModifiers/Xamarin.Test.PublicClass.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/AccessModifiers/Xamarin.Test.IExtendedInterface.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/AccessModifiers/Xamarin.Test.ExtendPublicClass.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/AccessModifiers/Xamarin.Test.BasePublicClass.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.xaji/AccessModifiers/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/TestInterface/Test.ME.TestInterfaceImplementation.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/TestInterface/Test.ME.ITestInterface.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/TestInterface/Test.ME.IGenericPropertyInterface.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/TestInterface/Test.ME.IGenericInterface.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/TestInterface/Test.ME.GenericStringPropertyImplementation.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/TestInterface/Test.ME.GenericStringImplementation.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/TestInterface/Test.ME.GenericObjectPropertyImplementation.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/TestInterface/Test.ME.GenericImplementation.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/TestInterface/Java.Util.ICollection.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/TestInterface/Java.Lang.String.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/TestInterface/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/TestInterface/IInterfaceWithoutNamespace.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/TestInterface/ClassWithoutNamespace.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Streams/Java.Lang.Throwable.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Streams/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Streams/Java.IO.OutputStream.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Streams/Java.IO.IOException.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Streams/Java.IO.InputStream.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Streams/Java.IO.FilterOutputStream.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/StaticProperties/Xamarin.Test.SomeObject.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/StaticProperties/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/StaticMethods/Xamarin.Test.SomeObject.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/StaticMethods/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/StaticFields/Xamarin.Test.SomeObject.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/StaticFields/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/ParameterXPath/Xamarin.Test.A.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/ParameterXPath/Java.Util.IList.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/ParameterXPath/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/ParameterXPath/Java.Lang.Integer.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/NormalProperties/Xamarin.Test.SomeObject.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/NormalProperties/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/NormalMethods/Xamarin.Test.SomeObject.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/NormalMethods/Xamarin.Test.C.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/NormalMethods/Xamarin.Test.A.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/NormalMethods/Java.Lang.Throwable.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/NormalMethods/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/NormalMethods/Java.Lang.Integer.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/NormalMethods/Java.Lang.Class.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/NonStaticFields/Xamarin.Test.SomeObject.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/NonStaticFields/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/NestedTypes/Xamarin.Test.NotificationCompatBase.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/NestedTypes/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/java.util.List/Xamarin.Test.SomeObject.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/java.util.List/Java.Util.IList.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/java.util.List/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/java.lang.Object/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/java.lang.Enum/Java.Lang.State.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/java.lang.Enum/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/java.lang.Enum/Java.Lang.IComparable.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/java.lang.Enum/Java.Lang.Enum.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/InterfaceMethodsConflict/Xamarin.Test.SomeObject2.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/InterfaceMethodsConflict/Xamarin.Test.SomeObject.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/InterfaceMethodsConflict/Xamarin.Test.II2.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/InterfaceMethodsConflict/Xamarin.Test.II1.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/InterfaceMethodsConflict/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/GenericArguments/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/CSharpKeywords/Xamarin.Test.CSharpKeywords.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/CSharpKeywords/Java.Lang.Throwable.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/CSharpKeywords/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Core_Jar2Xml/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Core_Jar2Xml/Android.Views.View.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Core_Jar2Xml/Android.Text.SpannableStringInternal.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Core_Jar2Xml/Android.Text.SpannableString.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Core_Jar2Xml/Android.Text.ISpanned.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Core_Jar2Xml/Android.Text.ISpannable.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Core_ClassParse/Xamarin.Test.Invalidnames.InvalidNameMembers.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Core_ClassParse/Xamarin.Test.Invalidnames.In.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Core_ClassParse/Xamarin.Google.Composable.MyClass.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Core_ClassParse/Java.Lang.String.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Core_ClassParse/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Constructors/Xamarin.Test.SomeObject2.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Constructors/Xamarin.Test.SomeObject.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Constructors/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Arrays/Xamarin.Test.SomeObject.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Arrays/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Android.Graphics.Color/Xamarin.Test.SomeObject.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Android.Graphics.Color/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Adapters/Xamarin.Test.ISpinnerAdapter.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Adapters/Xamarin.Test.IAdapter.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Adapters/Xamarin.Test.GenericReturnObject.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Adapters/Xamarin.Test.AdapterView.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Adapters/Xamarin.Test.AbsSpinner.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Adapters/SupportFiles/AdapterView.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/Adapters/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/AccessModifiers/Xamarin.Test.TestClass.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/AccessModifiers/Xamarin.Test.PublicFinalClass.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/AccessModifiers/Xamarin.Test.PublicClass.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/AccessModifiers/Xamarin.Test.IExtendedInterface.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/AccessModifiers/Xamarin.Test.ExtendPublicClass.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/AccessModifiers/Xamarin.Test.BasePublicClass.cs |
Refreshes generated fixture. |
external/Java.Interop/tests/generator-Tests/expected.ji/AccessModifiers/Java.Lang.Object.cs |
Refreshes generated fixture. |
external/Java.Interop/src/Xamarin.SourceWriter/Models/FieldWriter.cs |
Corrects modifier ordering. |
Directory.Build.props |
Removes the Mono.Android warning allowance. |
build-tools/scripts/JavaCallableWrappers.targets |
Updates release handling and incremental inputs. |
build-tools/jnienv-gen/Generator.cs |
Emits nullable JNI signatures. |
The previous commit disabled 14 diagnostics at the top of every generated file. That is the same blanket suppression `<NoWarn>` provided, just moved somewhere less visible, and it leaked into every third-party binding built with this generator. This removes it. In its place the generator now works out which member provokes which diagnostic and, where the warning is genuinely unavoidable, emits a `#pragma warning disable` scoped to that one member for that one code. An unexpected occurrence of the same diagnostic anywhere else still breaks the build. Generator bugs fixed (these were causing warnings, not just hiding them): * `BoundAbstractProperty` never emitted `[Obsolete]`, so an abstract declaration of a deprecated Java property silently lost its deprecation while the invoker/implementor overrides generated for it kept theirs. That mismatch is what produced every CS0809. * `BoundPropertyStringVariant` had the same omission, so the `string` convenience property generated alongside a deprecated `ICharSequence` property lost its deprecation and then reported CS0618 for calling it. * `MethodAsyncWrapper`/`MethodExtensionAsyncWrapper` did not carry the deprecation of the synchronous method they invoke. * `GenBase.RequiresNew (Property, ...)` applied the `System.Object` member check to interfaces, which do not inherit `System.Object` (CS0109). * `GenBase.HidesInheritedMember` ignored generic arity, so methods that differ only in type-parameter count compared equal. * `BoundMethodAbstractDeclaration` computed `IsShadow` from `Name` rather than `AdjustedName`, so the hiding check used a name the generator does not emit, and computed it before `IsOverride` was known. New infrastructure: * `Xamarin.SourceWriter` gains `ISuppressWarnings`, implemented by the method, property, field and type writers, which brackets a member with `#pragma warning disable`/`restore` plus a comment explaining why. * `Method.OverriddenBaseMethod` and `GenBase.FindOverriddenMethod` record the base member an override resolves to, so the generator can compare deprecation and nullability against it. * `SourceWriterExtensions.EmitsObsoleteAttribute` factors out the `[Obsolete]`-versus-`[ObsoletedOSPlatform]` decision so the suppression logic and the attribute logic cannot drift apart. Remaining suppressions are emitted only where the generator has positively determined the diagnostic applies: * CS0465 on a bound `Finalize ()`, which Java permits and C# reserves. * CS0618/CS0672/CS0809 where a member's signature, base type or overridden member is deprecated and the member itself is not, or vice versa. * CS8764-CS8767 where the nullness annotation on a return type or parameter differs from the member being overridden or implemented. Java's nullness annotations are advisory, so only the Java author can reconcile these. Warnings from `Mono.Android.csproj` at API 37 drop from 684 to 88. The remainder are CS0108/CS0114 hiding cases and body-level nullability, which need further generator work, so the `_AllowProjectWarnings` entry stays until they are resolved, keeping the warnings visible rather than silenced. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


Stacked on #12809 (
simonrozsival-fix-mono-android-warnings), which fixed every handwritten C# warning insrc/Mono.Android/Mono.Android.csproj. This PR goes after the generated code.Approach
Warnings in generated bindings are fixed in the generator, not suppressed. Where a warning is a genuine consequence of faithfully projecting a Java API into C#, the generator determines which member provokes which diagnostic and emits a
#pragma warning disablescoped to that one member, with a comment saying why. An unexpected occurrence of the same diagnostic anywhere else still breaks the build.Warnings attributable to
Mono.Android.csprojat API 37 go from 684 to 88.Generator bugs fixed
These were producing warnings, not merely hiding them:
BoundAbstractPropertynever emitted[Obsolete]. An abstract declaration of a deprecated Java property silently lost its deprecation, while the invoker/implementor overrides generated for it kept theirs. That mismatch produced every CS0809.BoundPropertyStringVarianthad the same omission. Thestringconvenience property generated alongside a deprecatedICharSequenceproperty lost its deprecation, then reported CS0618 for calling it.MethodAsyncWrapper/MethodExtensionAsyncWrapperdid not carry the deprecation of the synchronous method they invoke.GenBase.RequiresNew (Property, ...)applied theSystem.Objectmember check to interfaces, which do not inheritSystem.Object(CS0109).GenBase.HidesInheritedMemberignored generic arity, so methods differing only in type-parameter count compared equal.BoundMethodAbstractDeclarationcomputedIsShadowfromNamerather thanAdjustedName— a name the generator does not emit — and computed it beforeIsOverridewas known.Plus, from the earlier commit on this branch: ~1600 CS0108/CS0114 fixed by correcting
new-modifier detection acrossGenBaseand 14 source writers; CS0169 on unused weak-implementor fields; RS0041 fixed by makingbuild-tools/jnienv-gennullable-aware and regeneratingJNIEnv.g.cs; and the javac-source/-targetwarning replaced with--release.New infrastructure
Xamarin.SourceWritergainsISuppressWarnings, implemented by the method, property, field and type writers, which brackets a member with#pragma warning disable/restoreand an explanatory comment.Method.OverriddenBaseMethodandGenBase.FindOverriddenMethodrecord the base member an override resolves to, so the generator can compare deprecation and nullability against it. Java allows covariant returns, so the match is on the parameter portion of the JNI signature.SourceWriterExtensions.EmitsObsoleteAttributefactors out the[Obsolete]-versus-[ObsoletedOSPlatform]decision, so the suppression logic and the attribute logic cannot drift apart.Suppressions actually emitted
Only where the generator has positively determined the diagnostic applies to that member:
Finalize (), which Java permits and C# reservesJava's
@Nullable/@NonNullare documentation rather than part of the type system, so these disagreements can only be resolved by the Java author.Also in this PR
PublicAPI.Unshipped.txtfor API-37.1 and API-37.2 was stale since the API-37.1 binding work, and two duplicate entries (VP9Profile2HDR,VP9Profile3HDR) inPublicAPI.Shipped.txtwere triggering RS0025, which makes the analyzer bail out and masks every RS0016/RS0017 it would otherwise report. Deduplicating revealed 418 real errors at 37.1 and 2029 at 37.2; all are now recorded.Validation
_AndroidTreatWarningsAsErrors=true_AndroidTreatWarningsAsErrors=true_AndroidTreatWarningsAsErrors=trueMono.Android.csprojgenerator-TestsNot yet fixed
88 warnings remain and need further generator work, so the
_AllowProjectWarningsentry forMono.Android.csprojstays for now — the warnings remain visible in build output rather than silenced by<NoWarn>. The main<NoWarn>list is gone; only the Javadoc-only documentation filter remains.string/ICharSequenceconvenience overloads are invisible to the hiding scan (StringBuffer.Append(string?),ArrayAdapter.GetAutofillOptions(),MockPackageManager.*); and genuinely hand-bound base members the generator cannot see (CellInfo*.CellIdentity/CellSignalStrength,ICompletionStage.Handle). The latter group wants amanagedOverride="new"metadata value sosrc/Mono.Android/metadatacan declare them precisely.