Skip to content
Permalink
Browse files

Update the stub API to remove Nullability and replace with NullableAn…

…notation and NullableFlowState, and update the

the rewriter to use that instead of the Nullability enum.
  • Loading branch information...
333fred committed Mar 5, 2019
1 parent 37ade50 commit a50702ac02f5f8c2ad8bc8084769cbc74513a343
Showing with 674 additions and 621 deletions.
  1. +24 −18 Compilers.slnf
  2. +28 −13 src/Compilers/CSharp/Portable/BoundTree/BoundExpression.cs
  3. +54 −32 src/Compilers/CSharp/Portable/BoundTree/BoundNode.cs
  4. +1 −1 src/Compilers/CSharp/Portable/Compilation/TypeInfo.cs
  5. +333 −333 src/Compilers/CSharp/Portable/Generated/BoundNodes.xml.Generated.cs
  6. +4 −4 src/Compilers/CSharp/Portable/PublicAPI.Unshipped.txt
  7. +5 −5 src/Compilers/CSharp/Portable/SymbolDisplay/SymbolDisplay.cs
  8. +3 −19 src/Compilers/CSharp/Portable/SymbolDisplay/SymbolDisplayVisitor.cs
  9. +2 −2 src/Compilers/CSharp/Portable/Symbols/ArrayTypeSymbol.cs
  10. +1 −1 src/Compilers/CSharp/Portable/Symbols/DiscardSymbol.cs
  11. +1 −1 src/Compilers/CSharp/Portable/Symbols/EventSymbol.cs
  12. +1 −1 src/Compilers/CSharp/Portable/Symbols/FieldSymbol.cs
  13. +1 −1 src/Compilers/CSharp/Portable/Symbols/LocalSymbol.cs
  14. +3 −3 src/Compilers/CSharp/Portable/Symbols/MethodSymbol.cs
  15. +2 −2 src/Compilers/CSharp/Portable/Symbols/NamedTypeSymbol.cs
  16. +1 −1 src/Compilers/CSharp/Portable/Symbols/ParameterSymbol.cs
  17. +2 −0 src/Compilers/CSharp/Portable/Symbols/PropertySymbol.cs
  18. +4 −4 src/Compilers/CSharp/Portable/Symbols/TypeParameterSymbol.cs
  19. +4 −4 src/Compilers/CSharp/Portable/Symbols/TypeSymbol.cs
  20. +0 −42 src/Compilers/CSharp/Portable/Symbols/TypeSymbolWithAnnotations.cs
  21. +15 −14 src/Compilers/CSharp/Test/Symbol/Compilation/TypeInfoTests.cs
  22. +10 −10 src/Compilers/Core/Portable/Compilation/TypeInfo.cs
  23. +35 −24 src/Compilers/Core/Portable/PublicAPI.Unshipped.txt
  24. +1 −1 src/Compilers/Core/Portable/Symbols/IArrayTypeSymbol.cs
  25. +1 −1 src/Compilers/Core/Portable/Symbols/IDiscardSymbol.cs
  26. +1 −1 src/Compilers/Core/Portable/Symbols/IEventSymbol.cs
  27. +1 −1 src/Compilers/Core/Portable/Symbols/IFieldSymbol.cs
  28. +1 −1 src/Compilers/Core/Portable/Symbols/ILocalSymbol.cs
  29. +3 −3 src/Compilers/Core/Portable/Symbols/IMethodSymbol.cs
  30. +1 −1 src/Compilers/Core/Portable/Symbols/INamedTypeSymbol.cs
  31. +1 −1 src/Compilers/Core/Portable/Symbols/IParameterSymbol.cs
  32. +2 −0 src/Compilers/Core/Portable/Symbols/IPropertySymbol.cs
  33. +2 −2 src/Compilers/Core/Portable/Symbols/ITypeParameterSymbol.cs
  34. +4 −4 src/Compilers/Core/Portable/Symbols/ITypeSymbol.cs
  35. +0 −14 src/Compilers/Core/Portable/Symbols/Nullability.cs
  36. +27 −0 src/Compilers/Core/Portable/Symbols/NullabilityInfo.cs
  37. +30 −0 src/Compilers/Core/Portable/Symbols/NullableEnums.cs
  38. +1 −1 src/Compilers/VisualBasic/Portable/Compilation/TypeInfo.vb
  39. +2 −2 src/Compilers/VisualBasic/Portable/Symbols/ArrayTypeSymbol.vb
  40. +2 −2 src/Compilers/VisualBasic/Portable/Symbols/EventSymbol.vb
  41. +2 −2 src/Compilers/VisualBasic/Portable/Symbols/FieldSymbol.vb
  42. +6 −6 src/Compilers/VisualBasic/Portable/Symbols/MethodSymbol.vb
  43. +2 −2 src/Compilers/VisualBasic/Portable/Symbols/NamedTypeSymbol.vb
  44. +2 −2 src/Compilers/VisualBasic/Portable/Symbols/ParameterSymbol.vb
  45. +6 −0 src/Compilers/VisualBasic/Portable/Symbols/PropertySymbol.vb
  46. +2 −2 src/Compilers/VisualBasic/Portable/Symbols/Source/LocalSymbol.vb
  47. +4 −4 src/Compilers/VisualBasic/Portable/Symbols/TypeParameterSymbol.vb
  48. +4 −4 src/Compilers/VisualBasic/Portable/Symbols/TypeSymbol.vb
  49. +1 −1 src/Features/Core/Portable/MetadataAsSource/AbstractMetadataAsSourceService.WrappedEventSymbol.cs
  50. +1 −1 src/Features/Core/Portable/MetadataAsSource/AbstractMetadataAsSourceService.WrappedFieldSymbol.cs
  51. +3 −3 src/Features/Core/Portable/MetadataAsSource/AbstractMetadataAsSourceService.WrappedMethodSymbol.cs
  52. +5 −5 ...Features/Core/Portable/MetadataAsSource/AbstractMetadataAsSourceService.WrappedNamedTypeSymbol.cs
  53. +2 −0 src/Features/Core/Portable/MetadataAsSource/AbstractMetadataAsSourceService.WrappedPropertySymbol.cs
  54. +5 −5 src/Tools/Source/CompilerGeneratorTools/Source/BoundTreeGenerator/BoundNodeClassWriter.cs
  55. +3 −3 src/Workspaces/Core/Portable/CodeGeneration/Symbols/CodeGenerationAbstractMethodSymbol.cs
  56. +1 −1 src/Workspaces/Core/Portable/CodeGeneration/Symbols/CodeGenerationAbstractNamedTypeSymbol.cs
  57. +1 −1 src/Workspaces/Core/Portable/CodeGeneration/Symbols/CodeGenerationArrayTypeSymbol.cs
  58. +1 −1 src/Workspaces/Core/Portable/CodeGeneration/Symbols/CodeGenerationEventSymbol.cs
  59. +1 −1 src/Workspaces/Core/Portable/CodeGeneration/Symbols/CodeGenerationFieldSymbol.cs
  60. +1 −1 src/Workspaces/Core/Portable/CodeGeneration/Symbols/CodeGenerationParameterSymbol.cs
  61. +1 −0 src/Workspaces/Core/Portable/CodeGeneration/Symbols/CodeGenerationPropertySymbol.cs
  62. +2 −2 src/Workspaces/Core/Portable/CodeGeneration/Symbols/CodeGenerationTypeParameterSymbol.cs
  63. +4 −4 src/Workspaces/Core/Portable/CodeGeneration/Symbols/CodeGenerationTypeSymbol.cs
