diff --git a/src/Analyzers/CSharp/Analyzers/CSharpAnalyzers.projitems b/src/Analyzers/CSharp/Analyzers/CSharpAnalyzers.projitems index b098d8577794f..59d6797ff1281 100644 --- a/src/Analyzers/CSharp/Analyzers/CSharpAnalyzers.projitems +++ b/src/Analyzers/CSharp/Analyzers/CSharpAnalyzers.projitems @@ -35,6 +35,7 @@ + diff --git a/src/Features/CSharp/Portable/UseAutoProperty/CSharpUseAutoPropertyAnalyzer.cs b/src/Analyzers/CSharp/Analyzers/UseAutoProperty/CSharpUseAutoPropertyAnalyzer.cs similarity index 100% rename from src/Features/CSharp/Portable/UseAutoProperty/CSharpUseAutoPropertyAnalyzer.cs rename to src/Analyzers/CSharp/Analyzers/UseAutoProperty/CSharpUseAutoPropertyAnalyzer.cs diff --git a/src/Analyzers/CSharp/Tests/CSharpAnalyzers.UnitTests.projitems b/src/Analyzers/CSharp/Tests/CSharpAnalyzers.UnitTests.projitems index b136fcae4927b..3e7f5b5670388 100644 --- a/src/Analyzers/CSharp/Tests/CSharpAnalyzers.UnitTests.projitems +++ b/src/Analyzers/CSharp/Tests/CSharpAnalyzers.UnitTests.projitems @@ -21,6 +21,7 @@ + diff --git a/src/EditorFeatures/CSharpTest/UseAutoProperty/UseAutoPropertyTests.cs b/src/Analyzers/CSharp/Tests/UseAutoProperty/UseAutoPropertyTests.cs similarity index 99% rename from src/EditorFeatures/CSharpTest/UseAutoProperty/UseAutoPropertyTests.cs rename to src/Analyzers/CSharp/Tests/UseAutoProperty/UseAutoPropertyTests.cs index 1e1e46f6f5768..62eb6973eb9d5 100644 --- a/src/EditorFeatures/CSharpTest/UseAutoProperty/UseAutoPropertyTests.cs +++ b/src/Analyzers/CSharp/Tests/UseAutoProperty/UseAutoPropertyTests.cs @@ -18,7 +18,7 @@ namespace Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.UseAutoProperty public class UseAutoPropertyTests : AbstractCSharpDiagnosticProviderBasedUserDiagnosticTest { internal override (DiagnosticAnalyzer, CodeFixProvider) CreateDiagnosticProviderAndFixer(Workspace workspace) - => (new CSharpUseAutoPropertyAnalyzer(), new CSharpUseAutoPropertyCodeFixProvider()); + => (new CSharpUseAutoPropertyAnalyzer(), GetCSharpUseAutoPropertyCodeFixProvider()); [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsUseAutoProperty)] public async Task TestSingleGetterFromField() diff --git a/src/Analyzers/Core/Analyzers/Analyzers.projitems b/src/Analyzers/Core/Analyzers/Analyzers.projitems index c198a0748106c..3684c2471dc55 100644 --- a/src/Analyzers/Core/Analyzers/Analyzers.projitems +++ b/src/Analyzers/Core/Analyzers/Analyzers.projitems @@ -47,6 +47,7 @@ + diff --git a/src/Analyzers/Core/Analyzers/AnalyzersResources.resx b/src/Analyzers/Core/Analyzers/AnalyzersResources.resx index 92bc8c7b5634a..f043c1ef3b20a 100644 --- a/src/Analyzers/Core/Analyzers/AnalyzersResources.resx +++ b/src/Analyzers/Core/Analyzers/AnalyzersResources.resx @@ -277,6 +277,9 @@ Use null propagation + + Use auto property + Format string contains invalid placeholder diff --git a/src/Features/Core/Portable/UseAutoProperty/AbstractUseAutoPropertyAnalyzer.cs b/src/Analyzers/Core/Analyzers/UseAutoProperty/AbstractUseAutoPropertyAnalyzer.cs similarity index 98% rename from src/Features/Core/Portable/UseAutoProperty/AbstractUseAutoPropertyAnalyzer.cs rename to src/Analyzers/Core/Analyzers/UseAutoProperty/AbstractUseAutoPropertyAnalyzer.cs index bbb0a401c6a9f..094bacf67fb3b 100644 --- a/src/Features/Core/Portable/UseAutoProperty/AbstractUseAutoPropertyAnalyzer.cs +++ b/src/Analyzers/Core/Analyzers/UseAutoProperty/AbstractUseAutoPropertyAnalyzer.cs @@ -20,8 +20,8 @@ internal abstract class AbstractUseAutoPropertyAnalyzer< where TExpression : SyntaxNode { private static readonly LocalizableString s_title = - new LocalizableResourceString(nameof(FeaturesResources.Use_auto_property), - FeaturesResources.ResourceManager, typeof(FeaturesResources)); + new LocalizableResourceString(nameof(AnalyzersResources.Use_auto_property), + AnalyzersResources.ResourceManager, typeof(AnalyzersResources)); protected AbstractUseAutoPropertyAnalyzer() : base(IDEDiagnosticIds.UseAutoPropertyDiagnosticId, CodeStyleOptions2.PreferAutoProperties, s_title, s_title) diff --git a/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.cs.xlf b/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.cs.xlf index 0602b871aaa9e..e46fe7f78cf08 100644 --- a/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.cs.xlf +++ b/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.cs.xlf @@ -257,6 +257,11 @@ Use 'System.HashCode' + + Use auto property + Use auto property + + Use coalesce expression Use coalesce expression diff --git a/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.de.xlf b/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.de.xlf index 5c66de0c38e22..4532f45f1c1a7 100644 --- a/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.de.xlf +++ b/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.de.xlf @@ -257,6 +257,11 @@ Use 'System.HashCode' + + Use auto property + Use auto property + + Use coalesce expression Use coalesce expression diff --git a/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.es.xlf b/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.es.xlf index 2dbdf2efcbe1a..875fe930be3f6 100644 --- a/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.es.xlf +++ b/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.es.xlf @@ -257,6 +257,11 @@ Use 'System.HashCode' + + Use auto property + Use auto property + + Use coalesce expression Use coalesce expression diff --git a/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.fr.xlf b/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.fr.xlf index 52d47926cf7d4..d2b94d84d5b1b 100644 --- a/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.fr.xlf +++ b/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.fr.xlf @@ -257,6 +257,11 @@ Use 'System.HashCode' + + Use auto property + Use auto property + + Use coalesce expression Use coalesce expression diff --git a/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.it.xlf b/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.it.xlf index a60565429d12a..7e437daa88869 100644 --- a/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.it.xlf +++ b/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.it.xlf @@ -257,6 +257,11 @@ Use 'System.HashCode' + + Use auto property + Use auto property + + Use coalesce expression Use coalesce expression diff --git a/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.ja.xlf b/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.ja.xlf index 712ff4dec8529..c2de060559807 100644 --- a/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.ja.xlf +++ b/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.ja.xlf @@ -257,6 +257,11 @@ Use 'System.HashCode' + + Use auto property + Use auto property + + Use coalesce expression Use coalesce expression diff --git a/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.ko.xlf b/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.ko.xlf index bd87341de835d..69d75e23ea708 100644 --- a/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.ko.xlf +++ b/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.ko.xlf @@ -257,6 +257,11 @@ Use 'System.HashCode' + + Use auto property + Use auto property + + Use coalesce expression Use coalesce expression diff --git a/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.pl.xlf b/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.pl.xlf index 4cfd07329b3d3..a763fa547b7e0 100644 --- a/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.pl.xlf +++ b/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.pl.xlf @@ -257,6 +257,11 @@ Use 'System.HashCode' + + Use auto property + Use auto property + + Use coalesce expression Use coalesce expression diff --git a/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.pt-BR.xlf b/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.pt-BR.xlf index 187469f24da65..e3ef971a8ab2b 100644 --- a/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.pt-BR.xlf +++ b/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.pt-BR.xlf @@ -257,6 +257,11 @@ Use 'System.HashCode' + + Use auto property + Use auto property + + Use coalesce expression Use coalesce expression diff --git a/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.ru.xlf b/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.ru.xlf index cc63674d3c364..a86919711df1e 100644 --- a/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.ru.xlf +++ b/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.ru.xlf @@ -257,6 +257,11 @@ Use 'System.HashCode' + + Use auto property + Use auto property + + Use coalesce expression Use coalesce expression diff --git a/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.tr.xlf b/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.tr.xlf index e066a1c832420..5414790241e59 100644 --- a/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.tr.xlf +++ b/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.tr.xlf @@ -257,6 +257,11 @@ Use 'System.HashCode' + + Use auto property + Use auto property + + Use coalesce expression Use coalesce expression diff --git a/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.zh-Hans.xlf b/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.zh-Hans.xlf index 8da7c01b2acf5..57d199ef14116 100644 --- a/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.zh-Hans.xlf +++ b/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.zh-Hans.xlf @@ -257,6 +257,11 @@ Use 'System.HashCode' + + Use auto property + Use auto property + + Use coalesce expression Use coalesce expression diff --git a/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.zh-Hant.xlf b/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.zh-Hant.xlf index 64ef51a016dbd..3c43ea97cae07 100644 --- a/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.zh-Hant.xlf +++ b/src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.zh-Hant.xlf @@ -257,6 +257,11 @@ Use 'System.HashCode' + + Use auto property + Use auto property + + Use coalesce expression Use coalesce expression diff --git a/src/Features/VisualBasic/Portable/UseAutoProperty/Utilities.vb b/src/Analyzers/VisualBasic/Analyzers/UseAutoProperty/Utilities.vb similarity index 100% rename from src/Features/VisualBasic/Portable/UseAutoProperty/Utilities.vb rename to src/Analyzers/VisualBasic/Analyzers/UseAutoProperty/Utilities.vb diff --git a/src/Features/VisualBasic/Portable/UseAutoProperty/VisualBasicUseAutoPropertyAnalyzer.vb b/src/Analyzers/VisualBasic/Analyzers/UseAutoProperty/VisualBasicUseAutoPropertyAnalyzer.vb similarity index 98% rename from src/Features/VisualBasic/Portable/UseAutoProperty/VisualBasicUseAutoPropertyAnalyzer.vb rename to src/Analyzers/VisualBasic/Analyzers/UseAutoProperty/VisualBasicUseAutoPropertyAnalyzer.vb index 208615e8e3186..04643aae93d09 100644 --- a/src/Features/VisualBasic/Portable/UseAutoProperty/VisualBasicUseAutoPropertyAnalyzer.vb +++ b/src/Analyzers/VisualBasic/Analyzers/UseAutoProperty/VisualBasicUseAutoPropertyAnalyzer.vb @@ -203,7 +203,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.UseAutoProperty If node.Kind() = SyntaxKind.IdentifierName Then Dim symbolInfo = semanticModel.GetSymbolInfo(node) If field.Equals(symbolInfo.Symbol) Then - If VisualBasicSemanticFactsService.Instance.IsWrittenTo(semanticModel, node, cancellationToken) Then + If DirectCast(node, ExpressionSyntax).IsWrittenTo(semanticModel, cancellationToken) Then Return True End If End If diff --git a/src/Analyzers/VisualBasic/Analyzers/VisualBasicAnalyzers.projitems b/src/Analyzers/VisualBasic/Analyzers/VisualBasicAnalyzers.projitems index 33fdc5bced9e4..b849a18aa9733 100644 --- a/src/Analyzers/VisualBasic/Analyzers/VisualBasicAnalyzers.projitems +++ b/src/Analyzers/VisualBasic/Analyzers/VisualBasicAnalyzers.projitems @@ -28,6 +28,8 @@ + + diff --git a/src/EditorFeatures/VisualBasicTest/UseAutoProperty/UseAutoPropertyTests.vb b/src/Analyzers/VisualBasic/Tests/UseAutoProperty/UseAutoPropertyTests.vb similarity index 99% rename from src/EditorFeatures/VisualBasicTest/UseAutoProperty/UseAutoPropertyTests.vb rename to src/Analyzers/VisualBasic/Tests/UseAutoProperty/UseAutoPropertyTests.vb index d5fc588f83512..a3921c1fd9cd1 100644 --- a/src/EditorFeatures/VisualBasicTest/UseAutoProperty/UseAutoPropertyTests.vb +++ b/src/Analyzers/VisualBasic/Tests/UseAutoProperty/UseAutoPropertyTests.vb @@ -13,7 +13,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.UseAutoProperty Inherits AbstractVisualBasicDiagnosticProviderBasedUserDiagnosticTest Friend Overrides Function CreateDiagnosticProviderAndFixer(workspace As Workspace) As (DiagnosticAnalyzer, CodeFixProvider) - Return (New VisualBasicUseAutoPropertyAnalyzer(), New VisualBasicUseAutoPropertyCodeFixProvider()) + Return (New VisualBasicUseAutoPropertyAnalyzer(), GetVisualBasicUseAutoPropertyCodeFixProvider()) End Function diff --git a/src/Analyzers/VisualBasic/Tests/VisualBasicAnalyzers.UnitTests.projitems b/src/Analyzers/VisualBasic/Tests/VisualBasicAnalyzers.UnitTests.projitems index 0cc6c8c979947..f1cbba47f6e7f 100644 --- a/src/Analyzers/VisualBasic/Tests/VisualBasicAnalyzers.UnitTests.projitems +++ b/src/Analyzers/VisualBasic/Tests/VisualBasicAnalyzers.UnitTests.projitems @@ -30,6 +30,7 @@ + diff --git a/src/EditorFeatures/DiagnosticsTestUtilities/Diagnostics/AbstractDiagnosticProviderBasedUserDiagnosticTest.cs b/src/EditorFeatures/DiagnosticsTestUtilities/Diagnostics/AbstractDiagnosticProviderBasedUserDiagnosticTest.cs index 0783856819ff1..56ce2ac511b24 100644 --- a/src/EditorFeatures/DiagnosticsTestUtilities/Diagnostics/AbstractDiagnosticProviderBasedUserDiagnosticTest.cs +++ b/src/EditorFeatures/DiagnosticsTestUtilities/Diagnostics/AbstractDiagnosticProviderBasedUserDiagnosticTest.cs @@ -10,11 +10,13 @@ using Microsoft.CodeAnalysis.CodeActions; using Microsoft.CodeAnalysis.CodeFixes; using Microsoft.CodeAnalysis.CSharp.MakeLocalFunctionStatic; +using Microsoft.CodeAnalysis.CSharp.UseAutoProperty; using Microsoft.CodeAnalysis.Diagnostics; using Microsoft.CodeAnalysis.Editor.UnitTests.CodeActions; using Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces; using Microsoft.CodeAnalysis.Text; using Microsoft.CodeAnalysis.UnitTests.Diagnostics; +using Microsoft.CodeAnalysis.VisualBasic.UseAutoProperty; using Roslyn.Test.Utilities; using Roslyn.Utilities; using Xunit; @@ -238,6 +240,12 @@ private void AssertNoAnalyzerExceptionDiagnostics(IEnumerable diagno // https://github.com/dotnet/roslyn/issues/43056 blocks porting the fixer to CodeStyle layer. protected static CodeFixProvider GetMakeLocalFunctionStaticCodeFixProvider() => new MakeLocalFunctionStaticCodeFixProvider(); + // https://github.com/dotnet/roslyn/issues/43091 blocks porting the fixer to CodeStyle layer. + protected static CodeFixProvider GetCSharpUseAutoPropertyCodeFixProvider() => new CSharpUseAutoPropertyCodeFixProvider(); + + // https://github.com/dotnet/roslyn/issues/43091 blocks porting the fixer to CodeStyle layer. + protected static CodeFixProvider GetVisualBasicUseAutoPropertyCodeFixProvider() => new VisualBasicUseAutoPropertyCodeFixProvider(); + #endregion } } diff --git a/src/Features/Core/Portable/FeaturesResources.resx b/src/Features/Core/Portable/FeaturesResources.resx index 63ccb6befb600..8d56816216db3 100644 --- a/src/Features/Core/Portable/FeaturesResources.resx +++ b/src/Features/Core/Portable/FeaturesResources.resx @@ -816,9 +816,6 @@ Do you want to continue? attribute - - Use auto property - Replace '{0}' and '{1}' with property diff --git a/src/Features/Core/Portable/UseAutoProperty/AbstractUseAutoPropertyCodeFixProvider.cs b/src/Features/Core/Portable/UseAutoProperty/AbstractUseAutoPropertyCodeFixProvider.cs index bce391fefa882..227d2c0be09e4 100644 --- a/src/Features/Core/Portable/UseAutoProperty/AbstractUseAutoPropertyCodeFixProvider.cs +++ b/src/Features/Core/Portable/UseAutoProperty/AbstractUseAutoPropertyCodeFixProvider.cs @@ -55,7 +55,7 @@ public sealed override Task RegisterCodeFixesAsync(CodeFixContext context) context.RegisterCodeFix( new UseAutoPropertyCodeAction( - FeaturesResources.Use_auto_property, + AnalyzersResources.Use_auto_property, c => ProcessResultAsync(context, diagnostic, c), priority), diagnostic); @@ -334,7 +334,7 @@ private static bool IsWrittenToOutsideOfConstructorOrProperty( return true; } - private class UseAutoPropertyCodeAction : CodeAction.SolutionChangeAction + private class UseAutoPropertyCodeAction : CustomCodeActions.SolutionChangeAction { public UseAutoPropertyCodeAction(string title, Func> createChangedSolution, CodeActionPriority priority) : base(title, createChangedSolution, title) diff --git a/src/Features/Core/Portable/xlf/FeaturesResources.cs.xlf b/src/Features/Core/Portable/xlf/FeaturesResources.cs.xlf index 08502c0045fe7..ecf0449132ea5 100644 --- a/src/Features/Core/Portable/xlf/FeaturesResources.cs.xlf +++ b/src/Features/Core/Portable/xlf/FeaturesResources.cs.xlf @@ -1683,11 +1683,6 @@ Chcete pokračovat? atribut - - Use auto property - Použít automatickou vlastnost - - Replace '{0}' and '{1}' with property Nahradit {0} a {1} vlastností diff --git a/src/Features/Core/Portable/xlf/FeaturesResources.de.xlf b/src/Features/Core/Portable/xlf/FeaturesResources.de.xlf index 86bd8b2e93715..693f75165b349 100644 --- a/src/Features/Core/Portable/xlf/FeaturesResources.de.xlf +++ b/src/Features/Core/Portable/xlf/FeaturesResources.de.xlf @@ -1683,11 +1683,6 @@ Möchten Sie fortfahren? Attribut - - Use auto property - Automatisch generierte Eigenschaft verwenden - - Replace '{0}' and '{1}' with property "{0}" und "{1}" durch Eigenschaft ersetzen diff --git a/src/Features/Core/Portable/xlf/FeaturesResources.es.xlf b/src/Features/Core/Portable/xlf/FeaturesResources.es.xlf index 21deb00787ab3..915760513dac1 100644 --- a/src/Features/Core/Portable/xlf/FeaturesResources.es.xlf +++ b/src/Features/Core/Portable/xlf/FeaturesResources.es.xlf @@ -1683,11 +1683,6 @@ Do you want to continue? atributo - - Use auto property - Usar propiedad automática - - Replace '{0}' and '{1}' with property Reemplazar '{0}' y '{1}' por la propiedad diff --git a/src/Features/Core/Portable/xlf/FeaturesResources.fr.xlf b/src/Features/Core/Portable/xlf/FeaturesResources.fr.xlf index a64604bef4def..787780f5d89e4 100644 --- a/src/Features/Core/Portable/xlf/FeaturesResources.fr.xlf +++ b/src/Features/Core/Portable/xlf/FeaturesResources.fr.xlf @@ -1683,11 +1683,6 @@ Voulez-vous continuer ? attribut - - Use auto property - Utiliser auto-property - - Replace '{0}' and '{1}' with property Remplacer '{0}' et '{1}' par une propriété diff --git a/src/Features/Core/Portable/xlf/FeaturesResources.it.xlf b/src/Features/Core/Portable/xlf/FeaturesResources.it.xlf index 85ddfbf829a97..4761afb03d8ef 100644 --- a/src/Features/Core/Portable/xlf/FeaturesResources.it.xlf +++ b/src/Features/Core/Portable/xlf/FeaturesResources.it.xlf @@ -1683,11 +1683,6 @@ Continuare? attributo - - Use auto property - Usa la proprietà automatica - - Replace '{0}' and '{1}' with property Sostituisci '{0}' e '{1}' con la proprietà diff --git a/src/Features/Core/Portable/xlf/FeaturesResources.ja.xlf b/src/Features/Core/Portable/xlf/FeaturesResources.ja.xlf index 9486fd3b89860..a3a0ef9f3b0bc 100644 --- a/src/Features/Core/Portable/xlf/FeaturesResources.ja.xlf +++ b/src/Features/Core/Portable/xlf/FeaturesResources.ja.xlf @@ -1683,11 +1683,6 @@ Do you want to continue? 属性 - - Use auto property - 自動プロパティを使用する - - Replace '{0}' and '{1}' with property {0}' および '{1}' をプロパティと置換する diff --git a/src/Features/Core/Portable/xlf/FeaturesResources.ko.xlf b/src/Features/Core/Portable/xlf/FeaturesResources.ko.xlf index b81da35212037..bb549d10126e0 100644 --- a/src/Features/Core/Portable/xlf/FeaturesResources.ko.xlf +++ b/src/Features/Core/Portable/xlf/FeaturesResources.ko.xlf @@ -1683,11 +1683,6 @@ Do you want to continue? 특성 - - Use auto property - auto 속성 사용 - - Replace '{0}' and '{1}' with property 속성으로 '{0}' 및 '{1}' 바꾸기 diff --git a/src/Features/Core/Portable/xlf/FeaturesResources.pl.xlf b/src/Features/Core/Portable/xlf/FeaturesResources.pl.xlf index c8f4f07497108..deec1c5cb22d7 100644 --- a/src/Features/Core/Portable/xlf/FeaturesResources.pl.xlf +++ b/src/Features/Core/Portable/xlf/FeaturesResources.pl.xlf @@ -1683,11 +1683,6 @@ Czy chcesz kontynuować? atrybut - - Use auto property - Użyj właściwości automatycznej - - Replace '{0}' and '{1}' with property Zastąp elementy „{0}” i „{1}” właściwością diff --git a/src/Features/Core/Portable/xlf/FeaturesResources.pt-BR.xlf b/src/Features/Core/Portable/xlf/FeaturesResources.pt-BR.xlf index 1409e8d461128..2557777f95f2b 100644 --- a/src/Features/Core/Portable/xlf/FeaturesResources.pt-BR.xlf +++ b/src/Features/Core/Portable/xlf/FeaturesResources.pt-BR.xlf @@ -1683,11 +1683,6 @@ Deseja continuar? atributo - - Use auto property - Usar a propriedade auto - - Replace '{0}' and '{1}' with property Substituir "{0}" e "{1}" por propriedades diff --git a/src/Features/Core/Portable/xlf/FeaturesResources.ru.xlf b/src/Features/Core/Portable/xlf/FeaturesResources.ru.xlf index 98c93f39ca77b..e19a88530b8eb 100644 --- a/src/Features/Core/Portable/xlf/FeaturesResources.ru.xlf +++ b/src/Features/Core/Portable/xlf/FeaturesResources.ru.xlf @@ -1683,11 +1683,6 @@ Do you want to continue? атрибут - - Use auto property - Использовать свойство auto - - Replace '{0}' and '{1}' with property Заменить "{0}" и "{1}" свойством diff --git a/src/Features/Core/Portable/xlf/FeaturesResources.tr.xlf b/src/Features/Core/Portable/xlf/FeaturesResources.tr.xlf index a87ca95862207..0472c37e2295d 100644 --- a/src/Features/Core/Portable/xlf/FeaturesResources.tr.xlf +++ b/src/Features/Core/Portable/xlf/FeaturesResources.tr.xlf @@ -1683,11 +1683,6 @@ Devam etmek istiyor musunuz? öznitelik - - Use auto property - Otomatik özellik kullan - - Replace '{0}' and '{1}' with property {0}' ve '{1}' öğesini özellikle değiştir diff --git a/src/Features/Core/Portable/xlf/FeaturesResources.zh-Hans.xlf b/src/Features/Core/Portable/xlf/FeaturesResources.zh-Hans.xlf index d017be9f851be..5bab026ca3681 100644 --- a/src/Features/Core/Portable/xlf/FeaturesResources.zh-Hans.xlf +++ b/src/Features/Core/Portable/xlf/FeaturesResources.zh-Hans.xlf @@ -1683,11 +1683,6 @@ Do you want to continue? 属性 - - Use auto property - 使用自动属性 - - Replace '{0}' and '{1}' with property 使用属性替代“{0}”和“{1}” diff --git a/src/Features/Core/Portable/xlf/FeaturesResources.zh-Hant.xlf b/src/Features/Core/Portable/xlf/FeaturesResources.zh-Hant.xlf index 577b3d2489c91..c150a94c79007 100644 --- a/src/Features/Core/Portable/xlf/FeaturesResources.zh-Hant.xlf +++ b/src/Features/Core/Portable/xlf/FeaturesResources.zh-Hant.xlf @@ -1683,11 +1683,6 @@ Do you want to continue? 屬性 - - Use auto property - 使用 Auto 屬性 - - Replace '{0}' and '{1}' with property 以屬性取代 '{0}' 和 '{1}' diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/VisualBasic/Extensions/ExpressionSyntaxExtensions.vb b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/VisualBasic/Extensions/ExpressionSyntaxExtensions.vb index 711cf977e1e1b..65bbb1f3a2b86 100644 --- a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/VisualBasic/Extensions/ExpressionSyntaxExtensions.vb +++ b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/VisualBasic/Extensions/ExpressionSyntaxExtensions.vb @@ -219,5 +219,127 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Extensions Return OperatorPrecedence.PrecedenceNone End Select End Function + + + Public Function IsInOutContext(expression As ExpressionSyntax) As Boolean + ' NOTE(cyrusn): VB has no concept of an out context. Even when a parameter has an + ' '' attribute on it, it's still treated as ref by VB. So we always return false + ' here. + Return False + End Function + + + Public Function IsInRefContext(expression As ExpressionSyntax, semanticModel As SemanticModel, cancellationToken As CancellationToken) As Boolean + Dim simpleArgument = TryCast(expression?.Parent, SimpleArgumentSyntax) + + If simpleArgument Is Nothing Then + Return False + ElseIf simpleArgument.IsNamed Then + Dim info = semanticModel.GetSymbolInfo(simpleArgument.NameColonEquals.Name, cancellationToken) + + Dim parameter = TryCast(info.GetAnySymbol(), IParameterSymbol) + Return parameter IsNot Nothing AndAlso parameter.RefKind <> RefKind.None + + Else + Dim argumentList = TryCast(simpleArgument.Parent, ArgumentListSyntax) + + If argumentList IsNot Nothing Then + Dim parent = argumentList.Parent + Dim index = argumentList.Arguments.IndexOf(simpleArgument) + + Dim info = semanticModel.GetSymbolInfo(parent, cancellationToken) + Dim symbol = info.GetAnySymbol() + + If TypeOf symbol Is IMethodSymbol Then + Dim method = DirectCast(symbol, IMethodSymbol) + If index < method.Parameters.Length Then + Return method.Parameters(index).RefKind <> RefKind.None + End If + ElseIf TypeOf symbol Is IPropertySymbol Then + Dim prop = DirectCast(symbol, IPropertySymbol) + If index < prop.Parameters.Length Then + Return prop.Parameters(index).RefKind <> RefKind.None + End If + End If + End If + + End If + + Return False + End Function + + + Public Function IsInInContext(expression As ExpressionSyntax) As Boolean + ' NOTE: VB does not support in parameters. Always return False here. + Return False + End Function + + + Public Function IsOnlyWrittenTo(expression As ExpressionSyntax) As Boolean + If expression.IsRightSideOfDot() Then + expression = TryCast(expression.Parent, ExpressionSyntax) + End If + + If expression IsNot Nothing Then + If expression.IsInOutContext() Then + Return True + End If + + If expression.IsParentKind(SyntaxKind.SimpleAssignmentStatement) Then + Dim assignmentStatement = DirectCast(expression.Parent, AssignmentStatementSyntax) + If expression Is assignmentStatement.Left Then + Return True + End If + End If + + If expression.IsParentKind(SyntaxKind.NameColonEquals) AndAlso + expression.Parent.IsParentKind(SyntaxKind.SimpleArgument) Then + + ' + ' this is only a write to Prop + Return True + End If + + If expression.IsChildNode(Of NamedFieldInitializerSyntax)(Function(n) n.Name) Then + Return True + End If + + Return False + End If + + Return False + End Function + + + Public Function IsWrittenTo(expression As ExpressionSyntax, semanticModel As SemanticModel, cancellationToken As CancellationToken) As Boolean + If IsOnlyWrittenTo(expression) Then + Return True + End If + + If expression.IsRightSideOfDot() Then + expression = TryCast(expression.Parent, ExpressionSyntax) + End If + + If expression IsNot Nothing Then + If expression.IsInRefContext(semanticModel, cancellationToken) Then + Return True + End If + + If TypeOf expression.Parent Is AssignmentStatementSyntax Then + Dim assignmentStatement = DirectCast(expression.Parent, AssignmentStatementSyntax) + If expression Is assignmentStatement.Left Then + Return True + End If + End If + + If expression.IsChildNode(Of NamedFieldInitializerSyntax)(Function(n) n.Name) Then + Return True + End If + + Return False + End If + + Return False + End Function End Module End Namespace diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Workspace/VisualBasic/Extensions/ExpressionSyntaxExtensions.vb b/src/Workspaces/SharedUtilitiesAndExtensions/Workspace/VisualBasic/Extensions/ExpressionSyntaxExtensions.vb index c9b8cd9b44697..745a4116756e0 100644 --- a/src/Workspaces/SharedUtilitiesAndExtensions/Workspace/VisualBasic/Extensions/ExpressionSyntaxExtensions.vb +++ b/src/Workspaces/SharedUtilitiesAndExtensions/Workspace/VisualBasic/Extensions/ExpressionSyntaxExtensions.vb @@ -213,128 +213,6 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Extensions DirectCast(expression, ObjectCreationExpressionSyntax).ArgumentList Is Nothing End Function - - Public Function IsInOutContext(expression As ExpressionSyntax) As Boolean - ' NOTE(cyrusn): VB has no concept of an out context. Even when a parameter has an - ' '' attribute on it, it's still treated as ref by VB. So we always return false - ' here. - Return False - End Function - - - Public Function IsInRefContext(expression As ExpressionSyntax, semanticModel As SemanticModel, cancellationToken As CancellationToken) As Boolean - Dim simpleArgument = TryCast(expression?.Parent, SimpleArgumentSyntax) - - If simpleArgument Is Nothing Then - Return False - ElseIf simpleArgument.IsNamed Then - Dim info = semanticModel.GetSymbolInfo(simpleArgument.NameColonEquals.Name, cancellationToken) - - Dim parameter = TryCast(info.GetAnySymbol(), IParameterSymbol) - Return parameter IsNot Nothing AndAlso parameter.RefKind <> RefKind.None - - Else - Dim argumentList = TryCast(simpleArgument.Parent, ArgumentListSyntax) - - If argumentList IsNot Nothing Then - Dim parent = argumentList.Parent - Dim index = argumentList.Arguments.IndexOf(simpleArgument) - - Dim info = semanticModel.GetSymbolInfo(parent, cancellationToken) - Dim symbol = info.GetAnySymbol() - - If TypeOf symbol Is IMethodSymbol Then - Dim method = DirectCast(symbol, IMethodSymbol) - If index < method.Parameters.Length Then - Return method.Parameters(index).RefKind <> RefKind.None - End If - ElseIf TypeOf symbol Is IPropertySymbol Then - Dim prop = DirectCast(symbol, IPropertySymbol) - If index < prop.Parameters.Length Then - Return prop.Parameters(index).RefKind <> RefKind.None - End If - End If - End If - - End If - - Return False - End Function - - - Public Function IsInInContext(expression As ExpressionSyntax) As Boolean - ' NOTE: VB does not support in parameters. Always return False here. - Return False - End Function - - - Public Function IsOnlyWrittenTo(expression As ExpressionSyntax) As Boolean - If expression.IsRightSideOfDot() Then - expression = TryCast(expression.Parent, ExpressionSyntax) - End If - - If expression IsNot Nothing Then - If expression.IsInOutContext() Then - Return True - End If - - If expression.IsParentKind(SyntaxKind.SimpleAssignmentStatement) Then - Dim assignmentStatement = DirectCast(expression.Parent, AssignmentStatementSyntax) - If expression Is assignmentStatement.Left Then - Return True - End If - End If - - If expression.IsParentKind(SyntaxKind.NameColonEquals) AndAlso - expression.Parent.IsParentKind(SyntaxKind.SimpleArgument) Then - - ' - ' this is only a write to Prop - Return True - End If - - If expression.IsChildNode(Of NamedFieldInitializerSyntax)(Function(n) n.Name) Then - Return True - End If - - Return False - End If - - Return False - End Function - - - Public Function IsWrittenTo(expression As ExpressionSyntax, semanticModel As SemanticModel, cancellationToken As CancellationToken) As Boolean - If IsOnlyWrittenTo(expression) Then - Return True - End If - - If expression.IsRightSideOfDot() Then - expression = TryCast(expression.Parent, ExpressionSyntax) - End If - - If expression IsNot Nothing Then - If expression.IsInRefContext(semanticModel, cancellationToken) Then - Return True - End If - - If TypeOf expression.Parent Is AssignmentStatementSyntax Then - Dim assignmentStatement = DirectCast(expression.Parent, AssignmentStatementSyntax) - If expression Is assignmentStatement.Left Then - Return True - End If - End If - - If expression.IsChildNode(Of NamedFieldInitializerSyntax)(Function(n) n.Name) Then - Return True - End If - - Return False - End If - - Return False - End Function - Public Function IsMeMyBaseOrMyClass(expression As ExpressionSyntax) As Boolean If expression Is Nothing Then