Skip to content

Commit

Permalink
[LayoutBindings] LayoutBindings: 'PreserveAttribute' is obsolete warn…
Browse files Browse the repository at this point in the history
…ings

Fixes #7480

* Remove the use of `PreserveAttribute` as we no longer support Xamarin
  Classic in main.
* Add #pragma and code comments to fix certain CS* warnings which are
  emitted by the C# compiler.
* Ignore a bunch of other warnings in the unit test.
  • Loading branch information
dellis1972 committed Nov 27, 2023
1 parent 8a5730a commit c9eb732
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,6 @@ public sealed class State
// generating code for the partial Activity class
public string BindingClassName { get; }

public bool LinkerPreserveConstructors { get; set; }

public List<string> ExtraImportNamespaces { get; } = new List <string> ();

public string AndroidFragmentType { get; }
Expand Down Expand Up @@ -155,20 +153,18 @@ protected virtual void WriteOnSetContentViewPartials (State state)
WritePartialClassOnSetContentViewPartial_Int (state);
}

public State BeginBindingFile (StreamWriter writer, string layoutResourceId, string classNamespace, string className, string androidFragmentType, bool linkerPreserveConstructors = true)
public State BeginBindingFile (StreamWriter writer, string layoutResourceId, string classNamespace, string className, string androidFragmentType)
{
var state = new State (writer, className, !String.IsNullOrWhiteSpace (classNamespace), androidFragmentType) {
LinkerPreserveConstructors = linkerPreserveConstructors
};
var state = new State (writer, className, !String.IsNullOrWhiteSpace (classNamespace), androidFragmentType);
BeginBindingFile (state, layoutResourceId, classNamespace, className);
WriteBindingConstructors (state, className, state.LinkerPreserveConstructors);
WriteBindingConstructors (state, className);
return state;
}

protected abstract void BeginBindingFile (State state, string layoutResourceId, string classNamespace, string className);
public abstract void EndBindingFile (State state);

protected abstract void WriteBindingConstructors (State state, string className, bool linkerPreserve);
protected abstract void WriteBindingConstructors (State state, string className);
protected abstract void WriteBindingViewProperty (State state, LayoutWidget widget, string resourceNamespace);
protected abstract void WriteBindingFragmentProperty (State state, LayoutWidget widget, string resourceNamespace);
protected abstract void WriteBindingMixedProperty (State state, LayoutWidget widget, string resourceNamespace);
Expand Down Expand Up @@ -287,10 +283,11 @@ protected void WriteBindingPropertyBackingField (State state, LayoutWidget widge
WriteResetLocation (state);
}

public void WriteComment (State state, string text)
public void WriteComment (State state, params string [] text)
{
EnsureArgument (state, nameof (state));
WriteLineIndent (state, $"{LineCommentString}{text}");
foreach (string line in text)
WriteLineIndent (state, $"{LineCommentString}{line}");
}

public void WriteComment (State state, ICollection<string> lines)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,8 +157,35 @@ void WriteClassClose (State state)
WriteLineIndent (state, "}");
}

void WriteDisableWarnings (State state)
{
state.WriteLine ("#pragma warning disable CS0618");
state.WriteLine ("#pragma warning disable CS8981");
state.WriteLine ("#pragma warning disable CS1591");
}

void WriteEnableWarnings (State state)
{
state.WriteLine ("#pragma warning restore CS1591");
state.WriteLine ("#pragma warning restore CS8981");
state.WriteLine ("#pragma warning restore CS0618");
}

void WriteAutoGeneratedComment (State state)
{
state.WriteLine (@"//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------");
}

void WriteFilePreamble (State state, string classNamespace)
{
WriteAutoGeneratedComment (state);
WriteUsings (state);
state.WriteLine ();
WriteNamespaceOpen (state, classNamespace);
Expand All @@ -172,13 +199,15 @@ void WriteNamespaceOpen (State state, string classNamespace)
state.WriteLine ($"namespace {classNamespace}");
state.WriteLine ("{");
state.IncreaseIndent ();
WriteDisableWarnings (state);
}

