Skip to content

Commit f4b84d1

Browse files
committed
removed untested APIs and refactored.
1 parent e3587be commit f4b84d1

File tree

4 files changed

+40
-82
lines changed

4 files changed

+40
-82
lines changed

source/AndroidResolver/src/GradleResolver.cs

Lines changed: 10 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -106,50 +106,26 @@ private void LogMissingDependenciesError(List<string> missingArtifacts) {
106106
}
107107

108108
/// <summary>
109-
/// From a list of dependencies generate a list of Maven / Gradle / Ivy package spec
110-
/// strings.
109+
/// Get package spec from a dependency.
111110
/// </summary>
112-
/// <param name="dependencies">Dependency instances to query for package specs.</param>
113-
/// <returns>Dictionary of Dependency instances indexed by package spec strings.</returns>
114-
internal static Dictionary<string, string> DependenciesToPackageSpecs(
115-
IEnumerable<Dependency> dependencies) {
116-
var sourcesByPackageSpec = new Dictionary<string, string>();
117-
foreach (var dependency in dependencies) {
118-
// Convert the legacy "LATEST" version spec to a Gradle version spec.
119-
var packageSpec = dependency.Version.ToUpper() == "LATEST" ?
120-
dependency.VersionlessKey + ":+" : dependency.Key;
121-
var source = CommandLine.SplitLines(dependency.CreatedBy)[0];
122-
string sources;
123-
if (sourcesByPackageSpec.TryGetValue(packageSpec, out sources)) {
124-
sources = sources + ", " + source;
125-
} else {
126-
sources = source;
127-
}
128-
sourcesByPackageSpec[packageSpec] = sources;
129-
}
130-
return sourcesByPackageSpec;
111+
/// <param name="dependency">Dependency instance to query for package spec.</param>
112+
internal static string DependencyToPackageSpec(Dependency dependency) {
113+
return dependency.Version.ToUpper() == "LATEST" ?
114+
dependency.VersionlessKey + ":+" : dependency.Key;
131115
}
132116

133117
/// <summary>
134118
/// From a list of dependencies generate a list of Maven / Gradle / Ivy package spec
135-
/// strings along with their corresponding dependency versions.
119+
/// strings.
136120
/// </summary>
137121
/// <param name="dependencies">Dependency instances to query for package specs.</param>
138-
/// <returns>Dictionary where the key is a package spec string and value is a
139-
/// 3 item list of sources string, dependency version less string,
140-
/// and a dependency version string. </returns>
141-
internal static Dictionary<string, List<string>> DependenciesToPackageSpecsWithVersions(
122+
/// <returns>Dictionary of Dependency instances indexed by package spec strings.</returns>
123+
internal static Dictionary<string, string> DependenciesToPackageSpecs(
142124
IEnumerable<Dependency> dependencies) {
143-
// To keep it simple to iterate and process, create 3 separate
144-
// dictionaries to record required metadata about a package spec
145-
// (version and versionless key).
146125
var sourcesByPackageSpec = new Dictionary<string, string>();
147-
var versionsByPackageSpec = new Dictionary<string, string>();
148-
var versionlessKeysByPackageSpec = new Dictionary<string, string>();
149126
foreach (var dependency in dependencies) {
150127
// Convert the legacy "LATEST" version spec to a Gradle version spec.
151-
var packageSpec = dependency.Version.ToUpper() == "LATEST" ?
152-
dependency.VersionlessKey + ":+" : dependency.Key;
128+
var packageSpec = DependencyToPackageSpec(dependency);
153129
var source = CommandLine.SplitLines(dependency.CreatedBy)[0];
154130
string sources;
155131
if (sourcesByPackageSpec.TryGetValue(packageSpec, out sources)) {
@@ -158,24 +134,8 @@ internal static Dictionary<string, List<string>> DependenciesToPackageSpecsWithV
158134
sources = source;
159135
}
160136
sourcesByPackageSpec[packageSpec] = sources;
161-
versionsByPackageSpec[packageSpec] = dependency.Version;
162-
versionlessKeysByPackageSpec[packageSpec] = dependency.VersionlessKey;
163-
}
164-
// Create a new dictionary which combines the data from sources and
165-
// versions dictionaries. Key is packageSpec string and value is a
166-
// three-item list of strings of sources, version less string
167-
// and dependency version.
168-
// NOTE: tuples are a more elegant way of doing this but they work
169-
// only in .NET frameworks >= 4.0.
170-
var mergedByPackageSpec = new Dictionary<string, List<string>>();
171-
foreach(var item in sourcesByPackageSpec) {
172-
mergedByPackageSpec[item.Key] = new List<string>{
173-
sourcesByPackageSpec[item.Key],
174-
versionlessKeysByPackageSpec[item.Key],
175-
versionsByPackageSpec[item.Key]
176-
};
177137
}
178-
return mergedByPackageSpec;
138+
return sourcesByPackageSpec;
179139
}
180140

181141
/// <summary>

source/AndroidResolver/src/PlayServicesResolver.cs

Lines changed: 23 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2090,17 +2090,6 @@ 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-
21042093
/// <summary>
21052094
/// Get the list of Maven repo URIs required for Android libraries in this project.
21062095
/// </summary>
@@ -2213,40 +2202,45 @@ internal static IList<string> GradleDependenciesLines(
22132202
// If different packages have different versions of the same dependency,
22142203
// we want to activate only the highest version but still include the
22152204
// other versions as commented out dependency lines.
2216-
var dependenciesMaxVersions = new Dictionary<string, string>();
2217-
string dependencyMaxVersion;
2205+
var dependenciesMaxVersions = new Dictionary<string, Dependency>();
2206+
Dependency dependencyMaxVersion;
2207+
// Maintain a set of packages which we want to comment out.
2208+
HashSet<string> packageSpecStringsToComment = new HashSet<string>();
22182209
foreach( var dependency in dependencies) {
22192210
if (dependenciesMaxVersions.TryGetValue(dependency.VersionlessKey, out dependencyMaxVersion)){
2220-
if(versionComparer.Compare(dependency.Version, dependencyMaxVersion) < 0) {
2221-
dependenciesMaxVersions[dependency.VersionlessKey] = dependency.Version;
2211+
if(versionComparer.Compare(dependency.Version, dependencyMaxVersion.Version) < 0) {
2212+
dependenciesMaxVersions[dependency.VersionlessKey] = dependency;
2213+
// We found a new larger version. Comment out older one
2214+
// Build a single item list since `GetPackageSpecs`
2215+
// accepts an IEnumerable type.
2216+
var packageSpecString = GradleResolver.DependencyToPackageSpec(dependencyMaxVersion);
2217+
packageSpecStringsToComment.Add(packageSpecString);
2218+
}
2219+
else {
2220+
// Dependency version is smaller than current max.
2221+
var packageSpecString = GradleResolver.DependencyToPackageSpec(dependency);
2222+
packageSpecStringsToComment.Add(packageSpecString);
22222223
}
22232224
}
22242225
else {
2225-
dependenciesMaxVersions[dependency.VersionlessKey] = dependency.Version;
2226+
// First time encountering this dependency.
2227+
dependenciesMaxVersions[dependency.VersionlessKey] = dependency;
22262228
}
22272229
}
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-
2230+
foreach (var packageSpecAndSources in GetPackageSpecs(dependencies: dependencies)) {
22342231
string line = " ";
2235-
// If this is not the highest version of this dependency, add a line
2236-
// but comment it out by adding leading slashes.
2237-
if(dependenciesMaxVersions[packageVersionlessKey] != packageVersion) {
2232+
if (packageSpecStringsToComment.Contains(packageSpecAndSources.Key)) {
22382233
PlayServicesResolver.Log(
22392234
String.Format(
22402235
"Ignoring duplicate package {0} with older version.",
2241-
packageSpecString),
2236+
packageSpecAndSources.Key),
22422237
level: LogLevel.Info
22432238
);
22442239
line += "// ";
22452240
}
2246-
22472241
line += String.Format(
2248-
"{0} '{1}' // {2}", includeStatement, packageSpecString,
2249-
packageSourcesString);
2242+
"{0} '{1}' // {2}", includeStatement, packageSpecAndSources.Key,
2243+
packageSpecAndSources.Value);
22502244
lines.Add(line);
22512245
}
22522246
if (includeDependenciesBlock) lines.Add("}");
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
<dependencies>
22
<androidPackages>
3-
<!-- Duplicate entry for package with a different version. -->
3+
<!-- Duplicate entry for package with a different version (higher). -->
4+
<androidPackage spec="com.google.android.gms:play-services-base:18.0.1" />
5+
<!-- Duplicate entry for package with a different version (lower). -->
46
<androidPackage spec="com.google.android.gms:play-services-base:12.0.1" />
57
<!-- Duplicate entry for package with the exact same version. -->
68
<androidPackage spec="com.android.support:support-annotations:26.1.0"/>
79
</androidPackages>
810
</dependencies>
11+

source/AndroidResolver/test/AndroidResolverIntegrationTestsUnityProject/ExpectedArtifacts/NoExport/GradleTemplateDuplicatePackages/mainTemplate.gradle

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,9 @@ dependencies {
4747
implementation fileTree(dir: 'libs', include: ['*.jar'])
4848
// Android Resolver Dependencies Start
4949
compile 'com.android.support:support-annotations:26.1.0' // Assets/ExternalDependencyManager/Editor/TestDependencies.xml:4
50-
// compile 'com.google.android.gms:play-services-base:12.0.1' // Assets/ExternalDependencyManager/Editor/TestAdditionalDuplicateDependencies.xml:4
51-
compile 'com.google.android.gms:play-services-base:15.0.1' // Assets/ExternalDependencyManager/Editor/TestAdditionalDependencies.xml:3
50+
// compile 'com.google.android.gms:play-services-base:12.0.1' // Assets/ExternalDependencyManager/Editor/TestAdditionalDuplicateDependencies.xml:6
51+
// compile 'com.google.android.gms:play-services-base:15.0.1' // Assets/ExternalDependencyManager/Editor/TestAdditionalDependencies.xml:3
52+
compile 'com.google.android.gms:play-services-base:18.0.1' // Assets/ExternalDependencyManager/Editor/TestAdditionalDuplicateDependencies.xml:4
5253
compile 'com.google.firebase:firebase-app-unity:5.1.1' // Assets/ExternalDependencyManager/Editor/TestDependencies.xml:10
5354
compile 'com.google.firebase:firebase-common:16.0.0' // Google.AndroidResolverIntegrationTests.SetupDependencies
5455
compile 'org.test.psr:classifier:1.0.1:foo@aar' // Assets/ExternalDependencyManager/Editor/TestDependencies.xml:12

0 commit comments

Comments
 (0)