Esempio n. 1
0
        public IEnumerable <StepBindingNew> GetBindingsFromProjectItem(ProjectItem projectItem)
        {
            foreach (CodeClass bindingClassWithBindingAttribute in VsxHelper.GetClasses(projectItem).Where(IsBindingClass))
            {
                BindingScopeNew[] bindingScopes = GetClassScopes(bindingClassWithBindingAttribute);

                CodeClass2 bindingClassIncludingParts = bindingClassWithBindingAttribute as CodeClass2;
                if (bindingClassIncludingParts == null)
                {
                    foreach (StepBindingNew currrentFoundStep in GetStepsFromClass(bindingClassWithBindingAttribute, bindingScopes))
                    {
                        yield return(currrentFoundStep);
                    }
                }
                else
                {
                    foreach (CodeClass2 currentBindingPartialClass in bindingClassIncludingParts.Parts)
                    {
                        foreach (StepBindingNew currentPartialClassStep in GetStepsFromClass(currentBindingPartialClass as CodeClass, bindingScopes))
                        {
                            yield return(currentPartialClassStep);
                        }
                    }
                }
            }
        }
        private void ProcessBindingsFromProjectItem(ProjectItem projectItem, IdeBindingSourceProcessor bindingSourceProcessor, List <ProjectItem> relatedProjectItems)
        {
            foreach (CodeClass codeClass in VsxHelper.GetClasses(projectItem))
            {
                CodeClass2 bindingClassIncludingParts = codeClass as CodeClass2;

                var parts = new List <CodeClass>();

                if (bindingClassIncludingParts == null)
                {
                    parts.Add(codeClass);
                }
                else
                {
                    parts.AddRange(bindingClassIncludingParts.Parts.OfType <CodeClass>());
                }


                var baseClass = GetBaseClass(codeClass);

                while (baseClass != null)
                {
                    tracer.Trace("Adding inherited bindings for class: " + baseClass.FullName, GetType().Name);
                    parts.Add(baseClass);
                    baseClass = GetBaseClass(baseClass);
                }

                // we need to use the class parts to grab class-related information (e.g. [Binding] attribute)
                // but we need to process the binding methods only from the current part, otherwise these
                // methods would be registered to multiple file paths, and the update tracking would not work

                relatedProjectItems.AddRange(parts.Select(SafeGetProjectItem).Where(pi => pi != null && pi != projectItem));
                ProcessCodeClass(codeClass, bindingSourceProcessor, parts.ToArray());
            }
        }
Esempio n. 3
0
        private IEnumerable <CodeClass> GetBindingClassesIncludingPartialClasses(Project project)
        {
            foreach (CodeClass bindingClassWithBindingAttribute in VsxHelper.GetClasses(project).Where(IsBindingClass))
            {
                yield return(bindingClassWithBindingAttribute);

                CodeClass2 bindingClassIncludingParts = bindingClassWithBindingAttribute as CodeClass2;
                foreach (CodeClass2 currentBindingPartialClass in bindingClassIncludingParts.Parts)
                {
                    yield return(currentBindingPartialClass as CodeClass);
                }
            }
        }
Esempio n. 4
0
        protected override bool IsMatchingProjectItem(ProjectItem projectItem)
        {
            try
            {
                var extension = Path.GetExtension(projectItem.Name);
                if (!bindingFileExtensions.Any(bindingExt => ("." + bindingExt).Equals(extension, StringComparison.InvariantCultureIgnoreCase)))
                {
                    return(false);
                }

                return(VsxHelper.GetClasses(projectItem).Any(VsBindingRegistryBuilder.IsPotentialBindingClass));
            }
            catch (Exception)
            {
                return(false);
            }
        }
Esempio n. 5
0
        protected override bool IsMatchingProjectItem(ProjectItem projectItem)
        {
            try
            {
                var extension = Path.GetExtension(projectItem.Name);
                if (!".cs".Equals(extension, StringComparison.InvariantCultureIgnoreCase) &&
                    !".vb".Equals(extension, StringComparison.InvariantCultureIgnoreCase))
                {
                    return(false);
                }

                return(VsxHelper.GetClasses(projectItem).Any(VsStepSuggestionBindingCollector.IsBindingClass));
            }
            catch (Exception)
            {
                return(false);
            }
        }
Esempio n. 6
0
 private void ProcessBindingsFromProjectItem(ProjectItem projectItem, IdeBindingSourceProcessor bindingSourceProcessor)
 {
     foreach (CodeClass codeClass in VsxHelper.GetClasses(projectItem))
     {
         CodeClass2 bindingClassIncludingParts = codeClass as CodeClass2;
         if (bindingClassIncludingParts == null)
         {
             ProcessCodeClass(codeClass, bindingSourceProcessor);
         }
         else
         {
             foreach (CodeClass2 partialClassParts in bindingClassIncludingParts.Parts)
             {
                 ProcessCodeClass(partialClassParts, bindingSourceProcessor);
             }
         }
     }
 }
Esempio n. 7
0
 private void ProcessBindingsFromProjectItem(ProjectItem projectItem, IdeBindingSourceProcessor bindingSourceProcessor, List <ProjectItem> relatedProjectItems)
 {
     foreach (CodeClass codeClass in VsxHelper.GetClasses(projectItem))
     {
         CodeClass2 bindingClassIncludingParts = codeClass as CodeClass2;
         if (bindingClassIncludingParts == null)
         {
             ProcessCodeClass(codeClass, bindingSourceProcessor, codeClass);
         }
         else
         {
             var parts = bindingClassIncludingParts.Parts.OfType <CodeClass>().ToArray();
             relatedProjectItems.AddRange(parts.Select(p => p.ProjectItem).Where(pi => pi != null && pi != projectItem));
             // we need to use the class parts to grab class-related information (e.g. [Binding] attribute)
             // but we need to process the binding methods only from the current part, otherwise these
             // methods would be registered to multiple file pathes, and the update tracking would not work
             ProcessCodeClass(codeClass, bindingSourceProcessor, parts.ToArray());
         }
     }
 }
 private CodeFunction FindCodeFunction(Project project, IBindingMethod bindingMethod)
 {
     return(VsxHelper.GetClasses(project).Where(IsBindingClass).Where(c => c.FullName == bindingMethod.Type.FullName)
            .SelectMany(c => c.GetFunctions()).FirstOrDefault(
                f => f.Name == bindingMethod.Name && BindingReflectionExtensions.MethodEquals(bindingMethod, new VsBindingMethod(f))));
 }
 public IEnumerable <StepBinding> GetBindingsFromProjectItem(ProjectItem projectItem)
 {
     return(VsxHelper.GetClasses(projectItem).Where(IsBindingClass).SelectMany(GetCompletitionsFromBindingClass));
 }