public MetaFileTracker(Lifetime lifetime, ChangeManager changeManager, ISolution solution, ILogger logger,
                               ISolutionLoadTasksScheduler solutionLoadTasksScheduler,
                               UnitySolutionTracker unitySolutionTracker)
        {
            mySolution = solution;
            myLogger   = logger;

            solutionLoadTasksScheduler.EnqueueTask(new SolutionLoadTask("AdviseForChanges", SolutionLoadTaskKinds.AfterDone,
                                                                        () =>
            {
                if (!unitySolutionTracker.IsUnityGeneratedProject.Value)
                {
                    return;
                }

                changeManager.RegisterChangeProvider(lifetime, this);
                changeManager.AddDependency(lifetime, this, solution);
            }));
        }
Example #2
0
        public T4PsiModule(
            Lifetime lifetime,
            [NotNull] IPsiModules psiModules,
            [NotNull] DocumentManager documentManager,
            [NotNull] ChangeManager changeManager,
            [NotNull] IAssemblyFactory assemblyFactory,
            [NotNull] IShellLocks shellLocks,
            [NotNull] IProjectFile projectFile,
            [NotNull] T4FileDataCache fileDataCache,
            [NotNull] T4Environment t4Environment,
            [NotNull] OutputAssemblies outputAssemblies
            )
        {
            _lifetime = lifetime;
            lifetime.OnTermination(Dispose);

            _psiModules      = psiModules;
            _assemblyFactory = assemblyFactory;
            _changeManager   = changeManager;
            _shellLocks      = shellLocks;

            _projectFile = projectFile;
            IProject project = projectFile.GetProject();

            Assertion.AssertNotNull(project, "project != null");
            _project  = project;
            _solution = project.GetSolution();

            changeManager.RegisterChangeProvider(lifetime, this);
            changeManager.AddDependency(lifetime, psiModules, this);

            _t4Environment    = t4Environment;
            _outputAssemblies = outputAssemblies;
            _resolveProject   = new T4ResolveProject(lifetime, _solution, _shellLocks, t4Environment.TargetFrameworkId, project);

            _moduleReferenceResolveContext = new PsiModuleResolveContext(this, t4Environment.TargetFrameworkId, project);
            SourceFile = CreateSourceFile(projectFile, documentManager);

            _isValid = true;
            fileDataCache.FileDataChanged.Advise(lifetime, OnDataFileChanged);
            AddBaseReferences();
        }
Example #3
0
        public T4FilePsiModule(
            Lifetime lifetime,
            [NotNull] IProjectFile projectFile,
            [NotNull] ChangeManager changeManager,
            [NotNull] IShellLocks shellLocks,
            [NotNull] IT4Environment t4Environment,
            [CanBeNull] TargetFrameworkId primaryTargetFrameworkId
            )
        {
            Lifetime = lifetime;
            lifetime.AddDispose(this);
            ProjectFile    = projectFile;
            Solution       = ProjectFile.GetSolution();
            PsiModules     = Solution.GetComponent <IPsiModules>();
            PsiServices    = Solution.GetComponent <IPsiServices>();
            ChangeManager  = changeManager;
            ShellLocks     = shellLocks;
            ChangeProvider = new T4WriteOnlyChangeProvider();
            changeManager.RegisterChangeProvider(lifetime, ChangeProvider);
            changeManager.AddDependency(lifetime, PsiModules, ChangeProvider);
            TargetFrameworkId = t4Environment.SelectTargetFrameworkId(primaryTargetFrameworkId, projectFile);
            Project           = ProjectFile.GetProject().NotNull();
            var resolveContext = Project.IsMiscFilesProject()
                                ? UniversalModuleReferenceContext.Instance
                                : this.GetResolveContextEx(ProjectFile);

            Assertion.Assert(resolveContext.TargetFramework == TargetFrameworkId, "Failed to select TargetFrameworkId");
            var documentManager = Solution.GetComponent <DocumentManager>();

            SourceFile = CreateSourceFile(ProjectFile, documentManager, resolveContext);
            AssemblyReferenceManager = new T4AssemblyReferenceManager(
                Solution.GetComponent <IAssemblyFactory>(),
                SourceFile,
                ProjectFile,
                resolveContext,
                shellLocks
                );

            Solution.GetComponent <T4DeclaredAssembliesManager>().FileDataChanged.Advise(lifetime, OnFileDataChanged);
            PersistentId = BuildPersistentId(primaryTargetFrameworkId);
            OriginalTargetFrameworkId = primaryTargetFrameworkId;
        }
