public static string FindScopeName(SyntaxTranslation syntax, SemanticModel semanticModel = null) { if (semanticModel == null) { semanticModel = syntax.GetSemanticModel(); } var symbolInfo = semanticModel.GetSymbolInfo(syntax.Syntax); string foundNsName = null; var foundClssOrStr = (TypeDeclarationTranslation)syntax.TravelUpNotMe(f => f is ClassDeclarationTranslation || f is StructDeclarationTranslation); if (foundClssOrStr != null) { var clssSemanticModel = foundClssOrStr.GetSemanticModel(); var clssOrStrSymbol = clssSemanticModel.GetDeclaredSymbol(foundClssOrStr.Syntax); if (clssOrStrSymbol != null) { foundNsName = Helper.GetPrefixName(clssOrStrSymbol); } } if (foundNsName == null) { if (symbolInfo.Symbol.Kind == SymbolKind.Namespace) { return(null); } var foundNs = (NamespaceDeclarationTranslation)syntax.TravelUpNotMe(f => f is NamespaceDeclarationTranslation); foundNsName = foundNs.Name.Translate(); } return(foundNsName); }
public static string GetPrefix(SyntaxTranslation syntax, SemanticModel semanticModel = null) { if (semanticModel == null) { semanticModel = syntax.GetSemanticModel(); } var symbolInfo = semanticModel.GetSymbolInfo(syntax.Syntax); string foundNsName = FindScopeName(syntax, semanticModel); if (foundNsName != null) { string namespaceName = Helper.GetPrefixName(symbolInfo.Symbol); string common = Helper.FindCommonPrefix(namespaceName, foundNsName); string dot = string.IsNullOrEmpty(common) ? "" : "."; return($"{common}{dot}"); } return(null); }