Moved GetCSharp/VBConversion to GetConversion, into CSharp/VBExtensions class.

上级 f00bd830
......@@ -7,9 +7,8 @@
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.CSharp.Symbols;
using Roslyn.Utilities;
using System.ComponentModel;
using Microsoft.CodeAnalysis.Syntax;
using Microsoft.CodeAnalysis.Semantics;
namespace Microsoft.CodeAnalysis
{
......@@ -686,6 +685,27 @@ public static Conversion GetConversion(this SemanticModel semanticModel, SyntaxN
}
}
/// <summary>
/// Gets the underlying <see cref="Conversion"/> information from this <see cref="IConversionExpression"/>. This
/// <see cref="IConversionExpression"/> must have been created from CSharp code.
/// </summary>
/// <param name="conversionExpression">The conversion expression to get original info from.</param>
/// <returns>The underlying <see cref="Conversion"/>.</returns>
/// <exception cref="InvalidCastException">If the <see cref="IConversionExpression"/> was not created from CSharp code.</exception>
public static Conversion GetConversion(this IConversionExpression conversionExpression)
{
if (conversionExpression is BaseCSharpConversionExpression csharpConversionExpression)
{
return csharpConversionExpression.ConversionInternal;
}
else
{
throw new ArgumentException(string.Format(CSharpResources.IConversionExpressionIsNotCSharpConversion,
nameof(IConversionExpression)),
nameof(conversionExpression));
}
}
public static Conversion GetSpeculativeConversion(this SemanticModel semanticModel, int position, ExpressionSyntax expression, SpeculativeBindingOption bindingOption)
{
var csmodel = semanticModel as CSharpSemanticModel;
......
......@@ -42,28 +42,4 @@ internal sealed partial class LazyCSharpConversionExpression : BaseCSharpConvers
public override IOperation OperandImpl => _operand.Value;
}
public static class IConversionExpressionExtensions
{
/// <summary>
/// Gets the underlying <see cref="Conversion"/> information from this <see cref="IConversionExpression"/>. This
/// <see cref="IConversionExpression"/> must have been created from CSharp code.
/// </summary>
/// <param name="conversionExpression">The conversion expression to get original info from.</param>
/// <returns>The underlying <see cref="Conversion"/>.</returns>
/// <exception cref="InvalidCastException">If the <see cref="IConversionExpression"/> was not created from CSharp code.</exception>
public static Conversion GetCSharpConversion(this IConversionExpression conversionExpression)
{
if (conversionExpression is BaseCSharpConversionExpression csharpConversionExpression)
{
return csharpConversionExpression.ConversionInternal;
}
else
{
throw new ArgumentException(string.Format(CSharpResources.IConversionExpressionIsNotCSharpConversion,
nameof(IConversionExpression)),
nameof(conversionExpression));
}
}
}
}
......@@ -10,7 +10,7 @@ internal class CSharpOperationCloner : OperationCloner
public override IOperation VisitConversionExpression(IConversionExpression operation, object argument)
{
return new CSharpConversionExpression(Visit(operation.Operand), operation.GetCSharpConversion(), operation.IsExplicitInCode, operation.IsTryCast, operation.IsChecked, ((Operation)operation).SemanticModel, operation.Syntax, operation.Type, operation.ConstantValue);
return new CSharpConversionExpression(Visit(operation.Operand), operation.GetConversion(), operation.IsExplicitInCode, operation.IsTryCast, operation.IsChecked, ((Operation)operation).SemanticModel, operation.Syntax, operation.Type, operation.ConstantValue);
}
}
}
Microsoft.CodeAnalysis.CSharp.Conversion.ToCommonConversion() -> Microsoft.CodeAnalysis.Semantics.CommonConversion
Microsoft.CodeAnalysis.CSharp.IConversionExpressionExtensions
Microsoft.CodeAnalysis.CSharp.LanguageVersion.CSharp7_2 = 702 -> Microsoft.CodeAnalysis.CSharp.LanguageVersion
static Microsoft.CodeAnalysis.CSharp.IConversionExpressionExtensions.GetCSharpConversion(this Microsoft.CodeAnalysis.Semantics.IConversionExpression conversionExpression) -> Microsoft.CodeAnalysis.CSharp.Conversion
\ No newline at end of file
static Microsoft.CodeAnalysis.CSharp.CSharpExtensions.GetConversion(this Microsoft.CodeAnalysis.Semantics.IConversionExpression conversionExpression) -> Microsoft.CodeAnalysis.CSharp.Conversion
\ No newline at end of file
......@@ -49,24 +49,4 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Get
End Property
End Class
Public Module IConversionExpressionExtensions
''' <summary>
''' Gets the underlying <see cref="Conversion"/> information from an <see cref="IConversionExpression"/> that was created from Visual Basic code.
''' </summary>
''' <param name="conversionExpression">The conversion expression to get original info from.</param>
''' <returns>The underlying <see cref="Conversion"/>.</returns>
''' <exception cref="InvalidCastException">If the <see cref="IConversionExpression"/> was not created from Visual Basic code.</exception>
<Extension>
Public Function GetVisualBasicConversion(conversionExpression As IConversionExpression) As Conversion
Dim basicConversionExpression = TryCast(conversionExpression, BaseVisualBasicConversionExpression)
If basicConversionExpression IsNot Nothing Then
Return basicConversionExpression.ConversionInternal
Else
Throw New ArgumentException(String.Format(VBResources.IConversionExpressionIsNotVisualBasicConversion,
NameOf(IConversionExpression)),
NameOf(conversionExpression))
End If
End Function
End Module
End Namespace
......@@ -8,7 +8,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Public Shared Property Instance As OperationCloner = New VisualBasicOperationCloner()
Public Overrides Function VisitConversionExpression(operation As IConversionExpression, argument As Object) As IOperation
Return New VisualBasicConversionExpression(Visit(operation.Operand), operation.GetVisualBasicConversion(), operation.IsExplicitInCode, operation.IsTryCast, operation.IsChecked, DirectCast(operation, Operation).SemanticModel, operation.Syntax, operation.Type, operation.ConstantValue)
Return New VisualBasicConversionExpression(Visit(operation.Operand), operation.GetConversion(), operation.IsExplicitInCode, operation.IsTryCast, operation.IsChecked, DirectCast(operation, Operation).SemanticModel, operation.Syntax, operation.Type, operation.ConstantValue)
End Function
End Class
End Namespace
Microsoft.CodeAnalysis.VisualBasic.Conversion.ToCommonConversion() -> Microsoft.CodeAnalysis.Semantics.CommonConversion
Microsoft.CodeAnalysis.VisualBasic.IConversionExpressionExtensions
Microsoft.CodeAnalysis.VisualBasic.IConversionExpressionExtensions.GetVisualBasicConversion(conversionExpression As Microsoft.CodeAnalysis.Semantics.IConversionExpression) -> Microsoft.CodeAnalysis.VisualBasic.Conversion
Microsoft.CodeAnalysis.VisualBasic.VisualBasicExtensions.GetConversion(conversionExpression As Microsoft.CodeAnalysis.Semantics.IConversionExpression) -> Microsoft.CodeAnalysis.VisualBasic.Conversion
Microsoft.CodeAnalysis.VisualBasic.LanguageVersion.VisualBasic15_5 = 1505 -> Microsoft.CodeAnalysis.VisualBasic.LanguageVersion
\ No newline at end of file
......@@ -7,6 +7,7 @@ Imports System.IO
Imports System.Runtime.CompilerServices
Imports System.Runtime.InteropServices
Imports System.Threading
Imports Microsoft.CodeAnalysis.Semantics
Imports Microsoft.CodeAnalysis.Syntax
Imports Microsoft.CodeAnalysis.VisualBasic
Imports Microsoft.CodeAnalysis.VisualBasic.Symbols
......@@ -1360,6 +1361,24 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End If
End Function
''' <summary>
''' Gets the underlying <see cref="Conversion"/> information from an <see cref="IConversionExpression"/> that was created from Visual Basic code.
''' </summary>
''' <param name="conversionExpression">The conversion expression to get original info from.</param>
''' <returns>The underlying <see cref="Conversion"/>.</returns>
''' <exception cref="InvalidCastException">If the <see cref="IConversionExpression"/> was not created from Visual Basic code.</exception>
<Extension>
Public Function GetConversion(conversionExpression As IConversionExpression) As Conversion
Dim basicConversionExpression = TryCast(conversionExpression, BaseVisualBasicConversionExpression)
If basicConversionExpression IsNot Nothing Then
Return basicConversionExpression.ConversionInternal
Else
Throw New ArgumentException(String.Format(VBResources.IConversionExpressionIsNotVisualBasicConversion,
NameOf(IConversionExpression)),
NameOf(conversionExpression))
End If
End Function
<Extension>
Public Function GetSpeculativeConversion(semanticModel As SemanticModel, position As Integer, expression As ExpressionSyntax, bindingOption As SpeculativeBindingOption) As Conversion
Dim vbmodel = TryCast(semanticModel, VBSemanticModel)
......
......@@ -355,10 +355,10 @@ public override void VisitConversionExpression(IConversionExpression operation)
switch (operation.Language)
{
case LanguageNames.CSharp:
CSharp.Conversion csharpConversion = operation.GetCSharpConversion();
CSharp.Conversion csharpConversion = CSharp.CSharpExtensions.GetConversion(operation);
break;
case LanguageNames.VisualBasic:
VisualBasic.Conversion visualBasicConversion = operation.GetVisualBasicConversion();
VisualBasic.Conversion visualBasicConversion = VisualBasic.VisualBasicExtensions.GetConversion(operation);
break;
default:
Debug.Fail($"Language {operation.Language} is unknown!");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册