Ejemplo n.º 1
0
        private bool TryMemberExpression(MemberAccessExpressionSyntax memberAccessExpression,
                                         IDom newItem,
                                         SemanticModel model,
                                         ref object value,
                                         ref LiteralKind literalKind,
                                         ref string constantIdentifier)
        {
            if (memberAccessExpression == null)
            {
                return(false);
            }
            literalKind = LiteralKind.MemberAccess;
            // If this is legal code, this is a constant or an enum
            var constant = model.GetConstantValue(memberAccessExpression);

            if (constant.HasValue)
            {
                constantIdentifier = memberAccessExpression.ToString();
                value = constant.Value;
            }
            else
            {
                constantIdentifier = memberAccessExpression.ToFullString();
                value = memberAccessExpression.ToFullString();
            }
            return(true);
        }
Ejemplo n.º 2
0
 private bool TryIdentifierExpression(MemberAccessExpressionSyntax identifierExpression,
                                      IDom newItem,
                                      SemanticModel model,
                                      ref object value,
                                      ref LiteralKind literalKind,
                                      ref string constantIdentifier)
 {
     if (identifierExpression == null)
     {
         return(false);
     }
     literalKind        = LiteralKind.Identifier;
     constantIdentifier = identifierExpression.ToFullString();
     value = identifierExpression.ToFullString();
     return(true);
 }
Ejemplo n.º 3
0
        // apply constant substitution

        public override SyntaxNode VisitMemberAccessExpression(MemberAccessExpressionSyntax node)
        {
            if (substitutionNames.ContainsKey(node.Name.Identifier.Text)) // pre-test on name for performance
            {
                ISymbol identifierSymbol = semanticModel.GetSymbolInfo(node).Symbol;
                if (identifierSymbol != null)
                {
                    ExpressionSyntax constValue;
                    if (substitutions.TryGetValue(identifierSymbol, out constValue))
                    {
#pragma warning disable CS0162 // unreachable
                        if (trace)
                        {
                            Console.WriteLine("CONSTSUBST: {0}: {1} ==> {2}", GetTraceParent(node).ToFullString(), node.ToFullString(), constValue.ToFullString());
                        }
#pragma warning restore CS0162
                        return(constValue.WithTriviaFrom(node));
                    }
                }
            }

            return(base.VisitMemberAccessExpression(node));
        }