@@ -2,44 +2,50 @@
"solution": {
"path": "Roslyn.sln",
"projects": [
"src\\Compilers\\Core\\CodeAnalysisTest\\Microsoft.CodeAnalysis.UnitTests.csproj",
"src\\Compilers\\Core\\Portable\\Microsoft.CodeAnalysis.csproj",
"src\\Compilers\\Server\\VBCSCompiler\\VBCSCompiler.csproj",
"src\\Compilers\\Server\\VBCSCompilerTests\\VBCSCompiler.UnitTests.csproj",
"src\\Compilers\\CSharp\\csc\\csc.csproj",
"src\\Compilers\\CSharp\\CSharpAnalyzerDriver\\CSharpAnalyzerDriver.shproj",
"src\\Compilers\\CSharp\\Portable\\Microsoft.CodeAnalysis.CSharp.csproj",
"src\\Compilers\\CSharp\\Test\\CommandLine\\Microsoft.CodeAnalysis.CSharp.CommandLine.UnitTests.csproj",
"src\\Compilers\\CSharp\\Test\\Emit\\Microsoft.CodeAnalysis.CSharp.Emit.UnitTests.csproj",
"src\\Compilers\\CSharp\\Test\\IOperation\\Microsoft.CodeAnalysis.CSharp.IOperation.UnitTests.csproj",
"src\\Compilers\\CSharp\\Test\\Semantic\\Microsoft.CodeAnalysis.CSharp.Semantic.UnitTests.csproj",
"src\\Compilers\\CSharp\\Test\\Symbol\\Microsoft.CodeAnalysis.CSharp.Symbol.UnitTests.csproj",
"src\\Compilers\\CSharp\\Test\\Syntax\\Microsoft.CodeAnalysis.CSharp.Syntax.UnitTests.csproj",
"src\\Compilers\\CSharp\\Test\\WinRT\\Microsoft.CodeAnalysis.CSharp.WinRT.UnitTests.csproj",
"src\\Compilers\\CSharp\\csc\\csc.csproj",
"src\\Compilers\\Core\\AnalyzerDriver\\AnalyzerDriver.shproj",
"src\\Compilers\\Core\\CodeAnalysisTest\\Microsoft.CodeAnalysis.UnitTests.csproj",
"src\\Compilers\\Core\\CommandLine\\CommandLine.shproj",
"src\\Compilers\\Core\\MSBuildTaskTests\\Microsoft.Build.Tasks.CodeAnalysis.UnitTests.csproj",
"src\\Compilers\\Core\\MSBuildTask\\Microsoft.Build.Tasks.CodeAnalysis.csproj",
"src\\Compilers\\Core\\Portable\\Microsoft.CodeAnalysis.csproj",
"src\\Compilers\\Extension\\Roslyn.Compilers.Extension.csproj",
"src\\Compilers\\Server\\VBCSCompilerTests\\VBCSCompiler.UnitTests.csproj",
"src\\Compilers\\Server\\VBCSCompiler\\VBCSCompiler.csproj",
"src\\Compilers\\Test\\Resources\\Core\\Microsoft.CodeAnalysis.Compiler.Test.Resources.csproj",
"src\\Compilers\\Test\\Utilities\\CSharp\\Microsoft.CodeAnalysis.CSharp.Test.Utilities.csproj",
"src\\Compilers\\Test\\Utilities\\VisualBasic\\Microsoft.CodeAnalysis.VisualBasic.Test.Utilities.vbproj",
"src\\Compilers\\VisualBasic\\BasicAnalyzerDriver\\BasicAnalyzerDriver.shproj",
"src\\Compilers\\VisualBasic\\Portable\\Microsoft.CodeAnalysis.VisualBasic.vbproj",
"src\\Compilers\\VisualBasic\\Test\\CommandLine\\Microsoft.CodeAnalysis.VisualBasic.CommandLine.UnitTests.vbproj",
"src\\Compilers\\VisualBasic\\Test\\Emit\\Microsoft.CodeAnalysis.VisualBasic.Emit.UnitTests.vbproj",
"src\\Compilers\\VisualBasic\\Test\\IOperation\\Roslyn.Compilers.VisualBasic.IOperation.UnitTests.vbproj",
"src\\Compilers\\VisualBasic\\Test\\Semantic\\Microsoft.CodeAnalysis.VisualBasic.Semantic.UnitTests.vbproj",
"src\\Compilers\\VisualBasic\\Test\\Symbol\\Microsoft.CodeAnalysis.VisualBasic.Symbol.UnitTests.vbproj",
"src\\Compilers\\VisualBasic\\Test\\Syntax\\Microsoft.CodeAnalysis.VisualBasic.Syntax.UnitTests.vbproj",
"src\\Test\\PdbUtilities\\Roslyn.Test.PdbUtilities.csproj",
"src\\Compilers\\Core\\AnalyzerDriver\\AnalyzerDriver.shproj",
"src\\Compilers\\CSharp\\Test\\WinRT\\Microsoft.CodeAnalysis.CSharp.WinRT.UnitTests.csproj",
"src\\Compilers\\Core\\MSBuildTaskTests\\Microsoft.Build.Tasks.CodeAnalysis.UnitTests.csproj",
"src\\Compilers\\VisualBasic\\vbc\\vbc.csproj",
"src\\Test\\Utilities\\Portable\\Roslyn.Test.Utilities.csproj",
"src\\Compilers\\VisualBasic\\BasicAnalyzerDriver\\BasicAnalyzerDriver.shproj",
"src\\Compilers\\CSharp\\CSharpAnalyzerDriver\\CSharpAnalyzerDriver.shproj",
"src\\Compilers\\Core\\CommandLine\\CommandLine.shproj",
"src\\Compilers\\Extension\\Roslyn.Compilers.Extension.csproj",
"src\\Dependencies\\PooledObjects\\Microsoft.CodeAnalysis.PooledObjects.shproj",
"src\\Compilers\\Core\\MSBuildTask\\Microsoft.Build.Tasks.CodeAnalysis.csproj",
"src\\NuGet\\Microsoft.Net.Compilers\\Microsoft.Net.Compilers.Package.csproj",
"src\\NuGet\\Microsoft.NETCore.Compilers\\Microsoft.NETCore.Compilers.Package.csproj",
"src\\NuGet\\Microsoft.CodeAnalysis.Compilers.Package.csproj",
"src\\NuGet\\Microsoft.CodeAnalysis.Package.csproj"
"src\\NuGet\\Microsoft.CodeAnalysis.Package.csproj",
"src\\NuGet\\Microsoft.NETCore.Compilers\\Microsoft.NETCore.Compilers.Package.csproj",
"src\\NuGet\\Microsoft.Net.Compilers\\Microsoft.Net.Compilers.Package.csproj",
"src\\Test\\PdbUtilities\\Roslyn.Test.PdbUtilities.csproj",
"src\\Test\\Utilities\\Portable\\Roslyn.Test.Utilities.csproj",
"src\\Tools\\AnalyzerRunner\\AnalyzerRunner.csproj",
"src\\Tools\\Source\\CompilerGeneratorTools\\Source\\BoundTreeGenerator\\CompilersBoundTreeGenerator.csproj",
"src\\Tools\\Source\\CompilerGeneratorTools\\Source\\CSharpErrorFactsGenerator\\CSharpErrorFactsGenerator.csproj",
"src\\Tools\\Source\\CompilerGeneratorTools\\Source\\CSharpSyntaxGenerator\\CSharpSyntaxGenerator.csproj",
"src\\Tools\\Source\\CompilerGeneratorTools\\Source\\VisualBasicErrorFactsGenerator\\VisualBasicErrorFactsGenerator.vbproj",
"src\\Tools\\Source\\CompilerGeneratorTools\\Source\\VisualBasicSyntaxGenerator\\VisualBasicSyntaxGenerator.vbproj"
]
}
}
@@ -68,10 +68,10 @@ public virtual bool SuppressVirtualCalls
}
}

