private Version GetActualVersion(ISolution solution)
        {
            foreach (var project in solution.GetTopLevelProjects())
            {
                if (project.IsUnityProject())
                {
                    var version = myUnityProjectFileCache.GetUnityVersion(project);
                    if (version != null)
                    {
                        return(version);
                    }
                }
            }

            // Tests don't create a .csproj we can parse, so pull the version out
            // of the project defines directly (we can't do this normally because
            // Unity doesn't write defines for Release configuration, so we can't
            // rely on this)
            Version unityVersion = null;

            foreach (var project in solution.GetTopLevelProjects())
            {
                foreach (var configuration in project.ProjectProperties.GetActiveConfigurations <IManagedProjectConfiguration>())
                {
                    unityVersion = UnityProjectFileCacheProvider.GetVersionFromDefines(configuration.DefineConstants ?? string.Empty,
                                                                                       unityVersion);
                }
            }

            // If all else fails, default to 5.4. The majority of the tests will
            // rely on this being set.
            return(unityVersion ?? new Version(5, 4));
        }
Example #2
0
        private static Version GetVersionForTests(ISolution solution)
        {
            // The project file data provider/cache doesn't work in tests, because there is no .csproj file we can parse.
            // Instead, pull the version directly from the project defines in the project model. We can't rely on this
            // as our main strategy because Unity doesn't write defines for Release configuration (another reason we for
            // us to hide the project configuration selector)
            var unityVersion = new Version(0, 0);

            foreach (var project in GetTopLevelProjectWithReadLock(solution))
            {
                foreach (var configuration in project.ProjectProperties.GetActiveConfigurations <IManagedProjectConfiguration>())
                {
                    // Get the constants. The tests can't set this up correctly, so they
                    // add the Unity version as a property
                    var defineConstants = configuration.DefineConstants;
                    if (string.IsNullOrEmpty(defineConstants))
                    {
                        configuration.PropertiesCollection.TryGetValue("DefineConstants", out defineConstants);
                    }

                    unityVersion = UnityProjectFileCacheProvider.GetVersionFromDefines(defineConstants ?? string.Empty,
                                                                                       unityVersion);
                }
            }

            return(unityVersion);
        }
Example #3
0
        public UnityVersion(UnityProjectFileCacheProvider unityProjectFileCache,
                            ISolution solution, IFileSystemTracker fileSystemTracker, Lifetime lifetime, bool inTests = false)
        {
            myUnityProjectFileCache = unityProjectFileCache;
            mySolution = solution;

            if (inTests)
            {
                return;
            }

            var projectVersionTxtPath = mySolution.SolutionDirectory.Combine("ProjectSettings/ProjectVersion.txt");

            fileSystemTracker.AdviseFileChanges(lifetime,
                                                projectVersionTxtPath,
                                                _ => { myVersionFromProjectVersionTxt = TryGetVersionFromProjectVersion(projectVersionTxtPath); });
            myVersionFromProjectVersionTxt = TryGetVersionFromProjectVersion(projectVersionTxtPath);

            var editorInstanceJsonPath = mySolution.SolutionDirectory.Combine("Library/EditorInstance.json");

            fileSystemTracker.AdviseFileChanges(lifetime,
                                                editorInstanceJsonPath,
                                                _ => { myVersionFromEditorInstanceJson = TryGetApplicationPathFromEditorInstanceJson(editorInstanceJsonPath); });
            myVersionFromEditorInstanceJson = TryGetApplicationPathFromEditorInstanceJson(editorInstanceJsonPath);
        }
Example #4
0
        public PerProjectSettings(Lifetime lifetime, ISolution solution, ChangeManager changeManager,
                                  ModuleReferenceResolveSync moduleReferenceResolveSync,
                                  IViewableProjectsCollection projects,
                                  ISettingsSchema settingsSchema,
                                  SettingsStorageProvidersCollection settingsStorageProviders, IShellLocks locks,
                                  ILogger logger, InternKeyPathComponent interned,
                                  UnityProjectFileCacheProvider unityProjectFileCache)
        {
            mySolution                 = solution;
            myChangeManager            = changeManager;
            mySettingsSchema           = settingsSchema;
            mySettingsStorageProviders = settingsStorageProviders;
            myLocks    = locks;
            myLogger   = logger;
            myInterned = interned;
            myUnityProjectFileCache = unityProjectFileCache;
            myProjectMountPoints    = new Dictionary <IProject, SettingsStorageMountPoint>();
            myProjectLifetimes      = new Dictionary <IProject, Lifetime>();

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

            projects.Projects.View(lifetime, (projectLifetime, project) =>
            {
                myProjectLifetimes.Add(project, projectLifetime);

                if (!project.IsUnityProject())
                {
                    return;
                }

                InitialiseProjectSettings(project);
            });
        }
