提交 e0bd44a5 编写于 作者: G Gen Lu

Delete attribute source and pick it up from analyzer package instead

上级 67c71851
......@@ -132,6 +132,14 @@
<PackageReference Include="Microsoft.CodeAnalysis.PerformanceSensitiveAnalyzers" Version="$(MicrosoftCodeAnalysisPerformanceSensitiveAnalyzersVersion)" PrivateAssets="all" />
</ItemGroup>
<!--
Don't inject PerformanceSensitiveAttribute source by default to avoid duplicate definistion caused by IVT.
This needs to be set to true in projects at the root of IVT trees, in order for PerformanceSensitiveAnalyzers to work.
-->
<PropertyGroup Condition="'$(GeneratePerformanceSensitiveAttribute)' == ''">
<GeneratePerformanceSensitiveAttribute>false</GeneratePerformanceSensitiveAttribute>
</PropertyGroup>
<!-- Language-specific analyzer packages -->
<Choose>
<When Condition="'$(Language)' == 'VB' and '$(RoslynCheckCodeStyle)' == 'true'">
......
......@@ -7,6 +7,7 @@
<TargetFramework>netstandard2.0</TargetFramework>
<DefineConstants>$(DefineConstants),CODE_STYLE</DefineConstants>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<GeneratePerformanceSensitiveAttribute>true</GeneratePerformanceSensitiveAttribute>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="$(MicrosoftCodeAnalysisCommonFixedVersion)" />
......@@ -32,7 +33,6 @@
<Compile Include="..\..\..\Compilers\Core\Portable\InternalUtilities\IReadOnlySet.cs" Link="InternalUtilities\IReadOnlySet.cs" />
<Compile Include="..\..\..\Compilers\Core\Portable\InternalUtilities\KeyValuePairUtil.cs" Link="InternalUtilities\KeyValuePairUtil.cs" />
<Compile Include="..\..\..\Compilers\Core\Portable\InternalUtilities\NullableAttributes.cs" Link="Formatting\NullableAttributes.cs" />
<Compile Include="..\..\..\Compilers\Core\Portable\InternalUtilities\PerformanceSensitiveAttribute.cs" Link="PerformanceSensitiveAttribute.cs" />
<Compile Include="..\..\..\Compilers\Core\Portable\InternalUtilities\RoslynString.cs" Link="RoslynString.cs" />
<Compile Include="..\..\..\Compilers\Core\Portable\InternalUtilities\SpecializedCollections.cs" Link="InternalUtilities\SpecializedCollections.cs" />
<Compile Include="..\..\..\Compilers\Core\Portable\InternalUtilities\SpecializedCollections.Empty.Collection.cs" Link="InternalUtilities\SpecializedCollections.Empty.Collection.cs" />
......
// 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.
#nullable enable
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading.Tasks;
namespace Roslyn.Utilities
{
/// <summary>
/// Indicates that a code element is performance sensitive under a known scenario.
/// </summary>
/// <remarks>
/// <para>When applying this attribute, only explicitly set the values for properties specifically indicated by the
/// test/measurement technique described in the associated <see cref="Uri"/>.</para>
/// </remarks>
[Conditional("EMIT_CODE_ANALYSIS_ATTRIBUTES")]
[AttributeUsage(AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = true, Inherited = false)]
internal sealed class PerformanceSensitiveAttribute : Attribute
{
public PerformanceSensitiveAttribute(string uri)
{
Uri = uri;
}
/// <summary>
/// Gets the location where the original problem is documented, likely with steps to reproduce the issue and/or
/// validate performance related to a change in the method.
/// </summary>
public string Uri
{
get;
}
/// <summary>
/// Gets or sets a description of the constraint imposed by the original performance issue.
/// </summary>
/// <remarks>
/// <para>Constraints are normally specified by other specific properties that allow automated validation of the
/// constraint. This property supports documenting constraints which cannot be described in terms of other
/// constraint properties.</para>
/// </remarks>
public string? Constraint
{
get;
set;
}
/// <summary>
/// Gets or sets a value indicating whether captures are allowed.
/// </summary>
public bool AllowCaptures
{
get;
set;
}
/// <summary>
/// Gets or sets a value indicating whether implicit boxing of value types is allowed.
/// </summary>
public bool AllowImplicitBoxing
{
get;
set;
}
/// <summary>
/// Gets or sets a value indicating whether enumeration of a generic <see cref="IEnumerable{T}"/> is allowed.
/// </summary>
public bool AllowGenericEnumeration
{
get;
set;
}
/// <summary>
/// Gets or sets a value indicating whether locks are allowed.
/// </summary>
public bool AllowLocks
{
get;
set;
}
/// <summary>
/// Gets or sets a value indicating whether the asynchronous state machine typically completes synchronously.
/// </summary>
/// <remarks>
/// <para>When <see langword="true"/>, validation of this performance constraint typically involves analyzing
/// the method to ensure synchronous completion of the state machine does not require the allocation of a
/// <see cref="Task"/>, either through caching the result or by using <see cref="ValueTask{TResult}"/>.</para>
/// </remarks>
public bool OftenCompletesSynchronously
{
get;
set;
}
/// <summary>
/// Gets or sets a value indicating whether this is an entry point to a parallel algorithm.
/// </summary>
/// <remarks>
/// <para>Parallelization APIs and algorithms, e.g. <c>Parallel.ForEach</c>, may be efficient for parallel entry
/// points (few direct calls but large amounts of iterative work), but are problematic when called inside the
/// iterations themselves. Performance-sensitive code should avoid the use of heavy parallelization APIs except
/// for known entry points to the parallel portion of code.</para>
/// </remarks>
public bool IsParallelEntry
{
get;
set;
}
}
}
......@@ -10,7 +10,8 @@
<CodeAnalysisRuleSet>..\CodeAnalysisRules.ruleset</CodeAnalysisRuleSet>
<NoStdLib>true</NoStdLib>
<ApplyNgenOptimization>partial</ApplyNgenOptimization>
<GeneratePerformanceSensitiveAttribute>true</GeneratePerformanceSensitiveAttribute>
<!-- NuGet -->
<IsPackable>true</IsPackable>
<PackageId>Microsoft.CodeAnalysis.Common</PackageId>
......
......@@ -6,6 +6,7 @@
<RootNamespace>Microsoft.CodeAnalysis.Interactive</RootNamespace>
<TargetFramework>net472</TargetFramework>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<GeneratePerformanceSensitiveAttribute>true</GeneratePerformanceSensitiveAttribute>
<!-- NuGet -->
<IsPackable>true</IsPackable>
......@@ -43,7 +44,6 @@
<Compile Include="..\..\Workspaces\Core\Portable\Utilities\ValuesSources\ValueSource.cs" Link="Utilities\ValueSource.cs" />
<Compile Include="..\..\Workspaces\Core\Portable\Utilities\ValuesSources\ConstantValueSource.cs" Link="Utilities\ConstantValueSource.cs" />
<Compile Include="..\..\Compilers\Core\Portable\InternalUtilities\NullableAttributes.cs" Link="Utilities\NullableAttributes.cs" />
<Compile Include="..\..\Compilers\Core\Portable\InternalUtilities\PerformanceSensitiveAttribute.cs" Link="Utilities\PerformanceSensitiveAttribute.cs" />
<Compile Include="..\..\Compilers\Core\Portable\InternalUtilities\SemaphoreSlimExtensions.cs" Link="Utilities\SemaphoreSlimExtensions.cs" />
<Compile Include="..\..\Compilers\Core\Portable\InternalUtilities\ExceptionUtilities.cs" Link="Utilities\ExceptionUtilities.cs" />
<Compile Include="..\..\Compilers\Core\Portable\InternalUtilities\FailFast.cs" Link="Utilities\FailFast.cs" />
......
......@@ -8,6 +8,7 @@
<TargetFramework>netstandard2.0</TargetFramework>
<DefineConstants>$(DefineConstants);WORKSPACE</DefineConstants>
<ApplyNgenOptimization>partial</ApplyNgenOptimization>
<GeneratePerformanceSensitiveAttribute>true</GeneratePerformanceSensitiveAttribute>
<!-- NuGet -->
<IsPackable>true</IsPackable>
......@@ -138,9 +139,6 @@
<Compile Include="..\..\..\Compilers\Core\Portable\InternalUtilities\OneOrMany.cs">
<Link>InternalUtilities\OneOrMany.cs</Link>
</Compile>
<Compile Include="..\..\..\Compilers\Core\Portable\InternalUtilities\PerformanceSensitiveAttribute.cs">
<Link>InternalUtilities\PerformanceSensitiveAttribute.cs</Link>
</Compile>
<Compile Include="..\..\..\Compilers\Core\Portable\InternalUtilities\PlatformInformation.cs">
<Link>InternalUtilities\PlatformInformation.cs</Link>
</Compile>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册