提交 b464d939 编写于 作者: T Tanner Gooding

Merge remote-tracking branch 'origin/stabilization'

......@@ -2,4 +2,7 @@
<RuleSet Name="Common diagnostic rules for all Roslyn projects"
Description="This file contains diagnostic settings used by all Roslyn projects. Projects that need specific settings should have their own rule set files that Include this one, and then make the necessary adjustments."
ToolsVersion="14.0">
</RuleSet>
\ No newline at end of file
<Rules AnalyzerId="Roslyn.Core" RuleNamespace="Roslyn.Core">
<Rule Id="AD0001" Action="Error" />
</Rules>
</RuleSet>
......@@ -30,7 +30,7 @@
Outputs="$(ToolsetPackagesSemaphore);
$(ToolsetCompilerPropsFilePath);
$(RoslynDiagnosticsPropsFilePath)"
Condition="'$(OS)' == 'Windows_NT'">
Condition="'$(OS)' == 'Windows_NT' AND '$(NuGetRestorePackages)' != 'false'">
<Message Importance="High" Text="Restoring toolset packages..." />
<!-- Run restore -->
......
param ([string]$nugetZipUrl = $(throw "Need an URL to the NuGet zip") )
$destination = ${env:UserProfile}
$outFilePath = [IO.Path]::ChangeExtension([IO.Path]::GetTempFileName(), "zip")
write-host "Downloading $nugetZipUrl -> $outFilePath"
$client = new-object System.Net.WebClient
$client.DownloadFile($nugetZipUrl, $outFilePath)
# It's possible for restore to run in parallel on the test machines. As such
# we need to restore only new files to handle simultaneous restore scenarios.
write-host "Extracting"
Add-Type -assembly "System.IO.Compression.Filesystem"
$archive = [IO.Compression.ZipFile]::OpenRead($outFilePath)
foreach ($entry in $archive.Entries) {
$entryFilePath = join-path $destination $entry.FullName
if (test-path $entryFilePath) {
continue;
}
# If it's a directory then create it now. Calling ExtractToFile will
# throw on a directory. There is no way I can find to ask a
# ZipArchiveEntry if it is a directory hence we just check for a file
# extension
[string]$ext = [IO.Path]::GetExtension($entryFilePath)
if ($ext -eq "") {
$null = mkdir $entryFilePath -errorAction SilentlyContinue
continue;
}
$entryDirectory = split-path -parent $entryFilePath
if (-not (test-path $entryDirectory)) {
$null = mkdir $entryDirectory -errorAction SilentlyContinue
}
try {
write-host "Restoring $entryFilePath"
[IO.Compression.ZipFileExtensions]::ExtractToFile($entry, $entryFilePath)
} catch {
write-host "Unable to restore $($entry.FullName) $Error"
}
}
......@@ -2,8 +2,11 @@
REM Parse Arguments.
set NugetZipUrlRoot=https://dotnetci.blob.core.windows.net/roslyn
set NugetZipUrl=%NuGetZipUrlRoot%/nuget.24.zip
set RoslynRoot=%~dp0
set BuildConfiguration=Debug
set BuildRestore=false
:ParseArguments
if "%1" == "" goto :DoneParsing
if /I "%1" == "/?" call :Usage && exit /b 1
......@@ -12,6 +15,7 @@ if /I "%1" == "/release" set BuildConfiguration=Release&&shift&& goto :ParseArgu
if /I "%1" == "/test32" set Test64=false&&shift&& goto :ParseArguments
if /I "%1" == "/test64" set Test64=true&&shift&& goto :ParseArguments
if /I "%1" == "/perf" set Perf=true&&shift&& goto :ParseArguments
if /I "%1" == "/restore" set BuildRestore=true&&shift&& goto :ParseArguments
call :Usage && exit /b 1
:DoneParsing
......@@ -28,14 +32,21 @@ if defined Perf (
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\VsDevCmd.bat"
REM Build the compiler so we can self host it for the full build
nuget.exe restore -nocache -verbosity quiet %RoslynRoot%build/ToolsetPackages/project.json
nuget.exe restore -nocache -verbosity quiet %RoslynRoot%build/Toolset.sln
REM Restore the NuGet packages
if "%BuildRestore%" == "true" (
nuget.exe restore -nocache -verbosity quiet %RoslynRoot%build/ToolsetPackages/project.json
nuget.exe restore -nocache -verbosity quiet %RoslynRoot%build/Toolset.sln
nuget.exe restore -nocache %RoslynRoot%build\ToolsetPackages\project.json
nuget.exe restore -nocache %RoslynRoot%Roslyn.sln
nuget.exe restore -nocache %RoslynRoot%src\Samples\Samples.sln
) else (
powershell -noprofile -executionPolicy RemoteSigned -command "%RoslynRoot%\build\scripts\restore.ps1 %NugetZipUrl%"
)
REM Set the build version only so the assembly version is set to the semantic version,
REM which allows analyzers to laod because the compiler has binding redirects to the
REM semantic version
msbuild /nologo /v:m /m /p:BuildVersion=0.0.0.0 %RoslynRoot%build/Toolset.sln /p:Configuration=%BuildConfiguration%
msbuild /nologo /v:m /m /p:BuildVersion=0.0.0.0 %RoslynRoot%build/Toolset.sln /p:NuGetRestorePackages=false /p:Configuration=%BuildConfiguration%
mkdir %RoslynRoot%Binaries\Bootstrap
move Binaries\%BuildConfiguration%\* %RoslynRoot%Binaries\Bootstrap
......
......@@ -316,45 +316,6 @@ private ImmutableArray<Cci.AssemblyReferenceAlias> CalculateAssemblyReferenceAli
#region Synthesized Members
#if DEBUG
/// <summary>
/// The queue of synthesized members of a type should be deterministic, as the members are
/// emitted in the order in which they are added to the queue. Therefore for debug purposes
/// we have a custom version of ConcurrentQueue that detects attempted concurrent adds.
/// </summary>
/// <typeparam name="T"></typeparam>
private class ConcurrentQueue<T> : System.Collections.Concurrent.ConcurrentQueue<T>
{
// A count of the number of concurrent queue operations in progress. Should always be zero or one,
// as synthetic members should be added by the compiler to a given type in a well-defined sequential
// order.
int queueing;
// A short delay to increase the chance that concurrent Enqueue operation will be diagnosed.
static readonly TimeSpan shortDelay = new TimeSpan(2);
/// <summary>
/// Adds an object to the end of the ConcurrentQueue.
/// </summary>
/// <param name="item">
/// The object to add to the end of the ConcurrentQueue.
/// The value can be a null reference for reference types.
/// </param>
public new void Enqueue(T item)
{
if (Interlocked.Increment(ref queueing) != 1)
{
throw new System.InvalidOperationException("Concurrent use of " + nameof(SynthesizedDefinitions));
}
base.Enqueue(item);
// To increase the chance of catching concurrency issues, we add a delay to each queued item
// so that another thread has a chance to add at the same time.
System.Threading.Tasks.Task.Delay(shortDelay).Wait();
Interlocked.Decrement(ref queueing);
}
}
#endif
/// <summary>
/// Captures the set of synthesized definitions that should be added to a type
/// during emit process.
......
......@@ -2,12 +2,12 @@
Microsoft.CodeAnalysis.CommandLineArguments.InteractiveMode.get -> bool
Microsoft.CodeAnalysis.CommandLineArguments.ScriptArguments.get -> System.Collections.Immutable.ImmutableArray<string>
Microsoft.CodeAnalysis.CommandLineArguments.SourcePaths.get -> System.Collections.Immutable.ImmutableArray<string>
Microsoft.CodeAnalysis.Compilation.GetSubmissionResultType(out bool hasValue) -> Microsoft.CodeAnalysis.ITypeSymbol
Microsoft.CodeAnalysis.Compilation.PreviousSubmission.get -> Microsoft.CodeAnalysis.Compilation
Microsoft.CodeAnalysis.Compilation.ScriptClass.get -> Microsoft.CodeAnalysis.INamedTypeSymbol
Microsoft.CodeAnalysis.Compilation.WithPreviousSubmission(Microsoft.CodeAnalysis.Compilation newPreviousSubmission) -> Microsoft.CodeAnalysis.Compilation
Microsoft.CodeAnalysis.Compilation.ScriptCompilationInfo.get -> Microsoft.CodeAnalysis.ScriptCompilationInfo
Microsoft.CodeAnalysis.Compilation.WithCompilationScriptInfo(Microsoft.CodeAnalysis.ScriptCompilationInfo info) -> Microsoft.CodeAnalysis.Compilation
Microsoft.CodeAnalysis.CompilationOptions.Deterministic.get -> bool
Microsoft.CodeAnalysis.CompilationOptions.ReportSuppressedDiagnostics.get -> bool
Microsoft.CodeAnalysis.CompilationOptions.WithDeterministic(bool deterministic) -> Microsoft.CodeAnalysis.CompilationOptions
Microsoft.CodeAnalysis.CompilationOptions.WithReportSuppressedDiagnostics(bool value) -> Microsoft.CodeAnalysis.CompilationOptions
Microsoft.CodeAnalysis.Diagnostic.GetSuppressionInfo(Microsoft.CodeAnalysis.Compilation compilation) -> Microsoft.CodeAnalysis.Diagnostics.SuppressionInfo
Microsoft.CodeAnalysis.DiagnosticDescriptor.GetEffectiveSeverity(Microsoft.CodeAnalysis.CompilationOptions compilationOptions) -> Microsoft.CodeAnalysis.ReportDiagnostic
......@@ -51,7 +51,12 @@ Microsoft.CodeAnalysis.Emit.DebugInformationFormat.Embedded = 3 -> Microsoft.Cod
Microsoft.CodeAnalysis.Emit.DebugInformationFormat.PortablePdb = 2 -> Microsoft.CodeAnalysis.Emit.DebugInformationFormat
Microsoft.CodeAnalysis.MetadataReference.MetadataReference(Microsoft.CodeAnalysis.MetadataReferenceProperties properties) -> void
Microsoft.CodeAnalysis.ParseOptions.WithKind(Microsoft.CodeAnalysis.SourceCodeKind kind) -> Microsoft.CodeAnalysis.ParseOptions
Microsoft.CodeAnalysis.SourceCodeKind.Interactive = 2 -> Microsoft.CodeAnalysis.SourceCodeKind
Microsoft.CodeAnalysis.ScriptCompilationInfo
Microsoft.CodeAnalysis.ScriptCompilationInfo.GlobalsType.get -> System.Type
Microsoft.CodeAnalysis.ScriptCompilationInfo.PreviousScriptCompilation.get -> Microsoft.CodeAnalysis.Compilation
Microsoft.CodeAnalysis.ScriptCompilationInfo.ReturnType.get -> System.Type
Microsoft.CodeAnalysis.ScriptCompilationInfo.WithPreviousScriptCompilation(Microsoft.CodeAnalysis.Compilation compilation) -> Microsoft.CodeAnalysis.ScriptCompilationInfo
Microsoft.CodeAnalysis.SourceFileResolver.Equals(Microsoft.CodeAnalysis.SourceFileResolver other) -> bool
Microsoft.CodeAnalysis.StrongNameProvider.StrongNameProvider() -> void
abstract Microsoft.CodeAnalysis.Diagnostic.IsSuppressed.get -> bool
abstract Microsoft.CodeAnalysis.ParseOptions.CommonWithKind(Microsoft.CodeAnalysis.SourceCodeKind kind) -> Microsoft.CodeAnalysis.ParseOptions
......@@ -64,4 +69,4 @@ static Microsoft.CodeAnalysis.SyntaxNodeExtensions.NormalizeWhitespace<TNode>(th
static Microsoft.CodeAnalysis.SyntaxNodeExtensions.NormalizeWhitespace<TNode>(this TNode node, string indentation, bool elasticTrivia) -> TNode
virtual Microsoft.CodeAnalysis.MetadataReferenceResolver.ResolveMissingAssemblies.get -> bool
virtual Microsoft.CodeAnalysis.MetadataReferenceResolver.ResolveMissingAssembly(Microsoft.CodeAnalysis.MetadataReference definition, Microsoft.CodeAnalysis.AssemblyIdentity referenceIdentity) -> Microsoft.CodeAnalysis.PortableExecutableReference
virtual Microsoft.CodeAnalysis.SourceReferenceResolver.ReadText(string resolvedPath) -> Microsoft.CodeAnalysis.Text.SourceText
\ No newline at end of file
virtual Microsoft.CodeAnalysis.SourceReferenceResolver.ReadText(string resolvedPath) -> Microsoft.CodeAnalysis.Text.SourceText
......@@ -822,7 +822,7 @@ lUnsplitAndFinish:
Dim sideEffects = node.SideEffects
If Not sideEffects.IsEmpty Then
For Each sideEffect In node.SideEffects
Visit(sideEffect)
VisitExpressionAsStatement(sideEffect)
Next
End If
Debug.Assert(node.ValueOpt IsNot Nothing OrElse node.HasErrors OrElse node.Type.SpecialType = SpecialType.System_Void)
......@@ -844,7 +844,7 @@ lUnsplitAndFinish:
Public Overrides Function VisitByRefArgumentWithCopyBack(node As BoundByRefArgumentWithCopyBack) As BoundNode
Me.SetPlaceholderSubstitute(node.InPlaceholder, node.OriginalArgument)
Visit(node.InConversion)
VisitRvalue(node.InConversion)
Me.RemovePlaceholderSubstitute(node.InPlaceholder)
Return Nothing
End Function
......@@ -1009,7 +1009,7 @@ lUnsplitAndFinish:
End Function
Public Overrides Function VisitAnonymousTypeFieldInitializer(node As BoundAnonymousTypeFieldInitializer) As BoundNode
Visit(node.Value)
VisitRvalue(node.Value)
Return Nothing
End Function
......@@ -1089,10 +1089,14 @@ lUnsplitAndFinish:
End Function
Public Overrides Function VisitExpressionStatement(node As BoundExpressionStatement) As BoundNode
VisitRvalue(node.Expression)
VisitExpressionAsStatement(node.Expression)
Return Nothing
End Function
Private Sub VisitExpressionAsStatement(node As BoundExpression)
VisitRvalue(node)
End Sub
Public Overrides Function VisitLateMemberAccess(node As BoundLateMemberAccess) As BoundNode
' receiver of a latebound access is never modified
VisitRvalue(node.ReceiverOpt)
......@@ -1334,7 +1338,13 @@ lUnsplitAndFinish:
If statement IsNot Nothing Then
VisitStatement(TryCast(child, BoundStatement))
Else
Visit(child)
Dim expression = TryCast(child, BoundExpression)
If expression IsNot Nothing Then
VisitExpressionAsStatement(expression)
Else
Visit(child)
End If
End If
Next
Return Nothing
......@@ -1361,7 +1371,7 @@ lUnsplitAndFinish:
End Function
Public Overrides Function VisitConversion(node As BoundConversion) As BoundNode
Visit(node.Operand)
VisitRvalue(node.Operand)
Return Nothing
End Function
......@@ -1542,7 +1552,7 @@ lUnsplitAndFinish:
Private Function VisitObjectInitializerExpressionBase(node As BoundObjectInitializerExpressionBase) As BoundNode
For Each initializer In node.Initializers
Visit(initializer)
VisitExpressionAsStatement(initializer)
Next
Return Nothing
......@@ -1736,7 +1746,7 @@ lUnsplitAndFinish:
End Sub
Public Overrides Function VisitAsNewLocalDeclarations(node As BoundAsNewLocalDeclarations) As BoundNode
Visit(node.Initializer)
VisitRvalue(node.Initializer)
For Each v In node.LocalDeclarations
Visit(v)
Next
......@@ -2247,7 +2257,7 @@ EnteredRegion:
End Function
Public Overrides Function VisitRaiseEventStatement(node As BoundRaiseEventStatement) As BoundNode
Me.Visit(node.EventInvocation)
Me.VisitExpressionAsStatement(node.EventInvocation)
Return Nothing
End Function
......@@ -2550,7 +2560,7 @@ EnteredRegion:
End Function
Public Overrides Function VisitXmlMemberAccess(node As BoundXmlMemberAccess) As BoundNode
Visit(node.MemberAccess)
VisitRvalue(node.MemberAccess)
Return Nothing
End Function
......@@ -2560,14 +2570,14 @@ EnteredRegion:
End Function
Public Overrides Function VisitAwaitOperator(node As BoundAwaitOperator) As BoundNode
Visit(node.Operand)
VisitRvalue(node.Operand)
Return Nothing
End Function
Public Overrides Function VisitNameOfOperator(node As BoundNameOfOperator) As BoundNode
Dim savedState As LocalState = Me.State.Clone()
SetUnreachable()
Visit(node.Argument)
VisitRvalue(node.Argument)
Me.SetState(savedState)
Return Nothing
End Function
......@@ -2579,6 +2589,7 @@ EnteredRegion:
Public Overrides Function VisitInterpolatedStringExpression(node As BoundInterpolatedStringExpression) As BoundNode
For Each item In node.Contents
Debug.Assert(item.Kind = BoundKind.Literal OrElse item.Kind = BoundKind.Interpolation)
Visit(item)
Next
......@@ -2586,9 +2597,9 @@ EnteredRegion:
End Function
Public Overrides Function VisitInterpolation(node As BoundInterpolation) As BoundNode
Visit(node.Expression)
Visit(node.AlignmentOpt)
Visit(node.FormatStringOpt)
VisitRvalue(node.Expression)
VisitRvalue(node.AlignmentOpt)
VisitRvalue(node.FormatStringOpt)
Return Nothing
End Function
#End Region
......
......@@ -41,51 +41,51 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
Public Overrides Function VisitQueryLambda(node As BoundQueryLambda) As BoundNode
Visit(node.Expression)
VisitRvalue(node.Expression)
Return Nothing
End Function
Public Overrides Function VisitQueryExpression(node As BoundQueryExpression) As BoundNode
Visit(node.LastOperator)
VisitRvalue(node.LastOperator)
Return Nothing
End Function
Public Overrides Function VisitQuerySource(node As BoundQuerySource) As BoundNode
Visit(node.Expression)
VisitRvalue(node.Expression)
Return Nothing
End Function
Public Overrides Function VisitQueryableSource(node As BoundQueryableSource) As BoundNode
Visit(node.Source)
VisitRvalue(node.Source)
Return Nothing
End Function
Public Overrides Function VisitToQueryableCollectionConversion(node As BoundToQueryableCollectionConversion) As BoundNode
Visit(node.ConversionCall)
VisitRvalue(node.ConversionCall)
Return Nothing
End Function
Public Overrides Function VisitQueryClause(node As BoundQueryClause) As BoundNode
Visit(node.UnderlyingExpression)
VisitRvalue(node.UnderlyingExpression)
Return Nothing
End Function
Public Overrides Function VisitAggregateClause(node As BoundAggregateClause) As BoundNode
If node.CapturedGroupOpt IsNot Nothing Then
Visit(node.CapturedGroupOpt)
VisitRvalue(node.CapturedGroupOpt)
End If
Visit(node.UnderlyingExpression)
VisitRvalue(node.UnderlyingExpression)
Return Nothing
End Function
Public Overrides Function VisitOrdering(node As BoundOrdering) As BoundNode
Visit(node.UnderlyingExpression)
VisitRvalue(node.UnderlyingExpression)
Return Nothing
End Function
Public Overrides Function VisitRangeVariableAssignment(node As BoundRangeVariableAssignment) As BoundNode
Visit(node.Value)
VisitRvalue(node.Value)
Return Nothing
End Function
......
......@@ -1657,46 +1657,46 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
Public Overrides Function VisitQueryExpression(node As BoundQueryExpression) As BoundNode
Visit(node.LastOperator)
VisitRvalue(node.LastOperator)
Return Nothing
End Function
Public Overrides Function VisitQuerySource(node As BoundQuerySource) As BoundNode
Visit(node.Expression)
VisitRvalue(node.Expression)
Return Nothing
End Function
Public Overrides Function VisitQueryableSource(node As BoundQueryableSource) As BoundNode
Visit(node.Source)
VisitRvalue(node.Source)
Return Nothing
End Function
Public Overrides Function VisitToQueryableCollectionConversion(node As BoundToQueryableCollectionConversion) As BoundNode
Visit(node.ConversionCall)
VisitRvalue(node.ConversionCall)
Return Nothing
End Function
Public Overrides Function VisitQueryClause(node As BoundQueryClause) As BoundNode
Visit(node.UnderlyingExpression)
VisitRvalue(node.UnderlyingExpression)
Return Nothing
End Function
Public Overrides Function VisitAggregateClause(node As BoundAggregateClause) As BoundNode
If node.CapturedGroupOpt IsNot Nothing Then
Visit(node.CapturedGroupOpt)
VisitRvalue(node.CapturedGroupOpt)
End If
Visit(node.UnderlyingExpression)
VisitRvalue(node.UnderlyingExpression)
Return Nothing
End Function
Public Overrides Function VisitOrdering(node As BoundOrdering) As BoundNode
Visit(node.UnderlyingExpression)
VisitRvalue(node.UnderlyingExpression)
Return Nothing
End Function
Public Overrides Function VisitRangeVariableAssignment(node As BoundRangeVariableAssignment) As BoundNode
Visit(node.Value)
VisitRvalue(node.Value)
Return Nothing
End Function
......@@ -2015,7 +2015,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Me.SetPlaceholderSubstitute(placeholder, New BoundLocal(localDecl.Syntax, localToUseAsSubstitute, localToUseAsSubstitute.Type))
End If
Visit(node.Initializer)
VisitRvalue(node.Initializer)
Visit(localDecl) ' TODO: do we really need that?
' Visit all other declarations
......
......@@ -196,7 +196,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
NoteWrite(node.RangeVariableOpt, Nothing)
End If
Visit(node.Source)
VisitRvalue(node.Source)
Return Nothing
End Function
......@@ -205,7 +205,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
NoteWrite(node.RangeVariable, Nothing)
End If
Visit(node.Value)
VisitRvalue(node.Value)
Return Nothing
End Function
......
......@@ -1533,6 +1533,40 @@ End Class
CompilationUtils.AssertTheseDiagnostics(comp)
End Sub
<Fact>
Public Sub LogicalExpressionInErroneousObjectInitializer()
Dim program = <compilation>
<file name="a.b">
Public Class Class1
Sub Test()
Dim x As S1
Dim y As New C1() With {.F1 = x.F1 AndAlso x.F2, .F3 = x.F3}
End Sub
End Class
Public Structure S1
Public F1 As Boolean
Public F2 As Boolean
Public F3 As Object
End Structure
</file>
</compilation>
Dim comp = CompilationUtils.CreateCompilationWithMscorlib(program, options:=TestOptions.DebugDll)
comp.AssertTheseDiagnostics(
<expected>
BC30002: Type 'C1' is not defined.
Dim y As New C1() With {.F1 = x.F1 AndAlso x.F2, .F3 = x.F3}
~~
BC42104: Variable 'F3' is used before it has been assigned a value. A null reference exception could result at runtime.
Dim y As New C1() With {.F1 = x.F1 AndAlso x.F2, .F3 = x.F3}
~~~~
</expected>
)
End Sub
End Class
End Namespace
......@@ -47,7 +47,9 @@ internal static int Main(string[] args)
var testRunner = new TestRunner(xunit, useHtml);
var start = DateTime.Now;
Console.WriteLine("Running {0} test assemblies", list.Count);
var orderedList = OrderAssemblyList(list);
var result = testRunner.RunAllAsync(orderedList, cts.Token).Result;
var span = DateTime.Now - start;
......
......@@ -816,7 +816,7 @@ public override string GetName(SyntaxNode node)
return ((EventDeclarationSyntax)node).ExplicitInterfaceSpecifier?.ToString() +
((EventDeclarationSyntax)node).Identifier.ToString();
case SyntaxKind.Parameter:
return ((ParameterSyntax)node).Identifier.ToString();
return GetParameterName(node);
case SyntaxKind.NamespaceDeclaration:
return ((NamespaceDeclarationSyntax)node).Name.ToString();
case SyntaxKind.OperatorDeclaration:
......
......@@ -1817,6 +1817,50 @@ End Class
Unknown("i"))
End Sub
<ConditionalWpfFact(GetType(x86)), Trait(Traits.Feature, Traits.Features.CodeModelEvents)>
Public Sub TestParameter_ChangeTypeToTypeCharacter()
Dim code =
<Code>
Class C
Sub M(b As Boolean)
End Sub
End Class
</Code>
Dim changedCode =
<Code>
Class C
Sub M(b%)
End Sub
End Class
</Code>
Test(code, changedCode,
TypeRefChange("b"))
End Sub
<ConditionalWpfFact(GetType(x86)), Trait(Traits.Feature, Traits.Features.CodeModelEvents)>
Public Sub TestParameter_ChangeTypeFromTypeCharacter()
Dim code =
<Code>
Class C
Sub M(b%)
End Sub
End Class
</Code>
Dim changedCode =
<Code>
Class C
Sub M(b As Boolean)
End Sub
End Class
</Code>
Test(code, changedCode,
TypeRefChange("b"))
End Sub
#End Region
#Region "Attribute Arguments"
......
......@@ -28,7 +28,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics
End Sub
<WpfFact>
Public Sub TestExternalDiagnostics_RaiseEvents()
Public Async Function TestExternalDiagnostics_RaiseEvents() As Task
Using workspace = CSharpWorkspaceFactory.CreateWorkspaceFromLines(String.Empty)
Dim waiter = New Waiter()
Dim service = New TestDiagnosticAnalyzerService()
......@@ -47,16 +47,16 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics
source.AddNewErrors(project.DocumentIds.First(), diagnostic)
source.OnSolutionBuild(Me, Shell.UIContextChangedEventArgs.From(False))
waiter.CreateWaitTask().PumpingWait()
Await waiter.CreateWaitTask().ConfigureAwait(True)
expected = 0
source.ClearErrors(project.Id)
waiter.CreateWaitTask().PumpingWait()
Await waiter.CreateWaitTask().ConfigureAwait(True)
End Using
End Sub
End Function
<WpfFact>
Public Sub TestExternalDiagnostics_DuplicatedError()
Public Async Function TestExternalDiagnostics_DuplicatedError() As Task
Using workspace = CSharpWorkspaceFactory.CreateWorkspaceFromLines(String.Empty)
Dim waiter = New Waiter()
......@@ -76,9 +76,9 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.Diagnostics
AddHandler source.DiagnosticsUpdated, Sub(o, a)
Assert.Equal(1, a.Diagnostics.Length)
End Sub
waiter.CreateWaitTask().PumpingWait()
Await waiter.CreateWaitTask().ConfigureAwait(True)
End Using
End Sub
End Function
<WpfFact>
Public Async Function TestBuildStartEvent() As Task
......
......@@ -894,7 +894,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.VisualBasic.CodeModel
Dim typesChange As CodeModelEventType = 0
Dim valuesChange As CodeModelEventType = 0
If Not StringComparer.OrdinalIgnoreCase.Equals(oldParameter.Identifier.ToString(), newParameter.Identifier.ToString()) Then
If Not StringComparer.OrdinalIgnoreCase.Equals(Me.CodeModelService.GetParameterName(oldParameter), Me.CodeModelService.GetParameterName(newParameter)) Then
namesChange = CodeModelEventType.Rename
hasChanges = True
End If
......
......@@ -899,7 +899,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.VisualBasic.CodeModel
Case SyntaxKind.OmittedArgument
Return String.Empty
Case SyntaxKind.Parameter
Return DirectCast(node, ParameterSyntax).Identifier.Identifier.ToString()
Return GetParameterName(node)
Case SyntaxKind.OptionStatement
Return GetNormalizedName(node)
Case SyntaxKind.SimpleImportsClause
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册