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); }
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); }
// 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)); }