public new Nullability TopLevelNullability
public virtual new NullabilityInfo TopLevelNullabilityInfo
{
get => base.TopLevelNullability;
set => base.TopLevelNullability = value;
get => base.TopLevelNullabilityInfo;
set => base.TopLevelNullabilityInfo = value;
}
}

@@ -106,7 +106,7 @@ public override Symbol ExpressionSymbol
}

/// <summary>
/// The set of method symbols from which this call's method was chosen.
/// The set of method symbols from which this call's method was chosen.
/// Only kept in the tree if the call was an error and overload resolution
/// was unable to choose a best method.
/// </summary>
@@ -197,7 +197,7 @@ public override Symbol ExpressionSymbol
}

/// <summary>
/// The set of indexer symbols from which this call's indexer was chosen.
/// The set of indexer symbols from which this call's indexer was chosen.
/// Only kept in the tree if the call was an error and overload resolution
/// was unable to choose a best indexer.
/// </summary>
@@ -289,7 +289,7 @@ public override Symbol ExpressionSymbol
}

/// <summary>
/// The set of method symbols from which this operator's method was chosen.
/// The set of method symbols from which this operator's method was chosen.
/// Only kept in the tree if the operator was an error and overload resolution
/// was unable to choose a best method.
/// </summary>
@@ -308,7 +308,7 @@ public override Symbol ExpressionSymbol
}

