From 0c576cb508ddf747e6861cb5bd69530ab03c19a8 Mon Sep 17 00:00:00 2001 From: Jared Parsons Date: Fri, 15 Feb 2019 16:57:34 -0800 Subject: [PATCH] Respond to PR feedback --- .../CSharp/Portable/Binder/Binder_Symbols.cs | 23 ++++--- .../OverloadResolution/OverloadResolution.cs | 2 +- .../Portable/Symbols/ConstraintsHelper.cs | 20 +++--- .../Semantics/NullableReferenceTypesTests.cs | 69 +++++++++++++++++-- 4 files changed, 88 insertions(+), 26 deletions(-) diff --git a/src/Compilers/CSharp/Portable/Binder/Binder_Symbols.cs b/src/Compilers/CSharp/Portable/Binder/Binder_Symbols.cs index 50993d31aaf..d71d9e05286 100644 --- a/src/Compilers/CSharp/Portable/Binder/Binder_Symbols.cs +++ b/src/Compilers/CSharp/Portable/Binder/Binder_Symbols.cs @@ -589,18 +589,19 @@ private TypeSymbol BindTupleType(TupleTypeSyntax syntax, DiagnosticBag diagnosti throw ExceptionUtilities.UnexpectedValue(typesArray.Length); } + bool includeNullability = Compilation.IsFeatureEnabled(MessageID.IDS_FeatureNullableReferenceTypes); return TupleTypeSymbol.Create(syntax.Location, - typesArray, - locationsArray, - elementNames == null ? - default(ImmutableArray) : - elementNames.ToImmutableAndFree(), - this.Compilation, - this.ShouldCheckConstraints, - includeNullability: this.ShouldCheckConstraints, - errorPositions: default(ImmutableArray), - syntax: syntax, - diagnostics: diagnostics); + typesArray, + locationsArray, + elementNames == null ? + default(ImmutableArray) : + elementNames.ToImmutableAndFree(), + this.Compilation, + this.ShouldCheckConstraints, + includeNullability: this.ShouldCheckConstraints && includeNullability, + errorPositions: default(ImmutableArray), + syntax: syntax, + diagnostics: diagnostics); } private static void CollectTupleFieldMemberName(string name, int elementIndex, int tupleSize, ref ArrayBuilder elementNames) diff --git a/src/Compilers/CSharp/Portable/Binder/Semantics/OverloadResolution/OverloadResolution.cs b/src/Compilers/CSharp/Portable/Binder/Semantics/OverloadResolution/OverloadResolution.cs index 1fc80b4fea9..08c4462a85d 100644 --- a/src/Compilers/CSharp/Portable/Binder/Semantics/OverloadResolution/OverloadResolution.cs +++ b/src/Compilers/CSharp/Portable/Binder/Semantics/OverloadResolution/OverloadResolution.cs @@ -387,7 +387,7 @@ private bool FailsConstraintChecks(MethodSymbol method, out ArrayBuilder builder, DiagnosticBag bag) + void populateDiagnosticsAndClear(ArrayBuilder builder, DiagnosticBag bag) { if (bag is null) { + builder.Clear(); return; } @@ -582,6 +580,8 @@ void populateDiagnostics(ArrayBuilder builder, Diag var location = ordinal == TupleTypeSymbol.RestIndex ? typeSyntax.Location : elementLocations[ordinal + offset]; bag.Add(new CSDiagnostic(pair.DiagnosticInfo, location)); } + + builder.Clear(); } } @@ -744,7 +744,7 @@ private static bool HasDuplicateInterfaces(NamedTypeSymbol type, ConsList.GetInstance(); ArrayBuilder useSiteDiagnosticsBuilder = null; - var result = CheckMethodConstraints(method, conversions, includeNullability: false, currentCompilation, diagnosticsBuilder, nullabilityBuilderOpt: null, ref useSiteDiagnosticsBuilder); + var result = CheckMethodConstraints(method, conversions, includeNullability: false, currentCompilation, diagnosticsBuilder, nullabilityDiagnosticsBuilderOpt: null, ref useSiteDiagnosticsBuilder); if (useSiteDiagnosticsBuilder != null) { @@ -775,7 +775,7 @@ private static bool HasDuplicateInterfaces(NamedTypeSymbol type, ConsList.GetInstance(); ArrayBuilder useSiteDiagnosticsBuilder = null; - var result = CheckMethodConstraints(method, conversions, includeNullability: false, currentCompilation, diagnosticsBuilder, nullabilityBuilderOpt: null, ref useSiteDiagnosticsBuilder); + var result = CheckMethodConstraints(method, conversions, includeNullability: false, currentCompilation, diagnosticsBuilder, nullabilityDiagnosticsBuilderOpt: null, ref useSiteDiagnosticsBuilder); if (useSiteDiagnosticsBuilder != null) { @@ -819,7 +819,7 @@ private static bool HasDuplicateInterfaces(NamedTypeSymbol type, ConsList diagnosticsBuilder, - ArrayBuilder nullabilityBuilderOpt, + ArrayBuilder nullabilityDiagnosticsBuilderOpt, ref ArrayBuilder useSiteDiagnosticsBuilder, BitVector skipParameters = default(BitVector)) { @@ -832,7 +832,7 @@ private static bool HasDuplicateInterfaces(NamedTypeSymbol type, ConsList