1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 03:28:20 +02:00

Refactored code to resolve custom build properties in Beef projects.

This commit is contained in:
LAPTOP-NV8MPI8C\Yuvan Wickramasinghe 2025-03-27 15:28:12 -07:00
parent 803b9890e2
commit b55f980531
No known key found for this signature in database
4 changed files with 585 additions and 77 deletions

View file

@ -1375,6 +1375,9 @@ namespace IDE
public bool QueueProjectCompile(Project project, Project hotProject, IDEApp.BuildCompletedCmd completedCompileCmd, List<String> hotFileNames, CompileKind compileKind)
{
CustomBuildProperties.ResolveProjectProperties(project);
defer CustomBuildProperties.UnresolveProjectProperties(project);
project.mLastDidBuild = false;
TestManager.ProjectInfo testProjectInfo = null;

View file

@ -0,0 +1,580 @@
using System;
using System.Collections;
using System.IO;
using System.Reflection;
using Beefy.utils;
namespace IDE
{
class CustomBuildProperties
{
static String[?] BUILT_IN_PROPERTIES = .(
"Slash",
"Var",
"Arguments",
"BuildDir",
"LinkFlags",
"ProjectDir",
"ProjectName",
"TargetDir",
"TargetPath",
"WorkingDir",
"ProjectName",
"VSToolPath",
"VSToolPath_x86",
"VSToolPath_x64",
"EmccPath",
"ScriptDir",
"Configuration",
"Platform",
"WorkspaceDir",
"BeefPath"
);
static Dictionary<String, String> mProperties = new .() ~ DeleteDictionaryAndKeysAndValues!(_);
static Dictionary<Project, Project> mProjects = new .() ~ DeleteDictionaryAndValues!(_);
static public void GetFileName(String outResult)
{
String workspaceDir = scope String();
if (gApp.mWorkspace.mDir == null)
Directory.GetCurrentDirectory(workspaceDir);
else
workspaceDir = gApp.mWorkspace.mDir;
outResult.Append(workspaceDir, "/BeefProperties.toml");
}
static public void Clear()
{
for (var entry in mProperties)
{
delete entry.key;
delete entry.value;
}
for (var entry in mProjects)
delete entry.value;
mProperties.Clear();
mProjects.Clear();
}
static public void Load()
{
const char8* PROPERTIES_STR = "Properties";
Clear();
String propertiesFileName = scope String();
GetFileName(propertiesFileName);
if (!File.Exists(propertiesFileName))
return;
StructuredData data = scope StructuredData();
if (gApp.StructuredLoad(data, propertiesFileName) case .Err(let err))
{
gApp.OutputErrorLine("Failed to load properties from: '{0}'", propertiesFileName);
return;
}
if (!data.Contains(PROPERTIES_STR))
return;
for (var property in data.Enumerate(PROPERTIES_STR))
{
String propertyStr = new String();
property.ToString(propertyStr);
if (Contains(propertyStr))
{
delete propertyStr;
continue;
}
String propertyValue = new String();
data.GetCurString(propertyValue);
mProperties.Add(propertyStr, propertyValue);
}
}
static public bool Contains(String property)
{
return mProperties.ContainsKey(property);
}
static public String Get(String property)
{
if (!Contains(property))
return null;
return mProperties[property];
}
static public void ResolveString(StringView configString, String outResult)
{
outResult.Set(configString);
// Find the property to resolve (if any).
int i = 0;
for (; i < outResult.Length - 2; i++)
{
if ((outResult[i] == '$') && (outResult[i + 1] == '('))
{
int parenPos = -1;
int openCount = 1;
bool inString = false;
char8 prevC = 0;
for (int checkIdx = i + 2; checkIdx < outResult.Length; checkIdx++)
{
char8 c = outResult[checkIdx];
if (inString)
{
if (prevC == '\\')
{
// Slashed char
prevC = 0;
continue;
}
if (c == '"')
inString = false;
}
else
{
if (c == '"')
inString = true;
else if (c == '(')
openCount++;
else if (c == ')')
{
openCount--;
if (openCount == 0)
{
parenPos = checkIdx;
break;
}
}
}
prevC = c;
}
if (parenPos != -1)
ReplaceBlock:
do
{
// If we reach here, a property has been found.
String replaceStr = scope String(outResult, i + 2, parenPos - i - 2);
// Ignore built-in properties because they are resolved elsewhere.
if (BUILT_IN_PROPERTIES.Contains(replaceStr))
continue;
String newString = Get(replaceStr);
// Resolve custom property value.
if (newString != null)
{
outResult.Remove(i, parenPos - i + 1);
outResult.Insert(i, newString);
i--;
}
}
}
}
}
static public void ResolveWorkspaceProperties(Workspace workspace)
{
}
static public void ResolveProjectProperties(Project project)
{
if (project == null)
return;
Project unresolvedProject = new Project();
mProjects[project] = unresolvedProject;
// Deep copy the project so unresolved custom build properties can be restored later,
// and resolve any custom build properties in place in the existing project.
if (project.mNamespace != null)
{
unresolvedProject.mNamespace.Set(project.mNamespace);
ResolveString(unresolvedProject.mNamespace, project.mNamespace);
}
if (project.mProjectDir != null)
{
unresolvedProject.mProjectDir.Set(project.mProjectDir);
ResolveString(unresolvedProject.mProjectDir, project.mProjectDir);
}
if (project.mProjectName != null)
{
unresolvedProject.mProjectName.Set(project.mProjectName);
ResolveString(unresolvedProject.mProjectName, project.mProjectName);
}
if (project.mProjectPath != null)
{
unresolvedProject.mProjectPath.Set(project.mProjectPath);
ResolveString(unresolvedProject.mProjectPath, project.mProjectPath);
}
if (project.mManagedInfo != null)
{
unresolvedProject.mManagedInfo = new Project.ManagedInfo();
unresolvedProject.mManagedInfo.mVersion.mVersion.Set(project.mManagedInfo.mVersion.mVersion);
unresolvedProject.mManagedInfo.mInfo.Set(project.mManagedInfo.mInfo);
ResolveString(unresolvedProject.mManagedInfo.mVersion.mVersion, project.mManagedInfo.mVersion.mVersion);
ResolveString(unresolvedProject.mManagedInfo.mInfo, project.mManagedInfo.mInfo);
}
if (project.mConfigs != null)
{
DeleteDictionaryAndKeysAndValues!(unresolvedProject.mConfigs);
unresolvedProject.mConfigs = new Dictionary<String, Project.Config>();
for (var config in project.mConfigs)
{
Project.Config unresolvedConfig = new Project.Config();
for (var platform in config.value.mPlatforms)
{
Project.Options unresolvedOptions = platform.value.Duplicate();
unresolvedConfig.mPlatforms[new String(platform.key)] = unresolvedOptions;
ResolveString(unresolvedOptions.mBuildOptions.mTargetDirectory, platform.value.mBuildOptions.mTargetDirectory);
ResolveString(unresolvedOptions.mBuildOptions.mTargetName, platform.value.mBuildOptions.mTargetName);
ResolveString(unresolvedOptions.mBuildOptions.mOtherLinkFlags, platform.value.mBuildOptions.mOtherLinkFlags);
for (int32 i = 0; i < unresolvedOptions.mBuildOptions.mLibPaths.Count; i++)
ResolveString(unresolvedOptions.mBuildOptions.mLibPaths[i], platform.value.mBuildOptions.mLibPaths[i]);
for (int32 i = 0; i < unresolvedOptions.mBuildOptions.mLinkDependencies.Count; i++)
ResolveString(unresolvedOptions.mBuildOptions.mLinkDependencies[i], platform.value.mBuildOptions.mLinkDependencies[i]);
for (int32 i = 0; i < unresolvedOptions.mBuildOptions.mPreBuildCmds.Count; i++)
ResolveString(unresolvedOptions.mBuildOptions.mPreBuildCmds[i], platform.value.mBuildOptions.mPreBuildCmds[i]);
for (int32 i = 0; i < unresolvedOptions.mBuildOptions.mPostBuildCmds.Count; i++)
ResolveString(unresolvedOptions.mBuildOptions.mPostBuildCmds[i], platform.value.mBuildOptions.mPostBuildCmds[i]);
for (int32 i = 0; i < unresolvedOptions.mBuildOptions.mCleanCmds.Count; i++)
ResolveString(unresolvedOptions.mBuildOptions.mCleanCmds[i], platform.value.mBuildOptions.mCleanCmds[i]);
for (int32 i = 0; i < unresolvedOptions.mBeefOptions.mPreprocessorMacros.Count; i++)
ResolveString(unresolvedOptions.mBeefOptions.mPreprocessorMacros[i], platform.value.mBeefOptions.mPreprocessorMacros[i]);
for (int32 i = 0; i < unresolvedOptions.mBeefOptions.mDistinctBuildOptions.Count; i++)
{
ResolveString(unresolvedOptions.mBeefOptions.mDistinctBuildOptions[i].mFilter, platform.value.mBeefOptions.mDistinctBuildOptions[i].mFilter);
ResolveString(unresolvedOptions.mBeefOptions.mDistinctBuildOptions[i].mReflectMethodFilter, platform.value.mBeefOptions.mDistinctBuildOptions[i].mReflectMethodFilter);
}
ResolveString(unresolvedOptions.mCOptions.mOtherCFlags, platform.value.mCOptions.mOtherCFlags);
ResolveString(unresolvedOptions.mCOptions.mOtherCPPFlags, platform.value.mCOptions.mOtherCPPFlags);
for (int32 i = 0; i < unresolvedOptions.mCOptions.mIncludePaths.Count; i++)
ResolveString(unresolvedOptions.mCOptions.mIncludePaths[i], platform.value.mCOptions.mIncludePaths[i]);
for (int32 i = 0; i < unresolvedOptions.mCOptions.mPreprocessorMacros.Count; i++)
ResolveString(unresolvedOptions.mCOptions.mPreprocessorMacros[i], platform.value.mCOptions.mPreprocessorMacros[i]);
ResolveString(unresolvedOptions.mCOptions.mAddressSanitizer, platform.value.mCOptions.mAddressSanitizer);
for (int32 i = 0; i < unresolvedOptions.mCOptions.mSpecificWarningsAsErrors.Count; i++)
ResolveString(unresolvedOptions.mCOptions.mSpecificWarningsAsErrors[i], platform.value.mCOptions.mSpecificWarningsAsErrors[i]);
for (int32 i = 0; i < unresolvedOptions.mCOptions.mDisableSpecificWarnings.Count; i++)
ResolveString(unresolvedOptions.mCOptions.mDisableSpecificWarnings[i], platform.value.mCOptions.mDisableSpecificWarnings[i]);
ResolveString(unresolvedOptions.mDebugOptions.mCommand, platform.value.mDebugOptions.mCommand);
ResolveString(unresolvedOptions.mDebugOptions.mCommandArguments, platform.value.mDebugOptions.mCommandArguments);
ResolveString(unresolvedOptions.mDebugOptions.mWorkingDirectory, platform.value.mDebugOptions.mWorkingDirectory);
for (int32 i = 0; i < unresolvedOptions.mDebugOptions.mEnvironmentVars.Count; i++)
ResolveString(unresolvedOptions.mDebugOptions.mEnvironmentVars[i], platform.value.mDebugOptions.mEnvironmentVars[i]);
}
unresolvedProject.mConfigs[new String(config.key)] = unresolvedConfig;
}
}
if (project.mGeneralOptions != null)
{
unresolvedProject.mGeneralOptions.mProjectNameDecl.Set(project.mGeneralOptions.mProjectNameDecl);
ResolveString(unresolvedProject.mGeneralOptions.mProjectNameDecl, project.mGeneralOptions.mProjectNameDecl);
unresolvedProject.mGeneralOptions.mVersion.mVersion.Set(project.mGeneralOptions.mVersion.mVersion);
ResolveString(unresolvedProject.mGeneralOptions.mVersion.mVersion, project.mGeneralOptions.mVersion.mVersion);
unresolvedProject.mGeneralOptions.mAliases.Clear();
for (String alias in project.mGeneralOptions.mAliases)
{
String unresolvedAlias = new String(alias);
unresolvedProject.mGeneralOptions.mAliases.Add(unresolvedAlias);
ResolveString(unresolvedAlias, alias);
}
}
if (project.mBeefGlobalOptions != null)
{
unresolvedProject.mBeefGlobalOptions.mStartupObject.Set(project.mBeefGlobalOptions.mStartupObject);
ResolveString(unresolvedProject.mBeefGlobalOptions.mStartupObject, project.mBeefGlobalOptions.mStartupObject);
unresolvedProject.mBeefGlobalOptions.mDefaultNamespace.Set(project.mBeefGlobalOptions.mDefaultNamespace);
ResolveString(unresolvedProject.mBeefGlobalOptions.mDefaultNamespace, project.mBeefGlobalOptions.mDefaultNamespace);
unresolvedProject.mBeefGlobalOptions.mPreprocessorMacros.Clear();
for (String macro in project.mBeefGlobalOptions.mPreprocessorMacros)
{
String unresolvedMacro = new String(macro);
unresolvedProject.mBeefGlobalOptions.mPreprocessorMacros.Add(unresolvedMacro);
ResolveString(unresolvedMacro, macro);
}
unresolvedProject.mBeefGlobalOptions.mDistinctBuildOptions.Clear();
for (DistinctBuildOptions options in project.mBeefGlobalOptions.mDistinctBuildOptions)
{
DistinctBuildOptions unresolvedOptions = new DistinctBuildOptions();
unresolvedOptions.mFilter.Set(options.mFilter);
unresolvedOptions.mReflectMethodFilter.Set(options.mReflectMethodFilter);
unresolvedProject.mBeefGlobalOptions.mDistinctBuildOptions.Add(unresolvedOptions);
ResolveString(unresolvedOptions.mFilter, options.mFilter);
ResolveString(unresolvedOptions.mReflectMethodFilter, options.mReflectMethodFilter);
}
}
if (project.mWindowsOptions != null)
{
unresolvedProject.mWindowsOptions.mIconFile.Set(project.mWindowsOptions.mIconFile);
unresolvedProject.mWindowsOptions.mManifestFile.Set(project.mWindowsOptions.mManifestFile);
unresolvedProject.mWindowsOptions.mDescription.Set(project.mWindowsOptions.mDescription);
unresolvedProject.mWindowsOptions.mComments.Set(project.mWindowsOptions.mComments);
unresolvedProject.mWindowsOptions.mCompany.Set(project.mWindowsOptions.mCompany);
unresolvedProject.mWindowsOptions.mProduct.Set(project.mWindowsOptions.mProduct);
unresolvedProject.mWindowsOptions.mCopyright.Set(project.mWindowsOptions.mCopyright);
unresolvedProject.mWindowsOptions.mFileVersion.Set(project.mWindowsOptions.mFileVersion);
unresolvedProject.mWindowsOptions.mProductVersion.Set(project.mWindowsOptions.mProductVersion);
ResolveString(unresolvedProject.mWindowsOptions.mIconFile, project.mWindowsOptions.mIconFile);
ResolveString(unresolvedProject.mWindowsOptions.mManifestFile, project.mWindowsOptions.mManifestFile);
ResolveString(unresolvedProject.mWindowsOptions.mDescription, project.mWindowsOptions.mDescription);
ResolveString(unresolvedProject.mWindowsOptions.mComments, project.mWindowsOptions.mComments);
ResolveString(unresolvedProject.mWindowsOptions.mCompany, project.mWindowsOptions.mCompany);
ResolveString(unresolvedProject.mWindowsOptions.mProduct, project.mWindowsOptions.mProduct);
ResolveString(unresolvedProject.mWindowsOptions.mCopyright, project.mWindowsOptions.mCopyright);
ResolveString(unresolvedProject.mWindowsOptions.mFileVersion, project.mWindowsOptions.mFileVersion);
ResolveString(unresolvedProject.mWindowsOptions.mProductVersion, project.mWindowsOptions.mProductVersion);
}
if (project.mLinuxOptions != null)
{
unresolvedProject.mLinuxOptions.mOptions.Set(project.mLinuxOptions.mOptions);
ResolveString(unresolvedProject.mLinuxOptions.mOptions, project.mLinuxOptions.mOptions);
}
if (project.mDependencies != null)
{
unresolvedProject.mDependencies.Clear();
for (Project.Dependency dependency in project.mDependencies)
{
Project.Dependency unresolvedDependency = new Project.Dependency();
unresolvedDependency.mVerSpec = dependency.mVerSpec.Duplicate();
if (dependency.mProjectName != null)
{
unresolvedDependency.mProjectName = new String();
unresolvedDependency.mProjectName.Set(dependency.mProjectName);
ResolveString(unresolvedDependency.mProjectName, dependency.mProjectName);
}
unresolvedProject.mDependencies.Add(unresolvedDependency);
}
}
}
static public void UnresolveProjectProperties(Project project)
{
if (project == null)
return;
if (!mProjects.ContainsKey(project))
return;
Project unresolvedProject = mProjects[project];
// Unpack unresolved strings into the project.
if (project.mNamespace != null)
project.mNamespace.Set(unresolvedProject.mNamespace);
if (project.mProjectDir != null)
project.mProjectDir.Set(unresolvedProject.mProjectDir);
if (project.mProjectName != null)
project.mProjectName.Set(unresolvedProject.mProjectName);
if (project.mProjectPath != null)
project.mProjectPath.Set(unresolvedProject.mProjectPath);
if (project.mManagedInfo != null)
{
project.mManagedInfo.mVersion.mVersion.Set(unresolvedProject.mManagedInfo.mVersion.mVersion);
project.mManagedInfo.mInfo.Set(unresolvedProject.mManagedInfo.mInfo);
}
if (project.mConfigs != null)
{
for (var config in project.mConfigs)
{
Project.Config unresolvedConfig = null;
for (var c in unresolvedProject.mConfigs)
{
if (config.key.Equals(c.key))
{
unresolvedConfig = c.value;
break;
}
}
if (unresolvedConfig == null)
continue;
for (var platform in config.value.mPlatforms)
{
Project.Options unresolvedOptions = null;
for (var p in unresolvedConfig.mPlatforms)
{
if (platform.key.Equals(p.key))
{
unresolvedOptions = p.value;
break;
}
}
if (unresolvedOptions == null)
continue;
platform.value.mBuildOptions.mTargetDirectory.Set(unresolvedOptions.mBuildOptions.mTargetDirectory);
platform.value.mBuildOptions.mTargetName.Set(unresolvedOptions.mBuildOptions.mTargetName);
platform.value.mBuildOptions.mOtherLinkFlags.Set(unresolvedOptions.mBuildOptions.mOtherLinkFlags);
for (int32 i = 0; i < platform.value.mBuildOptions.mLibPaths.Count; i++)
platform.value.mBuildOptions.mLibPaths[i].Set(unresolvedOptions.mBuildOptions.mLibPaths[i]);
for (int32 i = 0; i < platform.value.mBuildOptions.mLinkDependencies.Count; i++)
platform.value.mBuildOptions.mLinkDependencies[i].Set(unresolvedOptions.mBuildOptions.mLinkDependencies[i]);
for (int32 i = 0; i < platform.value.mBuildOptions.mPreBuildCmds.Count; i++)
platform.value.mBuildOptions.mPreBuildCmds[i].Set(unresolvedOptions.mBuildOptions.mPreBuildCmds[i]);
for (int32 i = 0; i < platform.value.mBuildOptions.mPostBuildCmds.Count; i++)
platform.value.mBuildOptions.mPostBuildCmds[i].Set(unresolvedOptions.mBuildOptions.mPostBuildCmds[i]);
for (int32 i = 0; i < platform.value.mBuildOptions.mCleanCmds.Count; i++)
platform.value.mBuildOptions.mCleanCmds[i].Set(unresolvedOptions.mBuildOptions.mCleanCmds[i]);
for (int32 i = 0; i < platform.value.mBeefOptions.mPreprocessorMacros.Count; i++)
platform.value.mBeefOptions.mPreprocessorMacros[i].Set(unresolvedOptions.mBeefOptions.mPreprocessorMacros[i]);
for (int32 i = 0; i < platform.value.mBeefOptions.mDistinctBuildOptions.Count; i++)
{
platform.value.mBeefOptions.mDistinctBuildOptions[i].mFilter.Set(unresolvedOptions.mBeefOptions.mDistinctBuildOptions[i].mFilter);
platform.value.mBeefOptions.mDistinctBuildOptions[i].mReflectMethodFilter.Set(unresolvedOptions.mBeefOptions.mDistinctBuildOptions[i].mReflectMethodFilter);
}
platform.value.mCOptions.mOtherCFlags.Set(unresolvedOptions.mCOptions.mOtherCFlags);
platform.value.mCOptions.mOtherCPPFlags.Set(unresolvedOptions.mCOptions.mOtherCPPFlags);
for (int32 i = 0; i < platform.value.mCOptions.mIncludePaths.Count; i++)
platform.value.mCOptions.mIncludePaths[i].Set(unresolvedOptions.mCOptions.mIncludePaths[i]);
for (int32 i = 0; i < platform.value.mCOptions.mPreprocessorMacros.Count; i++)
platform.value.mCOptions.mPreprocessorMacros[i].Set(unresolvedOptions.mCOptions.mPreprocessorMacros[i]);
platform.value.mCOptions.mAddressSanitizer.Set(unresolvedOptions.mCOptions.mAddressSanitizer);
for (int32 i = 0; i < platform.value.mCOptions.mSpecificWarningsAsErrors.Count; i++)
platform.value.mCOptions.mSpecificWarningsAsErrors[i].Set(unresolvedOptions.mCOptions.mSpecificWarningsAsErrors[i]);
for (int32 i = 0; i < platform.value.mCOptions.mDisableSpecificWarnings.Count; i++)
platform.value.mCOptions.mDisableSpecificWarnings[i].Set(unresolvedOptions.mCOptions.mDisableSpecificWarnings[i]);
platform.value.mDebugOptions.mCommand.Set(unresolvedOptions.mDebugOptions.mCommand);
platform.value.mDebugOptions.mCommandArguments.Set(unresolvedOptions.mDebugOptions.mCommandArguments);
platform.value.mDebugOptions.mWorkingDirectory.Set(unresolvedOptions.mDebugOptions.mWorkingDirectory);
for (int32 i = 0; i < platform.value.mDebugOptions.mEnvironmentVars.Count; i++)
platform.value.mDebugOptions.mEnvironmentVars[i].Set(unresolvedOptions.mDebugOptions.mEnvironmentVars[i]);
}
}
}
if (project.mGeneralOptions != null)
{
project.mGeneralOptions.mProjectNameDecl.Set(unresolvedProject.mGeneralOptions.mProjectNameDecl);
project.mGeneralOptions.mVersion.mVersion.Set(unresolvedProject.mGeneralOptions.mVersion.mVersion);
for (int32 i = 0; i < project.mGeneralOptions.mAliases.Count; i++)
project.mGeneralOptions.mAliases[i].Set(unresolvedProject.mGeneralOptions.mAliases[i]);
}
if (project.mBeefGlobalOptions != null)
{
project.mBeefGlobalOptions.mStartupObject.Set(unresolvedProject.mBeefGlobalOptions.mStartupObject);
project.mBeefGlobalOptions.mDefaultNamespace.Set(unresolvedProject.mBeefGlobalOptions.mDefaultNamespace);
for (int32 i = 0; i < project.mBeefGlobalOptions.mPreprocessorMacros.Count; i++)
project.mBeefGlobalOptions.mPreprocessorMacros[i].Set(unresolvedProject.mBeefGlobalOptions.mPreprocessorMacros[i]);
for (int32 i = 0; i < project.mBeefGlobalOptions.mDistinctBuildOptions.Count; i++)
{
project.mBeefGlobalOptions.mDistinctBuildOptions[i].mFilter.Set(unresolvedProject.mBeefGlobalOptions.mDistinctBuildOptions[i].mFilter);
project.mBeefGlobalOptions.mDistinctBuildOptions[i].mReflectMethodFilter.Set(unresolvedProject.mBeefGlobalOptions.mDistinctBuildOptions[i].mReflectMethodFilter);
}
}
if (project.mWindowsOptions != null)
{
project.mWindowsOptions.mIconFile.Set(unresolvedProject.mWindowsOptions.mIconFile);
project.mWindowsOptions.mManifestFile.Set(unresolvedProject.mWindowsOptions.mManifestFile);
project.mWindowsOptions.mDescription.Set(unresolvedProject.mWindowsOptions.mDescription);
project.mWindowsOptions.mComments.Set(unresolvedProject.mWindowsOptions.mComments);
project.mWindowsOptions.mCompany.Set(unresolvedProject.mWindowsOptions.mCompany);
project.mWindowsOptions.mProduct.Set(unresolvedProject.mWindowsOptions.mProduct);
project.mWindowsOptions.mCopyright.Set(unresolvedProject.mWindowsOptions.mCopyright);
project.mWindowsOptions.mFileVersion.Set(unresolvedProject.mWindowsOptions.mFileVersion);
project.mWindowsOptions.mProductVersion.Set(unresolvedProject.mWindowsOptions.mProductVersion);
}
if (project.mLinuxOptions != null)
project.mLinuxOptions.mOptions.Set(unresolvedProject.mLinuxOptions.mOptions);
if (project.mDependencies != null)
{
for (int32 i = 0; i < project.mDependencies.Count; i++)
{
if (project.mDependencies[i].mProjectName != null)
project.mDependencies[i].mProjectName.Set(unresolvedProject.mDependencies[i].mProjectName);
}
}
// Clean up unresolved project.
delete mProjects[project];
mProjects.Remove(project);
}
}
}

View file

@ -229,7 +229,6 @@ namespace IDE
public HashSet<String> mWantUpdateVersionLocks ~ DeleteContainerAndItems!(_);
public Settings mSettings = new Settings() ~ delete _;
public Workspace mWorkspace = new Workspace() ~ delete _;
public Dictionary<String, String> mCustomProperties = new .() ~ DeleteDictionaryAndValues!(_);
public FileWatcher mFileWatcher = new FileWatcher() ~ delete _;
#if !CLI
public FileRecovery mFileRecovery = new FileRecovery() ~ delete _;
@ -895,8 +894,6 @@ namespace IDE
mExecutionPaused = false;
}
ClearProperties();
base.Shutdown();
}
@ -990,7 +987,6 @@ namespace IDE
mWorkspace.mName = new String();
Path.GetFileName(mWorkspace.mDir, mWorkspace.mName);
LoadProperties(true);
LoadWorkspace(.OpenOrNew);
FinishShowingNewWorkspace();
}
@ -2267,16 +2263,11 @@ namespace IDE
String workspaceDir = scope String();
if (mWorkspace.mDir == null)
{
Directory.GetCurrentDirectory(workspaceDir);
}
else
{
workspaceDir = mWorkspace.mDir;
}
outResult.Append(workspaceDir, "/BeefProperties.toml");
IDEUtils.FixFilePath(outResult);
}
bool GetWorkspaceFileName(String outResult)
@ -2978,69 +2969,12 @@ namespace IDE
FlushDeferredLoadProjects();
}
public void ClearProperties()
{
for (var entry in mCustomProperties)
{
delete entry.key;
delete entry.value;
}
mCustomProperties.Clear();
}
public void LoadProperties(bool clear = false)
{
const char8* PROPERTIES_STR = "Properties";
if (clear)
{
ClearProperties();
}
String propertiesFileName = scope String();
GetPropertiesFileName(propertiesFileName);
if (!File.Exists(propertiesFileName))
{
return;
}
StructuredData data = scope StructuredData();
if (StructuredLoad(data, propertiesFileName) case .Err(let err))
{
OutputErrorLine("Failed to load properties '{0}'", propertiesFileName);
LoadFailed();
return;
}
if (!data.Contains(PROPERTIES_STR))
{
return;
}
for (var propertyName in data.Enumerate(PROPERTIES_STR))
{
String propertyKey = new String();
propertyName.ToString(propertyKey);
if (mCustomProperties.ContainsKey(propertyKey))
{
delete propertyKey;
continue;
}
String propertyValue = new String();
data.GetCurString(propertyValue);
mCustomProperties.Add(propertyKey, propertyValue);
}
}
protected void LoadWorkspace(BeefVerb verb)
{
scope AutoBeefPerf("IDEApp.LoadWorkspace");
CustomBuildProperties.Load();
AddRecentFile(.OpenedWorkspace, mWorkspace.mDir);
StructuredData data = null;
@ -3273,7 +3207,6 @@ namespace IDE
CloseWorkspace();
mWorkspace.mDir = new String(workspaceDir);
mWorkspace.mName = new String(workspaceName);
LoadProperties(true);
LoadWorkspace(.Open);
FinishShowingNewWorkspace();
}
@ -11009,13 +10942,6 @@ namespace IDE
}
case "BeefPath":
newString = gApp.mInstallDir;
default:
// Check if any custom properties match the string.
if (mCustomProperties.ContainsKey(replaceStr))
{
newString = scope:ReplaceBlock String();
newString.Append(mCustomProperties[replaceStr]);
}
}
}

View file

@ -143,7 +143,6 @@ namespace IDE.ui
app.mWorkspace.mDir = new String(projDirectory);
app.mWorkspace.mName = new String(projName);
app.LoadProperties(true);
app.[Friend]LoadWorkspace(.OpenOrNew);
app.[Friend]FinishShowingNewWorkspace(false);