private static bool IsNamespaceImportedClass(TypeScriptClass classToMatch, Identifier identifier, ImportedModule namespaceImport) { return(IsNamespaceImportedClass(classToMatch.Name, identifier, namespaceImport)); }
public static IEnumerable <Usage> FindUsages(this TsProject <TypescriptCompilation> tsProject, TypeScriptClass first) { var compilations = tsProject.Compiled.Where(c => c.Imports != null && c.Imports .Where(i => i.IsLocalImport) .Any(i => (i.AbsolutePath.Equals(first.FileName) && i.ImportedModules.Any(m => m.Name.Equals(first.Name))) || i.AbsolutePath.Equals(first.FileName) && i.ImportedModules.Any(m => m.Name.Equals("*")) )).ToList(); List <Usage> positions = new List <Usage>(); foreach (var compilation in compilations) { var import = compilation.FindImport(first); if (import.ImportedModules.Count == 1 && import.ImportedModules.First().IsNamespaceImport) { var namespaceImport = import.ImportedModules.First(); var potentialUsages = compilation.Ast.RootNode.GetDescendants().OfType <Identifier>() .Where(i => IsNamespaceImportedClass(first, i, namespaceImport)); var usages = potentialUsages.Where(p => p.Parent is NewExpression || p.Parent.Parent is NewExpression).Select(p => p.Parent is NewExpression ? p.Parent : p.Parent.Parent); positions.AddRange(usages.Select(usage => new Usage { Compilation = compilation, Node = usage, Lookup = first, IsNamespaceImport = true })); } else { var potentialUsages = compilation.Ast.RootNode.GetDescendants().OfType <Identifier>() .Where(i => i.IdentifierStr.Equals(first.Name)); var usages = potentialUsages.Where(p => p.Parent is NewExpression || p.Parent.Parent is NewExpression).Select(p => p.Parent is NewExpression ? p.Parent : p.Parent.Parent); positions.AddRange(usages.Select(usage => new Usage { Compilation = compilation, Node = usage, Lookup = first })); } } return(positions); }
public Imports FindImport(TypeScriptClass cls) { return(FindImport(cls.FileName, cls.Name)); }