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)); }
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); }
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); }
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); }); }
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; }
public LangVersionProjectSettingsProvider(ISettingsSchema settingsSchema, ILogger logger, UnityProjectFileCacheProvider unityProjectFileCache, ILanguageLevelProjectProperty <CSharpLanguageLevel, CSharpLanguageVersion> languageLevelProjectProperty) { mySettingsSchema = settingsSchema; myLogger = logger; myUnityProjectFileCache = unityProjectFileCache; myLanguageLevelProjectProperty = languageLevelProjectProperty; }
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); }
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)); }
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; }
public UnityVersionStub(UnityProjectFileCacheProvider unityProjectFileCache, ISolution solution, IFileSystemTracker fileSystemTracker, Lifetime lifetime) : base(unityProjectFileCache, solution, fileSystemTracker, lifetime, true) { }