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 PerProjectSettings(Lifetime lifetime, IViewableProjectsCollection projects, ISettingsSchema settingsSchema, SettingsStorageProvidersCollection settingsStorageProviders, IShellLocks locks, ILogger logger, InternKeyPathComponent interned, LangVersionCacheProvider langVersionCache) { this.settingsSchema = settingsSchema; this.logger = logger; myLangVersionCache = langVersionCache; projects.Projects.View(lifetime, (projectLifetime, project) => { if (!project.IsUnityProject()) { return; } var mountPoint = CreateMountPoint(projectLifetime, project, settingsStorageProviders, locks, logger, interned); InitialiseSettingValues(project, mountPoint); // Just to make things more interesting, the langversion cache isn't // necessarily updated by the time we get called, so wire up a callback myLangVersionCache.RegisterDataChangedCallback(projectLifetime, project.ProjectFileLocation, () => InitialiseSettingValues(project, mountPoint)); }); }
private SettingsStorageMountPoint CreateMountPoint(Lifetime lifetime, string name, double priority, IIsAvailable isAvailable, SettingsStorageProvidersCollection settingsStorageProviders) { var storage = SettingsStorageFactory.CreateStorage(lifetime, name, myLogger, myInternedKeyPaths); var mountPoint = new SettingsStorageMountPoint(storage, SettingsStorageMountPoint.MountPath.Default, MountPointFlags.IsDefaultValues, priority, isAvailable, name); settingsStorageProviders.MountPoints.Add(lifetime, mountPoint); settingsStorageProviders.Storages.Add(lifetime, storage); return(mountPoint); }
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 SettingsLayersProvider(Lifetime lifetime, ISolution solution, IShellLocks locks, SettingsStorageProvidersCollection settingsStorageProviders, IEnumerable <IUnitySolutionSettingsProvider> solutionSettingsProviders, IEnumerable <IUnityProjectSettingsProvider> projectSettingsProviders, InternKeyPathComponent internedKeyPaths, ILogger logger) { myLifetime = lifetime; mySolution = solution; myLocks = locks; mySettingsStorageProviders = settingsStorageProviders; mySolutionSettingsProviders = solutionSettingsProviders; myProjectSettingsProviders = projectSettingsProviders; myInternedKeyPaths = internedKeyPaths; myLogger = logger; }
public FindAndLoadSettings(Lifetime lifetimeComponent, SettingsStorageProvidersCollection publisher, SolutionFileLocationLive solfile, IThreading threading, IFileSystemTracker filetracker, FileSettingsStorageBehavior behavior, ISolution solution, IShellLocks locks) { // In case the solution path changes, watch each value anew solfile.SolutionFileLocation.ForEachValue_NotNull(lifetimeComponent, (lifetimeLocation, location) => { double priority = ProjectModelSettingsStorageMountPointPriorityClasses.SolutionShared; for (FileSystemPath dir = location.Directory; !dir.IsNullOrEmpty(); dir = dir.Directory) { try { priority *= .9; // The upper folder, the lower priority (regular solution-shared file takes over all of them) // Walk up folders // TODO: add file-system-watcher here foreach (FileSystemPath settingsfile in dir.GetChildFiles("*." + AutoLoadExtension, PathSearchFlags.ExcludeDirectories | PathSearchFlags.ExcludeHidden)) { var relativePath = settingsfile.MakeRelativeTo(location.Directory).FullPath; var name = relativePath.Replace("." + AutoLoadExtension, ""); // Physical storage IProperty <FileSystemPath> livepath = new Property <FileSystemPath>(lifetimeLocation, "StoragePath", settingsfile); var storage = new XmlFileSettingsStorage(lifetimeLocation, name, livepath, SettingsStoreSerializationToXmlDiskFile.SavingEmptyContent.KeepFile, threading, filetracker, behavior, null); // Mount as a layer IIsAvailable availability = new IsAvailableByDataConstant <ISolution>(lifetimeLocation, ProjectModelDataConstants.SOLUTION, solution, locks); // Only when querying in solution context (includes Application-Wide) ISettingsStorageMountPoint mount = new SettingsStorageMountPoint(storage.Storage, SettingsStorageMountPoint.MountPath.Default, 0, priority, availability, name); // Metadata livepath.FlowInto(lifetimeLocation, mount.Metadata.GetOrCreateProperty(UserFriendlySettingsLayers.DiskFilePath, null, true)); mount.Metadata.Set(UserFriendlySettingsLayers.Origin, string.Format("Automatically loaded from solution parent folder, \"{0}\"", relativePath)); mount.Metadata.Set(UserInjectedSettingsLayers.IsHostingUserInjections, true); // Publish publisher.Storages.Add(lifetimeLocation, storage.Storage); publisher.MountPoints.Add(lifetimeLocation, mount); } } catch (Exception ex) { Logger.LogException(ex); } } }); }
public PerProjectSettings(Lifetime lifetime, IViewableProjectsCollection projects, ISettingsSchema settingsSchema, SettingsStorageProvidersCollection settingsStorageProviders, IShellLocks locks, ILogger logger, InternKeyPathComponent interned) { this.settingsSchema = settingsSchema; this.logger = logger; projects.Projects.View(lifetime, (projectLifetime, project) => { if (!project.HasFlavour <UnityProjectFlavor>()) { return; } var mountPoint = CreateMountPoint(projectLifetime, project, settingsStorageProviders, locks, logger, interned); InitNamespaceProviderSettings(mountPoint); InitLanguageLevelSettings(mountPoint); }); }
private static SettingsStorageMountPoint CreateMountPoint(Lifetime projectLifetime, IProject project, SettingsStorageProvidersCollection settingsStorageProviders, IShellLocks locks, ILogger logger, InternKeyPathComponent interned) { var storageName = $"Project {project.Name} (Unity)"; var storage = SettingsStorageFactory.CreateStorage(projectLifetime, storageName, logger, interned); var isAvailable = new IsAvailableByDataConstant <IProject>(projectLifetime, ProjectModelDataConstants.Project, project, locks); // Set at a priority less than the .csproj.dotSettings layer, so we can be overridden var priority = ProjectModelSettingsStorageMountPointPriorityClasses.ProjectShared * 0.9; var mountPoint = new SettingsStorageMountPoint(storage, SettingsStorageMountPoint.MountPath.Default, MountPointFlags.IsDefaultValues, priority, isAvailable, storageName); settingsStorageProviders.MountPoints.Add(projectLifetime, mountPoint); settingsStorageProviders.Storages.Add(projectLifetime, storage); return(mountPoint); }
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); }