Example #5
0
        public UnityVersion(UnityProjectFileCacheProvider unityProjectFileCache,
                            ISolution solution, IFileSystemTracker fileSystemTracker, Lifetime lifetime,
                            IShellLocks locks)
        {
            myUnityProjectFileCache = unityProjectFileCache;
            mySolution = solution;

            if (locks.Dispatcher.IsAsyncBehaviorProhibited) // for tests
            {
                return;
            }

            var projectVersionTxtPath = mySolution.SolutionDirectory.Combine("ProjectSettings/ProjectVersion.txt");

            fileSystemTracker.AdviseFileChanges(lifetime,
                                                projectVersionTxtPath,
                                                _ => { myVersionFromProjectVersionTxt = TryGetVersionFromProjectVersion(projectVersionTxtPath); });
            myVersionFromProjectVersionTxt = TryGetVersionFromProjectVersion(projectVersionTxtPath);

            var editorInstanceJsonPath = mySolution.SolutionDirectory.Combine("Library/EditorInstance.json");

            fileSystemTracker.AdviseFileChanges(lifetime,
                                                editorInstanceJsonPath,
                                                _ => { myVersionFromEditorInstanceJson = TryGetApplicationPathFromEditorInstanceJson(editorInstanceJsonPath); });
            myVersionFromEditorInstanceJson = TryGetApplicationPathFromEditorInstanceJson(editorInstanceJsonPath);
        }
 public LangVersionSetting(ISettingsSchema settingsSchema, ILogger logger,
                           UnityProjectFileCacheProvider unityProjectFileCache)
 {
     mySettingsSchema        = settingsSchema;
     myLogger                = logger;
     myUnityProjectFileCache = unityProjectFileCache;
 }
Example #7
0
 public LangVersionProjectSettingsProvider(ISettingsSchema settingsSchema, ILogger logger,
                                           UnityProjectFileCacheProvider unityProjectFileCache,
                                           ILanguageLevelProjectProperty <CSharpLanguageLevel, CSharpLanguageVersion> languageLevelProjectProperty)
 {
     mySettingsSchema               = settingsSchema;
     myLogger                       = logger;
     myUnityProjectFileCache        = unityProjectFileCache;
     myLanguageLevelProjectProperty = languageLevelProjectProperty;
 }
Example #8
0
 public PerProjectSettings(ISettingsSchema settingsSchema,
                           SettingsStorageProvidersCollection settingsStorageProviders, IShellLocks locks,
                           ILogger logger, InternKeyPathComponent interned,
                           UnityProjectFileCacheProvider unityProjectFileCache)
 {
     mySettingsSchema           = settingsSchema;
     mySettingsStorageProviders = settingsStorageProviders;
     myLocks    = locks;
     myLogger   = logger;
     myInterned = interned;
     myUnityProjectFileCache = unityProjectFileCache;
     myProjectMountPoints    = new Dictionary <IProject, SettingsStorageMountPoint>();
 }
        public UnityVersion(UnityProjectFileCacheProvider unityProjectFileCache,
                            ISolution solution, IFileSystemTracker fileSystemTracker, Lifetime lifetime,
                            UnitySolutionTracker unitySolutionTracker)
        {
            myUnityProjectFileCache = unityProjectFileCache;
            mySolution          = solution;
            myFileSystemTracker = fileSystemTracker;

            // SolutionDirectory isn't absolute in tests, and will throw if used with FileSystemTracker
            mySolutionDirectory = solution.SolutionDirectory;
            if (!mySolutionDirectory.IsAbsolute)
            {
                mySolutionDirectory = solution.SolutionDirectory.ToAbsolutePath(FileSystemUtil.GetCurrentDirectory());
            }

            unitySolutionTracker.IsUnityProjectFolder.WhenTrue(lifetime, SetActualVersionForSolution);
        }
        public PerProjectSettings(ISolution solution, ChangeManager changeManager,
                                  ISettingsSchema settingsSchema,
                                  SettingsStorageProvidersCollection settingsStorageProviders, IShellLocks locks,
                                  ILogger logger, InternKeyPathComponent interned,
                                  UnityProjectFileCacheProvider unityProjectFileCache,
                                  ProjectReferenceChangeTracker changeTracker)
        {
            mySolution                 = solution;
            myChangeManager            = changeManager;
            mySettingsSchema           = settingsSchema;
            mySettingsStorageProviders = settingsStorageProviders;
            myLocks    = locks;
            myLogger   = logger;
            myInterned = interned;
            myUnityProjectFileCache = unityProjectFileCache;
            myProjectMountPoints    = new Dictionary <IProject, SettingsStorageMountPoint>();
            myProjectLifetimes      = new Dictionary <IProject, Lifetime>();

            changeTracker.RegisterProjectChangeHandler(InitialiseProjectSettings);
        }
Example #11
0
        private Version GetActualVersion(ISolution solution)
        {
            foreach (var project in solution.GetTopLevelProjects())
            {
                if (project.IsUnityProject())
                {
                    var version = myUnityProjectFileCache.GetUnityVersion(project);
                    if (version != null)
                    {
                        return(version);
                    }
                }
            }

            // Tests don't create a .csproj we can parse, so pull the version out
            // of the project defines directly (we can't do this normally because
            // Unity doesn't write defines for Release configuration, so we can't
            // rely on this)
            Version unityVersion = null;

            foreach (var project in solution.GetTopLevelProjects())
            {
                foreach (var configuration in project.ProjectProperties.GetActiveConfigurations <IManagedProjectConfiguration>())
                {
                    // Get the constants. The tests can't set this up correctly, so they
                    // add the Unity version as a property
                    var defineConstants = configuration.DefineConstants;
                    if (string.IsNullOrEmpty(defineConstants))
                    {
                        configuration.PropertiesCollection.TryGetValue("DefineConstants", out defineConstants);
                    }

                    unityVersion = UnityProjectFileCacheProvider.GetVersionFromDefines(defineConstants ?? string.Empty,
                                                                                       unityVersion);
                }
            }

            // If all else fails, default to 5.4. No reason for that version, other
            // than it was the first supported version :)
            return(unityVersion ?? new Version(5, 4));
        }
Example #12
0
        public UnityVersion(UnityProjectFileCacheProvider unityProjectFileCache,
                            ISolution solution, IFileSystemTracker fileSystemTracker, Lifetime lifetime,
                            UnitySolutionTracker unitySolutionTracker)
        {
            myUnityProjectFileCache = unityProjectFileCache;
            mySolution = solution;

            unitySolutionTracker.IsUnityProjectFolder.AdviseOnce(lifetime, args =>
            {
                if (!args)
                {
                    return;
                }

                var projectVersionTxtPath =
                    mySolution.SolutionDirectory.Combine("ProjectSettings/ProjectVersion.txt");
                fileSystemTracker.AdviseFileChanges(lifetime,
                                                    projectVersionTxtPath,
                                                    _ =>
                {
                    myVersionFromProjectVersionTxt = TryGetVersionFromProjectVersion(projectVersionTxtPath);
                    ActualVersionForSolution.SetValue(myVersionFromProjectVersionTxt ??
                                                      GetActualVersionForSolution());
                });
                myVersionFromProjectVersionTxt = TryGetVersionFromProjectVersion(projectVersionTxtPath);

                var editorInstanceJsonPath = mySolution.SolutionDirectory.Combine("Library/EditorInstance.json");
                fileSystemTracker.AdviseFileChanges(lifetime,
                                                    editorInstanceJsonPath,
                                                    _ =>
                {
                    myVersionFromEditorInstanceJson =
                        TryGetApplicationPathFromEditorInstanceJson(editorInstanceJsonPath);
                });
                myVersionFromEditorInstanceJson =
                    TryGetApplicationPathFromEditorInstanceJson(editorInstanceJsonPath);

                ActualVersionForSolution.SetValue(GetActualVersionForSolution());
            });
        }
 public UnityVersion(UnityProjectFileCacheProvider unityProjectFileCache)
 {
     myUnityProjectFileCache = unityProjectFileCache;
 }
Example #14
0
 public UnityVersionStub(UnityProjectFileCacheProvider unityProjectFileCache, ISolution solution, IFileSystemTracker fileSystemTracker, Lifetime lifetime)
     : base(unityProjectFileCache, solution, fileSystemTracker, lifetime, true)
 {
 }