/// <summary>
/// The set of method symbols from which this operator's method was chosen.
/// The set of method symbols from which this operator's method was chosen.
/// Only kept in the tree if the operator was an error and overload resolution
/// was unable to choose a best method.
/// </summary>
@@ -332,7 +332,7 @@ public override Symbol ExpressionSymbol
}

/// <summary>
/// The set of method symbols from which this operator's method was chosen.
/// The set of method symbols from which this operator's method was chosen.
/// Only kept in the tree if the operator was an error and overload resolution
/// was unable to choose a best method.
/// </summary>
@@ -351,7 +351,7 @@ public override Symbol ExpressionSymbol
}

/// <summary>
/// The set of method symbols from which this operator's method was chosen.
/// The set of method symbols from which this operator's method was chosen.
/// Only kept in the tree if the operator was an error and overload resolution
/// was unable to choose a best method.
/// </summary>
@@ -370,7 +370,7 @@ public override Symbol ExpressionSymbol
}

/// <summary>
/// The set of method symbols from which this operator's method was chosen.
/// The set of method symbols from which this operator's method was chosen.
/// Only kept in the tree if the operator was an error and overload resolution
/// was unable to choose a best method.
/// </summary>
@@ -387,6 +387,13 @@ public override ConstantValue ConstantValue
{
get { return this.ConstantValueOpt; }
}

