C#6 Cleanup & Optimizations

The main intent is cleanup using C# 6 operators and normalization of
type aliases. While there are no intended functional changes here, it
does eliminate a few tight race conditions as a bonus (not a real-win
since this isn't thread-safe all over, simply noting).
This commit is contained in:
Nick Craver 2015-11-03 07:11:43 -05:00 committed by Chris R
parent 466ca57d4b
commit 6874b87f13
16 changed files with 25 additions and 50 deletions

View File

@ -88,7 +88,6 @@ namespace Microsoft.AspNet.Http
/// <summary> /// <summary>
/// The file collection sent with the request. /// The file collection sent with the request.
/// </summary> /// </summary>
/// <param name="key"></param>
/// <returns>The files included with the request.</returns> /// <returns>The files included with the request.</returns>
IFormFileCollection Files { get; } IFormFileCollection Files { get; }
} }

View File

@ -2,7 +2,6 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System; using System;
using System.Linq;
using System.Text.Encodings.Web; using System.Text.Encodings.Web;
namespace Microsoft.AspNet.Http namespace Microsoft.AspNet.Http
@ -17,7 +16,7 @@ namespace Microsoft.AspNet.Http
/// <summary> /// <summary>
/// Represents the empty path. This field is read-only. /// Represents the empty path. This field is read-only.
/// </summary> /// </summary>
public static readonly PathString Empty = new PathString(String.Empty); public static readonly PathString Empty = new PathString(string.Empty);
private readonly string _value; private readonly string _value;

View File

@ -17,7 +17,7 @@ namespace Microsoft.AspNet.Http
/// <summary> /// <summary>
/// Represents the empty query string. This field is read-only. /// Represents the empty query string. This field is read-only.
/// </summary> /// </summary>
public static readonly QueryString Empty = new QueryString(String.Empty); public static readonly QueryString Empty = new QueryString(string.Empty);
private readonly string _value; private readonly string _value;
@ -84,7 +84,7 @@ namespace Microsoft.AspNet.Http
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1057:StringUriOverloadsCallSystemUriOverloads", Justification = "Delimiter characters ? and # must be escaped by this method instead of truncating the value")] [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1057:StringUriOverloadsCallSystemUriOverloads", Justification = "Delimiter characters ? and # must be escaped by this method instead of truncating the value")]
public static QueryString FromUriComponent(string uriComponent) public static QueryString FromUriComponent(string uriComponent)
{ {
if (String.IsNullOrEmpty(uriComponent)) if (string.IsNullOrEmpty(uriComponent))
{ {
return new QueryString(string.Empty); return new QueryString(string.Empty);
} }
@ -231,7 +231,7 @@ namespace Microsoft.AspNet.Http
public override int GetHashCode() public override int GetHashCode()
{ {
return (_value != null ? _value.GetHashCode() : 0); return _value?.GetHashCode() ?? 0;
} }
public static bool operator ==(QueryString left, QueryString right) public static bool operator ==(QueryString left, QueryString right)

View File

@ -3,7 +3,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.AspNet.Http.Extensions;
using Microsoft.Net.Http.Headers; using Microsoft.Net.Http.Headers;
namespace Microsoft.AspNet.Http.Headers namespace Microsoft.AspNet.Http.Headers

View File

@ -83,11 +83,7 @@ namespace Microsoft.AspNet.Http.Internal
{ {
get get
{ {
if (Store == null) return Store?.Count ?? 0;
{
return 0;
}
return Store.Count;
} }
} }

View File

@ -72,12 +72,7 @@ namespace Microsoft.AspNet.Http.Internal
if (StringValues.IsNullOrEmpty(value)) if (StringValues.IsNullOrEmpty(value))
{ {
if (Store == null) Store?.Remove(key);
{
return;
}
Store.Remove(key);
} }
else else
{ {
@ -110,11 +105,7 @@ namespace Microsoft.AspNet.Http.Internal
{ {
get get
{ {
if (Store == null) return Store?.Count ?? 0;
{
return 0;
}
return Store.Count;
} }
} }
@ -195,11 +186,7 @@ namespace Microsoft.AspNet.Http.Internal
/// </summary> /// </summary>
public void Clear() public void Clear()
{ {
if (Store == null) Store?.Clear();
{
return;
}
Store.Clear();
} }
/// <summary> /// <summary>

View File

@ -21,7 +21,7 @@ namespace Microsoft.AspNet.Http.Internal
get get
{ {
var handle = CallContext.LogicalGetData(LogicalDataKey) as ObjectHandle; var handle = CallContext.LogicalGetData(LogicalDataKey) as ObjectHandle;
return handle != null ? handle.Unwrap() as HttpContext : null; return handle?.Unwrap() as HttpContext;
} }
set set
{ {

View File

@ -17,7 +17,6 @@ using System.Threading.Tasks;
using Microsoft.AspNet.Http; using Microsoft.AspNet.Http;
using Microsoft.AspNet.Http.Features; using Microsoft.AspNet.Http.Features;
using Microsoft.AspNet.Http.Features.Authentication; using Microsoft.AspNet.Http.Features.Authentication;
using Microsoft.Extensions.Primitives;
namespace Microsoft.AspNet.Owin namespace Microsoft.AspNet.Owin
{ {
@ -45,14 +44,11 @@ namespace Microsoft.AspNet.Owin
SupportsWebSockets = true; SupportsWebSockets = true;
var register = Prop<Action<Action<object>, object>>(OwinConstants.CommonKeys.OnSendingHeaders); var register = Prop<Action<Action<object>, object>>(OwinConstants.CommonKeys.OnSendingHeaders);
if (register != null) register?.Invoke(state =>
{ {
register(state => var collection = (OwinFeatureCollection)state;
{ collection._headersSent = true;
var collection = (OwinFeatureCollection)state; }, this);
collection._headersSent = true;
}, this);
}
} }
T Prop<T>(string key) T Prop<T>(string key)

View File

@ -57,7 +57,7 @@ namespace Microsoft.AspNet.Owin
options = acceptContext.Options; options = acceptContext.Options;
_subProtocol = acceptContext.SubProtocol; _subProtocol = acceptContext.SubProtocol;
} }
else if (context != null && context.SubProtocol != null) else if (context?.SubProtocol != null)
{ {
options = new Dictionary<string, object>(1) options = new Dictionary<string, object>(1)
{ {

View File

@ -121,7 +121,7 @@ namespace Microsoft.AspNet.WebUtilities
// Special-case empty input // Special-case empty input
if (count == 0) if (count == 0)
{ {
return String.Empty; return string.Empty;
} }
// We're going to use base64url encoding with no padding characters. // We're going to use base64url encoding with no padding characters.

View File

@ -44,7 +44,7 @@ namespace Microsoft.Net.Http.Headers
return SupportsMultipleValues; return SupportsMultipleValues;
} }
T result = default(T); T result;
var length = GetParsedValueLength(value, current, out result); var length = GetParsedValueLength(value, current, out result);
if (length == 0) if (length == 0)

View File

@ -369,7 +369,7 @@ namespace Microsoft.Net.Http.Headers
return 0; return 0;
} }
nameValueList.Add(nameValue as NameValueHeaderValue); nameValueList.Add(nameValue);
} }
// If we get here, we were able to successfully parse the string as list of name/value pairs. Now analyze // If we get here, we were able to successfully parse the string as list of name/value pairs. Now analyze

View File

@ -2,7 +2,6 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System; using System;
using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics.Contracts; using System.Diagnostics.Contracts;
using System.Globalization; using System.Globalization;
@ -37,11 +36,11 @@ namespace Microsoft.Net.Http.Headers
// If a parser returns 'null', it means there was no value, but that's valid (e.g. "Accept: "). The caller // If a parser returns 'null', it means there was no value, but that's valid (e.g. "Accept: "). The caller
// can ignore the value. // can ignore the value.
T result = default(T); T result;
if (!TryParseValue(value, ref index, out result)) if (!TryParseValue(value, ref index, out result))
{ {
throw new FormatException(string.Format(CultureInfo.InvariantCulture, "Invalid value '{0}'.", throw new FormatException(string.Format(CultureInfo.InvariantCulture, "Invalid value '{0}'.",
value == null ? "<null>" : value.Substring(index))); value?.Substring(index) ?? "<null>"));
} }
return result; return result;
} }
@ -114,7 +113,7 @@ namespace Microsoft.Net.Http.Headers
else else
{ {
throw new FormatException(string.Format(CultureInfo.InvariantCulture, "Invalid values '{0}'.", throw new FormatException(string.Format(CultureInfo.InvariantCulture, "Invalid values '{0}'.",
values == null ? "<null>" : value.Substring(index))); value.Substring(index)));
} }
} }
} }

