diff --git a/src/EditorFeatures/Test2/Simplification/TypeNameSimplifierTest.vb b/src/EditorFeatures/Test2/Simplification/TypeNameSimplifierTest.vb index eebd19e1897df693fbb57ec868678e8fa9b831da..81e0eede3bb4d86484655716f470836dcf84fd52 100644 --- a/src/EditorFeatures/Test2/Simplification/TypeNameSimplifierTest.vb +++ b/src/EditorFeatures/Test2/Simplification/TypeNameSimplifierTest.vb @@ -1,6 +1,5 @@ ' Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -Imports System.Threading.Tasks Imports Microsoft.CodeAnalysis.CodeStyle Imports Microsoft.CodeAnalysis.CSharp.CodeStyle Imports Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces @@ -5908,6 +5907,46 @@ End Class Await TestAsync(input, expected, DontPreferIntrinsicPredefinedTypeKeywordInDeclaration) End Function + + Public Async Function TestSharedMemberOffOfMe() As Task + ' even if the user prefers qualified member access, we will strip off 'Me' when calling + ' a static method through it. + Dim input = + + + + + + + + + Dim expected = + + + + Await TestAsync(input, expected, QualifyMethodAccessOption(LanguageNames.VisualBasic)) + End Function + #End Region #Region "Helpers" diff --git a/src/Workspaces/CSharp/Portable/Extensions/ExpressionSyntaxExtensions.cs b/src/Workspaces/CSharp/Portable/Extensions/ExpressionSyntaxExtensions.cs index 3df47372da63c0322cccfe2ea2cc3bee004f9c76..ba410f9281593b0294be194f018a6997c36f9921 100644 --- a/src/Workspaces/CSharp/Portable/Extensions/ExpressionSyntaxExtensions.cs +++ b/src/Workspaces/CSharp/Portable/Extensions/ExpressionSyntaxExtensions.cs @@ -820,7 +820,7 @@ private static bool CanReplace(ISymbol symbol) return false; if (memberAccess.Expression.IsKind(SyntaxKind.ThisExpression) && - !SimplificationHelpers.ShouldSimplifyMemberAccessExpression(semanticModel, optionSet, symbol)) + !SimplificationHelpers.ShouldSimplifyThisOrMeMemberAccessExpression(semanticModel, optionSet, symbol)) { return false; } diff --git a/src/Workspaces/Core/Portable/Simplification/SimplificationHelpers.cs b/src/Workspaces/Core/Portable/Simplification/SimplificationHelpers.cs index 07228b23ba80525fcfd844aa61c0eee93b030275..fcd2d7fa5fbe01167cb7afc5990ddb11288780fc 100644 --- a/src/Workspaces/Core/Portable/Simplification/SimplificationHelpers.cs +++ b/src/Workspaces/Core/Portable/Simplification/SimplificationHelpers.cs @@ -101,11 +101,14 @@ internal static bool IsValidSymbolInfo(ISymbol symbol) return symbol != null && !symbol.IsErrorType(); } - internal static bool ShouldSimplifyMemberAccessExpression( + internal static bool ShouldSimplifyThisOrMeMemberAccessExpression( SemanticModel semanticModel, OptionSet optionSet, ISymbol symbol) { + // If we're accessing a static member off of this/me then we should always consider this + // simplifiable. Note: in C# this isn't even legal to access a static off of `this`, + // but in VB it is legal to access a static off of `me`. if (symbol.IsStatic) - return false; + return true; if ((symbol.IsKind(SymbolKind.Field) && optionSet.GetOption(CodeStyleOptions.QualifyFieldAccess, semanticModel.Language).Value || (symbol.IsKind(SymbolKind.Property) && optionSet.GetOption(CodeStyleOptions.QualifyPropertyAccess, semanticModel.Language).Value) || diff --git a/src/Workspaces/VisualBasic/Portable/Extensions/ExpressionSyntaxExtensions.vb b/src/Workspaces/VisualBasic/Portable/Extensions/ExpressionSyntaxExtensions.vb index 533b8a07226b31fe19d0760f6180110298f50ba0..323446229b8637390d283416c9b7f007d1c10513 100644 --- a/src/Workspaces/VisualBasic/Portable/Extensions/ExpressionSyntaxExtensions.vb +++ b/src/Workspaces/VisualBasic/Portable/Extensions/ExpressionSyntaxExtensions.vb @@ -985,7 +985,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Extensions End If If memberAccess.Expression.IsKind(SyntaxKind.MeExpression) AndAlso - Not SimplificationHelpers.ShouldSimplifyMemberAccessExpression(semanticModel, optionSet, symbol) Then + Not SimplificationHelpers.ShouldSimplifyThisOrMeMemberAccessExpression(semanticModel, optionSet, symbol) Then Return False End If