diff --git a/external/xamarin-android-tools b/external/xamarin-android-tools index a698a33aa4f..37d79c9dcdf 160000 --- a/external/xamarin-android-tools +++ b/external/xamarin-android-tools @@ -1 +1 @@ -Subproject commit a698a33aa4ffcaac90b54caf5e77236d57b0cf9e +Subproject commit 37d79c9dcdf738a181084b0b5890877128d75f1e diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/JavaDependencyVerification.cs b/src/Xamarin.Android.Build.Tasks/Tasks/JavaDependencyVerification.cs index 5c2476ae7d8..3373e1b095f 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/JavaDependencyVerification.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/JavaDependencyVerification.cs @@ -95,7 +95,7 @@ public override bool RunTask () return !Log.HasLoggedErrors; } - static bool TryResolveProject (Artifact artifact, IPomResolver resolver, [NotNullWhen (true)]out ResolvedProject? project) + static bool TryResolveProject (Artifact artifact, IProjectResolver resolver, [NotNullWhen (true)]out ResolvedProject? project) { // ResolvedProject.FromArtifact will throw if a POM cannot be resolved, but our MSBuildLoggingPomResolver // has already logged the failure as an MSBuild error. We don't want to log it again as an unhandled exception. @@ -135,7 +135,7 @@ public bool EnsureDependencySatisfied (ResolvedDependency dependency, MicrosoftN return true; var suggestion = packages.GetNuGetPackage ($"{dependency.GroupId}:{dependency.ArtifactId}"); - var artifact_spec = dependency.ToArtifactString (dependency.Version.HasValue ()); + var artifact_spec = dependency.Version.HasValue () ? dependency.VersionedArtifactString : dependency.ArtifactString; if (suggestion is string nuget) log.LogCodedError ("XA4242", Properties.Resources.XA4242, artifact_spec, nuget); @@ -157,7 +157,7 @@ public void AddAndroidLibraries (ITaskItem []? tasks) if (version != null && MavenExtensions.TryParseArtifactWithVersion (id, version, log, out var art)) { log.LogMessage ("Found Java dependency '{0}:{1}' version '{2}' from AndroidLibrary '{3}'", art.GroupId, art.Id, art.Version, task.ItemSpec); - artifacts.Add (art.ToGroupAndArtifactId (), art); + artifacts.Add (art.ArtifactString, art); } } } @@ -168,7 +168,7 @@ public void AddPackageReferences (ITaskItem []? tasks) // See if JavaArtifact/JavaVersion overrides were used if (task.TryParseJavaArtifactAndJavaVersion ("PackageReference", log, out var explicit_artifact, out var attributes_specified)) { - artifacts.Add (explicit_artifact.ToGroupAndArtifactId (), explicit_artifact); + artifacts.Add (explicit_artifact.ArtifactString, explicit_artifact); continue; } @@ -181,7 +181,7 @@ public void AddPackageReferences (ITaskItem []? tasks) if (artifact != null) { log.LogMessage ("Found Java dependency '{0}:{1}' version '{2}' from PackageReference '{3}'", artifact.GroupId, artifact.Id, artifact.Version, task.ItemSpec); - artifacts.Add (artifact.ToGroupAndArtifactId (), artifact); + artifacts.Add (artifact.ArtifactString, artifact); continue; } @@ -195,7 +195,7 @@ public void AddProjectReferences (ITaskItem []? tasks) foreach (var task in tasks.OrEmpty ()) { // See if JavaArtifact/JavaVersion overrides were used if (task.TryParseJavaArtifactAndJavaVersion ("ProjectReference", log, out var explicit_artifact, out var attributes_specified)) { - artifacts.Add (explicit_artifact.ToGroupAndArtifactId (), explicit_artifact); + artifacts.Add (explicit_artifact.ArtifactString, explicit_artifact); continue; } @@ -219,7 +219,7 @@ public void AddIgnoredDependencies (ITaskItem []? tasks) if (version != null && MavenExtensions.TryParseArtifactWithVersion (id, version, log, out var art)) { log.LogMessage ("Ignoring Java dependency '{0}:{1}' version '{2}'", art.GroupId, art.Id, art.Version); - artifacts.Add (art.ToGroupAndArtifactId (), art); + artifacts.Add (art.ArtifactString, art); } } } @@ -227,18 +227,18 @@ public void AddIgnoredDependencies (ITaskItem []? tasks) bool TrySatisfyDependency (ResolvedDependency dependency) { if (!dependency.Version.HasValue ()) - return artifacts.ContainsKey (dependency.ToGroupAndArtifactId ()); + return artifacts.ContainsKey (dependency.ArtifactString); var dep_versions = MavenVersionRange.Parse (dependency.Version); - if (artifacts.TryGetValue (dependency.ToGroupAndArtifactId (), out var artifact)) + if (artifacts.TryGetValue (dependency.ArtifactString, out var artifact)) return dep_versions.Any (r => r.ContainsVersion (MavenVersion.Parse (artifact.Version))); return false; } } -class MSBuildLoggingPomResolver : IPomResolver +class MSBuildLoggingPomResolver : IProjectResolver { readonly TaskLoggingHelper logger; readonly Dictionary poms = new (); @@ -272,8 +272,8 @@ public MSBuildLoggingPomResolver (TaskLoggingHelper logger) try { using (var file = File.OpenRead (filename)) { - var project = Project.Parse (file); - var registered_artifact = Artifact.Parse (project.ToString ()); + var project = Project.Load (file); + var registered_artifact = Artifact.Parse (project.VersionedArtifactString); // Return the registered artifact, preferring any overrides specified in the task item var final_artifact = new Artifact ( @@ -283,7 +283,7 @@ public MSBuildLoggingPomResolver (TaskLoggingHelper logger) ); // Use index instead of Add to handle duplicates - poms [final_artifact.ToString ()] = project; + poms [final_artifact.VersionedArtifactString] = project; logger.LogDebugMessage ("Registered POM for artifact '{0}' from '{1}'", final_artifact, filename); @@ -295,9 +295,9 @@ public MSBuildLoggingPomResolver (TaskLoggingHelper logger) } } - public Project ResolveRawProject (Artifact artifact) + public Project Resolve (Artifact artifact) { - if (poms.TryGetValue (artifact.ToString (), out var project)) + if (poms.TryGetValue (artifact.VersionedArtifactString, out var project)) return project; logger.LogCodedError ("XA4247", Properties.Resources.XA4247, artifact); diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/MavenDownload.cs b/src/Xamarin.Android.Build.Tasks/Tasks/MavenDownload.cs index 2197c573f08..383cc1a2d2f 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/MavenDownload.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/MavenDownload.cs @@ -110,13 +110,13 @@ public async override System.Threading.Tasks.Task RunTaskAsync () var project = ResolvedProject.FromArtifact (artifact, resolver); // Set the POM file path for _this_ artifact - var primary_pom = resolver.ResolvedPoms [artifact.ToString ()]; + var primary_pom = resolver.ResolvedPoms [artifact.VersionedArtifactString]; result.SetMetadata ("Manifest", primary_pom); Log.LogMessage ("Found POM file '{0}' for Java artifact '{1}'.", primary_pom, artifact); // Create TaskItems for any other POMs we resolved - foreach (var kv in resolver.ResolvedPoms.Where (k => k.Key != artifact.ToString ())) { + foreach (var kv in resolver.ResolvedPoms.Where (k => k.Key != artifact.VersionedArtifactString)) { var pom_item = new TaskItem (kv.Value); var pom_artifact = Artifact.Parse (kv.Key); @@ -163,7 +163,7 @@ public async override System.Threading.Tasks.Task RunTaskAsync () // This wrapper around CachedMavenRepository is used to log the POMs that are resolved. // We need these on-disk file locations so we can pass them as items. -class LoggingPomResolver : IPomResolver +class LoggingPomResolver : IProjectResolver { readonly CachedMavenRepository repository; @@ -174,14 +174,14 @@ public LoggingPomResolver (CachedMavenRepository repository) this.repository = repository; } - public Project ResolveRawProject (Artifact artifact) + public Project Resolve (Artifact artifact) { if (repository.TryGetFilePath (artifact, $"{artifact.Id}-{artifact.Version}.pom", out var path)) { using (var stream = File.OpenRead (path)) { - var pom = Project.Parse (stream) ?? throw new InvalidOperationException ($"Could not deserialize POM for {artifact}"); + var pom = Project.Load (stream) ?? throw new InvalidOperationException ($"Could not deserialize POM for {artifact}"); // Use index instead of Add to handle duplicates - ResolvedPoms [artifact.ToString ()] = path; + ResolvedPoms [artifact.VersionedArtifactString] = path; return pom; } diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/MavenExtensions.cs b/src/Xamarin.Android.Build.Tasks/Utilities/MavenExtensions.cs index 23993d0c9b9..a9b881adec6 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/MavenExtensions.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/MavenExtensions.cs @@ -154,8 +154,4 @@ public static bool TryParseJavaArtifactAndJavaVersion (this ITaskItem task, stri public static bool IsRuntimeDependency (this ResolvedDependency dependency) => dependency?.Scope != null && dependency.Scope.IndexOf ("runtime", StringComparison.OrdinalIgnoreCase) != -1; public static bool IsOptional (this ResolvedDependency dependency) => dependency?.Optional != null && dependency.Optional.IndexOf ("true", StringComparison.OrdinalIgnoreCase) != -1; - - public static string ToGroupAndArtifactId (this Artifact artifact) => $"{artifact.GroupId}:{artifact.Id}"; - - public static string ToGroupAndArtifactId (this ResolvedDependency dependency) => $"{dependency.GroupId}:{dependency.ArtifactId}"; }