未验证 提交 2c7eecb3 编写于 作者: C Charles Stoner 提交者: GitHub

Merge pull request #23876 from dotnet/merges/master-to-features/compiler-20171220-080027

Merge master to features/compiler
......@@ -473,7 +473,7 @@ private static bool IsSafeForReordering(BoundExpression expression, RefKind kind
}
// Step three: Now fill in the optional arguments.
InsertMissingOptionalArguments(syntax, optionalParametersMethod.Parameters, actualArguments, enableCallerInfo);
InsertMissingOptionalArguments(syntax, optionalParametersMethod.Parameters, actualArguments, refKinds, enableCallerInfo);
if (isComReceiver)
{
......@@ -554,7 +554,9 @@ private static ImmutableArray<RefKind> GetEffectiveArgumentRefKinds(ImmutableArr
// Either the methodOrIndexer is a property, in which case the method used
// for optional parameters is an accessor of that property (or an overridden
// property), or the methodOrIndexer is used for optional parameters directly.
Debug.Assert(((methodOrIndexer.Kind == SymbolKind.Property) && optionalParametersMethod.IsAccessor()) ||
Debug.Assert(((methodOrIndexer.Kind == SymbolKind.Property) &&
(optionalParametersMethod.IsAccessor() ||
((PropertySymbol)methodOrIndexer).MustCallMethodsDirectly)) || // This condition is a temporary workaround for https://github.com/dotnet/roslyn/issues/23852
(object)methodOrIndexer == optionalParametersMethod);
// We need to do a fancy rewrite under the following circumstances:
......@@ -1070,16 +1072,26 @@ private static BoundExpression MakeLiteral(SyntaxNode syntax, ConstantValue cons
private void InsertMissingOptionalArguments(SyntaxNode syntax,
ImmutableArray<ParameterSymbol> parameters,
BoundExpression[] arguments,
ArrayBuilder<RefKind> refKinds,
ThreeState enableCallerInfo = ThreeState.Unknown)
{
Debug.Assert(refKinds.Count == arguments.Length);
for (int p = 0; p < arguments.Length; ++p)
{
if (arguments[p] == null)
{
ParameterSymbol parameter = parameters[p];
Debug.Assert(parameter.IsOptional);
arguments[p] = GetDefaultParameterValue(syntax, parameter, enableCallerInfo);
Debug.Assert(arguments[p].Type == parameter.Type);
if (parameters[p].RefKind == RefKind.In)
{
Debug.Assert(refKinds[p] == RefKind.None);
refKinds[p] = RefKind.In;
}
}
}
}
......
......@@ -296,7 +296,7 @@ private BoundIndexerAccess TransformIndexerAccess(BoundIndexerAccess indexerAcce
// Step three: Now fill in the optional arguments. (Dev11 uses the getter for optional arguments in
// compound assignments, but for deconstructions we use the setter if the getter is missing.)
var accessor = indexer.GetOwnOrInheritedGetMethod() ?? indexer.GetOwnOrInheritedSetMethod();
InsertMissingOptionalArguments(syntax, accessor.Parameters, actualArguments);
InsertMissingOptionalArguments(syntax, accessor.Parameters, actualArguments, refKinds);
// For a call, step four would be to optimize away some of the temps. However, we need them all to prevent
// duplicate side-effects, so we'll skip that step.
......
......@@ -422,7 +422,7 @@ private void SerializeMethod(MethodInfo methodInfo, StringBuilder builder, int m
/// a maximum number of local functions, and a maximum scope depth to decide the
/// limits of the combinations.
/// </summary>
[Fact]
[NoIOperationValidationFact]
public void AllCaptureTests()
{
var methods = MakeAllMethods().ToList();
......
......@@ -5007,7 +5007,8 @@ .maxstack 2
");
}
[Fact, WorkItem(5395, "https://github.com/dotnet/roslyn/issues/5395")]
[NoIOperationValidationFact]
[WorkItem(5395, "https://github.com/dotnet/roslyn/issues/5395")]
public void EmitSequenceOfBinaryExpressions_01()
{
var source =
......@@ -5066,7 +5067,8 @@ private static string BuildSequenceOfBinaryExpressions_01(int count = 4096)
return builder.ToString();
}
[Fact, WorkItem(5395, "https://github.com/dotnet/roslyn/issues/5395")]
[NoIOperationValidationFact]
[WorkItem(5395, "https://github.com/dotnet/roslyn/issues/5395")]
public void EmitSequenceOfBinaryExpressions_02()
{
var source =
......@@ -5094,7 +5096,7 @@ public static double Calculate(long[] f)
var result = CompileAndVerify(source, options: TestOptions.ReleaseExe, expectedOutput: "11461640193");
}
[Fact]
[NoIOperationValidationFact]
[WorkItem(6077, "https://github.com/dotnet/roslyn/issues/6077")]
[WorkItem(5395, "https://github.com/dotnet/roslyn/issues/5395")]
public void EmitSequenceOfBinaryExpressions_03()
......@@ -5155,7 +5157,8 @@ private static string BuildSequenceOfBinaryExpressions_03(int count = 8192)
return builder.ToString();
}
[Fact, WorkItem(5395, "https://github.com/dotnet/roslyn/issues/5395")]
[NoIOperationValidationFact]
[WorkItem(5395, "https://github.com/dotnet/roslyn/issues/5395")]
public void EmitSequenceOfBinaryExpressions_04()
{
var source =
......@@ -5188,7 +5191,8 @@ static void Main()
);
}
[Fact, WorkItem(5395, "https://github.com/dotnet/roslyn/issues/5395")]
[NoIOperationValidationFact]
[WorkItem(5395, "https://github.com/dotnet/roslyn/issues/5395")]
public void EmitSequenceOfBinaryExpressions_05()
{
int count = 50;
......@@ -5240,7 +5244,8 @@ public static double Calculate(double[] f)
5180801");
}
[Fact, WorkItem(5395, "https://github.com/dotnet/roslyn/issues/5395")]
[NoIOperationValidationFact]
[WorkItem(5395, "https://github.com/dotnet/roslyn/issues/5395")]
public void EmitSequenceOfBinaryExpressions_06()
{
var source =
......
......@@ -3128,7 +3128,7 @@ static void Main()
verifier.VerifyDiagnostics();
}
[Fact]
[NoIOperationValidationFact]
public void HugeTupleCreationParses()
{
StringBuilder b = new StringBuilder();
......@@ -3151,7 +3151,7 @@ static void Main()
CreateStandardCompilation(source);
}
[Fact]
[NoIOperationValidationFact]
public void HugeTupleDeclarationParses()
{
StringBuilder b = new StringBuilder();
......
......@@ -268,7 +268,7 @@ public void ModuleNameMismatch()
Diagnostic(ErrorCode.ERR_NetModuleNameMismatch).WithArguments("ModuleNameMismatch.netmodule", "ModuleNameMismatch.mod"));
}
[Fact]
[NoIOperationValidationFact]
public void CS0204_ERR_TooManyLocals()
{
var builder = new System.Text.StringBuilder();
......@@ -331,6 +331,6 @@ public static void Main ()
);
}
#endregion
#endregion
}
}
......@@ -1306,7 +1306,8 @@ public void M0()
.VerifyAnalyzerDiagnostics(new DiagnosticAnalyzer[] { new NoneOperationTestAnalyzer() }, null, null, false);
}
[Fact, WorkItem(9025, "https://github.com/dotnet/roslyn/issues/9025")]
[NoIOperationValidationFact]
[WorkItem(9025, "https://github.com/dotnet/roslyn/issues/9025")]
public void LongArithmeticExpressionCSharp()
{
Func<int, string> buildSequenceOfBinaryExpressions =
......
......@@ -7129,7 +7129,7 @@ void Test(int x)
}
}
[Fact()]
[NoIOperationValidationFact]
public void BinaryIntrinsicSymbols1()
{
BinaryOperatorKind[] operators =
......@@ -7302,7 +7302,7 @@ public void BinaryIntrinsicSymbols1()
Assert.Equal(n, nodes.Length);
}
[Fact()]
[NoIOperationValidationFact]
public void BinaryIntrinsicSymbols2()
{
BinaryOperatorKind[] operators =
......
......@@ -13,7 +13,7 @@ namespace Microsoft.CodeAnalysis.CSharp.UnitTests
public class OverloadResolutionPerfTests : CSharpTestBase
{
[WorkItem(13685, "https://github.com/dotnet/roslyn/issues/13685")]
[Fact]
[NoIOperationValidationFact]
public void Overloads()
{
const int n = 3000;
......@@ -39,7 +39,7 @@ public void Overloads()
}
[WorkItem(13685, "https://github.com/dotnet/roslyn/issues/13685")]
[Fact]
[NoIOperationValidationFact]
public void BinaryOperatorOverloads()
{
const int n = 3000;
......@@ -153,7 +153,7 @@ public void ExtensionMethodsWithLambdaAndParams()
comp.VerifyDiagnostics();
}
[Fact]
[NoIOperationValidationFact]
public void ExtensionMethodsWithLambdaAndErrors()
{
const int n = 200;
......
......@@ -2543,7 +2543,7 @@ public void MissingAssemblyResolution1()
"A -> B, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null");
}
[Fact]
[NoIOperationValidationFact]
public void MissingAssemblyResolution_Aliases()
{
// c - a -> b with alias X
......@@ -2570,7 +2570,7 @@ public class C : A
"A -> B, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null");
}
[Fact]
[NoIOperationValidationFact]
public void MissingAssemblyResolution_AliasesMerge()
{
// c - a -> "b, V1" resolved to "b, V3" with alias X
......@@ -2865,7 +2865,7 @@ public void MissingAssemblyResolution_BindingToForExplicitReference1()
/// <summary>
/// Don't try to resolve AssemblyRefs that already match explicitly specified definition.
/// </summary>
[Fact]
[NoIOperationValidationFact]
public void MissingAssemblyResolution_BindingToExplicitReference_WorseVersion()
{
// c - a -> d -> "b,v2"
......@@ -2931,7 +2931,7 @@ public void MissingAssemblyResolution_BindingToExplicitReference_WorseVersion()
/// <summary>
/// Don't try to resolve AssemblyRefs that already match explicitly specified definition.
/// </summary>
[Fact]
[NoIOperationValidationFact]
public void MissingAssemblyResolution_BindingToExplicitReference_BetterVersion()
{
// c - a -> d -> "b,v2"
......
......@@ -9,6 +9,7 @@
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.CSharp.Test.Utilities;
using Microsoft.CodeAnalysis.Text;
using Roslyn.Test.Utilities;
using Roslyn.Utilities;
using Xunit;
//test
......@@ -265,7 +266,7 @@ public public interface testiface {}";
Assert.Equal(SymbolKind.NamedType, comp.GlobalNamespace.GetMembers()[0].Kind);
}
[Fact()]
[NoIOperationValidationFact]
public void OnlyOneParse()
{
var underlyingTree = SyntaxFactory.ParseSyntaxTree(@"
......
......@@ -260,7 +260,7 @@ public void CircularDefinitionManyMembers_Implicit()
}
[WorkItem(843037, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/843037")]
[Fact]
[NoIOperationValidationFact]
public void CircularDefinitionManyMembers_Explicit()
{
// enum E { M0 = Mn + 1, M1 = M0 + 1, ..., Mn = Mn-1 + 1, }
......@@ -273,7 +273,7 @@ public void CircularDefinitionManyMembers_Explicit()
}
[WorkItem(843037, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/843037")]
[Fact]
[NoIOperationValidationFact]
public void InvertedDefinitionManyMembers_Explicit()
{
// enum E { M0 = M1 - 1, M1 = M2 - 1, ..., Mn = n, }
......
' 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.CodeGen
Imports Microsoft.CodeAnalysis.VisualBasic.Symbols
Imports Microsoft.CodeAnalysis.Test.Utilities
Imports Microsoft.CodeAnalysis.VisualBasic.Symbols
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
Imports Roslyn.Test.Utilities
Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests
......@@ -4211,6 +4212,8 @@ End Module
VerifySynthesizedStringHashMethod(compVerifier, expected:=True)
End Sub
<CompilerTrait(CompilerFeature.IOperation)>
<WorkItem(23818, "https://github.com/dotnet/roslyn/issues/23818")>
<Fact()>
Public Sub SelectCase_IfList_String_RelationalRangeClauses()
Dim compVerifier = CompileAndVerify(
......@@ -4350,6 +4353,22 @@ End Module
}
]]>)
VerifySynthesizedStringHashMethod(compVerifier, expected:=False)
Dim compilation = compVerifier.Compilation
Dim tree = compilation.SyntaxTrees.Single()
Dim node = tree.GetRoot().DescendantNodes().OfType(Of RangeCaseClauseSyntax)().First()
Assert.Equal("""6"" To ""8""", node.ToString())
compilation.VerifyOperationTree(node, expectedOperationTree:=
<![CDATA[
IRangeCaseClauseOperation (CaseKind.Range) (OperationKind.CaseClause, Type: null) (Syntax: '"6" To "8"')
Min:
null
Max:
null
]]>.Value)
End Sub
<Fact, WorkItem(651996, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/651996")>
......
......@@ -13173,7 +13173,8 @@ End Module
}]]>)
End Sub
<Fact, WorkItem(5395, "https://github.com/dotnet/roslyn/issues/5395")>
<NoIOperationValidationFact>
<WorkItem(5395, "https://github.com/dotnet/roslyn/issues/5395")>
Public Sub EmitSequenceOfBinaryExpressions_01()
Dim source =
$"
......@@ -13224,7 +13225,8 @@ End Class
Return builder.ToString()
End Function
<Fact, WorkItem(5395, "https://github.com/dotnet/roslyn/issues/5395")>
<NoIOperationValidationFact>
<WorkItem(5395, "https://github.com/dotnet/roslyn/issues/5395")>
Public Sub EmitSequenceOfBinaryExpressions_02()
Dim source =
$"
......@@ -13248,7 +13250,7 @@ End Class
CompileAndVerify(compilation, expectedOutput:="11461640193")
End Sub
<Fact>
<NoIOperationValidationFact>
<WorkItem(6077, "https://github.com/dotnet/roslyn/issues/6077")>
<WorkItem(5395, "https://github.com/dotnet/roslyn/issues/5395")>
Public Sub EmitSequenceOfBinaryExpressions_03()
......@@ -13305,7 +13307,8 @@ End Class
Return builder.ToString()
End Function
<Fact, WorkItem(5395, "https://github.com/dotnet/roslyn/issues/5395")>
<NoIOperationValidationFact>
<WorkItem(5395, "https://github.com/dotnet/roslyn/issues/5395")>
Public Sub EmitSequenceOfBinaryExpressions_04()
Dim source =
$"
......@@ -13331,7 +13334,8 @@ End Class
)
End Sub
<Fact, WorkItem(5395, "https://github.com/dotnet/roslyn/issues/5395")>
<NoIOperationValidationFact>
<WorkItem(5395, "https://github.com/dotnet/roslyn/issues/5395")>
Public Sub EmitSequenceOfBinaryExpressions_05()
Dim count As Integer = 50
Dim source =
......@@ -13376,7 +13380,8 @@ End Class
5180801")
End Sub
<Fact, WorkItem(5395, "https://github.com/dotnet/roslyn/issues/5395")>
<NoIOperationValidationFact>
<WorkItem(5395, "https://github.com/dotnet/roslyn/issues/5395")>
Public Sub EmitSequenceOfBinaryExpressions_06()
Dim source =
$"
......
......@@ -5638,7 +5638,7 @@ End Class
End Sub
<Fact>
<NoIOperationValidationFact>
Public Sub HugeTupleCreationParses()
Dim b = New StringBuilder()
......@@ -5664,7 +5664,7 @@ End Class
End Sub
<Fact>
<NoIOperationValidationFact>
Public Sub HugeTupleDeclarationParses()
Dim b = New StringBuilder()
......
......@@ -62,7 +62,7 @@ expectedOutput:="123")
End Sub
<WorkItem(679765, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/679765")>
<Fact>
<NoIOperationValidationFact>
Public Sub Bug679765()
CompileAndVerify(
<compilation>
......
......@@ -1884,7 +1884,7 @@ End Class
End Function
End Class
<Fact>
<NoIOperationValidationFact>
Public Sub MetadataConsistencyWhileEvolvingCompilation()
Dim md1 = AssemblyMetadata.CreateFromImage(CreateCompilationWithMscorlib({"Public Class C : End Class"}, options:=TestOptions.ReleaseDll).EmitToArray())
Dim md2 = AssemblyMetadata.CreateFromImage(CreateCompilationWithMscorlib({"Public Class D : End Class"}, options:=TestOptions.ReleaseDll).EmitToArray())
......
......@@ -1660,7 +1660,7 @@ End Class
Assert.True(corlib1.ReferenceManagerEquals(corlib2))
End Sub
<Fact>
<NoIOperationValidationFact>
Public Sub MissingAssemblyResolution1()
' c - a -> b
Dim bRef = CreateCompilationWithMscorlib({"Public Class B : End Class"}, options:=TestOptions.ReleaseDll, assemblyName:="B").EmitToImageReference()
......@@ -1678,11 +1678,11 @@ End Class
Assert.Equal("B", DirectCast(c.GetAssemblyOrModuleSymbol(bRef), AssemblySymbol).Name)
Resolver.VerifyResolutionAttempts(
resolver.VerifyResolutionAttempts(
"A -> B, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null")
End Sub
<Fact>
<NoIOperationValidationFact>
Public Sub MissingAssemblyResolution_WeakIdentities1()
' c - a -> "b,v1,PKT=null"
' - d -> "b,v2,PKT=null"
......@@ -1717,7 +1717,7 @@ End Class
"A -> B, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")
End Sub
<Fact>
<NoIOperationValidationFact>
Public Sub MissingAssemblyResolution_WeakIdentities2()
' c - a -> "b,v1,PKT=null"
' - d -> "b,v2,PKT=null"
......@@ -1768,7 +1768,7 @@ End Class
resolver.VerifyResolutionAttempts()
End Sub
<Fact>
<NoIOperationValidationFact>
Public Sub MissingAssemblyResolution_ActualMissing()
' c - a -> d
Dim dRef = CreateCompilationWithMscorlib({"Public Interface D : End Interface"}, options:=TestOptions.ReleaseDll, assemblyName:="D").EmitToImageReference()
......@@ -1789,7 +1789,7 @@ End Class
''' <summary>
''' Ignore assemblies returned by the resolver that don't match the reference identity.
''' </summary>
<Fact>
<NoIOperationValidationFact>
Public Sub MissingAssemblyResolution_MissingDueToResolutionMismatch()
' c - a -> b
Dim bRef = CreateCompilationWithMscorlib({"Public Interface D : End Interface"}, options:=TestOptions.ReleaseDll, assemblyName:="B").EmitToImageReference()
......@@ -1812,7 +1812,7 @@ End Class
"A -> B, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null")
End Sub
<Fact>
<NoIOperationValidationFact>
Public Sub MissingAssemblyResolution_Modules()
' c - a - d
' - module(m) - b
......@@ -1878,7 +1878,7 @@ End Class
''' <summary>
''' Don't try to resolve AssemblyRefs that already match explicitly specified definition.
''' </summary>
<Fact>
<NoIOperationValidationFact>
Public Sub MissingAssemblyResolution_BindingToExplicitReference_WorseVersion()
' c - a -> d -> "b,v2"
' e -> "b,v1"
......@@ -1918,7 +1918,7 @@ End Class
''' <summary>
''' Don't try to resolve AssemblyRefs that already match explicitly specified definition.
''' </summary>
<Fact>
<NoIOperationValidationFact>
Public Sub MissingAssemblyResolution_BindingToExplicitReference_BetterVersion()
' c - a -> d -> "b,v2"
' e -> "b,v1"
......@@ -1957,7 +1957,7 @@ End Class
"A -> E, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ce65828c82a341f2")
End Sub
<Fact>
<NoIOperationValidationFact>
Public Sub MissingAssemblyResolution_BindingToImplicitReference1()
' c - a -> d -> "b,v2"
' e -> "b,v1"
......@@ -2002,7 +2002,7 @@ End Class
"D -> B, Version=2.0.0.0, Culture=neutral, PublicKeyToken=ce65828c82a341f2")
End Sub
<Fact>
<NoIOperationValidationFact>
Public Sub MissingAssemblyResolution_BindingToImplicitReference2()
' c - a -> d -> "b,v2"
' e -> "b,v1"
......
......@@ -866,7 +866,7 @@ IBinaryOperation (BinaryOperatorKind.Concatenate, Checked) (OperationKind.Binary
]]>.Value)
End Sub
<Fact()>
<NoIOperationValidationFact>
Public Sub IntrinsicSymbols()
Dim operators() As BinaryOperatorKind =
{
......
' 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.Test.Utilities
Imports Microsoft.CodeAnalysis.Text
Imports Microsoft.CodeAnalysis.VisualBasic.Symbols
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
......@@ -1656,6 +1657,8 @@ BC30456: 'Quit' is not a member of 'GooClass'.
</errors>)
End Sub
<CompilerTrait(CompilerFeature.IOperation)>
<WorkItem(23810, "https://github.com/dotnet/roslyn/issues/23810")>
<Fact()>
Public Sub NewOnCoClassInterface_Lookup_AddRemoveHandler2()
Dim compilation = CreateCompilationWithMscorlibAndVBRuntime(
......@@ -1717,6 +1720,62 @@ End Class
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation, <errors></errors>)
Dim tree = compilation.SyntaxTrees.Single()
Dim nodes = tree.GetRoot().DescendantNodes().OfType(Of AddRemoveHandlerStatementSyntax)().ToArray()
Assert.Equal("AddHandler (((Instance1).Quit.Quit).Quit), AddressOf Quit2", nodes(0).ToString())
compilation.VerifyOperationTree(nodes(0), expectedOperationTree:=
<![CDATA[
IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null) (Syntax: 'AddHandler ... essOf Quit2')
Expression:
IEventAssignmentOperation (EventAdd) (OperationKind.EventAssignment, Type: null, IsImplicit) (Syntax: 'AddHandler ... essOf Quit2')
Event Reference:
null
Handler:
IDelegateCreationOperation (OperationKind.DelegateCreation, Type: Goo2.QuitEventHandler, IsImplicit) (Syntax: 'AddressOf Quit2')
Target:
IMethodReferenceOperation: Sub GooGooClass.Quit2() (OperationKind.MethodReference, Type: null) (Syntax: 'AddressOf Quit2')
Instance Receiver:
IInstanceReferenceOperation (OperationKind.InstanceReference, Type: GooGooClass, IsImplicit) (Syntax: 'Quit2')
]]>.Value)
Assert.Equal("RemoveHandler Instance3.Quit.Quit.Quit.Quit.Quit.Quit, AddressOf Quit2", nodes(1).ToString())
compilation.VerifyOperationTree(nodes(1), expectedOperationTree:=
<![CDATA[
IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null) (Syntax: 'RemoveHandl ... essOf Quit2')
Expression:
IEventAssignmentOperation (EventRemove) (OperationKind.EventAssignment, Type: null, IsImplicit) (Syntax: 'RemoveHandl ... essOf Quit2')
Event Reference:
IEventReferenceOperation: Event Goo2.Quit() (OperationKind.EventReference, Type: Goo2.QuitEventHandler) (Syntax: 'Instance3.Q ... t.Quit.Quit')
Instance Receiver:
IInvocationOperation (virtual Function Goo1.Quit() As Goo) (OperationKind.Invocation, Type: Goo) (Syntax: 'Instance3.Q ... t.Quit.Quit')
Instance Receiver:
IInvocationOperation (virtual Function Goo1.Quit() As Goo) (OperationKind.Invocation, Type: Goo) (Syntax: 'Instance3.Q ... t.Quit.Quit')
Instance Receiver:
IInvocationOperation (virtual Function Goo1.Quit() As Goo) (OperationKind.Invocation, Type: Goo) (Syntax: 'Instance3.Quit.Quit.Quit')
Instance Receiver:
IInvocationOperation (virtual Function Goo1.Quit() As Goo) (OperationKind.Invocation, Type: Goo) (Syntax: 'Instance3.Quit.Quit')
Instance Receiver:
IInvocationOperation (virtual Function Goo1.Quit() As Goo) (OperationKind.Invocation, Type: Goo) (Syntax: 'Instance3.Quit')
Instance Receiver:
IFieldReferenceOperation: GooGooClass.Instance3 As Goo (OperationKind.FieldReference, Type: Goo) (Syntax: 'Instance3')
Instance Receiver:
IInstanceReferenceOperation (OperationKind.InstanceReference, Type: GooGooClass, IsImplicit) (Syntax: 'Instance3')
Arguments(0)
Arguments(0)
Arguments(0)
Arguments(0)
Arguments(0)
Handler:
IDelegateCreationOperation (OperationKind.DelegateCreation, Type: Goo2.QuitEventHandler, IsImplicit) (Syntax: 'AddressOf Quit2')
Target:
IMethodReferenceOperation: Sub GooGooClass.Quit2() (OperationKind.MethodReference, Type: null) (Syntax: 'AddressOf Quit2')
Instance Receiver:
IInstanceReferenceOperation (OperationKind.InstanceReference, Type: GooGooClass, IsImplicit) (Syntax: 'Quit2')
]]>.Value)
End Sub
<WorkItem(546560, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546560")>
......
......@@ -39,6 +39,21 @@ End Class
", parseOptions:=s_parseOptions)
End Function
<Fact>
<WorkItem(23659, "https://github.com/dotnet/roslyn/issues/23659")>
Public Async Function TestMissingForObjectCreation() As Task
Await TestMissingAsync(
"
Public Class C
Public Property P As Integer
Sub M(p As Integer)
Dim f = New C With { [|.P|] = p }
End Sub
End Class
", New TestParameters(s_parseOptions))
End Function
<Fact>
Public Async Function TestInferredTupleName2() As Task
Await TestAsync(
......
......@@ -62,6 +62,9 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.UseInferredMemberName
Private Sub ReportDiagnosticsIfNeeded(fieldInitializer As NamedFieldInitializerSyntax, context As SyntaxNodeAnalysisContext,
optionSet As OptionSet, syntaxTree As SyntaxTree)
If Not fieldInitializer.Parent.Parent.IsKind(SyntaxKind.AnonymousObjectCreationExpression) Then
Return
End If
If Not optionSet.GetOption(CodeStyleOptions.PreferInferredAnonymousTypeMemberNames, context.Compilation.Language).Value OrElse
Not VisualBasicInferredMemberNameReducer.CanSimplifyNamedFieldInitializer(fieldInitializer) Then
......
......@@ -258,6 +258,17 @@ public static void ValidateIOperations(Func<Compilation> createCompilation)
#if TEST_IOPERATION_INTERFACE
var compilation = createCompilation();
var roots = ArrayBuilder<IOperation>.GetInstance();
var stopWatch = new Stopwatch();
if (!System.Diagnostics.Debugger.IsAttached)
{
stopWatch.Start();
}
void checkTimeout()
{
const int timeout = 10000;
Assert.False(stopWatch.ElapsedMilliseconds > timeout, "ValidateIOperations took too long");
}
foreach (var tree in compilation.SyntaxTrees)
{
......@@ -266,6 +277,8 @@ public static void ValidateIOperations(Func<Compilation> createCompilation)
foreach (var node in root.DescendantNodesAndSelf())
{
checkTimeout();
var operation = semanticModel.GetOperation(node);
if (operation != null)
{
......@@ -283,11 +296,14 @@ public static void ValidateIOperations(Func<Compilation> createCompilation)
}
var explictNodeMap = new Dictionary<SyntaxNode, IOperation>();
var visitor = TestOperationVisitor.GetInstance();
foreach (var root in roots)
{
foreach (var operation in root.DescendantsAndSelf())
{
checkTimeout();
if (!operation.IsImplicit)
{
try
......@@ -299,35 +315,13 @@ public static void ValidateIOperations(Func<Compilation> createCompilation)
Assert.False(true, $"Duplicate explicit node for syntax ({operation.Syntax.RawKind}): {operation.Syntax.ToString()}");
}
}
if (operation.Kind == OperationKind.Argument)
{
var argument = (IArgumentOperation)operation;
if (argument.ArgumentKind == ArgumentKind.DefaultValue)
{
Assert.True(argument.Descendants().All(n => n.IsImplicit), $"Explicit node in default argument value ({argument.Syntax.RawKind}): {argument.Syntax.ToString()}");
}
}
// Make sure that all static member references or invocations of static methods do not have implicit IInstanceReferenceOperations
// as their receivers
if (operation is IMemberReferenceOperation memberReference &&
memberReference.Member.IsStatic &&
memberReference.Instance is IInstanceReferenceOperation)
{
Assert.False(memberReference.Instance.IsImplicit, $"Implicit {nameof(IInstanceReferenceOperation)} on {operation.Syntax}");
}
else if (operation is IInvocationOperation invocation &&
invocation.TargetMethod.IsStatic &&
invocation.Instance is IInstanceReferenceOperation)
{
Assert.False(invocation.IsImplicit, $"Implicit {nameof(IInstanceReferenceOperation)} on {operation.Syntax}");
}
visitor.Visit(operation);
}
}
roots.Free();
stopWatch.Stop();
#endif
}
}
......
// 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 Xunit;
namespace Roslyn.Test.Utilities
{
public class NoIOperationValidationFactAttribute : FactAttribute
{
public NoIOperationValidationFactAttribute()
{
#if TEST_IOPERATION_INTERFACE
Skip = "TEST_IOPERATION_INTERFACE is set";
#endif
}
}
}
......@@ -17,7 +17,8 @@ $ErrorActionPreference="Stop"
try {
. (Join-Path $PSScriptRoot "..\..\..\build\scripts\build-utils.ps1")
$msbuild, $msbuildDir = Ensure-MSBuildAndDir -msbuildDir $msbuildDir
$msbuild = Ensure-MSBuild
if ($blobFeedUrl -eq "") {
Write-Host "Need a value for -blobFeedUrl"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册