Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Munn <gregm@microsoft.com>2019-12-05 00:52:51 +0300
committerGitHub <noreply@github.com>2019-12-05 00:52:51 +0300
commit717546659d0c7b5a01d48e700efe8d6fbf16f4a0 (patch)
tree5ce33e0d873c8801abee073ccd5a7019a749748e
parentc19261d56fc33fb9c05443b5aace98c5e9f81339 (diff)
parent4ab586283f68ba3905de57ebe8be8d229411076e (diff)
Merge pull request #9423 from mono/ide-fix-msbuild-designtime-target-feedback-loop
[Ide] Type system updates file information less often
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Project.cs38
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/MonoDevelopWorkspace.cs2
-rw-r--r--main/tests/MonoDevelop.Core.Tests/MonoDevelop.Projects/GetAnalyzerFilesAsyncTests.cs4
-rw-r--r--main/tests/MonoDevelop.Core.Tests/MonoDevelop.Projects/GetSourceFilesAsyncTests.cs4
4 files changed, 36 insertions, 12 deletions
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Project.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Project.cs
index f4626778f7..fcd55fd427 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Project.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Project.cs
@@ -678,7 +678,7 @@ namespace MonoDevelop.Projects
compileEvaluator.MarkDirty ();
Runtime.RunInMainThread (() => {
- NotifyModified ("Files");
+ NotifyModified ("CoreCompileFiles");
}).Ignore ();
}
@@ -719,6 +719,12 @@ namespace MonoDevelop.Projects
string evaluatedCompileItemsConfiguration;
bool reevaluateCoreCompileDependsOn;
TaskCompletionSource<CoreCompileEvaluationResult> evaluatedCompileItemsTask;
+ static readonly HashSet<string> coreCompileBuildActions = new HashSet<string> (new [] {
+ "Compile",
+ "Analyzer",
+ "EditorConfigFiles",
+ "AdditionalFiles"
+ });
public void MarkDirty ()
{
@@ -729,6 +735,11 @@ namespace MonoDevelop.Projects
}
}
+ public static bool IsCoreCompileFile (string buildAction)
+ {
+ return coreCompileBuildActions.Contains (buildAction);
+ }
+
/// <summary>
/// Gets the list of files that are included as Compile items from the evaluation of the CoreCompile dependecy targets
/// </summary>
@@ -775,10 +786,9 @@ namespace MonoDevelop.Projects
try {
// evaluate the Compile targets
var ctx = new TargetEvaluationContext ();
- ctx.ItemsToEvaluate.Add ("Compile");
- ctx.ItemsToEvaluate.Add ("Analyzer");
- ctx.ItemsToEvaluate.Add ("EditorConfigFiles");
- ctx.ItemsToEvaluate.Add ("AdditionalFiles");
+ foreach (string buildAction in coreCompileBuildActions) {
+ ctx.ItemsToEvaluate.Add (buildAction);
+ }
ctx.LoadReferencedProjects = false;
ctx.BuilderQueue = BuilderQueue.ShortOperations;
ctx.LogVerbosity = MSBuildVerbosity.Quiet;
@@ -2623,6 +2633,8 @@ namespace MonoDevelop.Projects
internal void NotifyFilePropertyChangedInProject (ProjectFile file, string property)
{
NotifyModified ("Files");
+ if (CachingCoreCompileEvaluator.IsCoreCompileFile (file.BuildAction))
+ NotifyModified ("CoreCompileFiles");
OnFilePropertyChangedInProject (new ProjectFileEventArgs (this, file, property));
}
@@ -2634,10 +2646,13 @@ namespace MonoDevelop.Projects
{
if (!objs.Any ())
return;
-
+
+ bool coreCompileFile = false;
var args = new ProjectFileEventArgs ();
foreach (ProjectFile file in objs) {
+ if (CachingCoreCompileEvaluator.IsCoreCompileFile (file.BuildAction))
+ coreCompileFile = true;
args.Add (new ProjectFileEventInfo (this, file));
if (DependencyResolutionEnabled) {
unresolvedDeps.Remove (file);
@@ -2650,6 +2665,8 @@ namespace MonoDevelop.Projects
}
}
NotifyModified ("Files");
+ if (coreCompileFile)
+ NotifyModified ("CoreCompileFiles");
OnFileRemovedFromProject (args);
ParentSolution?.OnRootDirectoriesChanged (this, isRemove: false, isAdd: false);
}
@@ -2658,15 +2675,20 @@ namespace MonoDevelop.Projects
{
if (!objs.Any ())
return;
-
+
+ bool coreCompileFile = false;
var args = new ProjectFileEventArgs ();
foreach (ProjectFile file in objs) {
+ if (CachingCoreCompileEvaluator.IsCoreCompileFile (file.BuildAction))
+ coreCompileFile = true;
args.Add (new ProjectFileEventInfo (this, file));
ResolveDependencies (file);
}
NotifyModified ("Files");
+ if (coreCompileFile)
+ NotifyModified ("CoreCompileFiles");
OnFileAddedToProject (args);
if (!Loading)
@@ -4785,6 +4807,8 @@ namespace MonoDevelop.Projects
internal void NotifyFileRenamedInProject (ProjectFileRenamedEventArgs args)
{
NotifyModified ("Files");
+ if (args.Any (file => CachingCoreCompileEvaluator.IsCoreCompileFile (file.ProjectFile.BuildAction)))
+ NotifyModified ("CoreCompileFiles");
OnFileRenamedInProject (args);
}
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/MonoDevelopWorkspace.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/MonoDevelopWorkspace.cs
index dd583a5c47..bdd4b2039c 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/MonoDevelopWorkspace.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/MonoDevelopWorkspace.cs
@@ -1486,7 +1486,7 @@ namespace MonoDevelop.Ide.TypeSystem
if (freezeProjectModify)
return;
try {
- if (!args.Any (x => x.Hint == "TargetFramework" || x.Hint == "References" || x.Hint == "CompilerParameters" || x.Hint == "Files"))
+ if (!args.Any (x => x.Hint == "TargetFramework" || x.Hint == "References" || x.Hint == "CompilerParameters" || x.Hint == "CoreCompileFiles"))
return;
var project = sender as MonoDevelop.Projects.DotNetProject;
if (project == null)
diff --git a/main/tests/MonoDevelop.Core.Tests/MonoDevelop.Projects/GetAnalyzerFilesAsyncTests.cs b/main/tests/MonoDevelop.Core.Tests/MonoDevelop.Projects/GetAnalyzerFilesAsyncTests.cs
index e13ec1fda4..73417b6d49 100644
--- a/main/tests/MonoDevelop.Core.Tests/MonoDevelop.Projects/GetAnalyzerFilesAsyncTests.cs
+++ b/main/tests/MonoDevelop.Core.Tests/MonoDevelop.Projects/GetAnalyzerFilesAsyncTests.cs
@@ -116,7 +116,7 @@ namespace MonoDevelop.Projects
var before = new MSBuildItem (); // Ensures import added at end of project.
project.MSBuildProject.AddNewImport ("consoleproject-import.targets", null, before);
- Assert.AreEqual ("Files", modifiedHint);
+ Assert.AreEqual ("CoreCompileFiles", modifiedHint);
analyzerFiles = await project.GetAnalyzerFilesAsync (project.Configurations [0].Selector);
@@ -124,7 +124,7 @@ namespace MonoDevelop.Projects
modifiedHint = null;
project.MSBuildProject.RemoveImport ("consoleproject-import.targets");
- Assert.AreEqual ("Files", modifiedHint);
+ Assert.AreEqual ("CoreCompileFiles", modifiedHint);
analyzerFiles = await project.GetAnalyzerFilesAsync (project.Configurations [0].Selector);
diff --git a/main/tests/MonoDevelop.Core.Tests/MonoDevelop.Projects/GetSourceFilesAsyncTests.cs b/main/tests/MonoDevelop.Core.Tests/MonoDevelop.Projects/GetSourceFilesAsyncTests.cs
index ea93d73e54..1289815b3f 100644
--- a/main/tests/MonoDevelop.Core.Tests/MonoDevelop.Projects/GetSourceFilesAsyncTests.cs
+++ b/main/tests/MonoDevelop.Core.Tests/MonoDevelop.Projects/GetSourceFilesAsyncTests.cs
@@ -196,7 +196,7 @@ namespace MonoDevelop.Projects
var before = new MSBuildItem (); // Ensures import added at end of project.
project.MSBuildProject.AddNewImport ("consoleproject-import.targets", null, before);
- Assert.AreEqual ("Files", modifiedHint);
+ Assert.AreEqual ("CoreCompileFiles", modifiedHint);
sourceFiles = await project.GetSourceFilesAsync (project.Configurations[0].Selector);
@@ -204,7 +204,7 @@ namespace MonoDevelop.Projects
modifiedHint = null;
project.MSBuildProject.RemoveImport ("consoleproject-import.targets");
- Assert.AreEqual ("Files", modifiedHint);
+ Assert.AreEqual ("CoreCompileFiles", modifiedHint);
sourceFiles = await project.GetSourceFilesAsync (project.Configurations[0].Selector);