本文整理汇总了C#中ExpressionSyntax.WalkDownParentheses方法的典型用法代码示例。如果您正苦于以下问题:C# ExpressionSyntax.WalkDownParentheses方法的具体用法?C# ExpressionSyntax.WalkDownParentheses怎么用?C# ExpressionSyntax.WalkDownParentheses使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ExpressionSyntax
的用法示例。
在下文中一共展示了ExpressionSyntax.WalkDownParentheses方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetSymbolsOffOfDereferencedExpression
private static ImmutableArray<ISymbol> GetSymbolsOffOfDereferencedExpression(
CSharpSyntaxContext context,
ExpressionSyntax originalExpression,
CancellationToken cancellationToken)
{
var expression = originalExpression.WalkDownParentheses();
var leftHandBinding = context.SemanticModel.GetSymbolInfo(expression, cancellationToken);
var container = context.SemanticModel.GetTypeInfo(expression, cancellationToken).Type;
if (container is IPointerTypeSymbol)
{
container = ((IPointerTypeSymbol)container).PointedAtType;
}
return GetSymbolsOffOfBoundExpression(context, originalExpression, expression, leftHandBinding, container, cancellationToken);
}
示例2: GetSymbolsOffOfConditionalReceiver
private static ImmutableArray<ISymbol> GetSymbolsOffOfConditionalReceiver(
CSharpSyntaxContext context,
ExpressionSyntax originalExpression,
CancellationToken cancellationToken)
{
// Given ((T?)t)?.|, the '.' will behave as if the expression was actually ((T)t).|. More plainly,
// a member access off of a conditional receiver of nullable type binds to the unwrapped nullable
// type. This is not exposed via the binding information for the LHS, so repeat this work here.
var expression = originalExpression.WalkDownParentheses();
var leftHandBinding = context.SemanticModel.GetSymbolInfo(expression, cancellationToken);
var container = context.SemanticModel.GetTypeInfo(expression, cancellationToken).Type.RemoveNullableIfPresent();
// If the thing on the left is a type, namespace, or alias, we shouldn't show anything in
// IntelliSense.
if (leftHandBinding.GetBestOrAllSymbols().FirstOrDefault().MatchesKind(SymbolKind.NamedType, SymbolKind.Namespace, SymbolKind.Alias))
{
return ImmutableArray<ISymbol>.Empty;
}
return GetSymbolsOffOfBoundExpression(context, originalExpression, expression, leftHandBinding, container, cancellationToken);
}
示例3: GetSymbolsOffOfExpression
private static ImmutableArray<ISymbol> GetSymbolsOffOfExpression(
CSharpSyntaxContext context,
ExpressionSyntax originalExpression,
CancellationToken cancellationToken)
{
var expression = originalExpression.WalkDownParentheses();
var leftHandBinding = context.SemanticModel.GetSymbolInfo(expression, cancellationToken);
var container = context.SemanticModel.GetTypeInfo(expression, cancellationToken).Type;
var normalSymbols = GetSymbolsOffOfBoundExpression(context, originalExpression, expression, leftHandBinding, container, cancellationToken);
// Check for the Color Color case.
if (originalExpression.CanAccessInstanceAndStaticMembersOffOf(context.SemanticModel, cancellationToken))
{
var speculativeSymbolInfo = context.SemanticModel.GetSpeculativeSymbolInfo(expression.SpanStart, expression, SpeculativeBindingOption.BindAsTypeOrNamespace);
var typeMembers = GetSymbolsOffOfBoundExpression(context, originalExpression, expression, speculativeSymbolInfo, container, cancellationToken);
normalSymbols = normalSymbols.Concat(typeMembers);
}
return normalSymbols;
}
示例4: GetSymbolsOffOfConditionalReceiver
private static IEnumerable<ISymbol> GetSymbolsOffOfConditionalReceiver(
CSharpSyntaxContext context,
ExpressionSyntax originalExpression,
CancellationToken cancellationToken)
{
// Given ((T?)t)?.|, the '.' will behave as if the expression was actually ((T)t).|. More plainly,
// a member access off of a conitional receiver of nullable type binds to the unwrapped nullable
// type. This is not exposed via the binding information for the LHS, so repeat this work here.
var expression = originalExpression.WalkDownParentheses();
var leftHandBinding = context.SemanticModel.GetSymbolInfo(expression, cancellationToken);
var container = context.SemanticModel.GetTypeInfo(expression, cancellationToken).Type.RemoveNullableIfPresent();
return GetSymbolsOffOfBoundExpression(context, originalExpression, expression, leftHandBinding, container, cancellationToken);
}
示例5: IsRequiredCastForReferenceEqualityComparison
private static bool IsRequiredCastForReferenceEqualityComparison(ITypeSymbol outerType, CastExpressionSyntax castExpression, SemanticModel semanticModel, out ExpressionSyntax other)
{
if (outerType.SpecialType == SpecialType.System_Object)
{
var expression = castExpression.WalkUpParentheses();
var parentNode = expression.Parent;
if (parentNode.IsKind(SyntaxKind.EqualsExpression) || parentNode.IsKind(SyntaxKind.NotEqualsExpression))
{
// Reference comparison.
var binaryExpression = (BinaryExpressionSyntax)parentNode;
other = binaryExpression.Left == expression ?
binaryExpression.Right :
binaryExpression.Left;
// Explicit cast not required if we are comparing with type parameter with a class constraint.
var otherType = semanticModel.GetTypeInfo(other).Type;
if (otherType != null && otherType.TypeKind != TypeKind.TypeParameter)
{
return !other.WalkDownParentheses().IsKind(SyntaxKind.CastExpression);
}
}
}
other = null;
return false;
}
示例6: GetSymbolsOffOfExpression
private static IEnumerable<ISymbol> GetSymbolsOffOfExpression(
CSharpSyntaxContext context,
ExpressionSyntax originalExpression,
CancellationToken cancellationToken)
{
var expression = originalExpression.WalkDownParentheses();
var leftHandBinding = context.SemanticModel.GetSymbolInfo(expression, cancellationToken);
var container = context.SemanticModel.GetTypeInfo(expression, cancellationToken).Type;
// TODO remove this when 531549 which causes GetTypeInfo to return an error type is fixed
if (container.IsErrorType())
{
container = leftHandBinding.Symbol.GetSymbolType() as ITypeSymbol;
}
var normalSymbols = GetSymbolsOffOfBoundExpression(context, originalExpression, expression, leftHandBinding, container, cancellationToken);
// Check for the Color Color case.
if (originalExpression.CanAccessInstanceAndStaticMembersOffOf(context.SemanticModel, cancellationToken))
{
var speculativeSymbolInfo = context.SemanticModel.GetSpeculativeSymbolInfo(expression.SpanStart, expression, SpeculativeBindingOption.BindAsTypeOrNamespace);
var typeMembers = GetSymbolsOffOfBoundExpression(context, originalExpression, expression, speculativeSymbolInfo, container, cancellationToken);
normalSymbols = normalSymbols.Concat(typeMembers);
}
return normalSymbols;
}
示例7: GetInitializerExpression
protected static ExpressionSyntax GetInitializerExpression(ExpressionSyntax initializer) =>
initializer is CheckedExpressionSyntax
? ((CheckedExpressionSyntax)initializer).Expression.WalkDownParentheses()
: initializer.WalkDownParentheses();