提交 0cb3db19 编写于 作者: C Cyrus Najmabadi

Merge branch 'master' into asyncTokenChange

......@@ -20,7 +20,7 @@
<Target Name="Build">
<MSBuild BuildInParallel="true"
Projects="$(RoslynSolution)"
Properties="RestorePackages=false;TreatWarningsAsErrors=true"
Properties="RestorePackages=false;TreatWarningsAsErrors=true;DeployExtension=false"
Targets="Build"/>
<MSBuild BuildInParallel="true"
Condition="'$(ManualTest)' == ''"
......@@ -32,7 +32,7 @@
<Target Name="Clean">
<MSBuild BuildInParallel="true"
Projects="$(RoslynSolution)"
Properties="RestorePackages=false"
Properties="RestorePackages=false;DeployExtension=false"
Targets="Clean"/>
<MSBuild BuildInParallel="true"
Condition="'$(ManualTest)' == ''"
......@@ -44,7 +44,7 @@
<Target Name="Rebuild">
<MSBuild BuildInParallel="true"
Projects="$(RoslynSolution)"
Properties="RestorePackages=false;TreatWarningsAsErrors=true"
Properties="RestorePackages=false;TreatWarningsAsErrors=true;DeployExtension=false"
Targets="Rebuild"/>
<MSBuild BuildInParallel="true"
Condition="'$(ManualTest)' == ''"
......
......@@ -11,7 +11,7 @@ set BuildRestore=false
REM Because override the C#/VB toolset to build against our LKG package, it is important
REM that we do not reuse MSBuild nodes from other jobs/builds on the machine. Otherwise,
REM we'll run into issues such as https://github.com/dotnet/roslyn/issues/6211.
set MSBuildAdditionalCommandLineArgs=/nologo /v:m /m /nodeReuse:false /p:DeployExtension=false
set MSBuildAdditionalCommandLineArgs=/nologo /v:m /m /nodeReuse:false
:ParseArguments
if "%1" == "" goto :DoneParsing
......
......@@ -37,6 +37,7 @@
<Compile Include="PEWriter\BlobTests.cs" />
<Compile Include="RealParserTests.cs" />
<Compile Include="SimpleAnalyzerAssemblyLoaderTests.cs" />
<Compile Include="SourceFileResolverTest.cs" />
<Compile Include="Text\LargeEncodedTextTests.cs" />
<Compile Include="Text\SourceTextStreamTests.cs" />
<Compile Include="XmlDocumentationCommentTextReaderTests.cs" />
......@@ -180,4 +181,4 @@
<Import Project="..\..\..\..\build\Targets\VSL.Imports.targets" />
<Import Project="..\..\..\..\build\Targets\Roslyn.Toolsets.Xunit.targets" />
</ImportGroup>
</Project>
</Project>
\ No newline at end of file
using Roslyn.Test.Utilities;
using Roslyn.Utilities;
using System;
using System.Collections.Immutable;
using Xunit;
namespace Microsoft.CodeAnalysis.UnitTests
{
public class SourceFileResolverTest
{
[Fact]
public void IncorrectPathmaps()
{
string isABaseDirectory;
if (PortableShim.Path.DirectorySeparatorChar == '/')
{
isABaseDirectory = "/";
}
else
{
isABaseDirectory = "C://";
}
try {
new SourceFileResolver(
ImmutableArray.Create(""),
isABaseDirectory,
ImmutableArray.Create(KeyValuePair.Create<string, string>("key", null)));
AssertEx.Fail("Didn't throw");
}
catch (ArgumentException argException)
{
Assert.Equal(CodeAnalysisResources.NullValueInPathMap + "\r\nParameter name: pathMap", argException.Message);
}
// Empty pathmap value doesn't throw
new SourceFileResolver(
ImmutableArray.Create(""),
isABaseDirectory,
ImmutableArray.Create(KeyValuePair.Create<string, string>("key", "")));
}
[Fact]
public void BadBaseDirectory()
{
try {
new SourceFileResolver(
ImmutableArray.Create(""),
"not_a_root directory",
ImmutableArray.Create(KeyValuePair.Create<string, string>("key", "value")));
AssertEx.Fail("Didn't throw");
}
catch (ArgumentException argExeption)
{
Assert.Equal(CodeAnalysisResources.AbsolutePathExpected + "\r\nParameter name: baseDirectory", argExeption.Message);
}
}
}
}
......@@ -405,15 +405,6 @@ internal class CodeAnalysisResources {
}
}
/// <summary>
/// Looks up a localized string similar to A value in the pathMap is empty..
/// </summary>
internal static string EmptyValueInPathMap {
get {
return ResourceManager.GetString("EmptyValueInPathMap", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to &apos;end&apos; must not be less than &apos;start&apos;.
/// </summary>
......@@ -873,6 +864,15 @@ internal class CodeAnalysisResources {
}
}
/// <summary>
/// Looks up a localized string similar to A value in the pathMap is null..
/// </summary>
internal static string NullValueInPathMap {
get {
return ResourceManager.GetString("NullValueInPathMap", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Output kind not supported..
/// </summary>
......
......@@ -222,8 +222,8 @@
<data name="EmptyKeyInPathMap" xml:space="preserve">
<value>A key in the pathMap is empty.</value>
</data>
<data name="EmptyValueInPathMap" xml:space="preserve">
<value>A value in the pathMap is empty.</value>
<data name="NullValueInPathMap" xml:space="preserve">
<value>A value in the pathMap is null.</value>
</data>
<data name="KeyInPathMapEndsWithSeparator" xml:space="preserve">
<value>A key in the pathMap ends with a path separator.</value>
......
......@@ -3,7 +3,6 @@
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Diagnostics;
using System.IO;
using System.Linq;
using Roslyn.Utilities;
......@@ -62,9 +61,9 @@ public SourceFileResolver(ImmutableArray<string> searchPaths, string baseDirecto
}
var value = kv.Value;
if (value == null || value.Length == 0)
if (value == null)
{
throw new ArgumentException(CodeAnalysisResources.EmptyValueInPathMap, nameof(pathMap));
throw new ArgumentException(CodeAnalysisResources.NullValueInPathMap, nameof(pathMap));
}
if (IsPathSeparator(key[key.Length - 1]))
......
......@@ -5,7 +5,7 @@
namespace Microsoft.CodeAnalysis.CompilerServer.UnitTests
{
class EndToEndDeterminismTest: TestBase
public class EndToEndDeterminismTest: TestBase
{
private string _flags = "/shared /deterministic+ /nologo /t:library /pdb:none";
......
' 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 Microsoft.CodeAnalysis
Imports Microsoft.CodeAnalysis.CodeActions
Imports Microsoft.CodeAnalysis.Editor.UnitTests.Extensions
Imports Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces
Imports Microsoft.CodeAnalysis.Formatting
Imports Microsoft.CodeAnalysis.Simplification
Imports Microsoft.CodeAnalysis.Text
Imports Roslyn.Utilities
Namespace Microsoft.CodeAnalysis.Editor.UnitTests.Expansion
Public MustInherit Class AbstractExpansionTest
Protected Sub Test(definition As XElement, expected As XElement, Optional useLastProject As Boolean = False)
Protected Sub Test(definition As XElement, expected As XElement, Optional useLastProject As Boolean = False, Optional expandParameter As Boolean = False)
Using workspace = TestWorkspaceFactory.CreateWorkspace(definition)
Dim hostDocument = If(Not useLastProject, workspace.Documents.Single(), workspace.Documents.Last())
......@@ -28,12 +26,12 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.Expansion
If (hostDocument.AnnotatedSpans.ContainsKey("Expand")) Then
For Each span In hostDocument.AnnotatedSpans("Expand")
Dim node = GetExpressionSyntaxWithSameSpan(root.FindToken(span.Start).Parent, span.End)
root = root.ReplaceNode(node, Simplifier.ExpandAsync(node, document, Nothing).Result)
root = root.ReplaceNode(node, Simplifier.ExpandAsync(node, document, expandInsideNode:=Nothing, expandParameter:=expandParameter).Result)
Next
ElseIf (hostDocument.AnnotatedSpans.ContainsKey("ExpandAndSimplify")) Then
For Each span In hostDocument.AnnotatedSpans("ExpandAndSimplify")
Dim node = GetExpressionSyntaxWithSameSpan(root.FindToken(span.Start).Parent, span.End)
root = root.ReplaceNode(node, Simplifier.ExpandAsync(node, document, Nothing).Result)
root = root.ReplaceNode(node, Simplifier.ExpandAsync(node, document, expandInsideNode:=Nothing, expandParameter:=expandParameter).Result)
document = document.WithSyntaxRoot(root)
document = Simplifier.ReduceAsync(document, Simplifier.Annotation).Result
root = document.GetSyntaxRootAsync().Result
......
......@@ -148,6 +148,119 @@ namespace NS
Test(input, expected)
End Sub
<WpfFact, Trait(Traits.Feature, Traits.Features.Expansion)>
Public Sub CSharp_GenericNameExpansion_DontExpandAnonymousTypes()
Dim input =
<Workspace>
<Project Language="C#" CommonReferences="true">
<Document>
class C
{
static void Mumble&lt;T&gt;(T anonymousType) { }
static void M()
{
{|Expand:Mumble|}(new { x = 42 });
}
}
</Document>
</Project>
</Workspace>
Dim expected =
<code>
class C
{
static void Mumble&lt;T&gt;(T anonymousType) { }
static void M()
{
global::C.Mumble(new { x = 42 });
}
}
</code>
Test(input, expected)
End Sub
<WpfFact, Trait(Traits.Feature, Traits.Features.Expansion)>
Public Sub CSharp_LambdaParameter_DontExpandAnonymousTypes1()
Dim input =
<Workspace>
<Project Language="C#" CommonReferences="true">
<Document>
using System;
class C
{
static void Mumble&lt;T&gt;(T anonymousType, Action&lt;T, int&gt; lambda) { }
static void M()
{
Mumble(new { x = 42 }, {|Expand:a => a.x|});
}
}
</Document>
</Project>
</Workspace>
Dim expected =
<code>
using System;
class C
{
static void Mumble&lt;T&gt;(T anonymousType, Action&lt;T, int&gt; lambda) { }
static void M()
{
Mumble(new { x = 42 }, a => a.x);
}
}
</code>
Test(input, expected, expandParameter:=True)
End Sub
<WpfFact, Trait(Traits.Feature, Traits.Features.Expansion)>
Public Sub CSharp_LambdaParameter_DontExpandAnonymousTypes2()
Dim input =
<Workspace>
<Project Language="C#" CommonReferences="true">
<Document>
using System;
class C
{
static void Mumble&lt;T&gt;(T anonymousType, Action&lt;T, int, int&gt; lambda) { }
static void M()
{
Mumble(new { x = 42 }, {|Expand:(a, y) => a.x|});
}
}
</Document>
</Project>
</Workspace>
Dim expected =
<code>
using System;
class C
{
static void Mumble&lt;T&gt;(T anonymousType, Action&lt;T, int, int&gt; lambda) { }
static void M()
{
Mumble(new { x = 42 }, (a, y) => a.x);
}
}
</code>
Test(input, expected, expandParameter:=True)
End Sub
#End Region
#Region "Visual Basic tests"
<WorkItem(1913, "https://github.com/dotnet/roslyn/issues/1913")>
<WpfFact, Trait(Traits.Feature, Traits.Features.Expansion)>
Public Sub VisualBasic_SimpleIdentifierAliasExpansion_AliasBinds()
......@@ -237,6 +350,7 @@ End Namespace
Test(input, expected)
End Sub
#End Region
End Class
......
......@@ -546,5 +546,55 @@ class C
result.AssertLabeledSpansAre("second", "DefaultValue(C.Method)", type:=RelatedLocationType.ResolvedReferenceConflict)
End Using
End Sub
<WorkItem(6306, "https://github.com/dotnet/roslyn/issues/6306")>
<WpfFact, Trait(Traits.Feature, Traits.Features.Rename)>
Public Sub ResolveConflictInAnonymousTypeProperty()
Using result = RenameEngineResult.Create(
<Workspace>
<Project Language="C#" CommonReferences="true">
<Document><![CDATA[
using System;
class C
{
void X<T>(T t, Func<T, long> e) { {|first:X|}(new { a = 1 }, a => a.a); }
[Obsolete]
void {|origin:$$Y|}<T>(T t, Func<T, int> e) { }
}
]]></Document>
</Project>
</Workspace>, renameTo:="X")
result.AssertLabeledSpansAre("first", "X(new { a = 1 }, a => (long)a.a);", type:=RelatedLocationType.ResolvedNonReferenceConflict)
result.AssertLabeledSpansAre("origin", "X", type:=RelatedLocationType.NoConflict)
End Using
End Sub
<WorkItem(6308, "https://github.com/dotnet/roslyn/issues/6308")>
<WpfFact, Trait(Traits.Feature, Traits.Features.Rename)>
Public Sub ResolveConflictWhenAnonymousTypeIsUsedAsGenericArgument()
Using result = RenameEngineResult.Create(
<Workspace>
<Project Language="C#" CommonReferences="true">
<Document><![CDATA[
using System;
class C
{
void M<T>(T t, Func<T, int, int> e) { }
int M<T>(T t, Func<T, long, long> e) => {|first:M|}(new { }, (_, a) => {|second:X|}(a));
long X(long a) => a;
int {|origin:$$Y|}(int a) => a;
}
]]></Document>
</Project>
</Workspace>, renameTo:="X")
result.AssertLabeledSpansAre("first", "M(new { }, (_, a) => (long)X(a))", type:=RelatedLocationType.ResolvedNonReferenceConflict)
result.AssertLabeledSpansAre("second", "M(new { }, (_, a) => (long)X(a))", type:=RelatedLocationType.ResolvedNonReferenceConflict)
result.AssertLabeledSpansAre("origin", "X", type:=RelatedLocationType.NoConflict)
End Using
End Sub
End Class
End Namespace
' 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 Microsoft.CodeAnalysis.Text
Imports Microsoft.CodeAnalysis.VisualBasic
Imports Microsoft.CodeAnalysis.VisualBasic.Symbols
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
Imports Roslyn.Test.Utilities
Imports Xunit
Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.Recommendations.PreprocessorDirectives
Public Class ConstDirectiveKeywordRecommenderTests
<WpfFact>
<Trait(Traits.Feature, Traits.Features.KeywordRecommending)>
<WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)>
Public Sub HashConstInFile()
VerifyRecommendationsContain(<File>|</File>, "#Const")
End Sub
<WpfFact>
<Trait(Traits.Feature, Traits.Features.KeywordRecommending)>
<WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)>
Public Sub HashConstInMethodBody()
VerifyRecommendationsContain(<MethodBody>|</MethodBody>, "#Const")
End Sub
......@@ -31,25 +22,34 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.Recommendations.Pr
</File>, "#Const")
End Sub
<WpfFact>
<WorkItem(544629)>
<Trait(Traits.Feature, Traits.Features.KeywordRecommending)>
<WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)>
Public Sub HashConstAfterSingleNonMatchingCharacter()
VerifyRecommendationsContain(<File>a|</File>, "#Const")
End Sub
<WpfFact>
<WorkItem(544629)>
<Trait(Traits.Feature, Traits.Features.KeywordRecommending)>
<WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)>
Public Sub HashConstAfterPartialConstWithoutHash()
VerifyRecommendationsContain(<File>Con|</File>, "#Const")
End Sub
<WpfFact>
<WorkItem(722, "https://github.com/dotnet/roslyn/issues/722")>
<Trait(Traits.Feature, Traits.Features.KeywordRecommending)>
<WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)>
Public Sub NotAfterHashConst()
VerifyRecommendationsMissing(<File>#Const |</File>, "#Const")
End Sub
<WorkItem(6389, "https://github.com/dotnet/roslyn/issues/6389")>
<WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)>
Public Sub NotAfterHashRegion()
VerifyRecommendationsMissing(<File>
Class C
#Region |
End Class
</File>, "#Const")
End Sub
End Class
End Namespace
' 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 Microsoft.CodeAnalysis.Text
Imports Microsoft.CodeAnalysis.VisualBasic
Imports Microsoft.CodeAnalysis.VisualBasic.Symbols
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
Imports Roslyn.Test.Utilities
Imports Xunit
Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.Recommendations.PreprocessorDirectives
Public Class IfDirectiveKeywordRecommenderTests
<WpfFact>
<Trait(Traits.Feature, Traits.Features.KeywordRecommending)>
<WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)>
Public Sub HashIfInFile()
VerifyRecommendationsContain(<File>|</File>, "#If")
End Sub
<WpfFact>
<Trait(Traits.Feature, Traits.Features.KeywordRecommending)>
<WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)>
Public Sub HashIfInMethodBody()
VerifyRecommendationsContain(<MethodBody>|</MethodBody>, "#If")
End Sub
<WpfFact>
<Trait(Traits.Feature, Traits.Features.KeywordRecommending)>
<WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)>
Public Sub NotInEnumBlockMemberDeclaration()
VerifyRecommendationsMissing(<File>
Enum foo
......@@ -30,5 +20,17 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.Recommendations.Pr
End enum
</File>, "#If")
End Sub
<WorkItem(6389, "https://github.com/dotnet/roslyn/issues/6389")>
<WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)>
Public Sub NotAfterHashRegion()
VerifyRecommendationsMissing(<File>
Class C
#Region |
End Class
</File>, "#If")
End Sub
End Class
End Namespace
' 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 Microsoft.CodeAnalysis.Text
Imports Microsoft.CodeAnalysis.VisualBasic
Imports Microsoft.CodeAnalysis.VisualBasic.Symbols
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
Imports Roslyn.Test.Utilities
Imports Xunit
Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.Recommendations.PreprocessorDirectives
Public Class RegionDirectiveKeywordRecommenderTests
<WpfFact>
<Trait(Traits.Feature, Traits.Features.KeywordRecommending)>
<WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)>
Public Sub HashRegionInFile()
VerifyRecommendationsContain(<File>|</File>, "#Region")
End Sub
<WpfFact>
<Trait(Traits.Feature, Traits.Features.KeywordRecommending)>
<WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)>
Public Sub HashRegionInLambda()
VerifyRecommendationsContain(<ClassDeclaration>Dim x = Function()
|
End Function</ClassDeclaration>, "#Region")
End Sub
<WpfFact>
<Trait(Traits.Feature, Traits.Features.KeywordRecommending)>
<WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)>
Public Sub NotInEnumBlockMemberDeclaration()
VerifyRecommendationsMissing(<File>
Enum foo
......@@ -33,13 +23,24 @@ End Function</ClassDeclaration>, "#Region")
</File>, "#Region")
End Sub
<WpfFact>
<Trait(Traits.Feature, Traits.Features.KeywordRecommending)>
<WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)>
Public Sub NotAfterHashEnd()
VerifyRecommendationsMissing(<File>
#Region "foo"
#End |</File>, "#Region")
End Sub
<WorkItem(6389, "https://github.com/dotnet/roslyn/issues/6389")>
<WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)>
Public Sub NotAfterHashRegion()
VerifyRecommendationsMissing(<File>
Class C
#Region |
End Class
</File>, "#Region")
End Sub
End Class
End Namespace
......@@ -140,5 +140,18 @@ Enum E
End Enum
</File>, "#Enable Warning", "#Disable Warning")
End Sub
<WorkItem(6389, "https://github.com/dotnet/roslyn/issues/6389")>
<WpfFact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)>
Public Sub NotAfterHashRegion()
VerifyRecommendationsMissing(<File>
Class C
#Region |
End Class
</File>, "#Enable Warning", "#Disable Warning")
End Sub
End Class
End Namespace
......@@ -140,7 +140,7 @@ public void LocalConstant_Simple()
{
var source =
@"class C
{
{
static void M()
{
const dynamic d = null;
......@@ -157,7 +157,7 @@ static dynamic ForceDynamicAttribute()
ImmutableArray<MetadataReference> references;
comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, new SymReader(pdbBytes, exeBytes));
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes));
var context = CreateMethodContext(runtime, "C.M");
var testData = new CompilationTestData();
......@@ -201,7 +201,7 @@ static dynamic ForceDynamicAttribute()
ImmutableArray<MetadataReference> references;
comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, new SymReader(pdbBytes, exeBytes));
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes));
var context = CreateMethodContext(runtime, "C.M");
var testData = new CompilationTestData();
......@@ -250,7 +250,7 @@ class Generic<T>
ImmutableArray<MetadataReference> references;
comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, new SymReader(pdbBytes, exeBytes));
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes));
var context = CreateMethodContext(runtime, "C.M");
var testData = new CompilationTestData();
......
......@@ -51,7 +51,7 @@ public override void Dispose()
ExpressionCompilerUtilities.GenerateUniqueName(),
references.AddIntrinsicAssembly(),
exeBytes,
includeSymbols ? new SymReader(pdbBytes, exeBytes) : null);
includeSymbols ? SymReaderFactory.CreateReader(pdbBytes, exeBytes) : null);
}
internal RuntimeInstance CreateRuntimeInstance(
......
......@@ -353,7 +353,7 @@ static void G()
CSharpMetadataContext previous = default(CSharpMetadataContext);
int startOffset;
int endOffset;
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, new SymReader(pdbBytes));
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes));
ImmutableArray<MetadataBlock> typeBlocks;
ImmutableArray<MetadataBlock> methodBlocks;
Guid moduleVersionId;
......@@ -421,7 +421,7 @@ static void G()
// With different references.
var fewerReferences = references.Remove(referenceA);
Assert.Equal(fewerReferences.Length, references.Length - 1);
runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), fewerReferences, exeBytes, new SymReader(pdbBytes));
runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), fewerReferences, exeBytes, SymReaderFactory.CreateReader(pdbBytes));
GetContextState(runtime, "C.F", out methodBlocks, out moduleVersionId, out symReader, out methodToken, out localSignatureToken);
// Different references. No reuse.
......@@ -1090,7 +1090,7 @@ .locals init ([0] class C c)
assemblyName: moduleId.ToString("D"),
references: ImmutableArray.Create(MscorlibRef),
exeBytes: exeBytes.ToArray(),
symReader: new SymReader(pdbBytes.ToArray()));
symReader: SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
......@@ -1142,7 +1142,7 @@ .locals init ([0] class C modopt(int32) modopt(object) c)
assemblyName: moduleId.ToString("D"),
references: ImmutableArray.Create(MscorlibRef),
exeBytes: exeBytes.ToArray(),
symReader: new SymReader(pdbBytes.ToArray()));
symReader: SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
......@@ -1193,7 +1193,7 @@ .maxstack 2
assemblyName: moduleId.ToString("D"),
references: ImmutableArray.Create(MscorlibRef),
exeBytes: exeBytes.ToArray(),
symReader: new SymReader(pdbBytes.ToArray()));
symReader: SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
......@@ -3830,7 +3830,7 @@ static void M()
referenceN0, // From D1
referenceN1, // From D2
referenceN2); // From D2
var runtime = CreateRuntimeInstance(assemblyName, references, exeBytes, new SymReader(pdbBytes));
var runtime = CreateRuntimeInstance(assemblyName, references, exeBytes, SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
......@@ -4551,7 +4551,7 @@ public void DateTimeFieldConstant()
assemblyName: ExpressionCompilerUtilities.GenerateUniqueName(),
references: ImmutableArray.Create(MscorlibRef),
exeBytes: exeBytes.ToArray(),
symReader: new SymReader(pdbBytes.ToArray()));
symReader: SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
......@@ -4728,7 +4728,7 @@ public void StaticLambdaInDisplayClass()
assemblyName: ExpressionCompilerUtilities.GenerateUniqueName(),
references: ImmutableArray.Create(MscorlibRef),
exeBytes: exeBytes.ToArray(),
symReader: new SymReader(pdbBytes.ToArray()));
symReader: SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.<>c__DisplayClass2.<Test>b__1");
......@@ -5181,7 +5181,7 @@ public void FieldLikeEvent_WinRT()
assemblyName: GetUniqueName(),
references: ImmutableArray.Create(WinRtRefs),
exeBytes: ilBytes.ToArray(),
symReader: new SymReader(ilPdbBytes.ToArray()));
symReader: SymReaderFactory.CreateReader(ilPdbBytes.ToArray()));
var context = CreateMethodContext(runtime, "C.M");
......@@ -5527,7 +5527,7 @@ static void M()
includeLocalSignatures: false);
modulesBuilder.Add(corruptMetadata);
modulesBuilder.Add(exeReference.ToModuleInstance(exeBytes, new SymReader(pdbBytes)));
modulesBuilder.Add(exeReference.ToModuleInstance(exeBytes, SymReaderFactory.CreateReader(pdbBytes)));
modulesBuilder.AddRange(references.Select(r => r.ToModuleInstance(fullImage: null, symReader: null)));
var modules = modulesBuilder.ToImmutableAndFree();
......@@ -5580,7 +5580,7 @@ public void M(Missing parameter)
var result = comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out unusedReferences);
Assert.True(result);
var runtime = CreateRuntimeInstance(GetUniqueName(), ImmutableArray.Create(MscorlibRef), exeBytes, new SymReader(pdbBytes));
var runtime = CreateRuntimeInstance(GetUniqueName(), ImmutableArray.Create(MscorlibRef), exeBytes, SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(runtime, "C.M");
var expectedError = "error CS0012: The type 'Missing' is defined in an assembly that is not referenced. You must add a reference to assembly 'Lib, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.";
......@@ -5666,7 +5666,7 @@ public void Test()
var result = comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out unusedReferences);
Assert.True(result);
var runtime = CreateRuntimeInstance(GetUniqueName(), ImmutableArray.Create(MscorlibRef, libAv1Ref, libBv2Ref), exeBytes, new SymReader(pdbBytes));
var runtime = CreateRuntimeInstance(GetUniqueName(), ImmutableArray.Create(MscorlibRef, libAv1Ref, libBv2Ref), exeBytes, SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(runtime, "Source.Test");
string error;
......@@ -5972,10 +5972,8 @@ public static void M()
pdbStream2.Position = 0;
peStream2.Position = 0;
// Note: This SymReader will behave differently from the ISymUnmanagedReader
// we receive during real debugging. We're just using it as a rough
// approximation of ISymUnmanagedReader3, which is unavailable here.
var symReader = new SymReader(new[] { pdbStream1, pdbStream2 }, peStream2, null);
var symReader = SymReaderFactory.CreateReader(pdbStream1);
symReader.UpdateSymbolStore(pdbStream2);
var runtime = CreateRuntimeInstance(
GetUniqueName(),
......
......@@ -636,7 +636,7 @@ class [mscorlib]System.Collections.Generic.IEnumerator`1<object>,
assemblyName: GetUniqueName(),
references: ImmutableArray.Create(MscorlibRef),
exeBytes: ilBytes.ToArray(),
symReader: new SymReader(ilPdbBytes.ToArray(), ilBytes.ToArray()));
symReader: SymReaderFactory.CreateReader(ilPdbBytes));
var context = CreateMethodContext(runtime, "C.<I<System.Int32>.F>d__0.MoveNext");
VerifyHasThis(context, "C", @"
......@@ -791,7 +791,7 @@ public void OldStyleNonCapturingLambda()
assemblyName: GetUniqueName(),
references: ImmutableArray.Create(MscorlibRef),
exeBytes: ilBytes.ToArray(),
symReader: new SymReader(ilPdbBytes.ToArray()));
symReader: SymReaderFactory.CreateReader(ilPdbBytes.ToArray()));
var context = CreateMethodContext(runtime, "C.<M>b__0");
VerifyNoThis(context);
......
......@@ -157,7 +157,7 @@ void M(int[] a)
ExpressionCompilerUtilities.GenerateUniqueName(),
references,
exeBytes,
new SymReader(pdbBytes),
SymReaderFactory.CreateReader(pdbBytes),
includeLocalSignatures: false);
var context = CreateMethodContext(
runtime,
......@@ -561,7 +561,7 @@ static void Main()
ImmutableArray<MetadataReference> references;
compilation0.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, new SymReader(pdbBytes, exeBytes));
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
......@@ -622,7 +622,7 @@ static void Main()
ImmutableArray<MetadataReference> references;
compilation0.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, new SymReader(pdbBytes, exeBytes));
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
......@@ -1663,7 +1663,7 @@ static void M(A a, B b, C c)
ExpressionCompilerUtilities.GenerateUniqueName(),
ImmutableArray.Create(MscorlibRef), // no reference to compilation0
exeBytes,
new SymReader(pdbBytes));
SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(
runtime,
......@@ -1715,7 +1715,7 @@ public void MissingReference_2()
ExpressionCompilerUtilities.GenerateUniqueName(),
ImmutableArray.Create(MscorlibRef), // no reference to compilation0
exeBytes,
new SymReader(pdbBytes));
SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(
runtime,
......@@ -1813,7 +1813,7 @@ static void M()
ImmutableArray<MetadataReference> references;
comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, new SymReader(pdbBytes, exeBytes));
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
......@@ -1852,7 +1852,7 @@ static void M()
ImmutableArray<MetadataReference> references;
comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, new SymReader(pdbBytes, exeBytes));
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
......@@ -1894,7 +1894,7 @@ static void M()
ImmutableArray<MetadataReference> references;
comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out references);
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, new SymReader(pdbBytes, exeBytes));
var runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes));
var context = CreateMethodContext(
runtime,
methodName: "C.M");
......@@ -2675,7 +2675,7 @@ void M()
var result = comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out unusedReferences);
Assert.True(result);
var runtime = CreateRuntimeInstance(GetUniqueName(), ImmutableArray.Create(MscorlibRef, SystemRef, SystemCoreRef, SystemXmlLinqRef, libRef), exeBytes, new SymReader(pdbBytes));
var runtime = CreateRuntimeInstance(GetUniqueName(), ImmutableArray.Create(MscorlibRef, SystemRef, SystemCoreRef, SystemXmlLinqRef, libRef), exeBytes, SymReaderFactory.CreateReader(pdbBytes));
string typeName;
var locals = ArrayBuilder<LocalAndMethod>.GetInstance();
......
......@@ -750,7 +750,7 @@ private EvaluationContext CreateMethodContextWithReferences(Compilation comp, st
var result = comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out unusedReferences);
Assert.True(result);
var runtime = CreateRuntimeInstance(GetUniqueName(), references, exeBytes, new SymReader(pdbBytes));
var runtime = CreateRuntimeInstance(GetUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes));
return CreateMethodContext(runtime, methodName);
}
......
......@@ -98,7 +98,7 @@ static void M()
Guid.NewGuid().ToString("D"),
references,
exeBytes,
new SymReader(pdbBytes));
SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(runtime, "C.M");
string error;
var testData = new CompilationTestData();
......@@ -184,9 +184,9 @@ static void Main()
// Create runtime from modules { mscorlib, PIA, A, B }.
var modulesBuilder = ArrayBuilder<ModuleInstance>.GetInstance();
modulesBuilder.Add(MscorlibRef.ToModuleInstance(fullImage: null, symReader: null));
modulesBuilder.Add(referenceA.ToModuleInstance(fullImage: exeA, symReader: new SymReader(pdbA)));
modulesBuilder.Add(referenceA.ToModuleInstance(fullImage: exeA, symReader: SymReaderFactory.CreateReader(pdbA)));
modulesBuilder.Add(referencePIA.ToModuleInstance(fullImage: null, symReader: null));
modulesBuilder.Add(referenceB.ToModuleInstance(fullImage: exeB, symReader: new SymReader(pdbB)));
modulesBuilder.Add(referenceB.ToModuleInstance(fullImage: exeB, symReader: SymReaderFactory.CreateReader(pdbB)));
using (var runtime = new RuntimeInstance(modulesBuilder.ToImmutableAndFree()))
{
......
......@@ -949,7 +949,7 @@ static void M()
assemblyNameB,
ImmutableArray.Create(MscorlibRef, referenceA2).AddIntrinsicAssembly(),
exeBytes,
new SymReader(pdbBytes));
SymReaderFactory.CreateReader(pdbBytes));
//// typeof(Exception), typeof(A<B<object>>), typeof(B<A<object>[]>)
var context = CreateMethodContext(
......@@ -1047,8 +1047,8 @@ static void Main()
var modulesBuilder = ArrayBuilder<ModuleInstance>.GetInstance();
modulesBuilder.Add(MscorlibRef.ToModuleInstance(fullImage: null, symReader: null));
modulesBuilder.Add(referenceA.ToModuleInstance(fullImage: exeA, symReader: new SymReader(pdbA)));
modulesBuilder.Add(referenceB.ToModuleInstance(fullImage: exeB, symReader: new SymReader(pdbB)));
modulesBuilder.Add(referenceA.ToModuleInstance(fullImage: exeA, symReader: SymReaderFactory.CreateReader(pdbA)));
modulesBuilder.Add(referenceB.ToModuleInstance(fullImage: exeB, symReader: SymReaderFactory.CreateReader(pdbB)));
modulesBuilder.Add(ExpressionCompilerTestHelpers.IntrinsicAssemblyReference.ToModuleInstance(fullImage: null, symReader: null));
using (var runtime = new RuntimeInstance(modulesBuilder.ToImmutableAndFree()))
......
......@@ -159,7 +159,7 @@ static void M()
assemblyNameC,
ImmutableArray.Create(MscorlibRef, referenceAS1, referenceAS2, referenceBS2, referenceBS1, referenceBS2),
exeBytesC1,
new SymReader(pdbBytesC1)))
SymReaderFactory.CreateReader(pdbBytesC1)))
{
ImmutableArray<MetadataBlock> typeBlocks;
ImmutableArray<MetadataBlock> methodBlocks;
......@@ -357,7 +357,7 @@ static void M()
compilationA.EmitAndGetReferences(out exeBytesA, out pdbBytesA, out referencesA);
var referenceA = AssemblyMetadata.CreateFromImage(exeBytesA).GetReference(display: assemblyNameA);
var identityA = referenceA.GetAssemblyIdentity();
var moduleA = referenceA.ToModuleInstance(exeBytesA, new SymReader(pdbBytesA));
var moduleA = referenceA.ToModuleInstance(exeBytesA, SymReaderFactory.CreateReader(pdbBytesA));
var assemblyNameB = ExpressionCompilerUtilities.GenerateUniqueName();
var compilationB = CreateCompilationWithMscorlibAndSystemCore(sourceB, options: TestOptions.DebugDll, assemblyName: assemblyNameB, references: new[] { referenceA });
......@@ -366,7 +366,7 @@ static void M()
ImmutableArray<MetadataReference> referencesB;
compilationB.EmitAndGetReferences(out exeBytesB, out pdbBytesB, out referencesB);
var referenceB = AssemblyMetadata.CreateFromImage(exeBytesB).GetReference(display: assemblyNameB);
var moduleB = referenceB.ToModuleInstance(exeBytesB, new SymReader(pdbBytesB));
var moduleB = referenceB.ToModuleInstance(exeBytesB, SymReaderFactory.CreateReader(pdbBytesB));
var moduleBuilder = ArrayBuilder<ModuleInstance>.GetInstance();
moduleBuilder.AddRange(referencesA.Select(r => r.ToModuleInstance(null, null)));
......@@ -493,7 +493,7 @@ class C
compilationA.EmitAndGetReferences(out exeBytesA, out pdbBytesA, out referencesA);
var referenceA = AssemblyMetadata.CreateFromImage(exeBytesA).GetReference(display: assemblyNameA);
var identityA = referenceA.GetAssemblyIdentity();
var moduleA = referenceA.ToModuleInstance(exeBytesA, new SymReader(pdbBytesA));
var moduleA = referenceA.ToModuleInstance(exeBytesA, SymReaderFactory.CreateReader(pdbBytesA));
var assemblyNameB = ExpressionCompilerUtilities.GenerateUniqueName();
var compilationB = CreateCompilation(
......@@ -506,7 +506,7 @@ class C
ImmutableArray<MetadataReference> referencesB;
compilationB.EmitAndGetReferences(out exeBytesB, out pdbBytesB, out referencesB);
var referenceB = AssemblyMetadata.CreateFromImage(exeBytesB).GetReference(display: assemblyNameB);
var moduleB = referenceB.ToModuleInstance(exeBytesB, new SymReader(pdbBytesB));
var moduleB = referenceB.ToModuleInstance(exeBytesB, SymReaderFactory.CreateReader(pdbBytesB));
// Include an empty assembly to verify that not all assemblies
// with no references are treated as mscorlib.
......@@ -681,7 +681,7 @@ static void M(A a)
compilationA.EmitAndGetReferences(out exeBytesA, out pdbBytesA, out referencesA);
var referenceA = AssemblyMetadata.CreateFromImage(exeBytesA).GetReference(display: assemblyNameA);
var identityA = referenceA.GetAssemblyIdentity();
var moduleA = referenceA.ToModuleInstance(exeBytesA, new SymReader(pdbBytesA));
var moduleA = referenceA.ToModuleInstance(exeBytesA, SymReaderFactory.CreateReader(pdbBytesA));
var assemblyNameB = ExpressionCompilerUtilities.GenerateUniqueName();
var compilationB = CreateCompilationWithMscorlibAndSystemCore(sourceB, options: TestOptions.DebugDll, assemblyName: assemblyNameB, references: new[] { referenceA });
......@@ -690,7 +690,7 @@ static void M(A a)
ImmutableArray<MetadataReference> referencesB;
compilationB.EmitAndGetReferences(out exeBytesB, out pdbBytesB, out referencesB);
var referenceB = AssemblyMetadata.CreateFromImage(exeBytesB).GetReference(display: assemblyNameB);
var moduleB = referenceB.ToModuleInstance(exeBytesB, new SymReader(pdbBytesB));
var moduleB = referenceB.ToModuleInstance(exeBytesB, SymReaderFactory.CreateReader(pdbBytesB));
var moduleBuilder = ArrayBuilder<ModuleInstance>.GetInstance();
moduleBuilder.AddRange(referencesA.Select(r => r.ToModuleInstance(null, null)));
......
......@@ -118,7 +118,7 @@ public void AccessType()
assemblyName: GetUniqueName(),
references: ImmutableArray.Create(MscorlibRef),
exeBytes: exeBytes.ToArray(),
symReader: new SymReader(pdbBytes.ToArray()));
symReader: SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(runtime, methodName: "C.Test");
Assert.Equal(DkmEvaluationResultAccessType.Private, GetResultProperties(context, "Private").AccessType);
......
......@@ -259,10 +259,8 @@ private static ImmutableArray<ImmutableArray<string>> GetGroupedImportStrings(Co
// SymReader implements ISymUnmanagedReader3 and the COM object
// might not.
pdbbits.Position = 0;
using (var reader = new SymReader(pdbbits.ToArray()))
{
return reader.GetCSharpGroupedImportStrings(methodToken, methodVersion: 1, externAliasStrings: out externAliasStrings);
}
var reader = SymReaderFactory.CreateReader(pdbbits);
return reader.GetCSharpGroupedImportStrings(methodToken, methodVersion: 1, externAliasStrings: out externAliasStrings);
}
}
}
......@@ -1090,8 +1088,8 @@ public class C2 : C1
var ref2 = AssemblyMetadata.CreateFromImage(dllBytes2).GetReference(display: "B");
var modulesBuilder = ArrayBuilder<ModuleInstance>.GetInstance();
modulesBuilder.Add(ref1.ToModuleInstance(dllBytes1, new SymReader(pdbBytes1, dllBytes1)));
modulesBuilder.Add(ref2.ToModuleInstance(dllBytes2, new SymReader(pdbBytes2, dllBytes2)));
modulesBuilder.Add(ref1.ToModuleInstance(dllBytes1, SymReaderFactory.CreateReader(pdbBytes1)));
modulesBuilder.Add(ref2.ToModuleInstance(dllBytes2, SymReaderFactory.CreateReader(pdbBytes2)));
modulesBuilder.Add(MscorlibRef_v4_0_30316_17626.ToModuleInstance(fullImage: null, symReader: null));
modulesBuilder.Add(ExpressionCompilerTestHelpers.IntrinsicAssemblyReference.ToModuleInstance(fullImage: null, symReader: null));
......
......@@ -52,7 +52,7 @@ static void M(Windows.Storage.StorageFolder f, Windows.Foundation.Collections.Pr
ExpressionCompilerUtilities.GenerateUniqueName(),
ImmutableArray.Create(MscorlibRef).Concat(runtimeAssemblies), // no reference to Windows.winmd
exeBytes,
new SymReader(pdbBytes));
SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(runtime, "C.M");
string error;
var testData = new CompilationTestData();
......@@ -97,7 +97,7 @@ static void M(X::Windows.Storage.StorageFolder f)
ExpressionCompilerUtilities.GenerateUniqueName(),
ImmutableArray.Create(MscorlibRef).Concat(runtimeAssemblies), // no reference to Windows.winmd
exeBytes,
new SymReader(pdbBytes));
SymReaderFactory.CreateReader(pdbBytes));
var context = CreateMethodContext(runtime, "C.M");
string error;
var testData = new CompilationTestData();
......@@ -389,7 +389,7 @@ .maxstack 1
ExpressionCompilerUtilities.GenerateUniqueName(),
runtimeReferences.AddIntrinsicAssembly(),
exeBytes,
new SymReader(pdbBytes));
SymReaderFactory.CreateReader(pdbBytes));
}
private static byte[] ToVersion1_3(byte[] bytes)
......
......@@ -485,7 +485,7 @@ End Namespace
End Using
Assert.Equal(makePdb, pdbBytes IsNot Nothing)
Dim compRef = AssemblyMetadata.CreateFromImage(peBytes).GetReference()
Return compRef.ToModuleInstance(peBytes, If(makePdb, New SymReader(pdbBytes), Nothing))
Return compRef.ToModuleInstance(peBytes, If(makePdb, SymReaderFactory.CreateReader(pdbBytes), Nothing))
End Function
Private Shared Function GetModuleInstanceForIL(ilSource As String) As ModuleInstance
......@@ -493,7 +493,7 @@ End Namespace
Dim pdbBytes As ImmutableArray(Of Byte) = Nothing
EmitILToArray(ilSource, appendDefaultHeader:=False, includePdb:=True, assemblyBytes:=peBytes, pdbBytes:=pdbBytes)
Dim compRef = AssemblyMetadata.CreateFromImage(peBytes).GetReference()
Return compRef.ToModuleInstance(peBytes.ToArray(), New SymReader(pdbBytes.ToArray()))
Return compRef.ToModuleInstance(peBytes.ToArray(), SymReaderFactory.CreateReader(pdbBytes))
End Function
Private Shared Sub CheckDteeMethodDebugInfo(methodDebugInfo As MethodDebugInfo, ParamArray namespaceNames As String())
......
......@@ -50,7 +50,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests
ExpressionCompilerUtilities.GenerateUniqueName(),
references.AddIntrinsicAssembly(),
exeBytes,
If(includeSymbols, New SymReader(pdbBytes, exeBytes), Nothing))
If(includeSymbols, SymReaderFactory.CreateReader(pdbBytes, exeBytes), Nothing))
End Function
Friend Function CreateRuntimeInstance(
......
......@@ -263,7 +263,7 @@ End Class"
Dim previous As VisualBasicMetadataContext = Nothing
Dim startOffset = 0
Dim endOffset = 0
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, New SymReader(pdbBytes))
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes))
Dim typeBlocks As ImmutableArray(Of MetadataBlock) = Nothing
Dim methodBlocks As ImmutableArray(Of MetadataBlock) = Nothing
Dim moduleVersionId As Guid = Nothing
......@@ -325,7 +325,7 @@ End Class"
' With different references.
Dim fewerReferences = references.Remove(referenceA)
Assert.Equal(fewerReferences.Length, references.Length - 1)
runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), fewerReferences, exeBytes, New SymReader(pdbBytes))
runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), fewerReferences, exeBytes, SymReaderFactory.CreateReader(pdbBytes))
methodBlocks = Nothing
moduleVersionId = Nothing
symReader = Nothing
......@@ -1091,7 +1091,7 @@ End Class
assemblyName:=ExpressionCompilerUtilities.GenerateUniqueName(),
references:=ImmutableArray.Create(MscorlibRef),
exeBytes:=exeBytes.ToArray(),
symReader:=New SymReader(pdbBytes.ToArray()))
symReader:=SymReaderFactory.CreateReader(pdbBytes))
Dim context = CreateMethodContext(runtime, methodName:="C.M")
Dim errorMessage As String = Nothing
......@@ -1144,7 +1144,7 @@ End Class
assemblyName:=ExpressionCompilerUtilities.GenerateUniqueName(),
references:=ImmutableArray.Create(MscorlibRef),
exeBytes:=exeBytes.ToArray(),
symReader:=New SymReader(pdbBytes.ToArray()))
symReader:=SymReaderFactory.CreateReader(pdbBytes))
Dim context = CreateMethodContext(runtime, methodName:="C.M")
Dim errorMessage As String = Nothing
......@@ -1196,7 +1196,7 @@ End Class
assemblyName:=ExpressionCompilerUtilities.GenerateUniqueName(),
references:=ImmutableArray.Create(MscorlibRef),
exeBytes:=exeBytes.ToArray(),
symReader:=New SymReader(pdbBytes.ToArray()))
symReader:=SymReaderFactory.CreateReader(pdbBytes))
Dim context = CreateMethodContext(runtime, methodName:="C.M")
Dim errorMessage As String = Nothing
......@@ -1792,7 +1792,7 @@ End Class"
ExpressionCompilerUtilities.GenerateUniqueName(),
allReferences,
exeBytes,
New SymReader(pdbBytes, exeBytes)) ' Need SymReader to find root namespace.
SymReaderFactory.CreateReader(pdbBytes)) ' Need SymReader to find root namespace.
Dim context = CreateMethodContext(runtime, "Root.C.M")
Dim errorMessage As String = Nothing
Dim testData = New CompilationTestData()
......@@ -3095,7 +3095,7 @@ End Class
assemblyName:=ExpressionCompilerUtilities.GenerateUniqueName(),
references:=ImmutableArray.Create(MscorlibRef),
exeBytes:=exeBytes.ToArray(),
symReader:=New SymReader(pdbBytes.ToArray()))
symReader:=SymReaderFactory.CreateReader(pdbBytes))
Dim context = CreateMethodContext(
runtime,
......@@ -3683,7 +3683,7 @@ End Class"
includeLocalSignatures:=False)
modulesBuilder.Add(corruptMetadata)
modulesBuilder.Add(exeReference.ToModuleInstance(exeBytes, New SymReader(pdbBytes)))
modulesBuilder.Add(exeReference.ToModuleInstance(exeBytes, SymReaderFactory.CreateReader(pdbBytes)))
modulesBuilder.AddRange(references.Select(Function(r) r.ToModuleInstance(fullImage:=Nothing, symReader:=Nothing)))
Dim modules = modulesBuilder.ToImmutableAndFree()
......@@ -3733,7 +3733,7 @@ End Class
Dim result = comp.EmitAndGetReferences(exeBytes, pdbBytes, unusedReferences)
Assert.True(result)
Dim runtime = CreateRuntimeInstance(GetUniqueName(), ImmutableArray.Create(MscorlibRef), exeBytes, New SymReader(pdbBytes))
Dim runtime = CreateRuntimeInstance(GetUniqueName(), ImmutableArray.Create(MscorlibRef), exeBytes, SymReaderFactory.CreateReader(pdbBytes))
Dim context = CreateMethodContext(runtime, "C.M")
Const expectedError1 = "error BC30652: Reference required to assembly 'Lib, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' containing the type 'Missing'. Add one to your project."
......@@ -4116,10 +4116,8 @@ End Class
pdbStream2.Position = 0
peStream2.Position = 0
' Note: This SymReader will behave differently from the ISymUnmanagedReader
' we receive during real debugging. We're just using it as a rough
' approximation of ISymUnmanagedReader3, which is unavailable here.
Dim symReader = New SymReader({pdbStream1, pdbStream2}, peStream2, Nothing)
Dim symReader = SymReaderFactory.CreateReader(pdbStream1)
symReader.UpdateSymbolStore(pdbStream2)
Dim runtime = CreateRuntimeInstance(
GetUniqueName(),
......
......@@ -489,7 +489,7 @@ End Module
assemblyName:=GetUniqueName(),
references:=ImmutableArray.Create(MscorlibRef),
exeBytes:=ilBytes.ToArray(),
symReader:=New SymReader(ilPdbBytes.ToArray()))
symReader:=SymReaderFactory.CreateReader(ilPdbBytes.ToArray()))
Dim context = CreateMethodContext(runtime, "C._Lambda$__1")
VerifyNoMe(context)
......
......@@ -130,9 +130,8 @@ End Namespace
Dim methodToken = metadataReader.GetToken(methodHandle)
pdbbits.Position = 0
Using reader As New SymReader(pdbbits)
Return reader.GetVisualBasicImportStrings(methodToken, methodVersion:=1)
End Using
Dim reader = SymReaderFactory.CreateReader(pdbbits)
Return reader.GetVisualBasicImportStrings(methodToken, methodVersion:=1)
End Using
End Using
End Using
......@@ -500,8 +499,8 @@ End Class
Dim ref2 = AssemblyMetadata.CreateFromImage(dllBytes2).GetReference(display:="B")
Dim modulesBuilder = ArrayBuilder(Of ModuleInstance).GetInstance()
modulesBuilder.Add(ref1.ToModuleInstance(dllBytes1, New SymReader(pdbBytes1, dllBytes1)))
modulesBuilder.Add(ref2.ToModuleInstance(dllBytes2, New SymReader(pdbBytes2, dllBytes2)))
modulesBuilder.Add(ref1.ToModuleInstance(dllBytes1, SymReaderFactory.CreateReader(pdbBytes1)))
modulesBuilder.Add(ref2.ToModuleInstance(dllBytes2, SymReaderFactory.CreateReader(pdbBytes2)))
modulesBuilder.Add(MscorlibRef_v4_0_30316_17626.ToModuleInstance(fullImage:=Nothing, symReader:=Nothing))
modulesBuilder.Add(ExpressionCompilerTestHelpers.IntrinsicAssemblyReference.ToModuleInstance(fullImage:=Nothing, symReader:=Nothing))
......
......@@ -247,7 +247,7 @@ End Class"
Dim pdbBytes As Byte() = Nothing
Dim references As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, pdbBytes, references)
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, New SymReader(pdbBytes), includeLocalSignatures:=False)
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes), includeLocalSignatures:=False)
Dim context = CreateMethodContext(
runtime,
methodName:="C.M",
......@@ -561,7 +561,7 @@ End Class"
Dim pdbBytes As Byte() = Nothing
Dim references As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, pdbBytes, references)
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, New SymReader(pdbBytes, exeBytes))
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes))
Dim context = CreateMethodContext(
runtime,
methodName:="C.M")
......@@ -617,7 +617,7 @@ End Class"
Dim pdbBytes As Byte() = Nothing
Dim references As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, pdbBytes, references)
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, New SymReader(pdbBytes, exeBytes))
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes))
Dim context = CreateMethodContext(
runtime,
methodName:="C.M")
......@@ -1702,7 +1702,7 @@ End Class"
ExpressionCompilerUtilities.GenerateUniqueName(),
ImmutableArray.Create(MscorlibRef), ' no reference to compilation0
exeBytes,
New SymReader(pdbBytes))
SymReaderFactory.CreateReader(pdbBytes))
Dim context = CreateMethodContext(
runtime,
......@@ -1776,7 +1776,7 @@ End Class
Dim references As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, pdbBytes, references)
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, New SymReader(pdbBytes, exeBytes))
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes))
Dim context = CreateMethodContext(
runtime,
methodName:="C.M")
......@@ -1825,7 +1825,7 @@ End Class
Dim references As ImmutableArray(Of MetadataReference) = Nothing
comp.EmitAndGetReferences(exeBytes, pdbBytes, references)
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, New SymReader(pdbBytes, exeBytes))
Dim runtime = CreateRuntimeInstance(ExpressionCompilerUtilities.GenerateUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes, exeBytes))
Dim context = CreateMethodContext(
runtime,
methodName:="C.M")
......@@ -2653,7 +2653,7 @@ End Class
' Referencing SystemCoreRef and SystemXmlLinqRef will cause Microsoft.VisualBasic.Embedded to be compiled
' and it depends on EditorBrowsableAttribute.
Dim runtimeReferences = ImmutableArray.Create(MscorlibRef, SystemRef, SystemCoreRef, SystemXmlLinqRef, libRef)
Dim runtime = CreateRuntimeInstance(GetUniqueName(), runtimeReferences, exeBytes, New SymReader(pdbBytes))
Dim runtime = CreateRuntimeInstance(GetUniqueName(), runtimeReferences, exeBytes, SymReaderFactory.CreateReader(pdbBytes))
Dim typeName As String = Nothing
Dim locals = ArrayBuilder(Of LocalAndMethod).GetInstance()
......
......@@ -343,7 +343,7 @@ End Class
GetUniqueName(),
ImmutableArray.Create(CSharpRef, ExpressionCompilerTestHelpers.IntrinsicAssemblyReference),
exeBytes,
New SymReader(pdbBytes))
SymReaderFactory.CreateReader(pdbBytes))
Dim context = CreateMethodContext(
runtime,
"C.M")
......@@ -580,7 +580,7 @@ End Class"
Dim result = comp.EmitAndGetReferences(exeBytes, pdbBytes, unusedReferences)
Assert.True(result)
Dim runtime = CreateRuntimeInstance(GetUniqueName(), references, exeBytes, New SymReader(pdbBytes))
Dim runtime = CreateRuntimeInstance(GetUniqueName(), references, exeBytes, SymReaderFactory.CreateReader(pdbBytes))
Return CreateMethodContext(runtime, methodName)
End Function
......
......@@ -836,7 +836,7 @@ End Class"
assemblyNameB,
ImmutableArray.Create(MscorlibRef, referenceA2).AddIntrinsicAssembly(),
exeBytes,
New SymReader(pdbBytes))
SymReaderFactory.CreateReader(pdbBytes))
' GetType(Exception), GetType(A(Of B(Of Object))), GetType(B(Of A(Of Object)()))
Dim context = CreateMethodContext(
......@@ -925,8 +925,8 @@ End Class"
Dim modulesBuilder = ArrayBuilder(Of ModuleInstance).GetInstance()
modulesBuilder.Add(MscorlibRef.ToModuleInstance(fullImage:=Nothing, symReader:=Nothing))
modulesBuilder.Add(referenceA.ToModuleInstance(fullImage:=exeA, symReader:=New SymReader(pdbA)))
modulesBuilder.Add(referenceB.ToModuleInstance(fullImage:=exeB, symReader:=New SymReader(pdbB)))
modulesBuilder.Add(referenceA.ToModuleInstance(fullImage:=exeA, symReader:=SymReaderFactory.CreateReader(pdbA)))
modulesBuilder.Add(referenceB.ToModuleInstance(fullImage:=exeB, symReader:=SymReaderFactory.CreateReader(pdbB)))
modulesBuilder.Add(ExpressionCompilerTestHelpers.IntrinsicAssemblyReference.ToModuleInstance(fullImage:=Nothing, symReader:=Nothing))
Using runtime = New RuntimeInstance(modulesBuilder.ToImmutableAndFree())
......
......@@ -96,7 +96,7 @@ End Class"
assemblyNameC,
ImmutableArray.Create(MscorlibRef, referenceAS1, referenceAS2, referenceBS2, referenceBS1, referenceBS2),
exeBytesC1,
New SymReader(pdbBytesC1))
SymReaderFactory.CreateReader(pdbBytesC1))
Dim typeBlocks As ImmutableArray(Of MetadataBlock) = Nothing
Dim methodBlocks As ImmutableArray(Of MetadataBlock) = Nothing
......@@ -197,7 +197,7 @@ End Class"
compilationA.EmitAndGetReferences(exeBytesA, pdbBytesA, referencesA)
Dim referenceA = AssemblyMetadata.CreateFromImage(exeBytesA).GetReference(display:=assemblyNameA)
Dim identityA = referenceA.GetAssemblyIdentity()
Dim moduleA = referenceA.ToModuleInstance(exeBytesA, New SymReader(pdbBytesA))
Dim moduleA = referenceA.ToModuleInstance(exeBytesA, SymReaderFactory.CreateReader(pdbBytesA))
Dim assemblyNameB = ExpressionCompilerUtilities.GenerateUniqueName()
Dim compilationB = CreateCompilationWithMscorlibAndVBRuntime(
......@@ -209,7 +209,7 @@ End Class"
Dim referencesB As ImmutableArray(Of MetadataReference) = Nothing
compilationB.EmitAndGetReferences(exeBytesB, pdbBytesB, referencesB)
Dim referenceB = AssemblyMetadata.CreateFromImage(exeBytesB).GetReference(display:=assemblyNameB)
Dim moduleB = referenceB.ToModuleInstance(exeBytesB, New SymReader(pdbBytesB))
Dim moduleB = referenceB.ToModuleInstance(exeBytesB, SymReaderFactory.CreateReader(pdbBytesB))
Dim moduleBuilder = ArrayBuilder(Of ModuleInstance).GetInstance()
moduleBuilder.AddRange(referencesA.Select(Function(r) r.ToModuleInstance(Nothing, Nothing)))
......@@ -348,7 +348,7 @@ End Class"
assemblyNameB,
ImmutableArray.Create(MscorlibRef, SystemRef, MsvbRef, referenceA1, referenceA2),
exeBytesB,
New SymReader(pdbBytesB))
SymReaderFactory.CreateReader(pdbBytesB))
Dim blocks As ImmutableArray(Of MetadataBlock) = Nothing
Dim moduleVersionId As Guid = Nothing
......
......@@ -111,7 +111,7 @@ End Class
assemblyName:=GetUniqueName(),
references:=ImmutableArray.Create(MscorlibRef),
exeBytes:=exeBytes.ToArray(),
symReader:=New SymReader(pdbBytes.ToArray()))
symReader:=SymReaderFactory.CreateReader(pdbBytes))
Dim context = CreateMethodContext(runtime, methodName:="C.Test")
Assert.Equal(DkmEvaluationResultAccessType.Private, GetResultProperties(context, "[Private]").AccessType)
......@@ -266,7 +266,7 @@ End Class
assemblyName:=GetUniqueName(),
references:=ImmutableArray.Create(MscorlibRef),
exeBytes:=exeBytes.ToArray(),
symReader:=New SymReader(pdbBytes.ToArray()))
symReader:=SymReaderFactory.CreateReader(pdbBytes))
Dim context = CreateMethodContext(runtime, methodName:="C.Test")
Assert.Equal(DkmEvaluationResultTypeModifierFlags.None, GetResultProperties(context, "F").ModifierFlags)
......
......@@ -41,7 +41,7 @@ End Class"
ExpressionCompilerUtilities.GenerateUniqueName(),
ImmutableArray.Create(MscorlibRef).Concat(runtimeAssemblies), ' no reference to Windows.winmd
exeBytes,
New SymReader(pdbBytes))
SymReaderFactory.CreateReader(pdbBytes))
Dim context = CreateMethodContext(runtime, "C.M")
Dim errorMessage As String = Nothing
Dim testData = New CompilationTestData()
......@@ -248,7 +248,7 @@ End Class"
ExpressionCompilerUtilities.GenerateUniqueName(),
runtimeReferences.AddIntrinsicAssembly(),
exeBytes,
New SymReader(pdbBytes))
SymReaderFactory.CreateReader(pdbBytes))
End Function
Private Shared Function ToVersion1_3(bytes As Byte()) As Byte()
......
......@@ -451,10 +451,8 @@ private ExpressionSyntax SkipRedundantExteriorParentheses(ExpressionSyntax expre
var newVariableDeclarator = await FindDeclaratorAsync(updatedDocument, cancellationToken).ConfigureAwait(false);
localSymbol = (ILocalSymbol)semanticModel.GetDeclaredSymbol(newVariableDeclarator, cancellationToken);
bool wasCastAdded;
var explicitCastExpression = newExpression.CastIfPossible(localSymbol.Type, newVariableDeclarator.SpanStart, semanticModel, out wasCastAdded);
if (wasCastAdded)
var explicitCastExpression = newExpression.CastIfPossible(localSymbol.Type, newVariableDeclarator.SpanStart, semanticModel);
if (explicitCastExpression != newExpression)
{
updatedDocument = await updatedDocument.ReplaceNodeAsync(newExpression, explicitCastExpression, cancellationToken).ConfigureAwait(false);
semanticModel = await updatedDocument.GetSemanticModelAsync(cancellationToken).ConfigureAwait(false);
......
......@@ -22,7 +22,6 @@
namespace Microsoft.CodeAnalysis.CSharp.Scripting.UnitTests
{
using CodeAnalysis.Test.Utilities;
using static TestCompilationFactory;
public class HostModel
......@@ -2109,56 +2108,6 @@ public void HostObjectAssemblyReference2()
scriptCompilation.VerifyDiagnostics();
scriptCompilation.VerifyAssemblyAliases(
"mscorlib: global,<host>",
"Microsoft.CodeAnalysis.Scripting: <host>,global",
"Microsoft.CodeAnalysis.CSharp.Scripting",
"Microsoft.CodeAnalysis.CSharp: <implicit>,global",
"Microsoft.CodeAnalysis: <implicit>,<host>,global",
"System.Collections.Immutable: <implicit>,<host>,global",
"System.Diagnostics.Tools: <implicit>,<host>,global",
"System.Resources.ResourceManager: <implicit>,<host>,global",
"System.Text.Encoding: <implicit>,<host>,global",
"System.AppContext: <implicit>,global",
"System.Reflection.Extensions: <implicit>,<host>,global",
"System: <implicit>,<host>,global",
"System.Configuration: <implicit>,<host>,global",
"System.Xml: <implicit>,<host>,global",
"System.Data.SqlXml: <implicit>,<host>,global",
"System.Security: <implicit>,<host>,global",
"System.Core: <implicit>,<host>,global",
"System.Numerics: <implicit>,<host>,global",
"System.Runtime: <implicit>,<host>,global",
"System.Diagnostics.Debug: <implicit>,<host>,global",
"System.Collections: <implicit>,<host>,global",
"System.Linq: <implicit>,<host>,global",
"System.Runtime.Extensions: <implicit>,<host>,global",
"System.Globalization: <implicit>,<host>,global",
"System.Threading: <implicit>,<host>,global",
"System.ComponentModel.Composition: <implicit>,<host>,global",
"System.Runtime.InteropServices: <implicit>,<host>,global",
"System.Reflection.Metadata: <implicit>,<host>,global",
"System.IO: <implicit>,<host>,global",
"System.Threading.Tasks: <implicit>,<host>,global",
"System.Reflection.Primitives: <implicit>,<host>,global",
"System.Reflection: <implicit>,<host>,global",
"System.Runtime.Numerics: <implicit>,<host>,global",
"System.Runtime.Serialization.Json: <implicit>,<host>,global",
"System.Collections.Concurrent: <implicit>,<host>,global",
"System.Xml.ReaderWriter: <implicit>,<host>,global",
"System.Xml.XDocument: <implicit>,<host>,global",
"System.Dynamic.Runtime: <implicit>,<host>,global",
"System.Text.Encoding.Extensions: <implicit>,<host>,global",
"System.Xml.Linq: <implicit>,<host>,global",
"System.Runtime.Serialization: <implicit>,<host>,global",
"System.ServiceModel.Internals: <implicit>,<host>,global",
"SMDiagnostics: <implicit>,<host>,global",
"System.Linq.Expressions: <implicit>,global",
"System.Threading.Tasks.Parallel: <implicit>,global",
"System.Diagnostics.StackTrace: <implicit>,<host>,global",
"System.IO.FileSystem: <implicit>,<host>,global",
"System.IO.FileSystem.Primitives: <implicit>,<host>,global");
foreach (var assemblyAndAliases in scriptCompilation.GetBoundReferenceManager().GetReferencedAssemblyAliases())
{
switch (assemblyAndAliases.Item1.Identity.Name)
......@@ -2199,56 +2148,6 @@ public void HostObjectAssemblyReference3()
scriptCompilation.VerifyDiagnostics();
scriptCompilation.VerifyAssemblyAliases(
"Microsoft.CodeAnalysis.CSharp.Scripting",
"mscorlib: global,<host>",
"Microsoft.CodeAnalysis.Scripting: global,<host>",
"System.Collections.Immutable: <implicit>,global,<host>",
"Microsoft.CodeAnalysis: <implicit>,global,<host>",
"System.Diagnostics.Tools: <implicit>,global,<host>",
"System.Resources.ResourceManager: <implicit>,global,<host>",
"System.Diagnostics.StackTrace: <implicit>,global,<host>",
"System.IO.FileSystem: <implicit>,global,<host>",
"System.Linq: <implicit>,global,<host>",
"System.Text.Encoding: <implicit>,global,<host>",
"System.IO.FileSystem.Primitives: <implicit>,global,<host>",
"System.Reflection.Extensions: <implicit>,global,<host>",
"System.Core: <implicit>,global,<host>",
"System: <implicit>,global,<host>",
"System.Xml: <implicit>,global,<host>",
"System.Numerics: <implicit>,global,<host>",
"System.Security: <implicit>,global,<host>",
"System.Data.SqlXml: <implicit>,global,<host>",
"System.Configuration: <implicit>,global,<host>",
"System.Runtime: <implicit>,global,<host>",
"System.Diagnostics.Debug: <implicit>,global,<host>",
"System.Runtime.InteropServices: <implicit>,global,<host>",
"System.Reflection.Metadata: <implicit>,global,<host>",
"System.IO: <implicit>,global,<host>",
"System.Collections: <implicit>,global,<host>",
"System.Threading.Tasks: <implicit>,global,<host>",
"System.Reflection.Primitives: <implicit>,global,<host>",
"System.Reflection: <implicit>,global,<host>",
"System.Globalization: <implicit>,global,<host>",
"System.Runtime.Extensions: <implicit>,global,<host>",
"System.Runtime.Numerics: <implicit>,global,<host>",
"System.Runtime.Serialization.Json: <implicit>,global,<host>",
"System.Collections.Concurrent: <implicit>,global,<host>",
"System.Xml.ReaderWriter: <implicit>,global,<host>",
"System.Xml.XDocument: <implicit>,global,<host>",
"System.Dynamic.Runtime: <implicit>,global,<host>",
"System.Threading: <implicit>,global,<host>",
"System.Text.Encoding.Extensions: <implicit>,global,<host>",
"System.Xml.Linq: <implicit>,global,<host>",
"System.Runtime.Serialization: <implicit>,global,<host>",
"System.ServiceModel.Internals: <implicit>,global,<host>",
"SMDiagnostics: <implicit>,global,<host>",
"System.ComponentModel.Composition: <implicit>,global,<host>",
"Microsoft.CodeAnalysis.CSharp: <implicit>,global",
"System.AppContext: <implicit>,global",
"System.Linq.Expressions: <implicit>,global",
"System.Threading.Tasks.Parallel: <implicit>,global");
foreach (var assemblyAndAliases in scriptCompilation.GetBoundReferenceManager().GetReferencedAssemblyAliases())
{
switch (assemblyAndAliases.Item1.Identity.Name)
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Immutable;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection.Metadata;
using System.Reflection.PortableExecutable;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using Microsoft.DiaSymReader;
using Roslyn.Utilities;
namespace Roslyn.Test.PdbUtilities
{
// TODO: remove, use SymReaderFactory instead
public sealed class SymReader : ISymUnmanagedReader, ISymUnmanagedReader2, ISymUnmanagedReader3, IDisposable
{
/// <summary>
/// Mock implementation: instead of a single reader with multiple versions, we'll use an array
/// of readers - each with a single version. We do this so that we can implement
/// <see cref="ISymUnmanagedReader3.GetSymAttributeByVersion"/> on top of
/// <see cref="ISymUnmanagedReader.GetSymAttribute"/>.
/// </summary>
private readonly ISymUnmanagedReader[] _readerVersions;
private readonly DummyMetadataImport _metadataImport;
private readonly PEReader _peReaderOpt;
private bool _isDisposed;
public SymReader(Stream pdbStream)
: this(new[] { pdbStream }, null, null)
{
}
public SymReader(byte[] pdbImage)
: this(new[] { new MemoryStream(pdbImage) }, null, null)
{
}
public SymReader(byte[] pdbImage, byte[] peImage)
: this(new[] { new MemoryStream(pdbImage) }, new MemoryStream(peImage), null)
{
}
public SymReader(Stream pdbStream, Stream peStream)
: this(new[] { pdbStream }, peStream, null)
{
}
public SymReader(Stream pdbStream, MetadataReader metadataReader)
: this(new[] { pdbStream }, null, metadataReader)
{
}
public SymReader(Stream[] pdbStreamsByVersion, Stream peStreamOpt, MetadataReader metadataReaderOpt)
{
if (peStreamOpt != null)
{
_peReaderOpt = new PEReader(peStreamOpt);
_metadataImport = new DummyMetadataImport(_peReaderOpt.GetMetadataReader());
}
else
{
_metadataImport = new DummyMetadataImport(metadataReaderOpt);
}
_readerVersions = pdbStreamsByVersion.Select(
pdbStream => CreateReader(pdbStream, _metadataImport)).ToArray();
// If ISymUnmanagedReader3 is available, then we shouldn't be passing in multiple byte streams - one should suffice.
Debug.Assert(!(UnversionedReader is ISymUnmanagedReader3) || _readerVersions.Length == 1);
}
private static ISymUnmanagedReader CreateReader(Stream pdbStream, object metadataImporter)
{
// NOTE: The product uses a different GUID (Microsoft.CodeAnalysis.ExpressionEvaluator.DkmUtilities.s_symUnmanagedReaderClassId).
Guid corSymReaderSxS = new Guid("0A3976C5-4529-4ef8-B0B0-42EED37082CD");
var reader = (ISymUnmanagedReader)Activator.CreateInstance(Marshal.GetTypeFromCLSID(corSymReaderSxS));
int hr = reader.Initialize(metadataImporter, null, null, new ComStreamWrapper(pdbStream));
SymUnmanagedReaderExtensions.ThrowExceptionForHR(hr);
return reader;
}
private ISymUnmanagedReader UnversionedReader => _readerVersions[0];
public int GetDocuments(int cDocs, out int pcDocs, ISymUnmanagedDocument[] pDocs)
{
return UnversionedReader.GetDocuments(cDocs, out pcDocs, pDocs);
}
public int GetMethod(int methodToken, out ISymUnmanagedMethod retVal)
{
// The EE should never be calling ISymUnmanagedReader.GetMethod. In order to account
// for EnC updates, it should always be calling GetMethodByVersion instead.
throw ExceptionUtilities.Unreachable;
}
public int GetMethodByVersion(int methodToken, int version, out ISymUnmanagedMethod retVal)
{
// Versions are 1-based.
Debug.Assert(version >= 1);
var reader = _readerVersions[version - 1];
version = _readerVersions.Length > 1 ? 1 : version;
return reader.GetMethodByVersion(methodToken, version, out retVal);
}
public int GetSymAttribute(int token, string name, int sizeBuffer, out int lengthBuffer, byte[] buffer)
{
// The EE should never be calling ISymUnmanagedReader.GetSymAttribute.
// In order to account for EnC updates, it should always be calling
// ISymUnmanagedReader3.GetSymAttributeByVersion instead.
throw ExceptionUtilities.Unreachable;
}
public int GetSymAttributeByVersion(int methodToken, int version, string name, int bufferLength, out int count, byte[] customDebugInformation)
{
// Versions are 1-based.
Debug.Assert(version >= 1);
return _readerVersions[version - 1].GetSymAttribute(methodToken, name, bufferLength, out count, customDebugInformation);
}
public int GetUserEntryPoint(out int entryPoint)
{
return UnversionedReader.GetUserEntryPoint(out entryPoint);
}
void IDisposable.Dispose()
{
if (!_isDisposed)
{
for (int i = 0; i < _readerVersions.Length; i++)
{
int hr = (_readerVersions[i] as ISymUnmanagedDispose).Destroy();
SymUnmanagedReaderExtensions.ThrowExceptionForHR(hr);
_readerVersions[i] = null;
}
_peReaderOpt?.Dispose();
_metadataImport.Dispose();
_isDisposed = true;
}
}
public int GetDocument(string url, Guid language, Guid languageVendor, Guid documentType, out ISymUnmanagedDocument document)
{
return UnversionedReader.GetDocument(url, language, languageVendor, documentType, out document);
}
public int GetVariables(int methodToken, int bufferLength, out int count, ISymUnmanagedVariable[] variables)
{
return UnversionedReader.GetVariables(methodToken, bufferLength, out count, variables);
}
public int GetGlobalVariables(int bufferLength, out int count, ISymUnmanagedVariable[] variables)
{
return UnversionedReader.GetGlobalVariables(bufferLength, out count, variables);
}
public int GetMethodFromDocumentPosition(ISymUnmanagedDocument document, int line, int column, out ISymUnmanagedMethod method)
{
return UnversionedReader.GetMethodFromDocumentPosition(document, line, column, out method);
}
public int GetNamespaces(int bufferLength, out int count, ISymUnmanagedNamespace[] namespaces)
{
return UnversionedReader.GetNamespaces(bufferLength, out count, namespaces);
}
public int Initialize(object metadataImporter, string fileName, string searchPath, IStream stream)
{
return UnversionedReader.Initialize(metadataImporter, fileName, searchPath, stream);
}
public int UpdateSymbolStore(string fileName, IStream stream)
{
return UnversionedReader.UpdateSymbolStore(fileName, stream);
}
public int ReplaceSymbolStore(string fileName, IStream stream)
{
return UnversionedReader.ReplaceSymbolStore(fileName, stream);
}
public int GetSymbolStoreFileName(int bufferLength, out int count, char[] name)
{
return UnversionedReader.GetSymbolStoreFileName(bufferLength, out count, name);
}
public int GetMethodsFromDocumentPosition(ISymUnmanagedDocument document, int line, int column, int bufferLength, out int count, ISymUnmanagedMethod[] methods)
{
return UnversionedReader.GetMethodsFromDocumentPosition(document, line, column, bufferLength, out count, methods);
}
public int GetDocumentVersion(ISymUnmanagedDocument document, out int version, out bool isCurrent)
{
return UnversionedReader.GetDocumentVersion(document, out version, out isCurrent);
}
public int GetMethodVersion(ISymUnmanagedMethod method, out int version)
{
return UnversionedReader.GetMethodVersion(method, out version);
}
public int GetMethodByVersionPreRemap(int methodToken, int version, out ISymUnmanagedMethod method)
{
throw new NotImplementedException();
}
public int GetSymAttributePreRemap(int methodToken, string name, int bufferLength, out int count, byte[] customDebugInformation)
{
throw new NotImplementedException();
}
public int GetMethodsInDocument(ISymUnmanagedDocument document, int bufferLength, out int count, ISymUnmanagedMethod[] methods)
{
throw new NotImplementedException();
}
public int GetSymAttributeByVersionPreRemap(int methodToken, int version, string name, int bufferLength, out int count, byte[] customDebugInformation)
{
throw new NotImplementedException();
}
}
}
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Immutable;
using System.IO;
using System.Linq;
using System.Reflection.Metadata;
using System.Reflection.PortableExecutable;
using System.Runtime.InteropServices;
using Microsoft.DiaSymReader;
using Roslyn.Utilities;
......@@ -40,6 +43,21 @@ private static ISymUnmanagedReader3 CreateNativeSymReader(Stream pdbStream, obje
return reader;
}
public static ISymUnmanagedReader CreateReader(byte[] pdbImage, byte[] peImageOpt = null)
{
return CreateReader(new MemoryStream(pdbImage), (peImageOpt != null) ? new MemoryStream(peImageOpt) : null);
}
public static ISymUnmanagedReader CreateReader(ImmutableArray<byte> pdbImage, ImmutableArray<byte> peImageOpt = default(ImmutableArray<byte>))
{
return CreateReader(new MemoryStream(pdbImage.ToArray()), peImageOpt.IsDefault ? null : new MemoryStream(peImageOpt.ToArray()));
}
public static ISymUnmanagedReader CreateReader(Stream pdbStream, Stream peStreamOpt = null)
{
return CreateReader(pdbStream, (peStreamOpt != null) ? new PEReader(peStreamOpt, PEStreamOptions.PrefetchMetadata).GetMetadataReader() : null);
}
public static ISymUnmanagedReader CreateReader(Stream pdbStream, MetadataReader metadataReaderOpt)
{
return CreateReader(pdbStream, new DummyMetadataImport(metadataReaderOpt));
......
......@@ -104,7 +104,6 @@
<Compile Include="Pdb\CustomDebugInfoUtilities.cs" />
<Compile Include="Pdb\PdbToXml.cs" />
<Compile Include="Pdb\PdbToXmlOptions.cs" />
<Compile Include="Pdb\SymReader.cs" />
<Compile Include="Pdb\SymReaderFactory.cs" />
<Compile Include="Pdb\Token2SourceLineExporter.cs" />
<Compile Include="Shared\CustomDebugInfoReader.cs" />
......@@ -131,4 +130,4 @@
<ImportGroup Label="Targets">
<Import Project="..\..\..\build\Targets\VSL.Imports.targets" />
</ImportGroup>
</Project>
</Project>
\ No newline at end of file
......@@ -4,6 +4,7 @@
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
using Roslyn.Utilities;
......@@ -606,5 +607,11 @@ public static IEnumerable<AsyncStepInfo> GetAsyncStepInfos(this ISymUnmanagedAsy
yield return new AsyncStepInfo(yieldOffsets[i], breakpointOffsets[i], breakpointMethods[i]);
}
}
public static void UpdateSymbolStore(this ISymUnmanagedReader reader, Stream pdbStream)
{
int hr = reader.UpdateSymbolStore(null, new ComStreamWrapper(pdbStream));
ThrowExceptionForHR(hr);
}
}
}
......@@ -80,11 +80,8 @@ public static ExpressionSyntax Parenthesize(this ExpressionSyntax expression, bo
this ExpressionSyntax expression,
ITypeSymbol targetType,
int position,
SemanticModel semanticModel,
out bool wasCastAdded)
SemanticModel semanticModel)
{
wasCastAdded = false;
if (targetType.ContainsAnonymousType())
{
return expression;
......@@ -122,7 +119,6 @@ public static ExpressionSyntax Parenthesize(this ExpressionSyntax expression, bo
return expression;
}
wasCastAdded = true;
return castExpression;
}
......
......@@ -93,24 +93,120 @@ private bool IsPassedToDelegateCreationExpression(ArgumentSyntax argument, IType
return false;
}
// This expander expands only the parameters within the parameterList
public override SyntaxNode VisitParameter(ParameterSyntax node)
private SpeculationAnalyzer GetSpeculationAnalyzer(ExpressionSyntax expression, ExpressionSyntax newExpression)
{
var newNode = (ParameterSyntax)base.VisitParameter(node);
return new SpeculationAnalyzer(expression, newExpression, this._semanticModel, this._cancellationToken);
}
private bool TryCastTo(ITypeSymbol targetType, ExpressionSyntax expression, ExpressionSyntax newExpression, out ExpressionSyntax newExpressionWithCast)
{
var speculativeAnalyzer = GetSpeculationAnalyzer(expression, newExpression);
var speculativeSemanticModel = speculativeAnalyzer.SpeculativeSemanticModel;
var speculatedExpression = speculativeAnalyzer.ReplacedExpression;
var result = speculatedExpression.CastIfPossible(targetType, speculatedExpression.SpanStart, speculativeSemanticModel);
if (result != speculatedExpression)
{
newExpressionWithCast = result;
return true;
}
if (node != null && node.IsParentKind(SyntaxKind.ParameterList) &&
newNode != null && newNode.Type == null &&
_expandParameter)
newExpressionWithCast = null;
return false;
}
private bool TryGetLambdaExpressionBodyWithCast(LambdaExpressionSyntax lambdaExpression, LambdaExpressionSyntax newLambdaExpression, out ExpressionSyntax newLambdaExpressionBodyWithCast)
{
if (newLambdaExpression.Body is ExpressionSyntax)
{
var newNodeSymbol = _semanticModel.GetDeclaredSymbol(node);
if (newNodeSymbol != null && newNodeSymbol.Kind == SymbolKind.Parameter)
var body = (ExpressionSyntax)lambdaExpression.Body;
var newBody = (ExpressionSyntax)newLambdaExpression.Body;
var returnType = (_semanticModel.GetSymbolInfo(lambdaExpression).Symbol as IMethodSymbol)?.ReturnType;
if (returnType != null)
{
if (newNodeSymbol.Type != null)
return TryCastTo(returnType, body, newBody, out newLambdaExpressionBodyWithCast);
}
}
newLambdaExpressionBodyWithCast = null;
return false;
}
public override SyntaxNode VisitReturnStatement(ReturnStatementSyntax node)
{
var newNode = base.VisitReturnStatement(node);
if (newNode is ReturnStatementSyntax)
{
var newReturnStatement = (ReturnStatementSyntax)newNode;
var parentLambda = node.FirstAncestorOrSelf<LambdaExpressionSyntax>();
if (parentLambda != null)
{
var returnType = (_semanticModel.GetSymbolInfo(parentLambda).Symbol as IMethodSymbol)?.ReturnType;
if (returnType != null)
{
return newNode.WithType(newNodeSymbol.Type.GenerateTypeSyntax().WithTrailingTrivia(s_oneWhitespaceSeparator))
.WithAdditionalAnnotations(Simplifier.Annotation);
ExpressionSyntax newExpressionWithCast;
if (TryCastTo(returnType, node.Expression, newReturnStatement.Expression, out newExpressionWithCast))
{
newNode = newReturnStatement.WithExpression(newExpressionWithCast);
}
}
}
}
return newNode;
}
public override SyntaxNode VisitParenthesizedLambdaExpression(ParenthesizedLambdaExpressionSyntax node)
{
var newNode = base.VisitParenthesizedLambdaExpression(node);
if (newNode is ParenthesizedLambdaExpressionSyntax)
{
var parenthesizedLambda = (ParenthesizedLambdaExpressionSyntax)newNode;
// First, try to add a cast to the lambda.
ExpressionSyntax newLambdaExpressionBodyWithCast;
if (TryGetLambdaExpressionBodyWithCast(node, parenthesizedLambda, out newLambdaExpressionBodyWithCast))
{
parenthesizedLambda = parenthesizedLambda.WithBody(newLambdaExpressionBodyWithCast);
}
// Next, try to add a types to the lambda parameters
if (_expandParameter && parenthesizedLambda.ParameterList != null)
{
var parameterList = parenthesizedLambda.ParameterList;
var parameters = parameterList.Parameters.ToArray();
if (parameters.Length > 0 && parameters.Any(p => p.Type == null))
{
var parameterSymbols = node.ParameterList.Parameters
.Select(p => _semanticModel.GetDeclaredSymbol(p, _cancellationToken))
.ToArray();
if (parameterSymbols.All(p => p.Type?.ContainsAnonymousType() == false))
{
var newParameters = parameterList.Parameters;
for (int i = 0; i < parameterSymbols.Length; i++)
{
var typeSyntax = parameterSymbols[i].Type.GenerateTypeSyntax().WithTrailingTrivia(s_oneWhitespaceSeparator);
var newParameter = parameters[i].WithType(typeSyntax).WithAdditionalAnnotations(Simplifier.Annotation);
newParameters = newParameters.Replace(parameters[i], newParameter);
}
var newParameterList = parameterList.WithParameters(newParameters);
var newParenthesizedLambda = parenthesizedLambda.WithParameterList(newParameterList);
return SimplificationHelpers.CopyAnnotations(from: parenthesizedLambda, to: newParenthesizedLambda);
}
}
}
return parenthesizedLambda;
}
return newNode;
......@@ -120,28 +216,39 @@ public override SyntaxNode VisitSimpleLambdaExpression(SimpleLambdaExpressionSyn
{
var newNode = base.VisitSimpleLambdaExpression(node);
if (newNode is SimpleLambdaExpressionSyntax && _expandParameter)
if (newNode is SimpleLambdaExpressionSyntax)
{
var newSimpleLambda = (SimpleLambdaExpressionSyntax)newNode;
var parameterSymbol = _semanticModel.GetDeclaredSymbol(node.Parameter);
if (parameterSymbol != null && parameterSymbol.Kind == SymbolKind.Parameter)
var simpleLambda = (SimpleLambdaExpressionSyntax)newNode;
// First, try to add a cast to the lambda.
ExpressionSyntax newLambdaExpressionBodyWithCast;
if (TryGetLambdaExpressionBodyWithCast(node, simpleLambda, out newLambdaExpressionBodyWithCast))
{
if (parameterSymbol.Type != null)
simpleLambda = simpleLambda.WithBody(newLambdaExpressionBodyWithCast);
}
// Next, try to add a type to the lambda parameter
if (_expandParameter)
{
var parameterSymbol = _semanticModel.GetDeclaredSymbol(node.Parameter);
if (parameterSymbol?.Type?.ContainsAnonymousType() == false)
{
var typeSyntax = parameterSymbol.Type.GenerateTypeSyntax().WithTrailingTrivia(s_oneWhitespaceSeparator);
var newSimpleLambdaParameter = newSimpleLambda.Parameter.WithType(typeSyntax).WithoutTrailingTrivia();
var newSimpleLambdaParameter = simpleLambda.Parameter.WithType(typeSyntax).WithoutTrailingTrivia();
var parenthesizedLambda = SyntaxFactory.ParenthesizedLambdaExpression(
newSimpleLambda.AsyncKeyword,
simpleLambda.AsyncKeyword,
SyntaxFactory.ParameterList(SyntaxFactory.SingletonSeparatedList(newSimpleLambdaParameter))
.WithTrailingTrivia(newSimpleLambda.Parameter.GetTrailingTrivia())
.WithLeadingTrivia(newSimpleLambda.Parameter.GetLeadingTrivia()),
newSimpleLambda.ArrowToken,
newSimpleLambda.Body).WithAdditionalAnnotations(Simplifier.Annotation);
.WithTrailingTrivia(simpleLambda.Parameter.GetTrailingTrivia())
.WithLeadingTrivia(simpleLambda.Parameter.GetLeadingTrivia()),
simpleLambda.ArrowToken,
simpleLambda.Body).WithAdditionalAnnotations(Simplifier.Annotation);
return SimplificationHelpers.CopyAnnotations(newNode, parenthesizedLambda);
return SimplificationHelpers.CopyAnnotations(from: simpleLambda, to: parenthesizedLambda);
}
}
return simpleLambda;
}
return newNode;
......@@ -157,15 +264,10 @@ public override SyntaxNode VisitArgument(ArgumentSyntax node)
if (argumentType != null &&
!IsPassedToDelegateCreationExpression(node, argumentType))
{
var specAnalyzer = new SpeculationAnalyzer(node.Expression, newArgument.Expression, _semanticModel, _cancellationToken);
var speculativeSemanticModel = specAnalyzer.SpeculativeSemanticModel;
var speculatedExpression = specAnalyzer.ReplacedExpression;
bool wasCastAdded;
var newArgumentExpression = speculatedExpression.CastIfPossible(argumentType, speculatedExpression.SpanStart, speculativeSemanticModel, out wasCastAdded);
if (wasCastAdded)
ExpressionSyntax newArgumentExpressionWithCast;
if (TryCastTo(argumentType, node.Expression, newArgument.Expression, out newArgumentExpressionWithCast))
{
return newArgument.WithExpression(newArgumentExpression);
return newArgument.WithExpression(newArgumentExpressionWithCast);
}
}
......@@ -605,18 +707,20 @@ private ExpressionSyntax TryAddTypeArgumentToIdentifierName(ExpressionSyntax new
if (((IMethodSymbol)symbol).TypeArguments.Length != 0)
{
var typeArguments = ((IMethodSymbol)symbol).TypeArguments;
var genericName = SyntaxFactory.GenericName(
((IdentifierNameSyntax)newNode).Identifier,
SyntaxFactory.TypeArgumentList(
SyntaxFactory.SeparatedList(
typeArguments.Select(p => SyntaxFactory.ParseTypeName(p.ToDisplayParts(s_typeNameFormatWithGenerics).ToDisplayString())))))
.WithLeadingTrivia(newNode.GetLeadingTrivia())
.WithTrailingTrivia(newNode.GetTrailingTrivia())
.WithAdditionalAnnotations(Simplifier.Annotation);
genericName = newNode.CopyAnnotationsTo(genericName);
return genericName;
if (!typeArguments.Any(t => t.ContainsAnonymousType()))
{
var genericName = SyntaxFactory.GenericName(
((IdentifierNameSyntax)newNode).Identifier,
SyntaxFactory.TypeArgumentList(
SyntaxFactory.SeparatedList(
typeArguments.Select(p => SyntaxFactory.ParseTypeName(p.ToDisplayParts(s_typeNameFormatWithGenerics).ToDisplayString())))))
.WithLeadingTrivia(newNode.GetLeadingTrivia())
.WithTrailingTrivia(newNode.GetTrailingTrivia())
.WithAdditionalAnnotations(Simplifier.Annotation);
genericName = newNode.CopyAnnotationsTo(genericName);
return genericName;
}
}
}
......@@ -805,7 +909,7 @@ private bool IsPropertyNameOfObjectInitializer(SimpleNameSyntax identifierName)
{
return left
.WithLeadingTrivia(rewrittenNode.GetLeadingTrivia())
.WithTrailingTrivia(rewrittenNode.GetTrailingTrivia());
.WithTrailingTrivia(rewrittenNode.GetTrailingTrivia());
}
// now create syntax for the combination of left and right syntax, or a simple replacement in case of an identifier
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Linq;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Shared.Extensions;
using Roslyn.Utilities;
......
......@@ -382,7 +382,7 @@ private void StartAsynchronousComputation(AsynchronousComputationToStart computa
// completed and can bail immediately. If we were to do this after we
// kicked off the async work, then we'd have the chance that both would
// run concurrently and we'd have a higher change of hitting the race condition
// of calling TaskCompletionSource.SetResult simultaneously (and thus having
// of calling AsyncMethodBuilder.SetResult simultaneously (and thus having
// the InvalidOperationException that we have to ignore).
if (requestToCompleteSynchronously != null && task.IsCompleted)
{
......
......@@ -1016,7 +1016,7 @@ public void TestRecoverableSyntaxTreeCSharp()
}
[MethodImpl(MethodImplOptions.NoInlining)]
[Fact, Trait(Traits.Feature, Traits.Features.Workspace)]
[Fact(Skip = "https://github.com/dotnet/roslyn/issues/6409"), Trait(Traits.Feature, Traits.Features.Workspace)]
public void TestRecoverableSyntaxTreeVisualBasic()
{
var pid = ProjectId.CreateNewId();
......
......@@ -43,8 +43,11 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Extensions.ContextQuery
''' <summary>
''' We need to check for EOL trivia not preceded by LineContinuation trivia.
'''
''' This is slightly complicated since we need to get TrailingTrivia from missing tokens
''' and then get LeadingTrivia for the next non-missing token
''' This is slightly complicated since we need to get TrailingTrivia from missing tokens
''' and then get LeadingTrivia for the next non-missing token.
'''
''' Note that this is even more complicated in the case that we're in structured trivia
''' because we might be part of the leading trivia to the next non-missing token.
''' </summary>
<Extension>
Friend Function HasNonContinuableEndOfLineBeforePosition(token As SyntaxToken, position As Integer, Optional checkForSecondEol As Boolean = False) As Boolean
......@@ -55,6 +58,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Extensions.ContextQuery
Dim allowsImplicitLineContinuation = token.Parent IsNot Nothing AndAlso
SyntaxFacts.AllowsTrailingImplicitLineContinuation(token)
Dim originalToken = token
Do
If CheckTrivia(token.TrailingTrivia, position, checkForSecondEol, allowsImplicitLineContinuation) Then
Return True
......@@ -63,7 +68,26 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Extensions.ContextQuery
token = token.GetNextToken(includeZeroWidth:=True)
Loop While token.IsMissing
Return CheckTrivia(token.LeadingTrivia, position, checkForSecondEol, allowsImplicitLineContinuation)
' If our our original token was in structured trivia (such as preprocesser), it's entirely possible that the
' leading trivia of the next non-missing token might contain it. If that's the case, we don't want to check
' its leading trivia before it might have trivia that appear *before* the original token.
'
' Consider the following example:
'
' Class C
'
' #Region $$
' End Class
'
' In the code above, the original token is "Region", but the leading trivia to the next non-missing token ("End")
' includes the structured trivia containing the original token plus the trivia before it. In that case, we don't
' want to check the leading trivia of the "End".
If Not token.LeadingTrivia.Span.Contains(originalToken.Span) Then
Return CheckTrivia(token.LeadingTrivia, position, checkForSecondEol, allowsImplicitLineContinuation)
Else
Return False
End If
End Function
<Extension>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册