diff --git a/src/EditorFeatures/VisualBasicTest/Diagnostics/GenerateType/GenerateTypeTests.vb b/src/EditorFeatures/VisualBasicTest/Diagnostics/GenerateType/GenerateTypeTests.vb index 39fd7d166bb55c8a162615af0f2790cca1283b87..bf642f8985c9d757a2ade7f33799812330f1451f 100644 --- a/src/EditorFeatures/VisualBasicTest/Diagnostics/GenerateType/GenerateTypeTests.vb +++ b/src/EditorFeatures/VisualBasicTest/Diagnostics/GenerateType/GenerateTypeTests.vb @@ -49,6 +49,12 @@ NewLines("Class C \n dim f as Foo \n End Class \n Friend Class Foo \n End Class" index:=1) End Sub + + Public Sub TestMissingOnLowercaseName() + TestMissing( +NewLines("Class C \n dim f as [|foo|] \n End Class")) + End Sub + Public Sub TestGenerateClassFromFullyQualifiedFieldIntoSameNamespace() diff --git a/src/Features/Core/Portable/GenerateType/AbstractGenerateTypeService.State.cs b/src/Features/Core/Portable/GenerateType/AbstractGenerateTypeService.State.cs index 86d219bed5ac8effab5be2d06fc65c0a5fb7843b..68a1a61871b31c576fa6f35f4b82459df0961431 100644 --- a/src/Features/Core/Portable/GenerateType/AbstractGenerateTypeService.State.cs +++ b/src/Features/Core/Portable/GenerateType/AbstractGenerateTypeService.State.cs @@ -111,6 +111,16 @@ private State(Compilation compilation) return false; } + if (char.IsLower(name[0]) && !document.SemanticModel.Compilation.IsCaseSensitive) + { + // It's near universal in .Net that types start with a capital letter. As such, + // if this name starts with a lowercase letter, don't even bother to offer + // "generate type". The user most likely wants to run 'Add Import' (which will + // then fix up a case where they typed an existing type name in lowercase, + // intending the fix to case correct it). + return false; + } + this.NameOrMemberAccessExpression = generateTypeServiceStateOptions.NameOrMemberAccessExpression; this.ObjectCreationExpressionOpt = generateTypeServiceStateOptions.ObjectCreationExpressionOpt;