提交 f932d62b 编写于 作者: C Cyrus Najmabadi

Further simplification

上级 6a6b76d5
......@@ -2,13 +2,14 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
#nullable enable
using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.ErrorReporting;
using Microsoft.CodeAnalysis.Host;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.Shared.Utilities;
using Roslyn.Utilities;
......@@ -33,7 +34,13 @@ protected AbstractPersistentStorageService(IPersistentStorageLocationService loc
=> _locationService = locationService;
protected abstract string GetDatabaseFilePath(string workingFolderPath);
protected abstract bool TryOpenDatabase(Solution solution, string workingFolderPath, string databaseFilePath, out IChecksummedPersistentStorage storage);
/// <summary>
/// Can throw. If it does, the caller (<see cref="CreatePersistentStorage"/>) will attempt
/// to delete the database and retry opening one more time. If that fails again, the <see
/// cref="NoOpPersistentStorage"/> instance will be used.
/// </summary>
protected abstract IChecksummedPersistentStorage? TryOpenDatabase(Solution solution, string workingFolderPath, string databaseFilePath);
protected abstract bool ShouldDeleteDatabase(Exception exception);
IPersistentStorage IPersistentStorageService.GetStorage(Solution solution)
......@@ -137,9 +144,7 @@ private IChecksummedPersistentStorage CreatePersistentStorage(Solution solution,
var databaseFilePath = GetDatabaseFilePath(workingFolderPath);
try
{
return TryOpenDatabase(solution, workingFolderPath, databaseFilePath, out var persistentStorage)
? persistentStorage
: null;
return TryOpenDatabase(solution, workingFolderPath, databaseFilePath)
}
catch (Exception ex)
{
......
......@@ -62,9 +62,7 @@ private static bool TryInitializeLibrariesLazy()
return true;
}
public SQLitePersistentStorageService(
IOptionService optionService,
IPersistentStorageLocationService locationService)
public SQLitePersistentStorageService(IPersistentStorageLocationService locationService)
: base(optionService, locationService)
{
}
......@@ -84,22 +82,20 @@ protected override string GetDatabaseFilePath(string workingFolderPath)
return Path.Combine(workingFolderPath, StorageExtension, PersistentStorageFileName);
}
protected override bool TryOpenDatabase(
Solution solution, string workingFolderPath, string databaseFilePath, out IChecksummedPersistentStorage storage)
protected override IChecksummedPersistentStorage? TryOpenDatabase(
Solution solution, string workingFolderPath, string databaseFilePath)
{
if (!TryInitializeLibraries())
{
// SQLite is not supported on the current platform
storage = null;
return false;
return null;
}
// try to get db ownership lock. if someone else already has the lock. it will throw
var dbOwnershipLock = TryGetDatabaseOwnership(databaseFilePath);
if (dbOwnershipLock == null)
{
storage = null;
return false;
return null;
}
SQLitePersistentStorage sqlStorage = null;
......@@ -110,6 +106,7 @@ protected override string GetDatabaseFilePath(string workingFolderPath)
sqlStorage.Initialize(solution);
return sqlStorage;
}
catch (Exception)
{
......@@ -126,9 +123,6 @@ protected override string GetDatabaseFilePath(string workingFolderPath)
}
throw;
}
storage = sqlStorage;
return true;
}
private static IDisposable TryGetDatabaseOwnership(string databaseFilePath)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册