1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-10 04:22:20 +02:00

Fixed some loading issues

This commit is contained in:
Brian Fiete 2019-12-01 10:19:00 -08:00
parent 2bb2a5926a
commit 9c44273737
2 changed files with 67 additions and 35 deletions

View file

@ -2236,6 +2236,34 @@ namespace IDE
return .Err; return .Err;
} }
void FlushDeferredLoadProjects()
{
while (true)
{
bool hadLoad = false;
for (int projectIdx = 0; projectIdx < mWorkspace.mProjects.Count; projectIdx++)
{
var project = mWorkspace.mProjects[projectIdx];
if (project.mLoadDeferred)
{
hadLoad = true;
var projectPath = project.mProjectPath;
if (!project.Load(projectPath))
{
OutputErrorLine("Failed to load project '{0}' from '{1}'", project.mProjectName, projectPath);
LoadFailed();
project.mFailed = true;
}
AddProjectToWorkspace(project, false);
}
}
if (!hadLoad)
break;
}
}
protected void LoadWorkspace(BeefVerb verb) protected void LoadWorkspace(BeefVerb verb)
{ {
scope AutoBeefPerf("IDEApp.LoadWorkspace"); scope AutoBeefPerf("IDEApp.LoadWorkspace");
@ -2428,30 +2456,7 @@ namespace IDE
mWorkspace.Deserialize(data); mWorkspace.Deserialize(data);
} }
while (true) FlushDeferredLoadProjects();
{
bool hadLoad = false;
for (int projectIdx = 0; projectIdx < mWorkspace.mProjects.Count; projectIdx++)
{
var project = mWorkspace.mProjects[projectIdx];
if (project.mLoadDeferred)
{
hadLoad = true;
var projectPath = project.mProjectPath;
if (!project.Load(projectPath))
{
OutputErrorLine("Failed to load project '{0}' from '{1}'", project.mProjectName, projectPath);
LoadFailed();
project.mFailed = true;
}
AddProjectToWorkspace(project, false);
}
}
if (!hadLoad)
break;
}
mWorkspace.FinishDeserialize(data); mWorkspace.FinishDeserialize(data);
mWorkspace.FixOptions(mConfigName, mPlatformName); mWorkspace.FixOptions(mConfigName, mPlatformName);
@ -2465,6 +2470,8 @@ namespace IDE
public void RetryProjectLoad(Project project) public void RetryProjectLoad(Project project)
{ {
LoadConfig();
var projectPath = project.mProjectPath; var projectPath = project.mProjectPath;
if (!project.Load(projectPath)) if (!project.Load(projectPath))
{ {
@ -2474,9 +2481,12 @@ namespace IDE
} }
else else
{ {
FlushDeferredLoadProjects();
mWorkspace.FixOptions();
project.mFailed = false; project.mFailed = false;
CurrentWorkspaceConfigChanged();
mProjectPanel.RebuildUI(); mProjectPanel.RebuildUI();
CurrentWorkspaceConfigChanged();
} }
} }
@ -2493,13 +2503,8 @@ namespace IDE
VerSpecRecord useVerSpecRecord = verSpecRecord; VerSpecRecord useVerSpecRecord = verSpecRecord;
String verConfigDir = mWorkspace.mDir; String verConfigDir = mWorkspace.mDir;
for (var project in mWorkspace.mProjects) if (let project = mWorkspace.FindProject(projectName))
{
if (project.mProjectName == projectName)
{
return project; return project;
}
}
if (useVerSpecRecord.mVerSpec case .SemVer) if (useVerSpecRecord.mVerSpec case .SemVer)
{ {
@ -2561,6 +2566,7 @@ namespace IDE
project.mProjectName.Set(projectName); project.mProjectName.Set(projectName);
project.DeferLoad(projectFilePath); project.DeferLoad(projectFilePath);
success = true; success = true;
mWorkspace.AddProjectToCache(project);
/*if (!project.Load(projectFilePath)) /*if (!project.Load(projectFilePath))
{ {
@ -3797,6 +3803,15 @@ namespace IDE
{ {
CompilerLog("IDEApp.Compile"); CompilerLog("IDEApp.Compile");
for (let project in gApp.mWorkspace.mProjects)
{
if (project.mFailed)
{
OutputErrorLine("Project '{}' is not loaded. Retry loading by right clicking on the project in the Workspace panel and selecting 'Retry Load'", project.mProjectName);
return;
}
}
if (AreTestsRunning()) if (AreTestsRunning())
return; return;
if (mHotResolveState != .None) if (mHotResolveState != .None)
@ -8959,7 +8974,7 @@ namespace IDE
projectError.Append(", "); projectError.Append(", ");
projectError.Append(useProjectStack[i].mProjectName); projectError.Append(useProjectStack[i].mProjectName);
} }
OutputLine(projectError); OutputErrorLine(projectError);
return true; return true;
} }

View file

@ -667,6 +667,23 @@ namespace IDE
mProjectNameMap.Clear(); mProjectNameMap.Clear();
} }
public void AddProjectToCache(Project project)
{
void Add(String name, Project project)
{
bool added = mProjectNameMap.TryAdd(name, var keyPtr, var valuePtr);
if (!added)
return;
*keyPtr = new String(name);
*valuePtr = project;
}
Add(project.mProjectName, project);
for (var alias in project.mGeneralOptions.mAliases)
Add(alias, project);
}
public Project FindProject(StringView projectName) public Project FindProject(StringView projectName)
{ {
if (mProjectNameMap.IsEmpty) if (mProjectNameMap.IsEmpty)
@ -681,7 +698,7 @@ namespace IDE
} }
for (var project in mProjects) for (var project in mProjects)
Add(project.mProjectName, project);; Add(project.mProjectName, project);
for (var project in mProjects) for (var project in mProjects)
{ {