private IMethodElement FindExtensionMethodInNamespace(INamespaceElement namespaceElement, string methodName, ITypeElement callerType, Expression qualifier) { IClassElement classElement; IMethodElement extensionMethod; foreach (ITypeElement namespaceChild in namespaceElement.Types) { classElement = GetStaticClass(namespaceChild); if (classElement == null) { continue; } extensionMethod = FindExtensionMethodInClass(classElement, methodName, callerType, qualifier); if (extensionMethod != null) { return(extensionMethod); } } foreach (INamespaceElement childNamespace in namespaceElement.Namespaces) { extensionMethod = FindExtensionMethodInNamespace(childNamespace, methodName, callerType, qualifier); if (extensionMethod != null) { return(extensionMethod); } } return(null); }
private IMethodElement FindExtensionMethod(IEnumerable projectSymbols, string methodName, ITypeElement callerType, Expression qualifier) { if (projectSymbols == null || callerType == null) { return(null); } foreach (IElement element in projectSymbols) { INamespaceElement namespaceElement = element as INamespaceElement; IClassElement classElement; IMethodElement extensionMethod; if (namespaceElement != null) { extensionMethod = FindExtensionMethodInNamespace(namespaceElement, methodName, callerType, qualifier); if (extensionMethod != null) { return(extensionMethod); } } else { classElement = GetStaticClass(element); extensionMethod = FindExtensionMethodInClass(classElement, methodName, callerType, qualifier); if (extensionMethod != null) { return(extensionMethod); } } } return(null); }
private IEnumerable <TextRange> GetWrongNamespaceNameRanges(ISourceFile scope, INamespaceElement namespaceElement) { foreach (var range in GetNameSpaceRanges(scope, namespaceElement)) { // Find first namespace part in the same line INamespaceElement rootNamespace = namespaceElement; TextRange startRange = range; while (rootNamespace.ParentNamespace != null) { rootNamespace = rootNamespace.ParentNamespace; startRange = (from tempRange in GetNameSpaceRanges(scope, rootNamespace) where tempRange.Start.Line == range.End.Line select tempRange).DefaultIfEmpty(startRange).First(); } // Find last namespace part in the same line INamespaceElement childNamespace; INamespaceElement temp = namespaceElement; do { childNamespace = temp; temp = (from child in childNamespace.Namespaces.Cast <INamespaceElement>() where (from tempRange in GetNameSpaceRanges(scope, child) where tempRange.End.Line == range.Start.Line select range).Any() select child).FirstOrDefault(); }while (temp != null); TextRange endRange = (from tempRange in GetNameSpaceRanges(scope, childNamespace) where tempRange.End.Line == range.Start.Line select tempRange).FirstOrDefault(); yield return(new TextRange(startRange.Start, endRange.End)); } }
private bool NamespaceShouldBeUpdated(ISourceFile scope, IElement element, string expectedNamespace) { INamespaceElement namespaceElement = element as INamespaceElement; if (namespaceElement == null) { return(false); } string currentNamespace = CurrentNamespace(namespaceElement); bool namespaceIsDefault = expectedNamespace == currentNamespace || (ContainsOnlyNamespacesOrUsings(scope, namespaceElement) && expectedNamespace.StartsWith(currentNamespace)); return(!namespaceIsDefault); }
private IEnumerable <TextRange> GetNameSpaceRanges(ISourceFile scope, INamespaceElement namespaceElement) { if (namespaceElement == null || scope == null) { yield break; } int filesCount = namespaceElement.Files.Count; if (filesCount > 1) { for (int i = 0; i < filesCount; i++) { ISourceFile elementFile = namespaceElement.Files[i]; if (elementFile.Name == scope.Name && i < namespaceElement.NameRanges.Count) { yield return(namespaceElement.NameRanges[i]); } } yield break; } yield return(namespaceElement.FirstNameRange); }
private bool ContainsOnlyNamespacesOrUsings(ISourceFile scope, INamespaceElement namespaceElement) { return namespaceElement.Children.All<IElement>(child => !IsInScope(scope, child) || child is INamespaceElement || child is INamespaceReference); }
private string CurrentNamespace(INamespaceElement namespaceElement) { return namespaceElement.FullName; }
private IEnumerable<TextRange> GetWrongNamespaceNameRanges(ISourceFile scope, INamespaceElement namespaceElement) { foreach (var range in GetNameSpaceRanges(scope, namespaceElement)) { // Find first namespace part in the same line INamespaceElement rootNamespace = namespaceElement; TextRange startRange = range; while (rootNamespace.ParentNamespace != null) { rootNamespace = rootNamespace.ParentNamespace; startRange = (from tempRange in GetNameSpaceRanges(scope, rootNamespace) where tempRange.Start.Line == range.End.Line select tempRange).DefaultIfEmpty(startRange).First(); } // Find last namespace part in the same line INamespaceElement childNamespace; INamespaceElement temp = namespaceElement; do { childNamespace = temp; temp = (from child in childNamespace.Namespaces.Cast<INamespaceElement>() where (from tempRange in GetNameSpaceRanges(scope, child) where tempRange.End.Line == range.Start.Line select range).Any() select child).FirstOrDefault(); } while (temp != null); TextRange endRange = (from tempRange in GetNameSpaceRanges(scope, childNamespace) where tempRange.End.Line == range.Start.Line select tempRange).FirstOrDefault(); yield return new TextRange(startRange.Start, endRange.End); } }
private IEnumerable<TextRange> GetNameSpaceRanges(ISourceFile scope, INamespaceElement namespaceElement) { if (namespaceElement == null || scope == null) yield break; int filesCount = namespaceElement.Files.Count; if (filesCount > 1) { for (int i = 0; i < filesCount; i++) { ISourceFile elementFile = namespaceElement.Files[i]; if (elementFile.Name == scope.Name && i < namespaceElement.NameRanges.Count) yield return namespaceElement.NameRanges[i]; } yield break; } yield return namespaceElement.FirstNameRange; }
private IMethodElement FindExtensionMethodInNamespace(INamespaceElement namespaceElement, string methodName, ITypeElement callerType, Expression qualifier) { IClassElement classElement; IMethodElement extensionMethod; foreach (ITypeElement namespaceChild in namespaceElement.Types) { classElement = GetStaticClass(namespaceChild); if (classElement == null) continue; extensionMethod = FindExtensionMethodInClass(classElement, methodName, callerType, qualifier); if (extensionMethod != null) return extensionMethod; } foreach (INamespaceElement childNamespace in namespaceElement.Namespaces) { extensionMethod = FindExtensionMethodInNamespace(childNamespace, methodName, callerType,qualifier); if (extensionMethod != null) return extensionMethod; } return null; }
private bool ContainsOnlyNamespacesOrUsings(ISourceFile scope, INamespaceElement namespaceElement) { return(namespaceElement.Children.All <IElement>(child => !IsInScope(scope, child) || child is INamespaceElement || child is INamespaceReference)); }
private string CurrentNamespace(INamespaceElement namespaceElement) { return(namespaceElement.FullName); }