public static string GetSymbolName(InvocationExpressionSyntax node, SemanticModel semanticModel) { var si = semanticModel.GetSymbolInfo(node.ArgumentList.Arguments[0].Expression); var symbol = si.Symbol; if (symbol == null && si.CandidateSymbols.Any()) { symbol = si.CandidateSymbols.First(); } var name = (string)semanticModel.GetConstantValue(node).Value; if (symbol != null && symbol.Kind != SymbolKind.Namespace) { bool preserveMemberChange = !(symbol.Kind == SymbolKind.Method || symbol.Kind == SymbolKind.Property); int enumMode = -1; if (symbol.ContainingType != null && symbol.ContainingType.TypeKind == TypeKind.Enum && symbol is IFieldSymbol) { string enumAttr = Translator.Bridge_ASSEMBLY + ".EnumAttribute"; enumMode = 7; foreach (var attr in symbol.ContainingType.GetAttributes()) { if (attr.AttributeClass != null && attr.AttributeClass.FullyQualifiedName() == enumAttr && attr.ConstructorArguments.Any()) { enumMode = (int)attr.ConstructorArguments.First().Value; break; } } } if (symbol is IFieldSymbol && ((IFieldSymbol)symbol).IsConst) { preserveMemberChange = true; } var nameAttr = SyntaxHelper.GetInheritedAttribute(symbol, Bridge.Translator.Translator.Bridge_ASSEMBLY + ".NameAttribute"); bool isIgnore = symbol.ContainingType != null && SyntaxHelper.IsIgnoreType(symbol.ContainingType); name = symbol.Name; if (nameAttr != null) { var value = nameAttr.ConstructorArguments.First().Value; if (value is string) { name = value.ToString(); if (!isIgnore && symbol.IsStatic && Emitter.IsReservedStaticName(name)) { name = Helpers.ChangeReservedWord(name); } return(name); } preserveMemberChange = !(bool)value; enumMode = -1; } if (enumMode > 6) { switch (enumMode) { case 7: break; case 8: name = name.ToLowerInvariant(); break; case 9: name = name.ToUpperInvariant(); break; } } else { name = !preserveMemberChange?Object.Net.Utilities.StringUtils.ToLowerCamelCase(name) : name; } if (!isIgnore && symbol.IsStatic && Emitter.IsReservedStaticName(name)) { name = Helpers.ChangeReservedWord(name); } } return(name); }