提交 f7059b37 编写于 作者: C Chris Sienkiewicz

Revert the temporary IDE changes for preview

上级 b2ff2889
......@@ -264,7 +264,7 @@ public static IEnumerable<AnalyzerPerformanceInfo> ToAnalyzerPerformanceInfo(thi
}
Contract.ThrowIfFalse(project.SupportsCompilation);
//AssertCompilation(project, compilation); //PROTOTYPE: this assert no longer holds
AssertCompilation(project, compilation);
// in IDE, we always set concurrentAnalysis == false otherwise, we can get into thread starvation due to
// async being used with synchronous blocking concurrency.
......
......@@ -3,7 +3,6 @@
// See the LICENSE file in the project root for more information.
using System;
using System.Collections.Immutable;
using System.Composition;
using Microsoft.CodeAnalysis.Host;
using Microsoft.CodeAnalysis.Host.Mef;
......@@ -52,17 +51,5 @@ CompilationOptions ICompilationFactoryService.GetDefaultCompilationOptions()
{
return s_defaultOptions;
}
//PROTOTYPE
#nullable enable
GeneratorDriver? ICompilationFactoryService.CreateGeneratorDriver(Compilation compilation, ParseOptions parseOptions, ImmutableArray<ISourceGenerator> generators, ImmutableArray<AdditionalText> additionalTexts)
{
// PROTOTYPE: for now we gate behind langver == preview. We'll remove this before final shipping, as the feature is langver agnostic
if (((CSharpParseOptions)parseOptions).LanguageVersion != LanguageVersion.Preview)
{
return null;
}
return new CSharpGeneratorDriver(compilation, parseOptions, generators, additionalTexts);
}
}
}
......@@ -3,7 +3,6 @@
// See the LICENSE file in the project root for more information.
using System;
using System.Collections.Immutable;
namespace Microsoft.CodeAnalysis.Host
{
......@@ -14,8 +13,5 @@ internal interface ICompilationFactoryService : ILanguageService
Compilation GetCompilationFromCompilationReference(MetadataReference reference);
bool IsCompilationReference(MetadataReference reference);
CompilationOptions GetDefaultCompilationOptions();
// PROTOTYPE: an easy way to get a generator driver into the IDE layer
GeneratorDriver CreateGeneratorDriver(Compilation compilation, ParseOptions parseOptions, ImmutableArray<ISourceGenerator> generators, ImmutableArray<AdditionalText> additionalTexts);
}
}
......@@ -699,6 +699,14 @@ public ProjectState WithMetadataReferences(IEnumerable<MetadataReference> metada
projectInfo: this.ProjectInfo.WithMetadataReferences(metadataReferences).WithVersion(this.Version.GetNewerVersion()));
}
public ProjectState AddAnalyzerReference(AnalyzerReference analyzerReference)
{
Debug.Assert(!this.AnalyzerReferences.Contains(analyzerReference));
return this.With(
projectInfo: this.ProjectInfo.WithAnalyzerReferences(this.AnalyzerReferences.ToImmutableArray().Add(analyzerReference)).WithVersion(this.Version.GetNewerVersion()));
}
public ProjectState RemoveAnalyzerReference(AnalyzerReference analyzerReference)
{
Debug.Assert(this.AnalyzerReferences.Contains(analyzerReference));
......
......@@ -592,7 +592,15 @@ public Solution WithProjectMetadataReferences(ProjectId projectId, IEnumerable<M
/// specified analyzer reference.
/// </summary>
public Solution AddAnalyzerReference(ProjectId projectId, AnalyzerReference analyzerReference)
=> AddAnalyzerReferences(projectId, ImmutableArray.Create(analyzerReference));
{
var newState = _state.AddAnalyzerReference(projectId, analyzerReference);
if (newState == _state)
{
return this;
}
return new Solution(newState);
}
/// <summary>
/// Create a new solution instance with the project specified updated to include the
......
......@@ -48,9 +48,6 @@ internal partial class SolutionState
// Values for all these are created on demand.
private ImmutableDictionary<ProjectId, CompilationTracker> _projectIdToTrackerMap;
// PROTOTYPE: create a generator driver per-project
private ImmutableDictionary<ProjectId, GeneratorDriver> _projectIdToGeneratorDriverMap;
// Checksums for this solution state
private readonly ValueSource<SolutionStateChecksums> _lazyChecksums;
......@@ -63,7 +60,6 @@ internal partial class SolutionState
SerializableOptionSet options,
ImmutableDictionary<ProjectId, ProjectState> idToProjectStateMap,
ImmutableDictionary<ProjectId, CompilationTracker> projectIdToTrackerMap,
ImmutableDictionary<ProjectId, GeneratorDriver> projectIdToGeneratorDriverMap,
ImmutableDictionary<string, ImmutableArray<DocumentId>> filePathToDocumentIdsMap,
ProjectDependencyGraph dependencyGraph)
{
......@@ -75,7 +71,6 @@ internal partial class SolutionState
Options = options;
_projectIdToProjectStateMap = idToProjectStateMap;
_projectIdToTrackerMap = projectIdToTrackerMap;
_projectIdToGeneratorDriverMap = projectIdToGeneratorDriverMap;
_filePathToDocumentIdsMap = filePathToDocumentIdsMap;
_dependencyGraph = dependencyGraph;
......@@ -99,7 +94,6 @@ internal partial class SolutionState
options,
idToProjectStateMap: ImmutableDictionary<ProjectId, ProjectState>.Empty,
projectIdToTrackerMap: ImmutableDictionary<ProjectId, CompilationTracker>.Empty,
projectIdToGeneratorDriverMap: ImmutableDictionary<ProjectId, GeneratorDriver>.Empty,
filePathToDocumentIdsMap: ImmutableDictionary.Create<string, ImmutableArray<DocumentId>>(StringComparer.OrdinalIgnoreCase),
dependencyGraph: ProjectDependencyGraph.Empty)
{
......@@ -179,7 +173,6 @@ private void CheckInvariants()
SerializableOptionSet? options = null,
ImmutableDictionary<ProjectId, ProjectState>? idToProjectStateMap = null,
ImmutableDictionary<ProjectId, CompilationTracker>? projectIdToTrackerMap = null,
ImmutableDictionary<ProjectId, GeneratorDriver>? projectIdToGeneratorDriverMap = null,
ImmutableDictionary<string, ImmutableArray<DocumentId>>? filePathToDocumentIdsMap = null,
ProjectDependencyGraph? dependencyGraph = null)
{
......@@ -191,7 +184,6 @@ private void CheckInvariants()
options ??= Options.WithLanguages(GetProjectLanguages(idToProjectStateMap));
projectIdToTrackerMap ??= _projectIdToTrackerMap;
filePathToDocumentIdsMap ??= _filePathToDocumentIdsMap;
projectIdToGeneratorDriverMap ??= _projectIdToGeneratorDriverMap;
dependencyGraph ??= _dependencyGraph;
if (branchId == _branchId &&
......@@ -216,7 +208,6 @@ private void CheckInvariants()
options,
idToProjectStateMap,
projectIdToTrackerMap,
projectIdToGeneratorDriverMap,
filePathToDocumentIdsMap,
dependencyGraph);
}
......@@ -242,7 +233,6 @@ private void CheckInvariants()
Options,
_projectIdToProjectStateMap,
_projectIdToTrackerMap,
_projectIdToGeneratorDriverMap,
_filePathToDocumentIdsMap,
_dependencyGraph);
}
......@@ -1078,6 +1068,26 @@ public SolutionState WithProjectMetadataReferences(ProjectId projectId, IEnumera
return this.ForkProject(this.GetProjectState(projectId)!.WithMetadataReferences(metadataReferences));
}
/// <summary>
/// Create a new solution instance with the project specified updated to include the
/// specified analyzer reference.
/// </summary>
public SolutionState AddAnalyzerReference(ProjectId projectId, AnalyzerReference analyzerReference)
{
if (projectId == null)
{
throw new ArgumentNullException(nameof(projectId));
}
if (analyzerReference == null)
{
throw new ArgumentNullException(nameof(analyzerReference));
}
CheckContainsProject(projectId);
return this.ForkProject(this.GetProjectState(projectId)!.AddAnalyzerReference(analyzerReference));
}
/// <summary>
/// Create a new solution instance with the project specified updated to include the
/// specified analyzer references.
......@@ -1099,13 +1109,6 @@ public SolutionState AddAnalyzerReferences(ProjectId projectId, IEnumerable<Anal
return this;
}
//PROTOTYPE
if (_projectIdToGeneratorDriverMap.TryGetValue(projectId, out var driver))
{
driver = driver.AddGenerators(analyzerReferences.SelectMany(r => r.GetGenerators()).ToImmutableArray());
_projectIdToGeneratorDriverMap = _projectIdToGeneratorDriverMap.SetItem(projectId, driver);
}
CheckContainsProject(projectId);
return this.ForkProject(this.GetProjectState(projectId)!.AddAnalyzerReferences(analyzerReferences));
}
......@@ -1127,14 +1130,6 @@ public SolutionState RemoveAnalyzerReference(ProjectId projectId, AnalyzerRefere
}
CheckContainsProject(projectId);
//PROTOTYPE:
if (_projectIdToGeneratorDriverMap.TryGetValue(projectId, out var driver))
{
driver = driver.RemoveGenerators(analyzerReference.GetGenerators());
_projectIdToGeneratorDriverMap = _projectIdToGeneratorDriverMap.SetItem(projectId, driver);
}
return this.ForkProject(this.GetProjectState(projectId)!.RemoveAnalyzerReference(analyzerReference));
}
......@@ -1823,31 +1818,11 @@ public bool TryGetCompilation(ProjectId projectId, [NotNullWhen(returnValue: tru
/// <remarks>
/// The compilation is guaranteed to have a syntax tree for each document of the project.
/// </remarks>
public async Task<Compilation?> GetCompilationAsync(ProjectState project, CancellationToken cancellationToken)
public Task<Compilation?> GetCompilationAsync(ProjectState project, CancellationToken cancellationToken)
{
if (project.SupportsCompilation)
{
var comp = await GetCompilationTracker(project.Id).GetCompilationAsync(this, cancellationToken).ConfigureAwait(false);
// PROTOTYPE: either get an existing generator, or create a new one
GeneratorDriver? driver = _projectIdToGeneratorDriverMap.ContainsKey(project.Id)
? _projectIdToGeneratorDriverMap[project.Id]
: project.LanguageServices.CompilationFactory?.CreateGeneratorDriver(comp, project.ParseOptions,
generators: project.AnalyzerReferences.SelectMany(r => r.GetGenerators()).ToImmutableArray(),
additionalTexts: project.AdditionalDocumentStates.Values.SelectAsArray<TextDocumentState, AdditionalText>(d => new AdditionalTextWithState(d)));
if (driver is object)
{
// PROTOTYPE: obviously we don't want to run full generation everytime
// we should instead periodically run full generation, and TryApplyEdits as needed.
// For now this lets us imagine what the experience feels like in the IDE
driver = driver.RunFullGeneration(comp, out comp, out _);
_projectIdToGeneratorDriverMap = _projectIdToGeneratorDriverMap.SetItem(project.Id, driver);
}
return comp;
}
return null;
return project.SupportsCompilation
? GetCompilationTracker(project.Id).GetCompilationAsync(this, cancellationToken).AsNullable()
: SpecializedTasks.Null<Compilation>();
}
/// <summary>
......
......@@ -2,7 +2,6 @@
' The .NET Foundation licenses this file to you under the MIT license.
' See the LICENSE file in the project root for more information.
Imports System.Collections.Immutable
Imports System.Composition
Imports Microsoft.CodeAnalysis.Host
Imports Microsoft.CodeAnalysis.Host.Mef
......@@ -64,10 +63,5 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Public Function GetDefaultCompilationOptions() As CompilationOptions Implements ICompilationFactoryService.GetDefaultCompilationOptions
Return s_defaultOptions
End Function
'PROTOTYPE
Public Function CreateGeneratorDriver(compilation As Compilation, parseOptions As ParseOptions, generators As ImmutableArray(Of ISourceGenerator), additionalTexts As ImmutableArray(Of AdditionalText)) As GeneratorDriver Implements ICompilationFactoryService.CreateGeneratorDriver
Return Nothing
End Function
End Class
End Namespace
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册