提交 9b7fe079 编写于 作者: R Ravi Chande

Merge pull request #4757 from rchande/MASperf2

Always use autoinsertionlocation=false from metadata as source
......@@ -246,6 +246,36 @@ End Class
[WorkItem(546195), WorkItem(546269)]
[Fact, Trait(Traits.Feature, Traits.Features.MetadataAsSource)]
public void TestEnum()
{
var metadataSource = "public enum E { A, B, C }";
var symbolName = "E";
GenerateAndVerifySource(metadataSource, symbolName, LanguageNames.CSharp, $@"
#region {FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
// {CodeAnalysisResources.InMemoryAssembly}
#endregion
public enum [|E|]
{{
A = 0,
B = 1,
C = 2
}}");
GenerateAndVerifySource(metadataSource, symbolName, LanguageNames.VisualBasic, $@"
#Region ""{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null""
' {CodeAnalysisResources.InMemoryAssembly}
#End Region
Public Enum [|E|]
A = 0
B = 1
C = 2
End Enum");
}
[WorkItem(546195), WorkItem(546269)]
[Fact, Trait(Traits.Feature, Traits.Features.MetadataAsSource)]
public void TestEnumFromField()
{
var metadataSource = "public enum E { A, B, C }";
var symbolName = "E.C";
......@@ -257,9 +287,9 @@ public void TestEnum()
public enum E
{{
A,
B,
[|C|]
A = 0,
B = 1,
[|C|] = 2
}}");
GenerateAndVerifySource(metadataSource, symbolName, LanguageNames.VisualBasic, $@"
#Region ""{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null""
......@@ -267,9 +297,9 @@ public enum E
#End Region
Public Enum E
A
B
[|C|]
A = 0
B = 1
[|C|] = 2
End Enum");
}
......@@ -287,9 +317,9 @@ public void TestEnumWithUnderlyingType()
public enum E : short
{{
A,
B,
[|C|]
A = 0,
B = 1,
[|C|] = 2
}}");
GenerateAndVerifySource(metadataSource, symbolName, LanguageNames.VisualBasic, $@"
#Region ""{FeaturesResources.Assembly} ReferencedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null""
......@@ -297,9 +327,9 @@ public enum E : short
#End Region
Public Enum E As Short
A
B
[|C|]
A = 0
B = 1
[|C|] = 2
End Enum");
}
......
......@@ -100,7 +100,7 @@ private static CodeGenerationOptions CreateCodeGenerationOptions(Location contex
generateMethodBodies: false,
generateDocumentationComments: true,
mergeAttributes: false,
autoInsertionLocation: !((symbol is ITypeSymbol) && (symbol as ITypeSymbol).IsEnumType()));
autoInsertionLocation: false);
}
}
}
......@@ -262,7 +262,10 @@ protected static T Cast<T>(object value)
// Metadata as source generates complete declarations and doesn't modify
// existing ones. We can take the members to generate, sort them once,
// and then add them in that order to the end of the destination.
newMembers.Sort(GetMemberComparer());
if (!GeneratingEnum(members))
{
newMembers.Sort(GetMemberComparer());
}
currentDestination = this.AddMembers(currentDestination, newMembers);
}
......@@ -270,6 +273,12 @@ protected static T Cast<T>(object value)
return currentDestination;
}
private bool GeneratingEnum(IEnumerable<ISymbol> members)
{
var field = members.OfType<IFieldSymbol>().FirstOrDefault();
return field != null && field.ContainingType.IsEnumType();
}
protected abstract IComparer<SyntaxNode> GetMemberComparer();
protected static CodeGenerationOptions CreateOptionsForMultipleMembers(CodeGenerationOptions options)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册