Example #1
0
        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);
        }