From c8f779e35ea9126ff03840cd2dd58ea66e375af7 Mon Sep 17 00:00:00 2001 From: tmat Date: Tue, 29 Apr 2025 12:10:50 -0700 Subject: [PATCH 1/3] Add Microsoft.CodeAnalysis.Extensions package --- Roslyn.sln | 15 ++++ eng/config/PublishData.json | 1 + .../Microsoft.CodeAnalysis.CodeStyle.csproj | 1 + .../Core/Portable/SpecialTypeExtensions.cs | 3 - .../DesignerAttributeServiceTests.cs | 1 + .../Microsoft.CodeAnalysis.Workspaces.csproj | 1 + .../Core/CompilerExtensions.projitems | 36 -------- .../Core/Extensions/CompilationExtensions.cs | 89 ------------------- .../Core/Extensions/SpecialTypeExtensions.cs | 35 -------- .../Compilation/CompilationExtensions.cs} | 85 +++++++++++++++++- ...oft.CodeAnalysis.Extensions.Package.csproj | 34 +++++++ ...icrosoft.CodeAnalysis.Extensions.projitems | 51 +++++++++++ .../Microsoft.CodeAnalysis.Extensions.shproj | 14 +++ .../Symbols}/AccessibilityUtilities.cs | 0 .../Symbols}/IAssemblySymbolExtensions.cs | 0 .../Symbols}/IMethodSymbolExtensions.cs | 0 .../Symbols}/INamedTypeSymbolExtensions.cs | 0 .../INamespaceOrTypeSymbolExtensions.cs | 0 .../Symbols}/IParameterSymbolExtensions.cs | 0 .../Symbols}/IPropertySymbolExtensions.cs | 0 ...xtensions.RequiresUnsafeModifierVisitor.cs | 0 .../Symbols}/ISymbolExtensions.cs | 0 .../ISymbolExtensions_Accessibility.cs | 0 .../Symbols}/ITypeGenerator.cs | 0 .../ITypeParameterSymbolExtensions.cs | 0 ...peSymbolExtensions.AnonymousTypeRemover.cs | 0 ...ions.CollectTypeParameterSymbolsVisitor.cs | 0 ...mbolExtensions.CompilationTypeGenerator.cs | 0 ...lExtensions.MinimalAccessibilityVisitor.cs | 0 ...SymbolExtensions.SubstituteTypesVisitor.cs | 0 ...ensions.UnavailableTypeParameterRemover.cs | 0 ...ymbolExtensions.UnnamedErrorTypeRemover.cs | 0 .../Symbols}/ITypeSymbolExtensions.cs | 0 .../Symbols}/MethodKindExtensions.cs | 0 .../Symbols}/PredefinedOperator.cs | 0 .../Symbols}/PredefinedType.cs | 0 .../Symbols}/PredefinedTypeExtensions.cs | 25 ++++++ .../Symbols}/SignatureComparer.cs | 0 .../Symbols}/SymbolDisplayFormats.cs | 0 ...olEquivalenceComparer.AssemblyComparers.cs | 0 ...lEquivalenceComparer.EquivalenceVisitor.cs | 0 ...lEquivalenceComparer.GetHashCodeVisitor.cs | 0 ...omparer.ParameterSymbolEqualityComparer.cs | 0 ....SignatureTypeSymbolEquivalenceComparer.cs | 0 .../Symbols}/SymbolEquivalenceComparer.cs | 0 .../Symbols}/SymbolVisibility.cs | 0 46 files changed, 226 insertions(+), 165 deletions(-) delete mode 100644 src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/CompilationExtensions.cs delete mode 100644 src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/SpecialTypeExtensions.cs rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Extensions/ICompilationExtensions.cs => Extensions/Compilation/CompilationExtensions.cs} (80%) create mode 100644 src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Microsoft.CodeAnalysis.Extensions.Package.csproj create mode 100644 src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Microsoft.CodeAnalysis.Extensions.projitems create mode 100644 src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Microsoft.CodeAnalysis.Extensions.shproj rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Extensions => Extensions/Symbols}/AccessibilityUtilities.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Extensions => Extensions/Symbols}/IAssemblySymbolExtensions.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Extensions => Extensions/Symbols}/IMethodSymbolExtensions.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Extensions => Extensions/Symbols}/INamedTypeSymbolExtensions.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Extensions => Extensions/Symbols}/INamespaceOrTypeSymbolExtensions.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Extensions => Extensions/Symbols}/IParameterSymbolExtensions.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Extensions => Extensions/Symbols}/IPropertySymbolExtensions.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Extensions => Extensions/Symbols}/ISymbolExtensions.RequiresUnsafeModifierVisitor.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Extensions => Extensions/Symbols}/ISymbolExtensions.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Extensions => Extensions/Symbols}/ISymbolExtensions_Accessibility.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Extensions => Extensions/Symbols}/ITypeGenerator.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Extensions => Extensions/Symbols}/ITypeParameterSymbolExtensions.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Extensions => Extensions/Symbols}/ITypeSymbolExtensions.AnonymousTypeRemover.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Extensions => Extensions/Symbols}/ITypeSymbolExtensions.CollectTypeParameterSymbolsVisitor.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Extensions => Extensions/Symbols}/ITypeSymbolExtensions.CompilationTypeGenerator.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Extensions => Extensions/Symbols}/ITypeSymbolExtensions.MinimalAccessibilityVisitor.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Extensions => Extensions/Symbols}/ITypeSymbolExtensions.SubstituteTypesVisitor.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Extensions => Extensions/Symbols}/ITypeSymbolExtensions.UnavailableTypeParameterRemover.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Extensions => Extensions/Symbols}/ITypeSymbolExtensions.UnnamedErrorTypeRemover.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Extensions => Extensions/Symbols}/ITypeSymbolExtensions.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Extensions => Extensions/Symbols}/MethodKindExtensions.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Utilities => Extensions/Symbols}/PredefinedOperator.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Utilities => Extensions/Symbols}/PredefinedType.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Extensions => Extensions/Symbols}/PredefinedTypeExtensions.cs (55%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Utilities => Extensions/Symbols}/SignatureComparer.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Utilities => Extensions/Symbols}/SymbolDisplayFormats.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Utilities => Extensions/Symbols}/SymbolEquivalenceComparer.AssemblyComparers.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Utilities => Extensions/Symbols}/SymbolEquivalenceComparer.EquivalenceVisitor.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Utilities => Extensions/Symbols}/SymbolEquivalenceComparer.GetHashCodeVisitor.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Utilities => Extensions/Symbols}/SymbolEquivalenceComparer.ParameterSymbolEqualityComparer.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Utilities => Extensions/Symbols}/SymbolEquivalenceComparer.SignatureTypeSymbolEquivalenceComparer.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Utilities => Extensions/Symbols}/SymbolEquivalenceComparer.cs (100%) rename src/Workspaces/SharedUtilitiesAndExtensions/Compiler/{Core/Utilities => Extensions/Symbols}/SymbolVisibility.cs (100%) diff --git a/Roslyn.sln b/Roslyn.sln index fcfe71c1f73cc..9183b7e65c9c6 100644 --- a/Roslyn.sln +++ b/Roslyn.sln @@ -725,6 +725,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestReferenceAssembly", "sr EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.CodeAnalysis.ExternalAccess.Extensions", "src\Tools\ExternalAccess\Extensions\Microsoft.CodeAnalysis.ExternalAccess.Extensions.csproj", "{6C816C16-D563-884A-D65B-5E68C6FB6659}" EndProject +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Microsoft.CodeAnalysis.Extensions", "src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Microsoft.CodeAnalysis.Extensions.shproj", "{02BCC112-0A29-43AA-84FA-C71C18A9486C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.CodeAnalysis.Extensions.Package", "src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Microsoft.CodeAnalysis.Extensions.Package.csproj", "{EEFAB994-3778-9C0D-1E88-C0ABB1D3DE43}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -1787,6 +1791,10 @@ Global {6C816C16-D563-884A-D65B-5E68C6FB6659}.Debug|Any CPU.Build.0 = Debug|Any CPU {6C816C16-D563-884A-D65B-5E68C6FB6659}.Release|Any CPU.ActiveCfg = Release|Any CPU {6C816C16-D563-884A-D65B-5E68C6FB6659}.Release|Any CPU.Build.0 = Release|Any CPU + {EEFAB994-3778-9C0D-1E88-C0ABB1D3DE43}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EEFAB994-3778-9C0D-1E88-C0ABB1D3DE43}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EEFAB994-3778-9C0D-1E88-C0ABB1D3DE43}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EEFAB994-3778-9C0D-1E88-C0ABB1D3DE43}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -2126,6 +2134,8 @@ Global {29080628-23A6-1DCB-F15E-93F1D1682CC1} = {482C1FC7-4FD6-4381-8078-73BEBFAF4349} {31EB654C-B562-73B4-2456-78FA875515D2} = {0DDCFE67-7D4E-4709-9882-EC032A031789} {6C816C16-D563-884A-D65B-5E68C6FB6659} = {8977A560-45C2-4EC2-A849-97335B382C74} + {02BCC112-0A29-43AA-84FA-C71C18A9486C} = {7A69EA65-4411-4CD0-B439-035E720C1BD3} + {EEFAB994-3778-9C0D-1E88-C0ABB1D3DE43} = {7A69EA65-4411-4CD0-B439-035E720C1BD3} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {604E6B91-7BC0-4126-AE07-D4D2FEFC3D29} @@ -2160,6 +2170,7 @@ Global src\Dependencies\PooledObjects\Microsoft.CodeAnalysis.PooledObjects.projitems*{275812ee-dedb-4232-9439-91c9757d2ae4}*SharedItemsImports = 5 src\Dependencies\Threading\Microsoft.CodeAnalysis.Threading.projitems*{275812ee-dedb-4232-9439-91c9757d2ae4}*SharedItemsImports = 5 src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\CompilerExtensions.projitems*{275812ee-dedb-4232-9439-91c9757d2ae4}*SharedItemsImports = 5 + src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Microsoft.CodeAnalysis.Extensions.projitems*{275812ee-dedb-4232-9439-91c9757d2ae4}*SharedItemsImports = 5 src\Dependencies\Contracts\Microsoft.CodeAnalysis.Contracts.projitems*{2801f82b-78ce-4bae-b06f-537574751e2e}*SharedItemsImports = 5 src\RoslynAnalyzers\Utilities\Refactoring.CSharp\Refactoring.CSharp.Utilities.projitems*{3055f932-0d1e-4823-a03a-7b62c7639bda}*SharedItemsImports = 13 src\ExpressionEvaluator\VisualBasic\Source\ResultProvider\BasicResultProvider.projitems*{3140fe61-0856-4367-9aa3-8081b9a80e35}*SharedItemsImports = 13 @@ -2184,6 +2195,7 @@ Global src\Dependencies\PooledObjects\Microsoft.CodeAnalysis.PooledObjects.projitems*{5f8d2414-064a-4b3a-9b42-8e2a04246be5}*SharedItemsImports = 5 src\Dependencies\Threading\Microsoft.CodeAnalysis.Threading.projitems*{5f8d2414-064a-4b3a-9b42-8e2a04246be5}*SharedItemsImports = 5 src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\CompilerExtensions.projitems*{5f8d2414-064a-4b3a-9b42-8e2a04246be5}*SharedItemsImports = 5 + src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Microsoft.CodeAnalysis.Extensions.projitems*{5f8d2414-064a-4b3a-9b42-8e2a04246be5}*SharedItemsImports = 5 src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\WorkspaceExtensions.projitems*{5f8d2414-064a-4b3a-9b42-8e2a04246be5}*SharedItemsImports = 5 src\Analyzers\Core\CodeFixes\CodeFixes.projitems*{5ff1e493-69cc-4d0b-83f2-039f469a04e1}*SharedItemsImports = 5 src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\WorkspaceExtensions.projitems*{5ff1e493-69cc-4d0b-83f2-039f469a04e1}*SharedItemsImports = 5 @@ -2267,6 +2279,9 @@ Global src\Analyzers\Core\CodeFixes\CodeFixes.projitems*{edc68a0e-c68d-4a74-91b7-bf38ec909888}*SharedItemsImports = 5 src\Compilers\Core\AnalyzerDriver\AnalyzerDriver.projitems*{edc68a0e-c68d-4a74-91b7-bf38ec909888}*SharedItemsImports = 5 src\Dependencies\CodeAnalysis.Debugging\Microsoft.CodeAnalysis.Debugging.projitems*{edc68a0e-c68d-4a74-91b7-bf38ec909888}*SharedItemsImports = 5 + src\Dependencies\Collections\Microsoft.CodeAnalysis.Collections.projitems*{eefab994-3778-9c0d-1e88-c0abb1d3de43}*SharedItemsImports = 5 + src\Dependencies\Contracts\Microsoft.CodeAnalysis.Contracts.projitems*{eefab994-3778-9c0d-1e88-c0abb1d3de43}*SharedItemsImports = 5 + src\Dependencies\PooledObjects\Microsoft.CodeAnalysis.PooledObjects.projitems*{eefab994-3778-9c0d-1e88-c0abb1d3de43}*SharedItemsImports = 5 src\Dependencies\Contracts\Microsoft.CodeAnalysis.Contracts.projitems*{fa0e905d-ec46-466d-b7b2-3b5557f9428c}*SharedItemsImports = 5 src\ExpressionEvaluator\Core\Source\ResultProvider\ResultProvider.projitems*{fa0e905d-ec46-466d-b7b2-3b5557f9428c}*SharedItemsImports = 5 src\Dependencies\Contracts\Microsoft.CodeAnalysis.Contracts.projitems*{fc2ae90b-2e4b-4045-9fdd-73d4f5ed6c89}*SharedItemsImports = 5 diff --git a/eng/config/PublishData.json b/eng/config/PublishData.json index 44e979e154e97..1d494eeb3f501 100644 --- a/eng/config/PublishData.json +++ b/eng/config/PublishData.json @@ -36,6 +36,7 @@ "Microsoft.CodeAnalysis.PooledObjects": "arcade", "Microsoft.CodeAnalysis.Collections": "arcade", "Microsoft.CodeAnalysis.Threading": "arcade", + "Microsoft.CodeAnalysis.Extensions": "vs-impl", "Microsoft.CodeAnalysis.Features": "arcade", "Microsoft.CodeAnalysis.EditorFeatures": "vssdk", "Microsoft.CodeAnalysis.EditorFeatures.Common": "vssdk", diff --git a/src/CodeStyle/Core/Analyzers/Microsoft.CodeAnalysis.CodeStyle.csproj b/src/CodeStyle/Core/Analyzers/Microsoft.CodeAnalysis.CodeStyle.csproj index 8860cb81eeda1..928ffeb9c512a 100644 --- a/src/CodeStyle/Core/Analyzers/Microsoft.CodeAnalysis.CodeStyle.csproj +++ b/src/CodeStyle/Core/Analyzers/Microsoft.CodeAnalysis.CodeStyle.csproj @@ -51,5 +51,6 @@ + \ No newline at end of file diff --git a/src/Compilers/Core/Portable/SpecialTypeExtensions.cs b/src/Compilers/Core/Portable/SpecialTypeExtensions.cs index bcca9e8a5250d..637192b0e0664 100644 --- a/src/Compilers/Core/Portable/SpecialTypeExtensions.cs +++ b/src/Compilers/Core/Portable/SpecialTypeExtensions.cs @@ -273,8 +273,6 @@ public static int VBForToShiftBits(this SpecialType specialType) public static SpecialType FromRuntimeTypeOfLiteralValue(object value) { - RoslynDebug.Assert(value != null); - // Perf: Note that JIT optimizes each expression val.GetType() == typeof(T) to a single register comparison. // Also the checks are sorted by commonality of the checked types. @@ -371,7 +369,6 @@ public static bool CanOptimizeBehavior(this SpecialType specialType) /// internal static ulong ConvertUnderlyingValueToUInt64(this SpecialType enumUnderlyingType, object value) { - RoslynDebug.Assert(value != null); Debug.Assert(value.GetType().IsPrimitive); unchecked diff --git a/src/VisualStudio/CSharp/Test/DesignerAttribute/DesignerAttributeServiceTests.cs b/src/VisualStudio/CSharp/Test/DesignerAttribute/DesignerAttributeServiceTests.cs index 49ac948899936..5ab513cc86b5c 100644 --- a/src/VisualStudio/CSharp/Test/DesignerAttribute/DesignerAttributeServiceTests.cs +++ b/src/VisualStudio/CSharp/Test/DesignerAttribute/DesignerAttributeServiceTests.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; +using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.DesignerAttribute; using Microsoft.CodeAnalysis.Shared.Extensions; using Microsoft.CodeAnalysis.Test.Utilities; diff --git a/src/Workspaces/Core/Portable/Microsoft.CodeAnalysis.Workspaces.csproj b/src/Workspaces/Core/Portable/Microsoft.CodeAnalysis.Workspaces.csproj index 15f533b000ae7..62b8d4de443a2 100644 --- a/src/Workspaces/Core/Portable/Microsoft.CodeAnalysis.Workspaces.csproj +++ b/src/Workspaces/Core/Portable/Microsoft.CodeAnalysis.Workspaces.csproj @@ -167,6 +167,7 @@ + diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/CompilerExtensions.projitems b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/CompilerExtensions.projitems index e27a5cba4908b..8042b3400c08e 100644 --- a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/CompilerExtensions.projitems +++ b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/CompilerExtensions.projitems @@ -208,20 +208,10 @@ - - - - - - - - - - @@ -495,12 +485,8 @@ - - - - @@ -522,7 +508,6 @@ - @@ -537,22 +522,9 @@ - - - - - - - - - - - - - @@ -563,14 +535,6 @@ - - - - - - - - diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/CompilationExtensions.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/CompilationExtensions.cs deleted file mode 100644 index bd39bdbd2feb2..0000000000000 --- a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/CompilationExtensions.cs +++ /dev/null @@ -1,89 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using System.Diagnostics; - -namespace Microsoft.CodeAnalysis.Shared.Extensions; - -internal static class CompilationExtensions -{ - /// - /// Gets a type by its metadata name to use for code analysis within a . This method - /// attempts to find the "best" symbol to use for code analysis, which is the symbol matching the first of the - /// following rules. - /// - /// - /// - /// If only one type with the given name is found within the compilation and its referenced assemblies, that - /// type is returned regardless of accessibility. - /// - /// - /// If the current defines the symbol, that symbol is returned. - /// - /// - /// If exactly one referenced assembly defines the symbol in a manner that makes it visible to the current - /// , that symbol is returned. - /// - /// - /// Otherwise, this method returns . - /// - /// - /// - /// The to consider for analysis. - /// The fully-qualified metadata type name to find. - /// The symbol to use for code analysis; otherwise, . - public static INamedTypeSymbol? GetBestTypeByMetadataName(this Compilation compilation, string fullyQualifiedMetadataName) - { - INamedTypeSymbol? type = null; - - foreach (var currentType in compilation.GetTypesByMetadataName(fullyQualifiedMetadataName)) - { - if (ReferenceEquals(currentType.ContainingAssembly, compilation.Assembly)) - { - Debug.Assert(type is null); - return currentType; - } - - switch (currentType.GetResultantVisibility()) - { - case Utilities.SymbolVisibility.Public: - case Utilities.SymbolVisibility.Internal when currentType.ContainingAssembly.GivesAccessTo(compilation.Assembly): - break; - - default: - continue; - } - - if (type is object) - { - // Multiple visible types with the same metadata name are present - return null; - } - - type = currentType; - } - - return type; - } - - /// - /// Gets implicit method, that wraps top-level statements. - /// - public static IMethodSymbol? GetTopLevelStatementsMethod(this Compilation compilation) - { - foreach (var candidateTopLevelType in compilation.SourceModule.GlobalNamespace.GetTypeMembers(WellKnownMemberNames.TopLevelStatementsEntryPointTypeName, arity: 0)) - { - foreach (var candidateMember in candidateTopLevelType.GetMembers(WellKnownMemberNames.TopLevelStatementsEntryPointMethodName)) - { - if (candidateMember is IMethodSymbol method) - return method; - } - } - - return null; - } - - public static INamedTypeSymbol? TryGetCallingConventionSymbol(this Compilation compilation, string callingConvention) - => compilation.GetBestTypeByMetadataName($"System.Runtime.CompilerServices.CallConv{callingConvention}"); -} diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/SpecialTypeExtensions.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/SpecialTypeExtensions.cs deleted file mode 100644 index a1f2c9568b159..0000000000000 --- a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/SpecialTypeExtensions.cs +++ /dev/null @@ -1,35 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using Microsoft.CodeAnalysis.LanguageService; - -namespace Microsoft.CodeAnalysis.Shared.Extensions; - -internal static partial class SpecialTypeExtensions -{ - public static PredefinedType ToPredefinedType(this SpecialType specialType) - => specialType switch - { - SpecialType.System_Object => PredefinedType.Object, - SpecialType.System_Void => PredefinedType.Void, - SpecialType.System_Boolean => PredefinedType.Boolean, - SpecialType.System_Char => PredefinedType.Char, - SpecialType.System_SByte => PredefinedType.SByte, - SpecialType.System_Byte => PredefinedType.Byte, - SpecialType.System_Int16 => PredefinedType.Int16, - SpecialType.System_UInt16 => PredefinedType.UInt16, - SpecialType.System_Int32 => PredefinedType.Int32, - SpecialType.System_UInt32 => PredefinedType.UInt32, - SpecialType.System_Int64 => PredefinedType.Int64, - SpecialType.System_UInt64 => PredefinedType.UInt64, - SpecialType.System_Decimal => PredefinedType.Decimal, - SpecialType.System_Single => PredefinedType.Single, - SpecialType.System_Double => PredefinedType.Double, - SpecialType.System_String => PredefinedType.String, - SpecialType.System_DateTime => PredefinedType.DateTime, - SpecialType.System_IntPtr => PredefinedType.IntPtr, - SpecialType.System_UIntPtr => PredefinedType.UIntPtr, - _ => PredefinedType.None, - }; -} diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/ICompilationExtensions.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Compilation/CompilationExtensions.cs similarity index 80% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/ICompilationExtensions.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Compilation/CompilationExtensions.cs index d28f62304e326..404a65a1b5246 100644 --- a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/ICompilationExtensions.cs +++ b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Compilation/CompilationExtensions.cs @@ -17,10 +17,12 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.CodeAnalysis.PooledObjects; +using Microsoft.CodeAnalysis.Shared.Utilities; +using Microsoft.CodeAnalysis.Shared.Extensions; -namespace Microsoft.CodeAnalysis.Shared.Extensions; +namespace Microsoft.CodeAnalysis; -internal static class ICompilationExtensions +internal static class CompilationExtensions { public static ImmutableArray GetReferencedCompilations(this Compilation compilation) { @@ -286,4 +288,83 @@ public static ImmutableArray GetReferencedAssemblySymbols(this public static INamedTypeSymbol? InterpolatedStringHandlerAttributeType(this Compilation compilation) => compilation.GetTypeByMetadataName(typeof(InterpolatedStringHandlerAttribute).FullName!); + + /// + /// Gets a type by its metadata name to use for code analysis within a . This method + /// attempts to find the "best" symbol to use for code analysis, which is the symbol matching the first of the + /// following rules. + /// + /// + /// + /// If only one type with the given name is found within the compilation and its referenced assemblies, that + /// type is returned regardless of accessibility. + /// + /// + /// If the current defines the symbol, that symbol is returned. + /// + /// + /// If exactly one referenced assembly defines the symbol in a manner that makes it visible to the current + /// , that symbol is returned. + /// + /// + /// Otherwise, this method returns . + /// + /// + /// + /// The to consider for analysis. + /// The fully-qualified metadata type name to find. + /// The symbol to use for code analysis; otherwise, . + public static INamedTypeSymbol? GetBestTypeByMetadataName(this Compilation compilation, string fullyQualifiedMetadataName) + { + INamedTypeSymbol? type = null; + + foreach (var currentType in compilation.GetTypesByMetadataName(fullyQualifiedMetadataName)) + { + if (ReferenceEquals(currentType.ContainingAssembly, compilation.Assembly)) + { + Debug.Assert(type is null); + return currentType; + } + + switch (currentType.GetResultantVisibility()) + { + case SymbolVisibility.Public: + case SymbolVisibility.Internal when currentType.ContainingAssembly.GivesAccessTo(compilation.Assembly): + break; + + default: + continue; + } + + if (type is object) + { + // Multiple visible types with the same metadata name are present + return null; + } + + type = currentType; + } + + return type; + } + + /// + /// Gets implicit method, that wraps top-level statements. + /// + public static IMethodSymbol? GetTopLevelStatementsMethod(this Compilation compilation) + { + foreach (var candidateTopLevelType in compilation.SourceModule.GlobalNamespace.GetTypeMembers(WellKnownMemberNames.TopLevelStatementsEntryPointTypeName, arity: 0)) + { + foreach (var candidateMember in candidateTopLevelType.GetMembers(WellKnownMemberNames.TopLevelStatementsEntryPointMethodName)) + { + if (candidateMember is IMethodSymbol method) + return method; + } + } + + return null; + } + + public static INamedTypeSymbol? TryGetCallingConventionSymbol(this Compilation compilation, string callingConvention) + => compilation.GetBestTypeByMetadataName($"System.Runtime.CompilerServices.CallConv{callingConvention}"); } diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Microsoft.CodeAnalysis.Extensions.Package.csproj b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Microsoft.CodeAnalysis.Extensions.Package.csproj new file mode 100644 index 0000000000000..6e7c49cc478fd --- /dev/null +++ b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Microsoft.CodeAnalysis.Extensions.Package.csproj @@ -0,0 +1,34 @@ + + + + + netstandard2.0 + false + none + false + true + + + true + true + Microsoft.CodeAnalysis.Extensions + false + + Package containing sources of Microsoft .NET Compiler Platform ("Roslyn") extensions. + + + $(NoWarn);NU5128 + + + + + + + + + + + + + + diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Microsoft.CodeAnalysis.Extensions.projitems b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Microsoft.CodeAnalysis.Extensions.projitems new file mode 100644 index 0000000000000..efcad0831aace --- /dev/null +++ b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Microsoft.CodeAnalysis.Extensions.projitems @@ -0,0 +1,51 @@ + + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + true + 02BCC112-0A29-43AA-84FA-C71C18A9486C + + + Microsoft.CodeAnalysis + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Microsoft.CodeAnalysis.Extensions.shproj b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Microsoft.CodeAnalysis.Extensions.shproj new file mode 100644 index 0000000000000..7add8fd2e549c --- /dev/null +++ b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Microsoft.CodeAnalysis.Extensions.shproj @@ -0,0 +1,14 @@ + + + + + 02BCC112-0A29-43AA-84FA-C71C18A9486C + 14.0 + + + + + + + + \ No newline at end of file diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/AccessibilityUtilities.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/AccessibilityUtilities.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/AccessibilityUtilities.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/AccessibilityUtilities.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/IAssemblySymbolExtensions.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/IAssemblySymbolExtensions.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/IAssemblySymbolExtensions.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/IAssemblySymbolExtensions.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/IMethodSymbolExtensions.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/IMethodSymbolExtensions.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/IMethodSymbolExtensions.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/IMethodSymbolExtensions.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/INamedTypeSymbolExtensions.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/INamedTypeSymbolExtensions.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/INamedTypeSymbolExtensions.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/INamedTypeSymbolExtensions.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/INamespaceOrTypeSymbolExtensions.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/INamespaceOrTypeSymbolExtensions.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/INamespaceOrTypeSymbolExtensions.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/INamespaceOrTypeSymbolExtensions.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/IParameterSymbolExtensions.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/IParameterSymbolExtensions.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/IParameterSymbolExtensions.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/IParameterSymbolExtensions.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/IPropertySymbolExtensions.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/IPropertySymbolExtensions.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/IPropertySymbolExtensions.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/IPropertySymbolExtensions.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/ISymbolExtensions.RequiresUnsafeModifierVisitor.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/ISymbolExtensions.RequiresUnsafeModifierVisitor.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/ISymbolExtensions.RequiresUnsafeModifierVisitor.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/ISymbolExtensions.RequiresUnsafeModifierVisitor.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/ISymbolExtensions.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/ISymbolExtensions.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/ISymbolExtensions.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/ISymbolExtensions.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/ISymbolExtensions_Accessibility.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/ISymbolExtensions_Accessibility.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/ISymbolExtensions_Accessibility.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/ISymbolExtensions_Accessibility.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/ITypeGenerator.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/ITypeGenerator.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/ITypeGenerator.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/ITypeGenerator.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/ITypeParameterSymbolExtensions.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/ITypeParameterSymbolExtensions.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/ITypeParameterSymbolExtensions.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/ITypeParameterSymbolExtensions.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/ITypeSymbolExtensions.AnonymousTypeRemover.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/ITypeSymbolExtensions.AnonymousTypeRemover.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/ITypeSymbolExtensions.AnonymousTypeRemover.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/ITypeSymbolExtensions.AnonymousTypeRemover.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/ITypeSymbolExtensions.CollectTypeParameterSymbolsVisitor.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/ITypeSymbolExtensions.CollectTypeParameterSymbolsVisitor.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/ITypeSymbolExtensions.CollectTypeParameterSymbolsVisitor.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/ITypeSymbolExtensions.CollectTypeParameterSymbolsVisitor.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/ITypeSymbolExtensions.CompilationTypeGenerator.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/ITypeSymbolExtensions.CompilationTypeGenerator.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/ITypeSymbolExtensions.CompilationTypeGenerator.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/ITypeSymbolExtensions.CompilationTypeGenerator.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/ITypeSymbolExtensions.MinimalAccessibilityVisitor.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/ITypeSymbolExtensions.MinimalAccessibilityVisitor.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/ITypeSymbolExtensions.MinimalAccessibilityVisitor.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/ITypeSymbolExtensions.MinimalAccessibilityVisitor.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/ITypeSymbolExtensions.SubstituteTypesVisitor.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/ITypeSymbolExtensions.SubstituteTypesVisitor.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/ITypeSymbolExtensions.SubstituteTypesVisitor.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/ITypeSymbolExtensions.SubstituteTypesVisitor.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/ITypeSymbolExtensions.UnavailableTypeParameterRemover.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/ITypeSymbolExtensions.UnavailableTypeParameterRemover.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/ITypeSymbolExtensions.UnavailableTypeParameterRemover.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/ITypeSymbolExtensions.UnavailableTypeParameterRemover.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/ITypeSymbolExtensions.UnnamedErrorTypeRemover.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/ITypeSymbolExtensions.UnnamedErrorTypeRemover.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/ITypeSymbolExtensions.UnnamedErrorTypeRemover.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/ITypeSymbolExtensions.UnnamedErrorTypeRemover.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/ITypeSymbolExtensions.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/ITypeSymbolExtensions.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/ITypeSymbolExtensions.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/ITypeSymbolExtensions.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/MethodKindExtensions.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/MethodKindExtensions.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/MethodKindExtensions.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/MethodKindExtensions.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/PredefinedOperator.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/PredefinedOperator.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/PredefinedOperator.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/PredefinedOperator.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/PredefinedType.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/PredefinedType.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/PredefinedType.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/PredefinedType.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/PredefinedTypeExtensions.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/PredefinedTypeExtensions.cs similarity index 55% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/PredefinedTypeExtensions.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/PredefinedTypeExtensions.cs index 2568cce2baad9..7547cbbb63061 100644 --- a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Extensions/PredefinedTypeExtensions.cs +++ b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/PredefinedTypeExtensions.cs @@ -32,4 +32,29 @@ public static SpecialType ToSpecialType(this PredefinedType predefinedType) PredefinedType.UIntPtr => SpecialType.System_UIntPtr, _ => SpecialType.None, }; + + public static PredefinedType ToPredefinedType(this SpecialType specialType) + => specialType switch + { + SpecialType.System_Object => PredefinedType.Object, + SpecialType.System_Void => PredefinedType.Void, + SpecialType.System_Boolean => PredefinedType.Boolean, + SpecialType.System_Char => PredefinedType.Char, + SpecialType.System_SByte => PredefinedType.SByte, + SpecialType.System_Byte => PredefinedType.Byte, + SpecialType.System_Int16 => PredefinedType.Int16, + SpecialType.System_UInt16 => PredefinedType.UInt16, + SpecialType.System_Int32 => PredefinedType.Int32, + SpecialType.System_UInt32 => PredefinedType.UInt32, + SpecialType.System_Int64 => PredefinedType.Int64, + SpecialType.System_UInt64 => PredefinedType.UInt64, + SpecialType.System_Decimal => PredefinedType.Decimal, + SpecialType.System_Single => PredefinedType.Single, + SpecialType.System_Double => PredefinedType.Double, + SpecialType.System_String => PredefinedType.String, + SpecialType.System_DateTime => PredefinedType.DateTime, + SpecialType.System_IntPtr => PredefinedType.IntPtr, + SpecialType.System_UIntPtr => PredefinedType.UIntPtr, + _ => PredefinedType.None, + }; } diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/SignatureComparer.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/SignatureComparer.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/SignatureComparer.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/SignatureComparer.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/SymbolDisplayFormats.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/SymbolDisplayFormats.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/SymbolDisplayFormats.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/SymbolDisplayFormats.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/SymbolEquivalenceComparer.AssemblyComparers.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/SymbolEquivalenceComparer.AssemblyComparers.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/SymbolEquivalenceComparer.AssemblyComparers.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/SymbolEquivalenceComparer.AssemblyComparers.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/SymbolEquivalenceComparer.EquivalenceVisitor.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/SymbolEquivalenceComparer.EquivalenceVisitor.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/SymbolEquivalenceComparer.EquivalenceVisitor.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/SymbolEquivalenceComparer.EquivalenceVisitor.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/SymbolEquivalenceComparer.GetHashCodeVisitor.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/SymbolEquivalenceComparer.GetHashCodeVisitor.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/SymbolEquivalenceComparer.GetHashCodeVisitor.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/SymbolEquivalenceComparer.GetHashCodeVisitor.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/SymbolEquivalenceComparer.ParameterSymbolEqualityComparer.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/SymbolEquivalenceComparer.ParameterSymbolEqualityComparer.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/SymbolEquivalenceComparer.ParameterSymbolEqualityComparer.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/SymbolEquivalenceComparer.ParameterSymbolEqualityComparer.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/SymbolEquivalenceComparer.SignatureTypeSymbolEquivalenceComparer.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/SymbolEquivalenceComparer.SignatureTypeSymbolEquivalenceComparer.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/SymbolEquivalenceComparer.SignatureTypeSymbolEquivalenceComparer.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/SymbolEquivalenceComparer.SignatureTypeSymbolEquivalenceComparer.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/SymbolEquivalenceComparer.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/SymbolEquivalenceComparer.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/SymbolEquivalenceComparer.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/SymbolEquivalenceComparer.cs diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/SymbolVisibility.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/SymbolVisibility.cs similarity index 100% rename from src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/SymbolVisibility.cs rename to src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Extensions/Symbols/SymbolVisibility.cs From be31781ef9f1f5fe87700f67704b9c815bb877fb Mon Sep 17 00:00:00 2001 From: tmat Date: Mon, 12 May 2025 08:18:11 -0700 Subject: [PATCH 2/3] Fix --- Roslyn.sln | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Roslyn.sln b/Roslyn.sln index 9183b7e65c9c6..69c5cfbcb14e5 100644 --- a/Roslyn.sln +++ b/Roslyn.sln @@ -727,7 +727,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.CodeAnalysis.Exte EndProject Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Microsoft.CodeAnalysis.Extensions", "src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Microsoft.CodeAnalysis.Extensions.shproj", "{02BCC112-0A29-43AA-84FA-C71C18A9486C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.CodeAnalysis.Extensions.Package", "src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Microsoft.CodeAnalysis.Extensions.Package.csproj", "{EEFAB994-3778-9C0D-1E88-C0ABB1D3DE43}" +Project("{9a19103f-16f7-4668-be54-9a1e7a4f7556}") = "Microsoft.CodeAnalysis.Extensions.Package", "src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Microsoft.CodeAnalysis.Extensions.Package.csproj", "{EEFAB994-3778-9C0D-1E88-C0ABB1D3DE43}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution From 9b7ff6b64f9c254517173556f258b4baccdb227e Mon Sep 17 00:00:00 2001 From: tmat Date: Mon, 12 May 2025 10:59:51 -0700 Subject: [PATCH 3/3] Fix --- eng/test-rebuild.ps1 | 1 + 1 file changed, 1 insertion(+) diff --git a/eng/test-rebuild.ps1 b/eng/test-rebuild.ps1 index d58e2a4f1e264..8f6e6d33a8c74 100644 --- a/eng/test-rebuild.ps1 +++ b/eng/test-rebuild.ps1 @@ -65,6 +65,7 @@ try { " --exclude netstandard2.0\Microsoft.CodeAnalysis.Debugging.Package.dll" + " --exclude netstandard2.0\Microsoft.CodeAnalysis.PooledObjects.Package.dll" + " --exclude netstandard2.0\Microsoft.CodeAnalysis.Threading.Package.dll" + + " --exclude netstandard2.0\Microsoft.CodeAnalysis.Extensions.Package.dll" + " --exclude netcoreapp3.1\Microsoft.CodeAnalysis.Workspaces.UnitTests.dll" + " --exclude net472\Zip\tools\vsixexpinstaller\System.ValueTuple.dll" + " --exclude net472\Zip\tools\vsixexpinstaller\VSIXExpInstaller.exe" +