Example #4
0
        public NitraSolutionComponent(Lifetime lifetime, ISolution solution, ChangeManager changeManager, DocumentManager documentManager,
            IShellLocks locks, IPsiConfiguration psiConfiguration, IPersistentIndexManager persistentIndexManager)
        {
            _persistentIndexManager = persistentIndexManager;
              _psiConfiguration = psiConfiguration;
              _locks = locks;
              _solution = solution;
              _documentManager = documentManager;
              //changeManager.Changed2.Advise(lifetime, OnChangeManagerChanged);

              changeManager.RegisterChangeProvider(lifetime, this);
              changeManager.AddDependency(lifetime, this, documentManager.ChangeProvider);
              changeManager.AddDependency(lifetime, this, solution);

              foreach (var project in solution.GetAllProjects())
              {
            Debug.WriteLine(project.Name);
            //var projectItem = project as JetBrains.Proj
            foreach (var file in project.GetAllProjectFiles())
            {
              var ext = System.IO.Path.GetExtension(file.Name);
              if (string.Equals(ext, ".dll", StringComparison.InvariantCultureIgnoreCase))
            continue;

              if (file.LanguageType.Name == "MSBuild")
            continue;

              if (string.Equals(ext, ".dsl", StringComparison.InvariantCultureIgnoreCase))
              {
            var stream = file.CreateReadStream();
            string content = "";
            using (var streamReader = new StreamReader(stream))
              content = streamReader.ReadToEnd();
            Debug.WriteLine(content);
              }

              Debug.WriteLine(file.Name);
            }

              }
        }
Example #5
0
        public UnityExternalFilesModuleProcessor(Lifetime lifetime, ILogger logger, ISolution solution,
                                                 ChangeManager changeManager,
                                                 IShellLocks locks,
                                                 ISolutionLoadTasksScheduler scheduler,
                                                 IFileSystemTracker fileSystemTracker,
                                                 ProjectFilePropertiesFactory projectFilePropertiesFactory,
                                                 UnityYamlPsiSourceFileFactory psiSourceFileFactory,
                                                 UnityExternalFilesModuleFactory moduleFactory,
                                                 UnityYamlDisableStrategy unityYamlDisableStrategy,
                                                 BinaryUnityFileCache binaryUnityFileCache,
                                                 AssetSerializationMode assetSerializationMode)
        {
            myLifetime                     = lifetime;
            myLogger                       = logger;
            mySolution                     = solution;
            myChangeManager                = changeManager;
            myLocks                        = locks;
            myFileSystemTracker            = fileSystemTracker;
            myProjectFilePropertiesFactory = projectFilePropertiesFactory;
            myPsiSourceFileFactory         = psiSourceFileFactory;
            myModuleFactory                = moduleFactory;
            myUnityYamlDisableStrategy     = unityYamlDisableStrategy;
            myBinaryUnityFileCache         = binaryUnityFileCache;
            myAssetSerializationMode       = assetSerializationMode;

            changeManager.RegisterChangeProvider(lifetime, this);

            myRootPaths = new JetHashSet <FileSystemPath>();

            // SolutionDirectory isn't absolute in tests, and will throw an exception if we use it when we call Exists
            mySolutionDirectory = solution.SolutionDirectory;
            if (!mySolutionDirectory.IsAbsolute)
            {
                mySolutionDirectory = solution.SolutionDirectory.ToAbsolutePath(FileSystemUtil.GetCurrentDirectory());
            }

            scheduler.EnqueueTask(new SolutionLoadTask(GetType().Name + ".Activate",
                                                       SolutionLoadTaskKinds.PreparePsiModules,
                                                       () => myChangeManager.AddDependency(myLifetime, mySolution.PsiModules(), this)));
        }
Example #6
0
        public UnresolvedUnityReferencesTracker(
            Lifetime lifetime,
            ILogger logger,

            ISolution solution,
            IEnumerable <IHandler> handlers,

            ModuleReferenceResolveSync moduleReferenceResolveSync,
            ChangeManager changeManager)
        {
            myLifetime = lifetime;
            myLogger   = logger;

            mySolution = solution;
            myHandlers = handlers.ToList();

            myModuleReferenceResolveSync = moduleReferenceResolveSync;
            myChangeManager = changeManager;

            myChangeManager.RegisterChangeProvider(myLifetime, this);
            myChangeManager.AddDependency(myLifetime, this, myModuleReferenceResolveSync);
        }
Example #7
0
        internal T4PsiModule([NotNull] Lifetime lifetime, [NotNull] PsiModuleManager psiModuleManager, [NotNull] DocumentManager documentManager,
                             [NotNull] ChangeManager changeManager, [NotNull] IAssemblyFactory assemblyFactory, [NotNull] IShellLocks shellLocks,
                             [NotNull] IProjectFile projectFile, [NotNull] T4FileDataCache fileDataCache, [NotNull] T4Environment t4Environment,
                             [NotNull] OutputAssembliesCache outputAssembliesCache)
        {
            _lifetime = lifetime;
            lifetime.AddAction(Dispose);

            _psiModuleManager = psiModuleManager;
            _documentManager  = documentManager;
            _assemblyFactory  = assemblyFactory;

            _changeManager = changeManager;
            changeManager.RegisterChangeProvider(lifetime, this);
            changeManager.AddDependency(lifetime, psiModuleManager, this);

            _shellLocks  = shellLocks;
            _projectFile = projectFile;
            _project     = projectFile.GetProject();
            Assertion.AssertNotNull(_project, "_project != null");
            _solution = _project.GetSolution();

            _t4Environment         = t4Environment;
            _outputAssembliesCache = outputAssembliesCache;
            _resolveProject        = new T4ResolveProject(_solution, _shellLocks, t4Environment.PlatformID, _project);

            _sourceFile = new PsiProjectFile(
                this,
                _projectFile,
                (pf, sf) => new DefaultPsiProjectFileProperties(pf, sf),
                JetFunc <IProjectFile, IPsiSourceFile> .True,
                _documentManager);

            _isValid = true;
            fileDataCache.FileDataChanged.Advise(lifetime, OnDataFileChanged);
            AddBaseReferences();
        }
Example #8
0
        private void OnSolutionPreparePsiModules()
        {
            myChangeManager.RegisterChangeProvider(myLifetime, this);
            myChangeManager.AddDependency(myLifetime, this, myModuleReferenceResolveSync);

            // Track the lifetime of all projects, so we can pass it to the handler later
            myProjects.Projects.View(myLifetime,
                                     (projectLifetime, project) => myProjectLifetimes.Add(project, projectLifetime));

            var unityProjectLifetimes = myProjectLifetimes.Where(pl => pl.Key.IsUnityProject()).ToList();

            if (unityProjectLifetimes.Any())
            {
                HasUnityReference.SetValue(true);
            }

            foreach (var handler in myHandlers)
            {
                foreach (var(project, lifetime) in unityProjectLifetimes)
                {
                    handler.OnUnityProjectAdded(lifetime, project);
                }
            }
        }