private static string FormatClosureDescription([NotNull] JetHashSet <IDeclaredElement> elements)
        {
            int parameters = 0, vars = 0;
            var hasThis = false;

            foreach (var element in elements)
            {
                if (element is IParameter ||
                    element is IQueryAnonymousTypeProperty)
                {
                    parameters++;
                }
                else if (element is ILocalVariable)
                {
                    vars++;
                }
                else if (element is IFunction)
                {
                    hasThis = true;
                }
            }

            var buf = new StringBuilder();

            if (parameters > 0)
            {
                buf.Append(FormatOrderedByStartOffset(elements.Where(element =>
                                                                     element is IParameter || element is IQueryAnonymousTypeProperty)))
                .Append(' ')
                .Append(NounUtil.ToPluralOrSingular("parameter", parameters));
            }

            if (vars > 0)
            {
                if (parameters > 0)
                {
                    buf.Append(hasThis ? ", " : " and ");
                }

                buf.Append(FormatOrderedByStartOffset(
                               elements.Where(element => element is ILocalVariable)))
                .Append(' ')
                .Append(NounUtil.ToPluralOrSingular("variable", vars));
            }

            if (hasThis)
            {
                if (parameters > 0 || vars > 0)
                {
                    buf.Append(" and ");
                }
                buf.Append("'this' reference");
            }

            return(buf.ToString());
        }
Exemple #2
0
 public void ReanalyzeDirtyFiles()
 {
     lock (_lock)
     {
         foreach (var file in _dirtyFiles.Where(x => x.IsValid()))
         {
             using (_shellLocks.UsingReadLock())
             {
                 ICache cache = this;
                 cache.Merge(file, cache.Build(file, false));
             }
         }
         _dirtyFiles.Clear();
     }
 }