Skip to content
This repository was archived by the owner on Aug 27, 2026. It is now read-only.
This repository was archived by the owner on Aug 27, 2026. It is now read-only.

Generated files (e.g, Java.Interop.__TypeRegistrations.cs) should mark themselves as auto-generated #1051

Description

@Youssef1313

Android application type

Classic Xamarin.Android (MonoAndroid12.0, etc.), Android for .NET (net6.0-android, etc.)

Affected platform version

MonoAndroid13.0 and net6.0-android

Description

With a project where CA1812 and CA are enforced as errors, the following is observed:

##[error]src\Uno.UI.BindingHelper.Android\obj\Release\net6.0-android\generated\src\Java.Interop.__TypeRegistrations.cs(16,6): Error CA1825: Avoid unnecessary zero-length array allocations.  Use Array.Empty<string>() instead.
C:\a\1\s\src\Uno.UI.BindingHelper.Android\obj\Release\net6.0-android\generated\src\Java.Interop.__TypeRegistrations.cs(16,6): error CA1825: Avoid unnecessary zero-length array allocations.  Use Array.Empty<string>() instead. [C:\a\1\s\src\Uno.UI.BindingHelper.Android\Uno.UI.BindingHelper.Android.net6.csproj]
##[error]src\Uno.UI.BindingHelper.Android\obj\Release\net6.0-android\generated\src\Java.Interop.__TypeRegistrations.cs(18,6): Error CA1825: Avoid unnecessary zero-length array allocations.  Use Array.Empty<Converter<string, Type>>() instead.
C:\a\1\s\src\Uno.UI.BindingHelper.Android\obj\Release\net6.0-android\generated\src\Java.Interop.__TypeRegistrations.cs(18,6): error CA1825: Avoid unnecessary zero-length array allocations.  Use Array.Empty<Converter<string, Type>>() instead. [C:\a\1\s\src\Uno.UI.BindingHelper.Android\Uno.UI.BindingHelper.Android.net6.csproj]
##[error]src\Uno.UI.BindingHelper.Android\obj\Release\net6.0-android\generated\src\Uno.UI.UnoRecyclerView.cs(168,25): Error CA1812: 'UnoRecyclerViewInvoker' is an internal class that is apparently never instantiated. If so, remove the code from the assembly. If this class is intended to contain only static members, make it 'static' (Module in Visual Basic).
C:\a\1\s\src\Uno.UI.BindingHelper.Android\obj\Release\net6.0-android\generated\src\Uno.UI.UnoRecyclerView.cs(168,25): error CA1812: 'UnoRecyclerViewInvoker' is an internal class that is apparently never instantiated. If so, remove the code from the assembly. If this class is intended to contain only static members, make it 'static' (Module in Visual Basic). [C:\a\1\s\src\Uno.UI.BindingHelper.Android\Uno.UI.BindingHelper.Android.net6.csproj]
##[error]src\Uno.UI.BindingHelper.Android\obj\Release\net6.0-android\generated\src\Uno.UI.UnoViewGroup.cs(829,25): Error CA1812: 'UnoViewGroupInvoker' is an internal class that is apparently never instantiated. If so, remove the code from the assembly. If this class is intended to contain only static members, make it 'static' (Module in Visual Basic).
C:\a\1\s\src\Uno.UI.BindingHelper.Android\obj\Release\net6.0-android\generated\src\Uno.UI.UnoViewGroup.cs(829,25): error CA1812: 'UnoViewGroupInvoker' is an internal class that is apparently never instantiated. If so, remove the code from the assembly. If this class is intended to contain only static members, make it 'static' (Module in Visual Basic). [C:\a\1\s\src\Uno.UI.BindingHelper.Android\Uno.UI.BindingHelper.Android.net6.csproj]
  1. These files should have // <auto-generated/> comment at the top so that Roslyn marks them as auto-generated and skips most analyzers for them.
  2. The above violations should be fixed if possible.

Steps to Reproduce

Did you find any workaround?

No response

Relevant log output

No response

