未验证 提交 333dc835 编写于 作者: T Tomáš Matoušek 提交者: GitHub

Merge pull request #22975 from dotnet/merges/master-to-dev15.5.x-20171102-070014

Merge master to dev15.5.x
......@@ -82,7 +82,7 @@ Some of the best ways to contribute are to try things out, file bugs, and join i
* [How to Contribute](https://github.com/dotnet/roslyn/wiki/Contributing-Code)
* [Pull requests](https://github.com/dotnet/roslyn/pulls): [Open](https://github.com/dotnet/roslyn/pulls?q=is%3Aopen+is%3Apr)/[Closed](https://github.com/dotnet/roslyn/pulls?q=is%3Apr+is%3Aclosed)
Looking for something to work on? The list of [up for grabs issues](https://github.com/dotnet/roslyn/labels/up-for-grabs) is a great place to start.
Looking for something to work on? The list of [up for grabs issues](https://github.com/dotnet/roslyn/labels/help%20wanted) is a great place to start.
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
......
......@@ -293,16 +293,6 @@
<Import Project="GenerateInternalsVisibleTo.targets" />
<Import Project="DisableTransitiveReferences.targets" Condition="'$(RoslynProjectType)' == 'Vsix' AND '$(RoslynSdkProject)' == 'true'" />
<!--
Work around some UI delays in the new project system
https://github.com/dotnet/project-system/issues/2297
-->
<ItemGroup>
<ProjectCapability Remove="DependenciesTree"/>
</ItemGroup>
<ItemDefinitionGroup>
<VSIXSourceItem>
<Visible>false</Visible>
......
......@@ -35,6 +35,7 @@ param (
[switch]$testVsiNetCore = $false,
[switch]$testDesktop = $false,
[switch]$testCoreClr = $false,
[switch]$testIOperation = $false,
# Special test options
[switch]$testDeterminism = $false,
......@@ -66,6 +67,7 @@ function Print-Usage() {
Write-Host " -testCoreClr Run CoreClr unit tests"
Write-Host " -testVsi Run all integration tests"
Write-Host " -testVsiNetCore Run just dotnet core integration tests"
Write-Host " -testIOperation Run extra checks to validate IOperations"
Write-Host ""
Write-Host "Special Test options"
Write-Host " -testBuildCorrectness Run build correctness tests"
......@@ -141,6 +143,11 @@ function Run-MSBuild([string]$buildArgs = "", [string]$logFile = "", [switch]$pa
$args += " /p:BootstrapBuildPath=$bootstrapDir"
}
if ($testIOperation)
{
$args += " /p:TestIOperationInterface=true"
}
$args += " $buildArgs"
Exec-Console $msbuild $args
}
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
// 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 Microsoft.CodeAnalysis.CodeGen;
using Microsoft.CodeAnalysis.CSharp.Emit;
......@@ -514,11 +514,13 @@ public static SyntaxTree ParseWithRoundTripCheck(string text, CSharpParseOptions
options = options.WithConcurrentBuild(false);
}
return CSharpCompilation.Create(
Func<CSharpCompilation> createCompilationLambda = () => CSharpCompilation.Create(
assemblyName == "" ? GetUniqueName() : assemblyName,
trees,
references,
options);
CompilationExtensions.ValidateIOperations(createCompilationLambda);
return createCompilationLambda();
}
public static CSharpCompilation CreateCompilation(
......@@ -529,7 +531,10 @@ public static SyntaxTree ParseWithRoundTripCheck(string text, CSharpParseOptions
CSharpParseOptions parseOptions = null)
{
var trees = (sources == null) ? null : sources.Select(s => Parse(s, options: parseOptions)).ToArray();
var c = CSharpCompilation.Create(identity.Name, options: options ?? TestOptions.ReleaseDll, references: references, syntaxTrees: trees);
Func<CSharpCompilation> createCompilationLambda = () => CSharpCompilation.Create(identity.Name, options: options ?? TestOptions.ReleaseDll, references: references, syntaxTrees: trees);
CompilationExtensions.ValidateIOperations(createCompilationLambda);
var c = createCompilationLambda();
Assert.NotNull(c.Assembly); // force creation of SourceAssemblySymbol
((SourceAssemblySymbol)c.Assembly).lazyAssemblyIdentity = identity;
......@@ -545,7 +550,7 @@ public static SyntaxTree ParseWithRoundTripCheck(string text, CSharpParseOptions
Type returnType = null,
Type hostObjectType = null)
{
return CSharpCompilation.CreateScriptCompilation(
Func<CSharpCompilation> createCompilationLambda = () => CSharpCompilation.CreateScriptCompilation(
GetUniqueName(),
references: references,
options: options,
......@@ -553,6 +558,8 @@ public static SyntaxTree ParseWithRoundTripCheck(string text, CSharpParseOptions
previousScriptCompilation: previous,
returnType: returnType,
globalsType: hostObjectType);
CompilationExtensions.ValidateIOperations(createCompilationLambda);
return createCompilationLambda();
}
private static ImmutableArray<MetadataReference> s_scriptRefs = ImmutableArray.Create(MscorlibRef_v4_0_30316_17626);
......@@ -566,7 +573,7 @@ public static SyntaxTree ParseWithRoundTripCheck(string text, CSharpParseOptions
Type returnType = null,
Type hostObjectType = null)
{
return CSharpCompilation.CreateScriptCompilation(
Func<CSharpCompilation> createCompilationLambda = () => CSharpCompilation.CreateScriptCompilation(
GetUniqueName(),
references: (references != null) ? s_scriptRefs.Concat(references) : s_scriptRefs,
options: options,
......@@ -574,6 +581,8 @@ public static SyntaxTree ParseWithRoundTripCheck(string text, CSharpParseOptions
previousScriptCompilation: previous,
returnType: returnType,
globalsType: hostObjectType);
CompilationExtensions.ValidateIOperations(createCompilationLambda);
return createCompilationLambda();
}
public CompilationVerifier CompileWithCustomILSource(string cSharpSource, string ilSource, Action<CSharpCompilation> compilationVerifier = null, bool importInternals = true, string expectedOutput = null)
......
' Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
' 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 System.Collections.Immutable
Imports System.Globalization
......@@ -34,13 +34,18 @@ Friend Module CompilationUtils
options = options.WithConcurrentBuild(False)
End If
Return VisualBasicCompilation.Create(
If(assemblyName, GetUniqueName()),
sourceTrees,
references,
options)
Dim createCompilationLambda = Function()
Return VisualBasicCompilation.Create(
If(assemblyName, GetUniqueName()),
sourceTrees,
references,
options)
End Function
CompilationExtensions.ValidateIOperations(createCompilationLambda)
Return createCompilationLambda()
End Function
Public Function CreateCompilation(sources As IEnumerable(Of String),
Optional references As IEnumerable(Of MetadataReference) = Nothing,
Optional options As VisualBasicCompilationOptions = Nothing,
......@@ -67,12 +72,12 @@ Friend Module CompilationUtils
Dim metadataReferences = If(references Is Nothing, {MscorlibRef}, {MscorlibRef}.Concat(references))
assemblyName = If(assemblyName, GetUniqueName())
#If Test_IOperation_Interface Then
Dim compilationForOperationWalking = VisualBasicCompilation.Create(assemblyName, sourceTrees, metadataReferences, options)
WalkOperationTrees(compilationForOperationWalking)
#End If
Dim createCompilationLambda = Function()
Return VisualBasicCompilation.Create(assemblyName, sourceTrees, metadataReferences, options)
End Function
Return VisualBasicCompilation.Create(assemblyName, sourceTrees, metadataReferences, options)
CompilationExtensions.ValidateIOperations(createCompilationLambda)
Return createCompilationLambda()
End Function
Public Function CreateCompilationWithMscorlib(sources As IEnumerable(Of String),
......@@ -98,29 +103,46 @@ Friend Module CompilationUtils
Optional options As VisualBasicCompilationOptions = Nothing,
Optional assemblyName As String = Nothing) As VisualBasicCompilation
Dim additionalRefs = {MscorlibRef_v4_0_30316_17626}
Return VisualBasicCompilation.Create(If(assemblyName, GetUniqueName()), sourceTrees, If(references Is Nothing, additionalRefs, additionalRefs.Concat(references)), options)
Dim createCompilationLambda = Function()
Return VisualBasicCompilation.Create(If(assemblyName, GetUniqueName()), sourceTrees, If(references Is Nothing, additionalRefs, additionalRefs.Concat(references)), options)
End Function
CompilationExtensions.ValidateIOperations(createCompilationLambda)
Return createCompilationLambda()
End Function
Public Function CreateCompilationWithMscorlib45(source As String,
Optional references As IEnumerable(Of MetadataReference) = Nothing,
Optional options As VisualBasicCompilationOptions = Nothing,
Optional assemblyName As String = Nothing,
Optional parseOptions As VisualBasicParseOptions = Nothing) As VisualBasicCompilation
Dim additionalRefs = {MscorlibRef_v4_0_30316_17626}
Return VisualBasicCompilation.Create(If(assemblyName, GetUniqueName()), {Parse(source, parseOptions)}, If(references Is Nothing, additionalRefs, additionalRefs.Concat(references)), options)
Dim createCompilationLambda = Function()
Return VisualBasicCompilation.Create(If(assemblyName, GetUniqueName()), {Parse(source, parseOptions)}, If(references Is Nothing, additionalRefs, additionalRefs.Concat(references)), options)
End Function
CompilationExtensions.ValidateIOperations(createCompilationLambda)
Return createCompilationLambda()
End Function
Public Function CreateCompilationWithMscorlib45AndVBRuntime(sourceTrees As IEnumerable(Of SyntaxTree),
Optional references As IEnumerable(Of MetadataReference) = Nothing,
Optional options As VisualBasicCompilationOptions = Nothing) As VisualBasicCompilation
Dim additionalRefs = {MscorlibRef_v4_0_30316_17626, MsvbRef_v4_0_30319_17929}
Return VisualBasicCompilation.Create(GetUniqueName(), sourceTrees, If(references Is Nothing, additionalRefs, additionalRefs.Concat(references)), options)
Dim createCompilationLambda = Function()
Return VisualBasicCompilation.Create(GetUniqueName(), sourceTrees, If(references Is Nothing, additionalRefs, additionalRefs.Concat(references)), options)
End Function
CompilationExtensions.ValidateIOperations(createCompilationLambda)
Return createCompilationLambda()
End Function
Public Function CreateCompilationWithMscorlib(sourceTree As SyntaxTree,
Optional references As IEnumerable(Of MetadataReference) = Nothing,
Optional options As VisualBasicCompilationOptions = Nothing) As VisualBasicCompilation
Return VisualBasicCompilation.Create(GetUniqueName(), {sourceTree}, If(references Is Nothing, {MscorlibRef}, {MscorlibRef}.Concat(references)), options)
Dim createCompilationLambda = Function()
Return VisualBasicCompilation.Create(GetUniqueName(), {sourceTree}, If(references Is Nothing, {MscorlibRef}, {MscorlibRef}.Concat(references)), options)
End Function
CompilationExtensions.ValidateIOperations(createCompilationLambda)
Return createCompilationLambda()
End Function
......@@ -308,13 +330,11 @@ Friend Module CompilationUtils
options = options.WithConcurrentBuild(False)
End If
End If
#If Test_IOperation_Interface Then
Dim compilationForOperationWalking = VisualBasicCompilation.Create(If(assemblyName, GetUniqueName()), sourceTrees, references, options)
WalkOperationTrees(compilationForOperationWalking)
#End If
Return VisualBasicCompilation.Create(If(assemblyName, GetUniqueName()), sourceTrees, references, options)
Dim createCompilationLambda = Function()
Return VisualBasicCompilation.Create(If(assemblyName, GetUniqueName()), sourceTrees, references, options)
End Function
CompilationExtensions.ValidateIOperations(createCompilationLambda)
Return createCompilationLambda()
End Function
''' <param name="sources">The sources compile according to the following schema
......@@ -337,34 +357,17 @@ Friend Module CompilationUtils
Optional options As VisualBasicCompilationOptions = Nothing) As VisualBasicCompilation
Dim trees = If(sources Is Nothing, Nothing, sources.Select(AddressOf VisualBasicSyntaxTree.ParseText).ToArray())
Dim c = VisualBasicCompilation.Create(identity.Name, trees, references, options)
Dim createCompilationLambda = Function()
Return VisualBasicCompilation.Create(identity.Name, trees, references, options)
End Function
CompilationExtensions.ValidateIOperations(createCompilationLambda)
Dim c = createCompilationLambda()
Assert.NotNull(c.Assembly) ' force creation of SourceAssemblySymbol
DirectCast(c.Assembly, SourceAssemblySymbol).m_lazyIdentity = identity
Return c
End Function
#If Test_IOperation_Interface Then
Private Sub WalkOperationTrees(compilation As VisualBasicCompilation)
Dim operationWalker = TestOperationWalker.GetInstance()
For Each tree In compilation.SyntaxTrees
Dim semanticModel = compilation.GetSemanticModel(tree)
Dim root = tree.GetRoot()
' need to check other operation root as well (property, etc)
For Each methodNode As MethodBlockBaseSyntax In root.DescendantNodesAndSelf().OfType(Of MethodBlockBaseSyntax)
' Have to iterate through statements because a bug:
' https://github.com/dotnet/roslyn/issues/8919
For Each statement In methodNode.Statements
Dim operation = semanticModel.GetOperation(statement)
operationWalker.Visit(operation)
Next
Next
Next
End Sub
#End If
''' <summary>
'''
''' </summary>
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
// 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.Generic;
......@@ -251,5 +251,27 @@ internal static bool CanHaveExecutableCodeBlock(ISymbol symbol)
}
}
public static void ValidateIOperations(Func<Compilation> createCompilation)
{
#if TEST_IOPERATION_INTERFACE
var compilation = createCompilation();
foreach (var tree in compilation.SyntaxTrees)
{
var semanticModel = compilation.GetSemanticModel(tree);
var root = tree.GetRoot();
foreach (var node in root.DescendantNodesAndSelf())
{
var operation = semanticModel.GetOperationInternal(node);
if (operation != null)
{
// Make sure IOperation returned by GetOperation(syntaxnode) will have same syntaxnode as the given syntaxnode(IOperation.Syntax == syntaxnode).
Assert.True(node == operation.Syntax, $"Expected : {node} - Actual : {operation.Syntax}");
}
}
}
#endif
}
}
}
......@@ -23,6 +23,9 @@
</ItemGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'" />
<PropertyGroup Condition="'$(TestIOperationInterface)' == 'true'">
<DefineConstants>$(DefineConstants);TEST_IOPERATION_INTERFACE</DefineConstants>
</PropertyGroup>
<ItemGroup>
<InternalsVisibleToTest Include="Roslyn.Test.Utilities.CoreClr" />
<InternalsVisibleToTest Include="Roslyn.Test.Utilities.Desktop" />
......
......@@ -6,7 +6,7 @@ This is a tool to validate the state of our solutions, project files and other b
> BuildBoss.exe <solution / project / targets path / build log paths>
```
This tool is run on every CI job against our important solution files: [Roslyn.sln](https://github.com/dotnet/roslyn/blob/master/Roslyn.sln), [CrossPlatform.sln](https://github.com/dotnet/roslyn/blob/master/CrossPlatform.sln) and [Samples.sln)(https://github.com/dotnet/roslyn/blob/master/src/Samples/Samples.sln).
This tool is run on every CI job against our important solution files: [Roslyn.sln](https://github.com/dotnet/roslyn/blob/master/Roslyn.sln), [CrossPlatform.sln](https://github.com/dotnet/roslyn/blob/master/CrossPlatform.sln) and [Samples.sln](https://github.com/dotnet/roslyn/blob/master/src/Samples/Samples.sln).
Violations reported are important to fix as they represent correctness issues in our build. Many of the properties verified represent problems that otherwise won't be verified at check in time.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册