From 24c4bcdd097846d269ec260fcc418330e99117a6 Mon Sep 17 00:00:00 2001 From: Dean Ellis Date: Thu, 19 Jan 2023 18:33:03 +0000 Subject: [PATCH 1/4] Honour the AndroidGenerateResourceDesigner setting --- ...soft.Android.Sdk.DefaultProperties.targets | 5 ++-- .../Utilities/BaseTest.cs | 24 ++++++++++++++++++- .../Xamarin.Android.Build.Tests/XASdkTests.cs | 9 +++---- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets index 43ed246a334..175ce503b58 100644 --- a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets +++ b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets @@ -10,9 +10,10 @@ true Xamarin.Android.Net.AndroidMessageHandler Xamarin.Android.Net.AndroidClientHandler - true - false true + $(AndroidGenerateResourceDesigner) + true + false $(AndroidGenerateResourceDesigner) false false diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs index a8f678a4d9a..90504642026 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs @@ -553,7 +553,7 @@ protected string GetPathToAapt () return GetPathToLatestBuildTools (exe); } - protected string GetResourceDesignerPath (ProjectBuilder builder, XamarinAndroidProject project) + protected string GetResourceDesignerPath (DotNetCLI builder, XASdkProject project, bool designtime = false) { string path; if (Builder.UseDotNet) { @@ -561,8 +561,30 @@ protected string GetResourceDesignerPath (ProjectBuilder builder, XamarinAndroid if (string.Compare (project.GetProperty ("AndroidUseDesignerAssembly"), "True", ignoreCase: true) == 0) { return Path.Combine (path, "_Microsoft.Android.Resource.Designer.dll"); } + if (designtime) + path = Path.Combine (Root, builder.ProjectDirectory, project.IntermediateOutputPath); } else { path = Path.Combine (Root, builder.ProjectDirectory, "Resources"); + if (designtime) + path = Path.Combine (Root, builder.ProjectDirectory, project.IntermediateOutputPath); + } + return Path.Combine (path, "Resource.designer" + project.Language.DefaultDesignerExtension); + } + + protected string GetResourceDesignerPath (ProjectBuilder builder, XamarinAndroidProject project, bool designtime = false) + { + string path; + if (Builder.UseDotNet) { + path = Path.Combine (Root, builder.ProjectDirectory, project.IntermediateOutputPath); + if (string.Compare (project.GetProperty ("AndroidUseDesignerAssembly"), "True", ignoreCase: true) == 0) { + return Path.Combine (path, "_Microsoft.Android.Resource.Designer.dll"); + } + if (designtime) + path = Path.Combine (Root, builder.ProjectDirectory, project.IntermediateOutputPath); + } else { + path = Path.Combine (Root, builder.ProjectDirectory, "Resources"); + if (designtime) + path = Path.Combine (Root, builder.ProjectDirectory, project.IntermediateOutputPath); } return Path.Combine (path, "Resource.designer" + project.Language.DefaultDesignerExtension); } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs index 062e7fadbca..3eb413c63f2 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs @@ -455,7 +455,7 @@ public void AppWithSingleJar () } [Test] - public void GenerateResourceDesigner_false() + public void GenerateResourceDesigner_false([Values (false, true)] bool useDesignerAssembly) { var proj = new XASdkProject (outputType: "Library") { Sources = { @@ -466,7 +466,8 @@ public void GenerateResourceDesigner_false() }; // Turn off Resource.designer.cs and remove usage of it proj.SetProperty ("AndroidGenerateResourceDesigner", "false"); - proj.SetProperty ("AndroidUseDesignerAssembly", "false"); + if (!useDesignerAssembly) + proj.SetProperty ("AndroidUseDesignerAssembly", "false"); proj.MainActivity = proj.DefaultMainActivity .Replace ("Resource.Layout.Main", "0") .Replace ("Resource.Id.myButton", "0"); @@ -474,12 +475,12 @@ public void GenerateResourceDesigner_false() var dotnet = CreateDotNetBuilder (proj); Assert.IsTrue (dotnet.Build(target: "CoreCompile", parameters: new string[] { "BuildingInsideVisualStudio=true" }), "Designtime build should succeed."); var intermediate = Path.Combine (FullProjectDirectory, proj.IntermediateOutputPath); - var resource_designer_cs = Path.Combine (intermediate, "designtime", "Resource.designer.cs"); + var resource_designer_cs = GetResourceDesignerPath (dotnet, proj, designtime: true); FileAssert.DoesNotExist (resource_designer_cs); Assert.IsTrue (dotnet.Build (), "build should succeed"); - resource_designer_cs = Path.Combine (intermediate, "Resource.designer.cs"); + resource_designer_cs = GetResourceDesignerPath (dotnet, proj); FileAssert.DoesNotExist (resource_designer_cs); var assemblyPath = Path.Combine (FullProjectDirectory, proj.OutputPath, $"{proj.ProjectName}.dll"); From d9930e63cb4729033418471a3d345f5379d31f49 Mon Sep 17 00:00:00 2001 From: Dean Ellis Date: Sat, 21 Jan 2023 01:40:38 +0000 Subject: [PATCH 2/4] Add new test --- .../Xamarin.Android.Resource.Designer.targets | 6 +-- ...soft.Android.Sdk.DefaultProperties.targets | 1 - .../Xamarin.Android.Build.Tests/XASdkTests.cs | 47 +++++++++++++++++++ 3 files changed, 50 insertions(+), 4 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Resource.Designer.targets b/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Resource.Designer.targets index f5b225179bb..d0943e16bb9 100644 --- a/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Resource.Designer.targets +++ b/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Resource.Designer.targets @@ -93,7 +93,7 @@ Copyright (C) 2016 Xamarin. All rights reserved. @@ -166,11 +166,11 @@ Copyright (C) 2016 Xamarin. All rights reserved. PreserveNewest - + - + diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets index 175ce503b58..51ed5880c64 100644 --- a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets +++ b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets @@ -11,7 +11,6 @@ Xamarin.Android.Net.AndroidMessageHandler Xamarin.Android.Net.AndroidClientHandler true - $(AndroidGenerateResourceDesigner) true false $(AndroidGenerateResourceDesigner) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs index 3eb413c63f2..ce13a343796 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs @@ -454,6 +454,53 @@ public void AppWithSingleJar () } } + [Test] + public void GenerateResourceDesigner([Values (false, true)] bool generateResourceDesigner, [Values (false, true)] bool useDesignerAssembly) + { + var path = Path.Combine ("temp", TestName); + var libraryB = new XASdkProject (outputType: "Library") { + ProjectName = "LibraryB", + }; + libraryB.Sources.Clear (); + libraryB.Sources.Add (new BuildItem.Source ("Foo.cs") { + TextContent = () => @"namespace LibraryB; +public class Foo { + public static int foo => Resource.Drawable.foo; +}", + }); + libraryB.Sources.Add (new AndroidItem.AndroidResource (() => "Resources\\drawable\\foo.png") { + BinaryContent = () => XamarinAndroidCommonProject.icon_binary_mdpi, + }); + libraryB.SetProperty ("AndroidUseDesignerAssembly", useDesignerAssembly.ToString ()); + var libraryA = new XASdkProject (outputType: "Library") { + ProjectName = "LibraryA", + }; + libraryA.Sources.Clear (); + libraryA.Sources.Add (new BuildItem.Source ("FooA.cs") { + TextContent = () => @"namespace LibraryA; +public class FooA { + public int foo => 0; + public int foo2 => LibraryB.Foo.foo; + public int foo3 => LibraryB.Resource.Drawable.foo; +}", + }); + libraryA.AddReference (libraryB); + libraryA.SetProperty ("AndroidGenerateResourceDesigner", generateResourceDesigner.ToString ()); + if (!useDesignerAssembly) + libraryA.SetProperty ("AndroidUseDesignerAssembly", "False"); + var libraryBBuilder = CreateDotNetBuilder (libraryB, Path.Combine (path, libraryB.ProjectName)); + Assert.IsTrue (libraryBBuilder.Build (), "Build of LibraryB should succeed."); + var libraryABuilder = CreateDotNetBuilder (libraryA, Path.Combine (path, libraryA.ProjectName)); + Assert.IsTrue (libraryABuilder.Build (), "Build of LibraryA should succeed."); + var proj = new XASdkProject () { + ProjectName = "App1", + }; + proj.SetProperty ("AndroidUseDesignerAssembly", useDesignerAssembly.ToString ()); + proj.AddReference (libraryA); + var dotnet = CreateDotNetBuilder (proj, Path.Combine (path, proj.ProjectName)); + Assert.IsTrue (dotnet.Build (), "Build of Proj should succeed."); + } + [Test] public void GenerateResourceDesigner_false([Values (false, true)] bool useDesignerAssembly) { From a0f0711efee5df3c92bf6c9dd8d81f49be886fd3 Mon Sep 17 00:00:00 2001 From: Dean Ellis Date: Mon, 23 Jan 2023 13:02:08 +0000 Subject: [PATCH 3/4] Fix unit test --- .../Utilities/BaseTest.cs | 18 ------------------ .../Xamarin.Android.Build.Tests/XASdkTests.cs | 8 ++++++-- 2 files changed, 6 insertions(+), 20 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs index 90504642026..767eb4d16b4 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs @@ -553,24 +553,6 @@ protected string GetPathToAapt () return GetPathToLatestBuildTools (exe); } - protected string GetResourceDesignerPath (DotNetCLI builder, XASdkProject project, bool designtime = false) - { - string path; - if (Builder.UseDotNet) { - path = Path.Combine (Root, builder.ProjectDirectory, project.IntermediateOutputPath); - if (string.Compare (project.GetProperty ("AndroidUseDesignerAssembly"), "True", ignoreCase: true) == 0) { - return Path.Combine (path, "_Microsoft.Android.Resource.Designer.dll"); - } - if (designtime) - path = Path.Combine (Root, builder.ProjectDirectory, project.IntermediateOutputPath); - } else { - path = Path.Combine (Root, builder.ProjectDirectory, "Resources"); - if (designtime) - path = Path.Combine (Root, builder.ProjectDirectory, project.IntermediateOutputPath); - } - return Path.Combine (path, "Resource.designer" + project.Language.DefaultDesignerExtension); - } - protected string GetResourceDesignerPath (ProjectBuilder builder, XamarinAndroidProject project, bool designtime = false) { string path; diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs index ce13a343796..2ded510c810 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs @@ -522,12 +522,16 @@ public void GenerateResourceDesigner_false([Values (false, true)] bool useDesign var dotnet = CreateDotNetBuilder (proj); Assert.IsTrue (dotnet.Build(target: "CoreCompile", parameters: new string[] { "BuildingInsideVisualStudio=true" }), "Designtime build should succeed."); var intermediate = Path.Combine (FullProjectDirectory, proj.IntermediateOutputPath); - var resource_designer_cs = GetResourceDesignerPath (dotnet, proj, designtime: true); + var resource_designer_cs = Path.Combine (intermediate, "designtime", "Resource.designer.cs"); + if (useDesignerAssembly) + resource_designer_cs = Path.Combine (intermediate, "__Microsoft.Android.Resource.Designer.cs"); FileAssert.DoesNotExist (resource_designer_cs); Assert.IsTrue (dotnet.Build (), "build should succeed"); - resource_designer_cs = GetResourceDesignerPath (dotnet, proj); + resource_designer_cs = Path.Combine (intermediate, "Resource.designer.cs"); + if (useDesignerAssembly) + resource_designer_cs = Path.Combine (intermediate, "__Microsoft.Android.Resource.Designer.cs"); FileAssert.DoesNotExist (resource_designer_cs); var assemblyPath = Path.Combine (FullProjectDirectory, proj.OutputPath, $"{proj.ProjectName}.dll"); From e252b410f3db9d857b80bfa5f60da26df4074de5 Mon Sep 17 00:00:00 2001 From: Dean Ellis Date: Mon, 23 Jan 2023 13:14:51 +0000 Subject: [PATCH 4/4] Remove unused code --- .../Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs index 767eb4d16b4..a8f678a4d9a 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs @@ -553,7 +553,7 @@ protected string GetPathToAapt () return GetPathToLatestBuildTools (exe); } - protected string GetResourceDesignerPath (ProjectBuilder builder, XamarinAndroidProject project, bool designtime = false) + protected string GetResourceDesignerPath (ProjectBuilder builder, XamarinAndroidProject project) { string path; if (Builder.UseDotNet) { @@ -561,12 +561,8 @@ protected string GetResourceDesignerPath (ProjectBuilder builder, XamarinAndroid if (string.Compare (project.GetProperty ("AndroidUseDesignerAssembly"), "True", ignoreCase: true) == 0) { return Path.Combine (path, "_Microsoft.Android.Resource.Designer.dll"); } - if (designtime) - path = Path.Combine (Root, builder.ProjectDirectory, project.IntermediateOutputPath); } else { path = Path.Combine (Root, builder.ProjectDirectory, "Resources"); - if (designtime) - path = Path.Combine (Root, builder.ProjectDirectory, project.IntermediateOutputPath); } return Path.Combine (path, "Resource.designer" + project.Language.DefaultDesignerExtension); }