Activity

  1. transferred this issue fromdotnet/androidon Oct 15, 2022
  2. added this to the 8.0.0 milestone on Oct 15, 2022
  3. added
    enhancementProposed change to current functionality
    generatorIssues binding a Java library (generator, class-parse, etc.)
    and removed on Oct 15, 2022
  4. jpobst commented on Oct 18, 2022

    @jpobst
    Contributor

    Some examples of what a regular console .NET 6 program generates:

    • .NETCoreApp,Version=v6.0.AssemblyAttributes.cs:
    // <autogenerated />
    using System;
    ...
    • {application}.AssemblyInfo.cs:
    //------------------------------------------------------------------------------
    // <auto-generated>
    //     This code was generated by a tool.
    //     Runtime Version:4.0.30319.42000
    //
    //     Changes to this file may cause incorrect behavior and will be lost if
    //     the code is regenerated.
    // </auto-generated>
    //------------------------------------------------------------------------------
    using System;
    ...

    Using the longer version could also help with issues like dotnet/android#7449.

  5. jpobst commented on Oct 18, 2022

    @jpobst
    Contributor

    Can you post a Java.Interop.__TypeRegistrations.cs that demonstrates the CA1825 warning? It looks like all the arrays should have content in them, unless your binding library doesn't bind any types or something? Or maybe all the types it binds are static?

    Example:

    		public static void RegisterPackages ()
    		{
    #if MONODROID_TIMING
    			var start = DateTime.Now;
    			Android.Util.Log.Info ("MonoDroid-Timing", "RegisterPackages start: " + (start - new DateTime (1970, 1, 1)).TotalMilliseconds);
    #endif // def MONODROID_TIMING
    			Java.Interop.TypeManager.RegisterPackages (
    					new string[]{
    						"com/google/common/flogger",
    						"com/google/common/flogger/backend",
    						"com/google/common/flogger/context",
    						"com/google/common/flogger/parameter",
    						"com/google/common/flogger/parser",
    						"com/google/common/flogger/util",
    					},
    					new Converter<string, Type?>[]{
    						lookup_com_google_common_flogger_package,
    						lookup_com_google_common_flogger_backend_package,
    						lookup_com_google_common_flogger_context_package,
    						lookup_com_google_common_flogger_parameter_package,
    						lookup_com_google_common_flogger_parser_package,
    						lookup_com_google_common_flogger_util_package,
    					});
    #if MONODROID_TIMING
    			var end = DateTime.Now;
    			Android.Util.Log.Info ("MonoDroid-Timing", "RegisterPackages time: " + (end - new DateTime (1970, 1, 1)).TotalMilliseconds + " [elapsed: " + (end - start).TotalMilliseconds + " ms]");
    #endif // def MONODROID_TIMING
    		}
  6. Youssef1313 commented on Oct 18, 2022

    @Youssef1313
    MemberAuthor

    @jpobst This is what I'm seeing:

    using System;
    using System.Collections.Generic;
    using Android.Runtime;
    
    namespace Java.Interop {
    
    	partial class __TypeRegistrations {
    
    		public static void RegisterPackages ()
    		{
    #if MONODROID_TIMING
    			var start = DateTime.Now;
    			Android.Util.Log.Info ("MonoDroid-Timing", "RegisterPackages start: " + (start - new DateTime (1970, 1, 1)).TotalMilliseconds);
    #endif // def MONODROID_TIMING
    			Java.Interop.TypeManager.RegisterPackages (
    					new string[]{
    					},
    					new Converter<string, Type>[]{
    					});
    #if MONODROID_TIMING
    			var end = DateTime.Now;
    			Android.Util.Log.Info ("MonoDroid-Timing", "RegisterPackages time: " + (end - new DateTime (1970, 1, 1)).TotalMilliseconds + " [elapsed: " + (end - start).TotalMilliseconds + " ms]");
    #endif // def MONODROID_TIMING
    		}
    
    #if NET5_0_OR_GREATER
    		[System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage ("Trimming", "IL2057")]
    #endif
    		static Type Lookup (string[] mappings, string javaType)
    		{
    			var managedType = Java.Interop.TypeManager.LookupTypeMapping (mappings, javaType);
    			if (managedType == null)
    				return null;
    			return Type.GetType (managedType);
    		}
    	}
    }
  7. locked and limited conversation to collaborators on Apr 12, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

enhancementProposed change to current functionalitygeneratorIssues binding a Java library (generator, class-parse, etc.)

Type

No type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions