private void SubscribeToDteEvents(DteWithEvents dteWithEvents) { dteWithEvents.ProjectItemsEvents.ItemAdded += item => { visualStudioTracer.Trace("Item Added: " + item.Name, "VsProjectFileTracker"); if (IsItemRelevant(item)) OnFileChanged(item); }; dteWithEvents.ProjectItemsEvents.ItemRemoved += item => { visualStudioTracer.Trace("Item Removed: " + item.Name, "VsProjectFileTracker"); if (IsItemRelevant(item)) OnFileChanged(null); }; dteWithEvents.ProjectItemsEvents.ItemRenamed += (item, oldName) => { visualStudioTracer.Trace("Item Renamed to: " + item.Name + " from " + oldName, "VsProjectFileTracker"); if (IsItemRelevant(item)) { OnFileChanged(item); } else if (IsItemRelevant(item, oldName)) { if (followTrackingAfterRename) { fileName = VsxHelper.GetProjectRelativePath(item); OnFileChanged(item); } else { OnFileChanged(null); } } }; dteWithEvents.DocumentEvents.DocumentSaved += document => { visualStudioTracer.Trace("Document Saved: " + document, "VsProjectFileTracker"); ProjectItem item = document.ProjectItem; if (IsItemRelevant(item)) OnFileChanged(item); }; dteWithEvents.BuildEvents.OnBuildDone += (scope, action) => { this.visualStudioTracer.Trace("Build Done.", "VsProjectFileTracker"); ProjectItem item = VsxHelper.FindProjectItemByProjectRelativePath(project, fileName); var newChangeDate = GetLastChangeDate(item); if (newChangeDate != LastChangeDate) OnFileChanged(item); }; }
protected VsProjectFileTrackerBase(Project project, DteWithEvents dteWithEvents, IIdeTracer tracer) { this.project = project; this.dteWithEvents = dteWithEvents; this.tracer = tracer; this.timer = new Timer(HandleFilesChangedOnDisk, null, Timeout.Infinite, Timeout.Infinite); }
public VsProjectFileTracker(Project project, string fileName, DteWithEvents dteWithEvents, IVisualStudioTracer tracer, bool followTrackingAfterRename = false) : base(project, dteWithEvents, tracer) { this.followTrackingAfterRename = followTrackingAfterRename; this.fileName = fileName; SetLastChangeDate(VsxHelper.FindProjectItemByProjectRelativePath(project, fileName)); SubscribeToDteEvents(); }
internal VsProjectScope(Project project, DteWithEvents dteWithEvents, GherkinFileEditorClassifications classifications, IVisualStudioTracer tracer, IIntegrationOptionsProvider integrationOptionsProvider) { Classifications = classifications; this.project = project; this.dteWithEvents = dteWithEvents; this.tracer = tracer; this.integrationOptionsProvider = integrationOptionsProvider; var integrationOptions = integrationOptionsProvider.GetOptions(); parser = new GherkinTextBufferParser(this, tracer); //TODO: enable when analizer is implemented // if (integrationOptions.EnableAnalysis) // analyzer = new GherkinScopeAnalyzer(this, visualStudioTracer); GherkinProcessingScheduler = new GherkinProcessingScheduler(tracer, integrationOptions.EnableAnalysis); GeneratorServices = new VsGeneratorServices(project, new VsSpecFlowConfigurationReader(project, tracer), tracer, integrationOptionsProvider); }
internal VsProjectScope(Project project, DteWithEvents dteWithEvents, GherkinFileEditorClassifications classifications, IVisualStudioTracer visualStudioTracer) { Classifications = classifications; this.project = project; this.visualStudioTracer = visualStudioTracer; //TODO: register for file changes, etc. parser = new GherkinTextBufferParser(this, visualStudioTracer); analyzer = new GherkinScopeAnalyzer(this, visualStudioTracer); GherkinProcessingScheduler = new GherkinProcessingScheduler(visualStudioTracer); specFlowProjectConfigurationReference = new SynchInitializedInstance<SpecFlowProjectConfiguration>(()=> DteProjectReader.LoadSpecFlowConfigurationFromDteProject(project) ?? new SpecFlowProjectConfiguration()); gherkinDialectServicesReference = new SynchInitializedInstance<GherkinDialectServices>(() => new GherkinDialectServices(SpecFlowProjectConfiguration.GeneratorConfiguration.FeatureLanguage)); appConfigTracker = new VsProjectFileTracker(project, "App.config", dteWithEvents, visualStudioTracer); appConfigTracker.FileChanged += AppConfigTrackerOnFileChanged; }
public ProjectScopeFactory() { dteReference = new SynchInitializedInstance<DteWithEvents>( () => { var dtex = new DteWithEvents(VsxHelper.GetDte(ServiceProvider)); dtex.SolutionEvents.AfterClosing += OnSolutionClosed; VisualStudioTracer.Trace("subscribed to solution closed " + Thread.CurrentThread.ManagedThreadId, "ProjectScopeFactory"); return dtex; }); classificationsReference = new SynchInitializedInstance<GherkinFileEditorClassifications>( () => new GherkinFileEditorClassifications(ClassificationRegistry)); projectScopeCache = new SynchronizedResultCache<Project, string, IProjectScope>( project => new VsProjectScope(project, dteReference.Value, classificationsReference.Value, VisualStudioTracer, IntegrationOptionsProvider, BindingSkeletonProviderFactory), VsxHelper.GetProjectUniqueId); noProjectScopeReference = new SynchInitializedInstance<NoProjectScope>(() => new NoProjectScope(classificationsReference.Value, VisualStudioTracer, IntegrationOptionsProvider)); }
public ProjectScopeFactory() { dteReference = new SynchInitializedInstance<DteWithEvents>( () => { ContainerProvider.ObjectContainer.Resolve<InstallServices>().OnPackageUsed(); //TODO: find a better place var dtex = new DteWithEvents(VsxHelper.GetDte(ServiceProvider), VisualStudioTracer); dtex.SolutionEvents.AfterClosing += OnSolutionClosed; dtex.SolutionEventsListener.OnQueryUnloadProject += OnProjectClosed; VisualStudioTracer.Trace("subscribed to solution closed " + Thread.CurrentThread.ManagedThreadId, "ProjectScopeFactory"); return dtex; }); classificationsReference = new SynchInitializedInstance<GherkinFileEditorClassifications>( () => new GherkinFileEditorClassifications(ClassificationRegistry)); projectScopeCache = new SynchronizedResultCache<Project, string, IProjectScope>( project => new VsProjectScope(project, dteReference.Value, classificationsReference.Value, VisualStudioTracer, IntegrationOptionsProvider, ContainerProvider.ObjectContainer.Resolve<IObjectContainer>(), ContainerProvider.ObjectContainer.Resolve<RuntimeConfiguration>()), VsxHelper.GetProjectUniqueId); noProjectScopeReference = new SynchInitializedInstance<NoProjectScope>(() => new NoProjectScope(classificationsReference.Value, VisualStudioTracer, IntegrationOptionsProvider)); }
public ProjectScopeFactory() { dteReference = new SynchInitializedInstance <DteWithEvents>( () => { ContainerProvider.ObjectContainer.Resolve <InstallServicesHelper>().OnPackageUsed(); //TODO: find a better place var dtex = new DteWithEvents(VsxHelper.GetDte(ServiceProvider), VisualStudioTracer); dtex.SolutionEvents.AfterClosing += OnSolutionClosed; dtex.SolutionEventsListener.OnQueryUnloadProject += OnProjectClosed; VisualStudioTracer.Trace("subscribed to solution closed " + Thread.CurrentThread.ManagedThreadId, "ProjectScopeFactory"); return(dtex); }); classificationsReference = new SynchInitializedInstance <GherkinFileEditorClassifications>( () => new GherkinFileEditorClassifications(ClassificationRegistry)); projectScopeCache = new SynchronizedResultCache <Project, string, IProjectScope>( project => new VsProjectScope(project, dteReference.Value, classificationsReference.Value, VisualStudioTracer, IntegrationOptionsProvider), VsxHelper.GetProjectUniqueId); noProjectScopeReference = new SynchInitializedInstance <NoProjectScope>(() => new NoProjectScope(classificationsReference.Value, VisualStudioTracer, IntegrationOptionsProvider)); }
internal VsProjectScope(Project project, DteWithEvents dteWithEvents, GherkinFileEditorClassifications classifications, IVisualStudioTracer tracer, IIntegrationOptionsProvider integrationOptionsProvider) { Classifications = classifications; this.project = project; this.dteWithEvents = dteWithEvents; this.tracer = tracer; this.integrationOptionsProvider = integrationOptionsProvider; var integrationOptions = integrationOptionsProvider.GetOptions(); parser = new GherkinTextBufferParser(this, tracer); //TODO: enable when analizer is implemented // if (integrationOptions.EnableAnalysis) // analyzer = new GherkinScopeAnalyzer(this, visualStudioTracer); GherkinProcessingScheduler = new GherkinProcessingScheduler(tracer, integrationOptions.EnableAnalysis); GeneratorServices = new VsGeneratorServices(project, new VsSpecFlowConfigurationReader(project, tracer), tracer); }
public VsProjectFileTracker(ProjectItem projectItem, DteWithEvents dteWithEvents, IVisualStudioTracer visualStudioTracer, bool followTrackingAfterRename = false) : this(projectItem.ContainingProject, VsxHelper.GetProjectRelativePath(projectItem), dteWithEvents, visualStudioTracer, followTrackingAfterRename) { }
internal VsProjectScope(Project project, DteWithEvents dteWithEvents, GherkinFileEditorClassifications classifications, IVisualStudioTracer visualStudioTracer, IIntegrationOptionsProvider integrationOptionsProvider, IBindingSkeletonProviderFactory bindingSkeletonProviderFactory) { Classifications = classifications; this.project = project; this.dteWithEvents = dteWithEvents; this.visualStudioTracer = visualStudioTracer; this.integrationOptionsProvider = integrationOptionsProvider; this.bindingSkeletonProviderFactory = bindingSkeletonProviderFactory; var integrationOptions = integrationOptionsProvider.GetOptions(); parser = new GherkinTextBufferParser(this, visualStudioTracer); //TODO: enable when analizer is implemented // if (integrationOptions.EnableAnalysis) // analyzer = new GherkinScopeAnalyzer(this, visualStudioTracer); GherkinProcessingScheduler = new GherkinProcessingScheduler(visualStudioTracer, integrationOptions.EnableAnalysis); }
protected VsProjectFileTrackerBase(Project project, DteWithEvents dteWithEvents, IVisualStudioTracer visualStudioTracer) { this.project = project; this.dteWithEvents = dteWithEvents; this.visualStudioTracer = visualStudioTracer; }
public VsProjectFilesTracker(Project project, string regexPattern, DteWithEvents dteWithEvents, IVisualStudioTracer visualStudioTracer) : base(project, dteWithEvents, visualStudioTracer) { fileNameRe = new Regex(regexPattern, RegexOptions.IgnoreCase); SubscribeToDteEvents(); }