diff --git a/eng/Versions.props b/eng/Versions.props index 09dac31926e29..d50c436e0072b 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -61,7 +61,7 @@ 1.5.0 0.9.2 2.14.1 - 7.1.0.6543 + 7.2.1.6856 1.0.7 1.5.5 6.0.0 diff --git a/src/Compilers/Test/Core/CompilationVerifier.cs b/src/Compilers/Test/Core/CompilationVerifier.cs index 97fe22d0c9ac4..d578b464326ed 100644 --- a/src/Compilers/Test/Core/CompilationVerifier.cs +++ b/src/Compilers/Test/Core/CompilationVerifier.cs @@ -185,7 +185,32 @@ public string DumpIL() /// The expected IL public void VerifyTypeIL(string typeName, string expected) { - VerifyTypeIL(typeName, output => AssertEx.AssertEqualToleratingWhitespaceDifferences(expected, output, escapeQuotes: false)); + VerifyTypeIL(typeName, output => + { + // All our tests predate ilspy adding `// Header size: ...` to the contents. So trim that out since we + // really don't need to validate superfluous IL comments + expected = RemoveHeaderComments(expected); + output = RemoveHeaderComments(output); + + output = FixupCodeSizeComments(output); + + AssertEx.AssertEqualToleratingWhitespaceDifferences(expected, output, escapeQuotes: false); + }); + } + + private static readonly Regex s_headerCommentsRegex = new("""^\s*// Header size: [0-9]+\s*$""", RegexOptions.Multiline); + private static readonly Regex s_codeSizeCommentsRegex = new("""^\s*// Code size(:) [0-9]+\s*""", RegexOptions.Multiline); + + private static string RemoveHeaderComments(string value) + { + return s_headerCommentsRegex.Replace(value, ""); + } + + private static string FixupCodeSizeComments(string output) + { + // We use the form `// Code size 7 (0x7)` while ilspy moved to the form `// Code size: 7 (0x7)` (with an + // extra colon). Strip the colon to make these match. + return s_codeSizeCommentsRegex.Replace(output, match => match.Groups[0].Value.Replace(match.Groups[1].Value, "")); } /// diff --git a/src/EditorFeatures/Test/MetadataAsSource/AbstractMetadataAsSourceTests.cs b/src/EditorFeatures/Test/MetadataAsSource/AbstractMetadataAsSourceTests.cs index c781ca2c7db7a..a038518d7415e 100644 --- a/src/EditorFeatures/Test/MetadataAsSource/AbstractMetadataAsSourceTests.cs +++ b/src/EditorFeatures/Test/MetadataAsSource/AbstractMetadataAsSourceTests.cs @@ -21,7 +21,7 @@ namespace Microsoft.CodeAnalysis.Editor.UnitTests.MetadataAsSource [UseExportProvider] public abstract partial class AbstractMetadataAsSourceTests : IAsyncLifetime { - protected static readonly string ICSharpCodeDecompilerVersion = "7.1.0.6543"; + protected static readonly string ICSharpCodeDecompilerVersion = "7.2.1.6856"; public virtual Task InitializeAsync() { diff --git a/src/EditorFeatures/Test/MetadataAsSource/MetadataAsSourceTests.CSharp.cs b/src/EditorFeatures/Test/MetadataAsSource/MetadataAsSourceTests.CSharp.cs index 6ed5cb5b87700..a199092c28d14 100644 --- a/src/EditorFeatures/Test/MetadataAsSource/MetadataAsSourceTests.CSharp.cs +++ b/src/EditorFeatures/Test/MetadataAsSource/MetadataAsSourceTests.CSharp.cs @@ -208,167 +208,166 @@ public struct [|ValueTuple|] : IEquatable, IStructuralEquatable, ISt using System.Collections; using System.Runtime.InteropServices; -namespace System +namespace System; + +[StructLayout(LayoutKind.Sequential, Size = 1)] +public struct [|ValueTuple|] : IEquatable, IStructuralEquatable, IStructuralComparable, IComparable, IComparable, ITupleInternal {{ - [StructLayout(LayoutKind.Sequential, Size = 1)] - public struct [|ValueTuple|] : IEquatable, IStructuralEquatable, IStructuralComparable, IComparable, IComparable, ITupleInternal + int ITupleInternal.Size => 0; + + public override bool Equals(object obj) {{ - int ITupleInternal.Size => 0; + return obj is ValueTuple; + }} - public override bool Equals(object obj) - {{ - return obj is ValueTuple; - }} + public bool Equals(ValueTuple other) + {{ + return true; + }} - public bool Equals(ValueTuple other) - {{ - return true; - }} + bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer) + {{ + return other is ValueTuple; + }} - bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer) + int IComparable.CompareTo(object other) + {{ + if (other == null) {{ - return other is ValueTuple; + return 1; }} - int IComparable.CompareTo(object other) + if (!(other is ValueTuple)) {{ - if (other == null) - {{ - return 1; - }} + throw new ArgumentException(SR.ArgumentException_ValueTupleIncorrectType, ""other""); + }} - if (!(other is ValueTuple)) - {{ - throw new ArgumentException(SR.ArgumentException_ValueTupleIncorrectType, ""other""); - }} + return 0; + }} - return 0; - }} + public int CompareTo(ValueTuple other) + {{ + return 0; + }} - public int CompareTo(ValueTuple other) + int IStructuralComparable.CompareTo(object other, IComparer comparer) + {{ + if (other == null) {{ - return 0; + return 1; }} - int IStructuralComparable.CompareTo(object other, IComparer comparer) + if (!(other is ValueTuple)) {{ - if (other == null) - {{ - return 1; - }} - - if (!(other is ValueTuple)) - {{ - throw new ArgumentException(SR.ArgumentException_ValueTupleIncorrectType, ""other""); - }} - - return 0; + throw new ArgumentException(SR.ArgumentException_ValueTupleIncorrectType, ""other""); }} - public override int GetHashCode() - {{ - return 0; - }} + return 0; + }} - int IStructuralEquatable.GetHashCode(IEqualityComparer comparer) - {{ - return 0; - }} + public override int GetHashCode() + {{ + return 0; + }} - int ITupleInternal.GetHashCode(IEqualityComparer comparer) - {{ - return 0; - }} + int IStructuralEquatable.GetHashCode(IEqualityComparer comparer) + {{ + return 0; + }} - public override string ToString() - {{ - return ""()""; - }} + int ITupleInternal.GetHashCode(IEqualityComparer comparer) + {{ + return 0; + }} - string ITupleInternal.ToStringEnd() - {{ - return "")""; - }} + public override string ToString() + {{ + return ""()""; + }} - public static ValueTuple Create() - {{ - return default(ValueTuple); - }} + string ITupleInternal.ToStringEnd() + {{ + return "")""; + }} - public static ValueTuple Create(T1 item1) - {{ - return new ValueTuple(item1); - }} + public static ValueTuple Create() + {{ + return default(ValueTuple); + }} - public static (T1, T2) Create(T1 item1, T2 item2) - {{ - return (item1, item2); - }} + public static ValueTuple Create(T1 item1) + {{ + return new ValueTuple(item1); + }} - public static (T1, T2, T3) Create(T1 item1, T2 item2, T3 item3) - {{ - return (item1, item2, item3); - }} + public static (T1, T2) Create(T1 item1, T2 item2) + {{ + return (item1, item2); + }} - public static (T1, T2, T3, T4) Create(T1 item1, T2 item2, T3 item3, T4 item4) - {{ - return (item1, item2, item3, item4); - }} + public static (T1, T2, T3) Create(T1 item1, T2 item2, T3 item3) + {{ + return (item1, item2, item3); + }} - public static (T1, T2, T3, T4, T5) Create(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5) - {{ - return (item1, item2, item3, item4, item5); - }} + public static (T1, T2, T3, T4) Create(T1 item1, T2 item2, T3 item3, T4 item4) + {{ + return (item1, item2, item3, item4); + }} - public static (T1, T2, T3, T4, T5, T6) Create(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6) - {{ - return (item1, item2, item3, item4, item5, item6); - }} + public static (T1, T2, T3, T4, T5) Create(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5) + {{ + return (item1, item2, item3, item4, item5); + }} - public static (T1, T2, T3, T4, T5, T6, T7) Create(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7) - {{ - return (item1, item2, item3, item4, item5, item6, item7); - }} + public static (T1, T2, T3, T4, T5, T6) Create(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6) + {{ + return (item1, item2, item3, item4, item5, item6); + }} - public static (T1, T2, T3, T4, T5, T6, T7, T8) Create(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, T8 item8) - {{ - return new ValueTuple>(item1, item2, item3, item4, item5, item6, item7, Create(item8)); - }} + public static (T1, T2, T3, T4, T5, T6, T7) Create(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7) + {{ + return (item1, item2, item3, item4, item5, item6, item7); + }} - internal static int CombineHashCodes(int h1, int h2) - {{ - return ((h1 << 5) + h1) ^ h2; - }} + public static (T1, T2, T3, T4, T5, T6, T7, T8) Create(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, T8 item8) + {{ + return new ValueTuple>(item1, item2, item3, item4, item5, item6, item7, Create(item8)); + }} - internal static int CombineHashCodes(int h1, int h2, int h3) - {{ - return CombineHashCodes(CombineHashCodes(h1, h2), h3); - }} + internal static int CombineHashCodes(int h1, int h2) + {{ + return ((h1 << 5) + h1) ^ h2; + }} - internal static int CombineHashCodes(int h1, int h2, int h3, int h4) - {{ - return CombineHashCodes(CombineHashCodes(h1, h2), CombineHashCodes(h3, h4)); - }} + internal static int CombineHashCodes(int h1, int h2, int h3) + {{ + return CombineHashCodes(CombineHashCodes(h1, h2), h3); + }} - internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5) - {{ - return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), h5); - }} + internal static int CombineHashCodes(int h1, int h2, int h3, int h4) + {{ + return CombineHashCodes(CombineHashCodes(h1, h2), CombineHashCodes(h3, h4)); + }} - internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6) - {{ - return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), CombineHashCodes(h5, h6)); - }} + internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5) + {{ + return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), h5); + }} - internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6, int h7) - {{ - return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), CombineHashCodes(h5, h6, h7)); - }} + internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6) + {{ + return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), CombineHashCodes(h5, h6)); + }} - internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6, int h7, int h8) - {{ - return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), CombineHashCodes(h5, h6, h7, h8)); - }} + internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6, int h7) + {{ + return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), CombineHashCodes(h5, h6, h7)); + }} + + internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6, int h7, int h8) + {{ + return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), CombineHashCodes(h5, h6, h7, h8)); }} }} #if false // {CSharpEditorResources.Decompilation_log} diff --git a/src/EditorFeatures/Test/MetadataAsSource/MetadataAsSourceTests.VisualBasic.cs b/src/EditorFeatures/Test/MetadataAsSource/MetadataAsSourceTests.VisualBasic.cs index abbb7c79c8164..ab4cdc2a8c6cb 100644 --- a/src/EditorFeatures/Test/MetadataAsSource/MetadataAsSourceTests.VisualBasic.cs +++ b/src/EditorFeatures/Test/MetadataAsSource/MetadataAsSourceTests.VisualBasic.cs @@ -126,101 +126,47 @@ End Class using System.Runtime.InteropServices; -namespace System +namespace System; + +[Serializable] +[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Interface | AttributeTargets.Delegate, Inherited = false)] +[ComVisible(true)] +public sealed class [|ObsoleteAttribute|] : Attribute {{ - // - // Summary: - // Marks the program elements that are no longer in use. This class cannot be inherited. - [Serializable] - [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Interface | AttributeTargets.Delegate, Inherited = false)] - [ComVisible(true)] - [__DynamicallyInvokable] - public sealed class [|ObsoleteAttribute|] : Attribute - {{ - private string _message; - - private bool _error; - - // - // Summary: - // Gets the workaround message, including a description of the alternative program - // elements. - // - // Returns: - // The workaround text string. - [__DynamicallyInvokable] - public string Message + public string Message + {{ + get {{ - [__DynamicallyInvokable] - get - {{ - return _message; - }} + /*Error: Empty body found. Decompiled assembly might be a reference assembly.*/ + ; }} + }} - // - // Summary: - // Gets a Boolean value indicating whether the compiler will treat usage of the - // obsolete program element as an error. - // - // Returns: - // true if the obsolete element usage is considered an error; otherwise, false. - // The default is false. - [__DynamicallyInvokable] - public bool IsError + public bool IsError + {{ + get {{ - [__DynamicallyInvokable] - get - {{ - return _error; - }} + /*Error: Empty body found. Decompiled assembly might be a reference assembly.*/ + ; }} + }} - // - // Summary: - // Initializes a new instance of the System.ObsoleteAttribute class with default - // properties. - [__DynamicallyInvokable] - public ObsoleteAttribute() - {{ - _message = null; - _error = false; - }} + public ObsoleteAttribute() + {{ + /*Error: Empty body found. Decompiled assembly might be a reference assembly.*/ + ; + }} - // - // Summary: - // Initializes a new instance of the System.ObsoleteAttribute class with a specified - // workaround message. - // - // Parameters: - // message: - // The text string that describes alternative workarounds. - [__DynamicallyInvokable] - public ObsoleteAttribute(string message) - {{ - _message = message; - _error = false; - }} + public ObsoleteAttribute(string message) + {{ + /*Error: Empty body found. Decompiled assembly might be a reference assembly.*/ + ; + }} - // - // Summary: - // Initializes a new instance of the System.ObsoleteAttribute class with a workaround - // message and a Boolean value indicating whether the obsolete element usage is - // considered an error. - // - // Parameters: - // message: - // The text string that describes alternative workarounds. - // - // error: - // true if the obsolete element usage generates a compiler error; false if it generates - // a compiler warning. - [__DynamicallyInvokable] - public ObsoleteAttribute(string message, bool error) - {{ - _message = message; - _error = error; - }} + public ObsoleteAttribute(string message, bool error) + {{ + /*Error: Empty body found. Decompiled assembly might be a reference assembly.*/ + ; }} }} #if false // {CSharpEditorResources.Decompilation_log} @@ -289,167 +235,166 @@ End Structure using System.Collections; using System.Runtime.InteropServices; -namespace System +namespace System; + +[StructLayout(LayoutKind.Sequential, Size = 1)] +public struct [|ValueTuple|] : IEquatable, IStructuralEquatable, IStructuralComparable, IComparable, IComparable, ITupleInternal {{ - [StructLayout(LayoutKind.Sequential, Size = 1)] - public struct [|ValueTuple|] : IEquatable, IStructuralEquatable, IStructuralComparable, IComparable, IComparable, ITupleInternal + int ITupleInternal.Size => 0; + + public override bool Equals(object obj) {{ - int ITupleInternal.Size => 0; + return obj is ValueTuple; + }} - public override bool Equals(object obj) - {{ - return obj is ValueTuple; - }} + public bool Equals(ValueTuple other) + {{ + return true; + }} - public bool Equals(ValueTuple other) - {{ - return true; - }} + bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer) + {{ + return other is ValueTuple; + }} - bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer) + int IComparable.CompareTo(object other) + {{ + if (other == null) {{ - return other is ValueTuple; + return 1; }} - int IComparable.CompareTo(object other) + if (!(other is ValueTuple)) {{ - if (other == null) - {{ - return 1; - }} + throw new ArgumentException(SR.ArgumentException_ValueTupleIncorrectType, ""other""); + }} - if (!(other is ValueTuple)) - {{ - throw new ArgumentException(SR.ArgumentException_ValueTupleIncorrectType, ""other""); - }} + return 0; + }} - return 0; - }} + public int CompareTo(ValueTuple other) + {{ + return 0; + }} - public int CompareTo(ValueTuple other) + int IStructuralComparable.CompareTo(object other, IComparer comparer) + {{ + if (other == null) {{ - return 0; + return 1; }} - int IStructuralComparable.CompareTo(object other, IComparer comparer) + if (!(other is ValueTuple)) {{ - if (other == null) - {{ - return 1; - }} - - if (!(other is ValueTuple)) - {{ - throw new ArgumentException(SR.ArgumentException_ValueTupleIncorrectType, ""other""); - }} - - return 0; + throw new ArgumentException(SR.ArgumentException_ValueTupleIncorrectType, ""other""); }} - public override int GetHashCode() - {{ - return 0; - }} + return 0; + }} - int IStructuralEquatable.GetHashCode(IEqualityComparer comparer) - {{ - return 0; - }} + public override int GetHashCode() + {{ + return 0; + }} - int ITupleInternal.GetHashCode(IEqualityComparer comparer) - {{ - return 0; - }} + int IStructuralEquatable.GetHashCode(IEqualityComparer comparer) + {{ + return 0; + }} - public override string ToString() - {{ - return ""()""; - }} + int ITupleInternal.GetHashCode(IEqualityComparer comparer) + {{ + return 0; + }} - string ITupleInternal.ToStringEnd() - {{ - return "")""; - }} + public override string ToString() + {{ + return ""()""; + }} - public static ValueTuple Create() - {{ - return default(ValueTuple); - }} + string ITupleInternal.ToStringEnd() + {{ + return "")""; + }} - public static ValueTuple Create(T1 item1) - {{ - return new ValueTuple(item1); - }} + public static ValueTuple Create() + {{ + return default(ValueTuple); + }} - public static (T1, T2) Create(T1 item1, T2 item2) - {{ - return (item1, item2); - }} + public static ValueTuple Create(T1 item1) + {{ + return new ValueTuple(item1); + }} - public static (T1, T2, T3) Create(T1 item1, T2 item2, T3 item3) - {{ - return (item1, item2, item3); - }} + public static (T1, T2) Create(T1 item1, T2 item2) + {{ + return (item1, item2); + }} - public static (T1, T2, T3, T4) Create(T1 item1, T2 item2, T3 item3, T4 item4) - {{ - return (item1, item2, item3, item4); - }} + public static (T1, T2, T3) Create(T1 item1, T2 item2, T3 item3) + {{ + return (item1, item2, item3); + }} - public static (T1, T2, T3, T4, T5) Create(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5) - {{ - return (item1, item2, item3, item4, item5); - }} + public static (T1, T2, T3, T4) Create(T1 item1, T2 item2, T3 item3, T4 item4) + {{ + return (item1, item2, item3, item4); + }} - public static (T1, T2, T3, T4, T5, T6) Create(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6) - {{ - return (item1, item2, item3, item4, item5, item6); - }} + public static (T1, T2, T3, T4, T5) Create(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5) + {{ + return (item1, item2, item3, item4, item5); + }} - public static (T1, T2, T3, T4, T5, T6, T7) Create(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7) - {{ - return (item1, item2, item3, item4, item5, item6, item7); - }} + public static (T1, T2, T3, T4, T5, T6) Create(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6) + {{ + return (item1, item2, item3, item4, item5, item6); + }} - public static (T1, T2, T3, T4, T5, T6, T7, T8) Create(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, T8 item8) - {{ - return new ValueTuple>(item1, item2, item3, item4, item5, item6, item7, Create(item8)); - }} + public static (T1, T2, T3, T4, T5, T6, T7) Create(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7) + {{ + return (item1, item2, item3, item4, item5, item6, item7); + }} - internal static int CombineHashCodes(int h1, int h2) - {{ - return ((h1 << 5) + h1) ^ h2; - }} + public static (T1, T2, T3, T4, T5, T6, T7, T8) Create(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, T8 item8) + {{ + return new ValueTuple>(item1, item2, item3, item4, item5, item6, item7, Create(item8)); + }} - internal static int CombineHashCodes(int h1, int h2, int h3) - {{ - return CombineHashCodes(CombineHashCodes(h1, h2), h3); - }} + internal static int CombineHashCodes(int h1, int h2) + {{ + return ((h1 << 5) + h1) ^ h2; + }} - internal static int CombineHashCodes(int h1, int h2, int h3, int h4) - {{ - return CombineHashCodes(CombineHashCodes(h1, h2), CombineHashCodes(h3, h4)); - }} + internal static int CombineHashCodes(int h1, int h2, int h3) + {{ + return CombineHashCodes(CombineHashCodes(h1, h2), h3); + }} - internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5) - {{ - return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), h5); - }} + internal static int CombineHashCodes(int h1, int h2, int h3, int h4) + {{ + return CombineHashCodes(CombineHashCodes(h1, h2), CombineHashCodes(h3, h4)); + }} - internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6) - {{ - return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), CombineHashCodes(h5, h6)); - }} + internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5) + {{ + return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), h5); + }} - internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6, int h7) - {{ - return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), CombineHashCodes(h5, h6, h7)); - }} + internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6) + {{ + return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), CombineHashCodes(h5, h6)); + }} - internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6, int h7, int h8) - {{ - return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), CombineHashCodes(h5, h6, h7, h8)); - }} + internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6, int h7) + {{ + return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), CombineHashCodes(h5, h6, h7)); + }} + + internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6, int h7, int h8) + {{ + return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), CombineHashCodes(h5, h6, h7, h8)); }} }} #if false // {CSharpEditorResources.Decompilation_log} diff --git a/src/EditorFeatures/Test/MetadataAsSource/MetadataAsSourceTests.cs b/src/EditorFeatures/Test/MetadataAsSource/MetadataAsSourceTests.cs index 2be095d1d6494..da79213645084 100644 --- a/src/EditorFeatures/Test/MetadataAsSource/MetadataAsSourceTests.cs +++ b/src/EditorFeatures/Test/MetadataAsSource/MetadataAsSourceTests.cs @@ -935,11 +935,10 @@ End Class // Decompiled with ICSharpCode.Decompiler {ICSharpCodeDecompilerVersion} #endregion -namespace N +namespace N; + +public class [|C|] {{ - public class [|C|] - {{ - }} }} #if false // {CSharpEditorResources.Decompilation_log} {string.Format(CSharpEditorResources._0_items_in_cache, 6)} @@ -953,11 +952,10 @@ public class [|C|] // Decompiled with ICSharpCode.Decompiler {ICSharpCodeDecompilerVersion} #endregion -namespace N +namespace N; + +public class [|C|] {{ - public class [|C|] - {{ - }} }} #if false // {CSharpEditorResources.Decompilation_log} {string.Format(CSharpEditorResources._0_items_in_cache, 9)} diff --git a/src/VisualStudio/IntegrationTest/New.IntegrationTests/CSharp/CSharpGoToDefinition.cs b/src/VisualStudio/IntegrationTest/New.IntegrationTests/CSharp/CSharpGoToDefinition.cs index 181ac950c2402..690a8abf7d157 100644 --- a/src/VisualStudio/IntegrationTest/New.IntegrationTests/CSharp/CSharpGoToDefinition.cs +++ b/src/VisualStudio/IntegrationTest/New.IntegrationTests/CSharp/CSharpGoToDefinition.cs @@ -133,8 +133,8 @@ public override string ToString() var actual = await TestServices.Editor.GetOutliningSpansAsync(HangMitigatingCancellationToken); // When collapsing, not everything is collapsed (eg, namespace and class aren't), but most things are - Assert.Equal(32, actual.Length); - Assert.Equal(8, actual.Count(s => !s.Collapsed)); + Assert.Equal(31, actual.Length); + Assert.Equal(7, actual.Count(s => !s.Collapsed)); } [IdeFact] @@ -163,7 +163,7 @@ public override string ToString() var actual = await TestServices.Editor.GetOutliningSpansAsync(HangMitigatingCancellationToken); - Assert.Equal(32, actual.Length); + Assert.Equal(31, actual.Length); Assert.Equal(1, actual.Count(s => s.Collapsed)); }