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 ApplyThis(SemanticModel semanticModel, SyntaxTranslation syntaxTranslation, string property) { SymbolInfo symbolInfo = semanticModel.GetSymbolInfo(syntaxTranslation.Syntax); var found = (TypeDeclarationTranslation)syntaxTranslation.TravelUpNotMe(f => f is TypeDeclarationTranslation); if (found != null) { var classSymbol = semanticModel.GetDeclaredSymbol(found.Syntax) as INamedTypeSymbol; if (classSymbol != null && IsEqualOrBaseOf(symbolInfo.Symbol.ContainingType, classSymbol)) { string prefixName = symbolInfo.Symbol.IsStatic ? classSymbol.Name : "this"; return($"{prefixName}.{property}"); } } return(null); }