diff --git a/Src/Workspaces/CSharp/Extensions/ExpressionSyntaxExtensions.cs b/Src/Workspaces/CSharp/Extensions/ExpressionSyntaxExtensions.cs index 70aad737588e598e86f79bb62b547ff7e14a3100..94aa80549acd7c772b64193c50bfa41d1fb805a6 100644 --- a/Src/Workspaces/CSharp/Extensions/ExpressionSyntaxExtensions.cs +++ b/Src/Workspaces/CSharp/Extensions/ExpressionSyntaxExtensions.cs @@ -656,10 +656,13 @@ private static bool CanReplace(ISymbol symbol) replacementNode = null; issueSpan = default(TextSpan); - if (memberAccess.Name == null || - memberAccess.Expression == null || - (!optionSet.GetOption(SimplificationOptions.AllowSimplifyingAwayThisOrMe, LanguageNames.CSharp) && - memberAccess.Expression.CSharpKind() == SyntaxKind.ThisExpression)) + if (memberAccess.Name == null || memberAccess.Expression == null) + { + return false; + } + + if (optionSet.GetOption(SimplificationOptions.QualifyMemberAccessWithThisOrMe, semanticModel.Language) && + memberAccess.Expression.CSharpKind() == SyntaxKind.ThisExpression) { return false; } diff --git a/Src/Workspaces/CSharp/Simplification/CSharpSimplificationService.cs b/Src/Workspaces/CSharp/Simplification/CSharpSimplificationService.cs index 9ef30b95e26dc75f553d1788ff1766dfcae6db78..cb0a750a31ec127752e23ed2541abad6213edf17 100644 --- a/Src/Workspaces/CSharp/Simplification/CSharpSimplificationService.cs +++ b/Src/Workspaces/CSharp/Simplification/CSharpSimplificationService.cs @@ -60,10 +60,10 @@ public override SyntaxToken Expand(SyntaxToken token, SemanticModel semanticMode { using (Logger.LogBlock(FeatureId.Simplifier, FunctionId.Simplifier_ExpandToken, cancellationToken)) { - var hungarianSemanticModel = (SemanticModel)semanticModel; - var rewriter = new Expander(hungarianSemanticModel, expandInsideNode, false, cancellationToken); + var csharpSemanticModel = (SemanticModel)semanticModel; + var rewriter = new Expander(csharpSemanticModel, expandInsideNode, false, cancellationToken); - var rewrittenToken = TryEscapeIdentifierToken(rewriter.VisitToken(token), token.Parent, hungarianSemanticModel).WithAdditionalAnnotations(Simplifier.Annotation); + var rewrittenToken = TryEscapeIdentifierToken(rewriter.VisitToken(token), token.Parent, csharpSemanticModel).WithAdditionalAnnotations(Simplifier.Annotation); SyntaxToken rewrittenTokenWithElasticTrivia; if (TryAddLeadingElasticTriviaIfNecessary(rewrittenToken, token, out rewrittenTokenWithElasticTrivia)) { diff --git a/Src/Workspaces/Core/Shared/Extensions/ICodeDefinitionFactoryExtensions.cs b/Src/Workspaces/Core/Shared/Extensions/ICodeDefinitionFactoryExtensions.cs index 35337a6658f014ff70066cbcf38ff9da84eb41b0..3f9d437ac773fa298460cecc20ec12dd8b08e156 100644 --- a/Src/Workspaces/Core/Shared/Extensions/ICodeDefinitionFactoryExtensions.cs +++ b/Src/Workspaces/Core/Shared/Extensions/ICodeDefinitionFactoryExtensions.cs @@ -6,6 +6,7 @@ using System.Threading; using Microsoft.CodeAnalysis.CodeGeneration; using Microsoft.CodeAnalysis.FindSymbols; +using Microsoft.CodeAnalysis.Simplification; using Roslyn.Utilities; namespace Microsoft.CodeAnalysis.Shared.Extensions @@ -71,7 +72,8 @@ internal static partial class ICodeDefinitionFactoryExtensions CancellationToken cancellationToken) { var fields = factory.CreateFieldsForParameters(parameters, parameterToNewFieldMap); - var statements = factory.CreateAssignmentStatements(parameters, parameterToExistingFieldMap, parameterToNewFieldMap); + var statements = factory.CreateAssignmentStatements(parameters, parameterToExistingFieldMap, parameterToNewFieldMap) + .Select(s => s.WithAdditionalAnnotations(Simplifier.Annotation)); foreach (var field in fields) { diff --git a/Src/Workspaces/Core/Simplification/SimplificationOption.cs b/Src/Workspaces/Core/Simplification/SimplificationOption.cs index c7777be9cfd50b772eddf36d892284fc992dd453..5fa22ae24005d156815e2714bbd58cf1e2b90a8d 100644 --- a/Src/Workspaces/Core/Simplification/SimplificationOption.cs +++ b/Src/Workspaces/Core/Simplification/SimplificationOption.cs @@ -67,6 +67,6 @@ public class SimplificationOptions #if MEF [ExportOption] #endif - public static readonly PerLanguageOption AllowSimplifyingAwayThisOrMe = new PerLanguageOption(FeatureName, "AllowSimplifyingAwayThisOrMe", defaultValue: true); + public static readonly PerLanguageOption QualifyMemberAccessWithThisOrMe = new PerLanguageOption(FeatureName, "QualifyMemberAccessWithThisOrMe", defaultValue: false); } } diff --git a/Src/Workspaces/VisualBasic/Extensions/ExpressionSyntaxExtensions.vb b/Src/Workspaces/VisualBasic/Extensions/ExpressionSyntaxExtensions.vb index 156d14cc7bc27487876771066363f6f5cb500dcd..a8cd7ffcb989d77c75f36b8e54e98a20b837bab6 100644 --- a/Src/Workspaces/VisualBasic/Extensions/ExpressionSyntaxExtensions.vb +++ b/Src/Workspaces/VisualBasic/Extensions/ExpressionSyntaxExtensions.vb @@ -949,10 +949,12 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Extensions optionSet As OptionSet, cancellationToken As CancellationToken ) As Boolean - If memberAccess.Expression Is Nothing OrElse - memberAccess.Name Is Nothing OrElse - (Not optionSet.GetOption(SimplificationOptions.AllowSimplifyingAwayThisOrMe, LanguageNames.VisualBasic) AndAlso - memberAccess.Expression.VisualBasicKind() = SyntaxKind.MeExpression) Then + If memberAccess.Expression Is Nothing OrElse memberAccess.Name Is Nothing Then + Return False + End If + + If optionSet.GetOption(SimplificationOptions.QualifyMemberAccessWithThisOrMe, semanticModel.Language) AndAlso + memberAccess.Expression.VisualBasicKind() = SyntaxKind.MeExpression Then Return False End If