View File

@ -64,13 +64,13 @@ namespace Microsoft.Net.Http.Headers
return 1; return 1;
} }
if (!String.Equals(stringWithQuality1.Value, stringWithQuality2.Value, StringComparison.OrdinalIgnoreCase)) if (!string.Equals(stringWithQuality1.Value, stringWithQuality2.Value, StringComparison.OrdinalIgnoreCase))
{ {
if (String.Equals(stringWithQuality1.Value, "*", StringComparison.Ordinal)) if (string.Equals(stringWithQuality1.Value, "*", StringComparison.Ordinal))
{ {
return -1; return -1;
} }
else if (String.Equals(stringWithQuality2.Value, "*", StringComparison.Ordinal)) else if (string.Equals(stringWithQuality2.Value, "*", StringComparison.Ordinal))
{ {
return 1; return 1;
} }

View File

@ -154,7 +154,7 @@ namespace Microsoft.Net.Http.Headers
public void CookieHeaderValue_Value() public void CookieHeaderValue_Value()
{ {
var cookie = new CookieHeaderValue("name"); var cookie = new CookieHeaderValue("name");
Assert.Equal(String.Empty, cookie.Value); Assert.Equal(string.Empty, cookie.Value);
cookie.Value = "value1"; cookie.Value = "value1";
Assert.Equal("value1", cookie.Value); Assert.Equal("value1", cookie.Value);

View File

@ -184,7 +184,7 @@ namespace Microsoft.Net.Http.Headers
public void SetCookieHeaderValue_Value() public void SetCookieHeaderValue_Value()
{ {
var cookie = new SetCookieHeaderValue("name"); var cookie = new SetCookieHeaderValue("name");
Assert.Equal(String.Empty, cookie.Value); Assert.Equal(string.Empty, cookie.Value);
cookie.Value = "value1"; cookie.Value = "value1";
Assert.Equal("value1", cookie.Value); Assert.Equal("value1", cookie.Value);