Skip to content

Commit 6c921ec

Browse files
committed
using new method to avoid any possibility of duplicates
Change-Id: Ia4d0ddc10c6c31ce070aa0e5ac7a375ea2640fbc
1 parent de96b33 commit 6c921ec

File tree

1 file changed

+27
-17
lines changed

1 file changed

+27
-17
lines changed

source/AndroidResolver/src/PlayServicesResolver.cs

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2090,6 +2090,17 @@ public static IList<KeyValuePair<string, string>> GetPackageSpecs(
20902090
GradleResolver.DependenciesToPackageSpecs(GetOrReadDependencies(dependencies))));
20912091
}
20922092

2093+
/// <summary>
2094+
/// Get the list of Android package specs referenced by the project and the sources they're
2095+
/// loaded from along with their corresponding dependency versions.
2096+
/// </summary>
2097+
/// <returns>Dictionary of the form {<packageSpec>: [sourceString, dependencyVersion]}.</returns>
2098+
public static IList<KeyValuePair<string, List<string>>> GetPackageSpecsWithVersions(
2099+
IEnumerable<Dependency> dependencies = null) {
2100+
return new List<KeyValuePair<string, List<string>>>(new SortedList<string, List<string>>(
2101+
GradleResolver.DependenciesToPackageSpecsWithVersions(GetOrReadDependencies(dependencies))));
2102+
}
2103+
20932104
/// <summary>
20942105
/// Get the list of Maven repo URIs required for Android libraries in this project.
20952106
/// </summary>
@@ -2203,33 +2214,32 @@ internal static IList<string> GradleDependenciesLines(
22032214
// we want to activate only the highest version but still include the
22042215
// other versions as commented out dependency lines.
22052216
var dependenciesMaxVersions = new Dictionary<string, string>();
2217+
string dependencyMaxVersion;
22062218
foreach( var dependency in dependencies) {
2207-
if(!dependenciesMaxVersions.ContainsKey(dependency.VersionlessKey))
2208-
dependenciesMaxVersions[dependency.VersionlessKey] = dependency.Version;
2209-
else {
2210-
var compareWithVersion = dependenciesMaxVersions[dependency.VersionlessKey];
2211-
if(versionComparer.Compare(dependency.Version, compareWithVersion) < 0)
2219+
if (dependenciesMaxVersions.TryGetValue(dependency.VersionlessKey, out dependencyMaxVersion)){
2220+
if(versionComparer.Compare(dependency.Version, dependencyMaxVersion) < 0) {
22122221
dependenciesMaxVersions[dependency.VersionlessKey] = dependency.Version;
2222+
}
2223+
}
2224+
else {
2225+
dependenciesMaxVersions[dependency.VersionlessKey] = dependency.Version;
22132226
}
22142227
}
2215-
List<Dependency> dependenciesList = dependencies.OrderBy(Dependency=>Dependency.Key).ToList();
2216-
foreach( var dependency in dependenciesList) {
2217-
// Passing the entire list to GetPackageSpecs returns results
2218-
// in an arbitrary order because it takes an IEnumerable.
2219-
// Hence we cannot pass the entire list as is. We pass an element
2220-
// at a time to ensure the correspondence with results.
2221-
List<Dependency> singleItemList = new List<Dependency>();
2222-
singleItemList.Add(dependency);
2223-
var packageSpecAndSources = GetPackageSpecs(singleItemList)[0];
2228+
foreach (var packageSpecAndSourcesWithVersions in GetPackageSpecsWithVersions(dependencies: dependencies)){
2229+
var packageSpecString = packageSpecAndSourcesWithVersions.Key;
2230+
var packageSourcesString = packageSpecAndSourcesWithVersions.Value[0];
2231+
var packageVersionlessKey = packageSpecAndSourcesWithVersions.Value[1];
2232+
var packageVersion = packageSpecAndSourcesWithVersions.Value[2];
2233+
22242234
string line = " ";
22252235
// If this is not the highest version of this dependency, add a line
22262236
// but comment it out by adding leading slashes.
2227-
if(dependenciesMaxVersions[dependency.VersionlessKey] != dependency.Version)
2237+
if(dependenciesMaxVersions[packageVersionlessKey] != packageVersion)
22282238
line += "// ";
22292239

22302240
line += String.Format(
2231-
"{0} '{1}' // {2}", includeStatement, packageSpecAndSources.Key,
2232-
packageSpecAndSources.Value, dependency.Version);
2241+
"{0} '{1}' // {2}", includeStatement, packageSpecString,
2242+
packageSourcesString);
22332243
lines.Add(line);
22342244
}
22352245
if (includeDependenciesBlock) lines.Add("}");

0 commit comments

Comments
 (0)