Пример #1
0
        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();
        }
Пример #4
0
        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);
        }
Пример #5
0
        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;
        }
Пример #6
0
        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));
        }
Пример #9
0
        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)
 {
     
 }
Пример #11
0
        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);
        }
Пример #12
0
 protected VsProjectFileTrackerBase(Project project, DteWithEvents dteWithEvents, IVisualStudioTracer visualStudioTracer)
 {
     this.project = project;
     this.dteWithEvents = dteWithEvents;
     this.visualStudioTracer = visualStudioTracer;
 }
Пример #13
0
        public VsProjectFilesTracker(Project project, string regexPattern, DteWithEvents dteWithEvents, IVisualStudioTracer visualStudioTracer) : base(project, dteWithEvents, visualStudioTracer)
        {
            fileNameRe = new Regex(regexPattern, RegexOptions.IgnoreCase);

            SubscribeToDteEvents();
        }