public override NullabilityInfo TopLevelNullabilityInfo
{
// PROTOTYPE(nullable-api): handle null! and lower-language versions
get => ConstantValue.IsNull ? new NullabilityInfo(NullableAnnotation.NotAnnotated, NullableFlowState.MaybeNull) : base.TopLevelNullabilityInfo;
set => base.TopLevelNullabilityInfo = value;
}
}

internal partial class BoundConversion
@@ -417,7 +424,7 @@ public override Symbol ExpressionSymbol
}

/// <summary>
/// The set of method symbols from which this conversion's method was chosen.
/// The set of method symbols from which this conversion's method was chosen.
/// Only kept in the tree if the conversion was an error and overload resolution
/// was unable to choose a best method.
/// </summary>
@@ -439,7 +446,7 @@ public override bool SuppressVirtualCalls
/// <returns></returns>
internal bool ConversionHasSideEffects()
{
// only some intrinsic conversions are side effect free
// only some intrinsic conversions are side effect free
// the only side effect of an intrinsic conversion is a throw when we fail to convert.
// and some intrinsic conversion always succeed
switch (this.ConversionKind)
@@ -454,7 +461,7 @@ internal bool ConversionHasSideEffects()
case ConversionKind.Boxing:
return false;

// unchecked numeric conversion does not throw
// unchecked numeric conversion does not throw
case ConversionKind.ExplicitNumeric:
return this.Checked;
}
@@ -536,6 +543,14 @@ public override ConstantValue ConstantValue
{
get { return this.ConstantValueOpt; }
}

public override NullabilityInfo TopLevelNullabilityInfo
{
// PROTOTYPE(nullable-api): handle default! and lower-language versions
get => Type?.IsValueType == true && !Type.IsNullableType() ? new NullabilityInfo(NullableAnnotation.NotAnnotated, NullableFlowState.NotNull) :
new NullabilityInfo(NullableAnnotation.NotAnnotated, NullableFlowState.MaybeNull);
set { }
}
}

internal partial class BoundConditionalOperator
@@ -18,24 +18,29 @@ internal abstract partial class BoundNode
public readonly SyntaxNode Syntax;

[Flags()]
private enum BoundNodeAttributes : byte
private enum BoundNodeAttributes : ushort
{
HasErrors = 1 << 0,
CompilerGenerated = 1 << 1,
TopLevelNullableUnset = 0,
TopLevelNullable = 1 << 2,
TopLevelNonNullable = 1 << 3,
TopLevelUnknown = TopLevelNullable | TopLevelNonNullable,
TopLevelNullabilityMask = TopLevelUnknown,
IsSuppressed = 1 << 2,

// Bit 3: Whether nullability has been set
// Bit 4: 1 if the node is nullable, 0 if the node is not nullable
// Bits 5 and 6: 01 if the node is not annotated, 10 if the node is annotated, 00 if the node is disabled
TopLevelNullableInfoSet = 1 << 3,
TopLevelFlowStateNullable = 1 << 4,
TopLevelNotAnnotated = 1 << 5,
TopLevelAnnotated = 1 << 6,
TopLevelDisabled = 0,
TopLevelAnnotationMask = TopLevelAnnotated | TopLevelNotAnnotated,
#if DEBUG
/// <summary>
/// Captures the fact that consumers of the node already checked the state of the WasCompilerGenerated bit.
/// Allows to assert on attempts to set WasCompilerGenerated bit after that.
/// </summary>
WasCompilerGeneratedIsChecked = 1 << 4,
WasTopLevelNullabilityChecked = 1 << 5,
WasCompilerGeneratedIsChecked = 1 << 7,
WasTopLevelNullabilityChecked = 1 << 8,
#endif
IsSuppressed = 1 << 6,
}

