Skip to content

Commit

Permalink
Merge pull request #3082 from natidea/fixTFCache
Browse files Browse the repository at this point in the history
Fix TargetFramework caching and comparison in PackageRuleHandler
  • Loading branch information
natidea authored Jan 22, 2018
2 parents 96530f4 + d276622 commit 0df450e
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 14 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Linq;
Expand Down Expand Up @@ -37,20 +38,17 @@ public ITargetFramework GetTargetFramework(string shortOrFullName)
{
lock (_targetsLock)
{
// use linear search here, since there not many target frameworks and it would most efficient.
targetFramework = _cachedTargetFrameworks.FirstOrDefault(x => x.Equals(shortOrFullName));
if (targetFramework != null)
if (!TryGetCachedTargetFramework(shortOrFullName, out targetFramework))
{
return targetFramework;
}

var frameworkName = _nuGetFrameworkParser.ParseFrameworkName(shortOrFullName);
if (frameworkName != null)
{
var shortName = _nuGetFrameworkParser.GetShortFrameworkName(frameworkName);
targetFramework = new TargetFramework(frameworkName, shortName);
// remember target framework - there can not bee too many of them across the solution.
_cachedTargetFrameworks.Add(targetFramework);
var frameworkName = _nuGetFrameworkParser.ParseFrameworkName(shortOrFullName);
if (frameworkName != null &&
!TryGetCachedTargetFramework(frameworkName.FullName, out targetFramework))
{
var shortName = _nuGetFrameworkParser.GetShortFrameworkName(frameworkName);
targetFramework = new TargetFramework(frameworkName, shortName);
// remember target framework - there can not be too many of them across the solution.
_cachedTargetFrameworks.Add(targetFramework);
}
}
}
}
Expand All @@ -63,6 +61,13 @@ public ITargetFramework GetTargetFramework(string shortOrFullName)
return targetFramework;
}

private bool TryGetCachedTargetFramework(string shortOrFullName, out ITargetFramework targetFramework)
{
// use linear search here, since there not many target frameworks and it would most efficient.
targetFramework = _cachedTargetFrameworks.FirstOrDefault(x => x.Equals(shortOrFullName));
return targetFramework != null;
}

public ITargetFramework GetNearestFramework(ITargetFramework targetFramework,
IEnumerable<ITargetFramework> otherFrameworks)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ private IDependencyModel GetDependencyModel(
&& unresolvedChanges.Contains(metadata.Name));
isTarget = metadata.IsTarget;
var packageTargetFramework = TargetFrameworkProvider.GetTargetFramework(metadata.Target);
if (packageTargetFramework != targetFramework)
if (!(packageTargetFramework?.Equals(targetFramework) == true))
{
return null;
}
Expand Down

0 comments on commit 0df450e

Please sign in to comment.