示例#1
0
        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);
        }
示例#2
0
        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);
 }