protected BoundNode(BoundKind kind, SyntaxNode syntax)
@@ -167,55 +172,72 @@ public void ResetCompilerGenerated(bool newCompilerGenerated)
/// <summary>
/// Top level nullability for the node. This should not be used by flow analysis.
/// </summary>
protected Nullability TopLevelNullability
protected NullabilityInfo TopLevelNullabilityInfo
{
get
{
#if DEBUG
_attributes |= BoundNodeAttributes.WasTopLevelNullabilityChecked;
#endif
switch (_attributes & BoundNodeAttributes.TopLevelNullabilityMask)
if ((_attributes & BoundNodeAttributes.TopLevelNullableInfoSet) == 0)
{
case BoundNodeAttributes.TopLevelNullable:
return Nullability.MayBeNull;

case BoundNodeAttributes.TopLevelNonNullable:
return Nullability.NotNull;
return default;
}

case BoundNodeAttributes.TopLevelUnknown:
return Nullability.Unknown;
var annotation = (_attributes & BoundNodeAttributes.TopLevelAnnotationMask) switch
{
BoundNodeAttributes.TopLevelAnnotated => NullableAnnotation.Annotated,
BoundNodeAttributes.TopLevelNotAnnotated => NullableAnnotation.NotAnnotated,
BoundNodeAttributes.TopLevelDisabled => NullableAnnotation.Unknown,
_ => throw ExceptionUtilities.UnexpectedValue(_attributes & BoundNodeAttributes.TopLevelAnnotationMask)
};

case BoundNodeAttributes.TopLevelNullableUnset:
return Nullability.NotComputed;
var flowState = (_attributes & BoundNodeAttributes.TopLevelFlowStateNullable) == 0 ? NullableFlowState.NotNull : NullableFlowState.MaybeNull;

default:
throw ExceptionUtilities.UnexpectedValue(_attributes);
}
return new NullabilityInfo(annotation, flowState);
}
set
{
#if DEBUG
Debug.Assert((_attributes & BoundNodeAttributes.WasTopLevelNullabilityChecked) == 0,
"bound node nullability should not be set after reading it");
#endif
_attributes &= ~BoundNodeAttributes.TopLevelNullabilityMask;
switch (value)
_attributes &= ~(BoundNodeAttributes.TopLevelAnnotationMask | BoundNodeAttributes.TopLevelFlowStateNullable);

switch (value.Annotation)
{
case Nullability.MayBeNull:
_attributes |= BoundNodeAttributes.TopLevelNullable;
case NullableAnnotation.Annotated:
case NullableAnnotation.Nullable:
_attributes |= BoundNodeAttributes.TopLevelAnnotated;
break;

case Nullability.NotNull:
_attributes |= BoundNodeAttributes.TopLevelNonNullable;
case NullableAnnotation.NotAnnotated:
case NullableAnnotation.NotNullable:
_attributes |= BoundNodeAttributes.TopLevelNotAnnotated;
break;

case Nullability.Unknown:
_attributes |= BoundNodeAttributes.TopLevelUnknown;
case NullableAnnotation.Unknown:
_attributes |= BoundNodeAttributes.TopLevelDisabled;
break;

default:
throw ExceptionUtilities.UnexpectedValue(value);
throw ExceptionUtilities.UnexpectedValue(value.Annotation);
}

switch (value.FlowState)
{
case NullableFlowState.MaybeNull:
_attributes |= BoundNodeAttributes.TopLevelFlowStateNullable;
break;

case NullableFlowState.NotNull:
break;

default:
throw ExceptionUtilities.UnexpectedValue(value.FlowState);
}

_attributes |= BoundNodeAttributes.TopLevelNullableInfoSet;
}
}

@@ -42,7 +42,7 @@ internal CSharpTypeInfo(TypeSymbol type, TypeSymbol convertedType, Conversion im

public static implicit operator TypeInfo(CSharpTypeInfo info)
{
return new TypeInfo(info.Type, info.ConvertedType, Nullability.NotComputed, Nullability.NotComputed);
return new TypeInfo(info.Type, info.ConvertedType, default, default);
}

public override bool Equals(object obj)
Oops, something went wrong.

0 comments on commit a50702a

Please sign in to comment.
You can’t perform that action at this time.