void WriteNamespaceClose (State state)
{
if (!state.IsInNamespace)
return;

WriteEnableWarnings (state);
state.DecreaseIndent ();
state.WriteLine ("}");
}
Expand All @@ -200,15 +229,14 @@ void WriteUsing (State state, string ns)
state.WriteLine ($"using global::{ns};");
}

protected override void WriteBindingConstructors (State state, string className, bool linkerPreserve)
protected override void WriteBindingConstructors (State state, string className)
{
WriteConstructor (state, className, "Android.App.Activity", linkerPreserve);
WriteConstructor (state, className, "Android.Views.View", linkerPreserve);
WriteConstructor (state, className, "Android.App.Activity");
WriteConstructor (state, className, "Android.Views.View");
}

void WriteConstructor (State state, string className, string clientType, bool linkerPreserve)
void WriteConstructor (State state, string className, string clientType)
{
WritePreserveAtribute (state, linkerPreserve);
WriteLineIndent (state, $"public {className} (");
state.IncreaseIndent ();
WriteLineIndent (state, $"global::{clientType} client,");
Expand All @@ -221,14 +249,6 @@ void WriteConstructor (State state, string className, string clientType, bool li
state.WriteLine ();
}

void WritePreserveAtribute (State state, bool linkerPreserve)
{
if (!linkerPreserve)
return;

WriteLineIndent (state, $"[global::Android.Runtime.PreserveAttribute (Conditional=true)]");
}

public override void EndBindingFile (State state)
{
EnsureArgument (state, nameof (state));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ public class GenerateResourceDesignerIntermediateClass : AndroidTask
namespace %NAMESPACE% {
#pragma warning disable IDE0002
/// <summary>
/// Android Resource Designer class.
/// Exposes the Android Resource designer assembly into the project Namespace.
/// </summary>
public partial class Resource : %BASECLASS% {
}
#pragma warning restore IDE0002
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -339,6 +339,7 @@ void SuccessfulBuild_AndroidX (TestProjectInfo testInfo, bool many, bool dtb, Lo

CopyLogs (testInfo, true);
Assert.That (success, Is.True, "Build should have succeeded");
Assert.IsTrue (StringAssertEx.ContainsText (builder.LastBuildOutput, " 0 Warning(s)"), $"{builder.BuildLogFile} should have no MSBuild warnings.");

CopyGeneratedFiles (testInfo);

Expand Down Expand Up @@ -508,7 +509,8 @@ string GetBuildTarget (bool isDTB)
string[] GetBuildProperties (LocalBuilder builder, bool manyBuild, bool dtbBuild, bool referenceAndroidX, params string[] extraConstants)
{
var ret = new List <string> {
"AndroidGenerateLayoutBindings=true"
"AndroidGenerateLayoutBindings=true",
"\"NoWarn=CS0414;CA1416;CA1422;CS1591;XA1005;XA4225\""
};
if (manyBuild)
ret.Add ("ForceParallelBuild=true");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,6 @@
<ProjectReference Include="..\CommonSampleLibrary\CommonSampleLibrary.NET.csproj" />
</ItemGroup>
<ItemGroup Condition=" '$(ReferenceAndroidX)' == 'True' ">
<PackageReference Include="Xamarin.AndroidX.AppCompat" Version="1.4.1.1" />
<PackageReference Include="Xamarin.AndroidX.AppCompat" Version="1.6.1.5" />
</ItemGroup>
</Project>
1 change: 0 additions & 1 deletion tests/CodeBehind/BuildTests/Properties/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.xamarin.CodeBehindBuildTests">
<uses-sdk android:minSdkVersion="21" />
<application android:allowBackup="true" android:icon="@mipmap/icon" android:label="@string/app_name">
</application>
</manifest>

0 comments on commit c9eb732

Please sign in to comment.