diff --git a/src/Compilers/CSharp/Test/Symbol/Symbols/Metadata/PE/NoPia.cs b/src/Compilers/CSharp/Test/Symbol/Symbols/Metadata/PE/NoPia.cs index 79b496f0de07500fa1c7306815204e577cc4073f..a8bcc74bb8edc92d1c7bf4ad28be0a992fff95de 100644 --- a/src/Compilers/CSharp/Test/Symbol/Symbols/Metadata/PE/NoPia.cs +++ b/src/Compilers/CSharp/Test/Symbol/Symbols/Metadata/PE/NoPia.cs @@ -6,6 +6,7 @@ using Microsoft.CodeAnalysis.CSharp.Symbols; using Microsoft.CodeAnalysis.CSharp.Test.Utilities; using Microsoft.CodeAnalysis.Test.Utilities; +using Roslyn.Test.Utilities; using Xunit; namespace Microsoft.CodeAnalysis.CSharp.UnitTests.Symbols.Metadata.PE @@ -733,7 +734,7 @@ public void GenericsClosedOverLocalTypes1() Assert.IsType(localTypes3.GetMembers("Test6").OfType().Single().ReturnType); } - [Fact] + [ConditionalFact(typeof(DesktopOnly))] public void GenericsClosedOverLocalTypes2() { var mscorlibRef = TestReferences.NetFx.v4_0_21006.mscorlib; diff --git a/src/Compilers/CSharp/Test/Symbol/Symbols/Source/SourcePlusMetadataTests.cs b/src/Compilers/CSharp/Test/Symbol/Symbols/Source/SourcePlusMetadataTests.cs index a9be81221ef999f44e936f29cdd0723222323bfa..364a3584451689a45c6191b05dc46d155b80aacc 100644 --- a/src/Compilers/CSharp/Test/Symbol/Symbols/Source/SourcePlusMetadataTests.cs +++ b/src/Compilers/CSharp/Test/Symbol/Symbols/Source/SourcePlusMetadataTests.cs @@ -171,7 +171,7 @@ struct Name5 {} } [WorkItem(527531, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/527531")] - [Fact(Skip = "https://github.com/dotnet/roslyn/issues/18985")] + [Fact] public void InterfaceName() { var text = @" diff --git a/src/Test/Utilities/Portable/TestBase.cs b/src/Test/Utilities/Portable/TestBase.cs index 3f09ca844ceb1fffb6a32d1bdc568ed5738e41c3..ed44dc943bba2a8c9c967bd67dc62638c7dbce7c 100644 --- a/src/Test/Utilities/Portable/TestBase.cs +++ b/src/Test/Utilities/Portable/TestBase.cs @@ -53,6 +53,19 @@ public virtual void Dispose() #region Metadata References + /// + /// Helper for atomically acquiring and saving a metadata reference. Necessary + /// if the acquired reference will ever be used in object identity comparisons. + /// + private static MetadataReference GetOrCreateMetadataReference(ref MetadataReference field, Func getReference) + { + if (field == null) + { + Interlocked.CompareExchange(ref field, getReference(), null); + } + return field; + } + private static MetadataReference[] s_lazyDefaultVbReferences; private static MetadataReference[] s_lazyLatestVbReferences; @@ -143,22 +156,10 @@ public static MetadataReference[] PortableRefsMinimal private static MetadataReference s_systemCoreRef; public static MetadataReference SystemCoreRef - { - get - { - if (s_systemCoreRef == null) - { - // We rely on reference equality in CreateSharedCompilation, so - // we must use a CompareExchange here. - Interlocked.CompareExchange( - ref s_systemCoreRef, - AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319.System_Core).GetReference(display: "System.Core.v4_0_30319.dll"), - null); - } - - return s_systemCoreRef; - } - } + // We rely on reference equality in CreateSharedCompilation, so + // we must use a CompareExchange here. + => GetOrCreateMetadataReference(ref s_systemCoreRef, + () => AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319.System_Core).GetReference(display: "System.Core.v4_0_30319.dll")); private static MetadataReference s_systemCoreRef_v4_0_30319_17929; public static MetadataReference SystemCoreRef_v4_0_30319_17929 @@ -232,17 +233,10 @@ public static MetadataReference SystemDataRef private static MetadataReference s_mscorlibRef; public static MetadataReference MscorlibRef - { - get - { - if (s_mscorlibRef == null) - { - s_mscorlibRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319.mscorlib).GetReference(display: "mscorlib.v4_0_30319.dll"); - } - - return s_mscorlibRef; - } - } + // We rely on reference equality in CreateSharedCompilation, so + // we must use a CompareExchange here. + => GetOrCreateMetadataReference(ref s_mscorlibRef, + () => AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319.mscorlib).GetReference(display: "mscorlib.v4_0_30319.dll")); private static MetadataReference s_mscorlibRefPortable; public static MetadataReference MscorlibRefPortable @@ -415,22 +409,8 @@ public static MetadataReference SystemDynamicRuntimeRef private static MetadataReference s_systemRef; public static MetadataReference SystemRef - { - get - { - if (s_systemRef == null) - { - // We rely on reference equality in CreateSharedCompilation, so - // we must use a CompareExchange here. - Interlocked.CompareExchange( - ref s_systemRef, - AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319.System).GetReference(display: "System.v4_0_30319.dll"), - null); - } - - return s_systemRef; - } - } + => GetOrCreateMetadataReference(ref s_systemRef, + () => AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319.System).GetReference(display: "System.v4_0_30319.dll")); private static MetadataReference s_systemRef_v46; public static MetadataReference SystemRef_v46