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()); } }
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); } } }
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); } }
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); } }
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); } } } }
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)); }