Browse Source

Introjucer: optimised some unnecessary project copying.

tags/2021-05-28
jules 13 years ago
parent
commit
e875ddc3a1
9 changed files with 82 additions and 38 deletions
  1. +2
    -2
      extras/Introjucer/Source/Project Saving/jucer_ProjectExport_Android.h
  2. +23
    -12
      extras/Introjucer/Source/Project Saving/jucer_ProjectExport_MSVC.h
  3. +2
    -2
      extras/Introjucer/Source/Project Saving/jucer_ProjectExport_Make.h
  4. +7
    -3
      extras/Introjucer/Source/Project Saving/jucer_ProjectExport_XCode.h
  5. +37
    -3
      extras/Introjucer/Source/Project Saving/jucer_ProjectExporter.cpp
  6. +7
    -1
      extras/Introjucer/Source/Project Saving/jucer_ProjectExporter.h
  7. +2
    -1
      extras/Introjucer/Source/Project Saving/jucer_ProjectSaver.h
  8. +2
    -13
      extras/Introjucer/Source/Project/jucer_ProjectContentComponent.cpp
  9. +0
    -1
      extras/Introjucer/Source/Project/jucer_ProjectContentComponent.h

+ 2
- 2
extras/Introjucer/Source/Project Saving/jucer_ProjectExport_Android.h View File

@@ -405,8 +405,8 @@ private:
{ {
Array<RelativePath> files; Array<RelativePath> files;
for (int i = 0; i < groups.size(); ++i)
findAllFilesToCompile (groups.getReference(i), files);
for (int i = 0; i < getAllGroups().size(); ++i)
findAllFilesToCompile (getAllGroups().getReference(i), files);
MemoryOutputStream mo; MemoryOutputStream mo;
writeAndroidMk (mo, files); writeAndroidMk (mo, files);


+ 23
- 12
extras/Introjucer/Source/Project Saving/jucer_ProjectExport_MSVC.h View File

@@ -555,9 +555,9 @@ public:
if (hasResourceFile()) if (hasResourceFile())
{ {
for (int i = 0; i < groups.size(); ++i)
for (int i = 0; i < getAllGroups().size(); ++i)
{ {
Project::Item& group = groups.getReference(i);
Project::Item& group = getAllGroups().getReference(i);
if (group.getID() == ProjectSaver::getGeneratedGroupID()) if (group.getID() == ProjectSaver::getGeneratedGroupID())
{ {
@@ -672,9 +672,13 @@ protected:
void createFiles (XmlElement& files) const void createFiles (XmlElement& files) const
{ {
for (int i = 0; i < groups.size(); ++i)
if (groups.getReference(i).getNumChildren() > 0)
addFiles (groups.getReference(i), files);
for (int i = 0; i < getAllGroups().size(); ++i)
{
const Project::Item& group = getAllGroups().getReference(i);
if (group.getNumChildren() > 0)
addFiles (group, files);
}
} }
//============================================================================== //==============================================================================
@@ -1242,9 +1246,13 @@ protected:
XmlElement* cppFiles = projectXml.createNewChildElement ("ItemGroup"); XmlElement* cppFiles = projectXml.createNewChildElement ("ItemGroup");
XmlElement* headerFiles = projectXml.createNewChildElement ("ItemGroup"); XmlElement* headerFiles = projectXml.createNewChildElement ("ItemGroup");
for (int i = 0; i < groups.size(); ++i)
if (groups.getReference(i).getNumChildren() > 0)
addFilesToCompile (groups.getReference(i), *cppFiles, *headerFiles, *otherFilesGroup);
for (int i = 0; i < getAllGroups().size(); ++i)
{
const Project::Item& group = getAllGroups().getReference(i);
if (group.getNumChildren() > 0)
addFilesToCompile (group, *cppFiles, *headerFiles, *otherFilesGroup);
}
} }
if (iconFile != File::nonexistent) if (iconFile != File::nonexistent)
@@ -1386,10 +1394,13 @@ protected:
XmlElement* headers = filterXml.createNewChildElement ("ItemGroup"); XmlElement* headers = filterXml.createNewChildElement ("ItemGroup");
ScopedPointer<XmlElement> otherFilesGroup (new XmlElement ("ItemGroup")); ScopedPointer<XmlElement> otherFilesGroup (new XmlElement ("ItemGroup"));
for (int i = 0; i < groups.size(); ++i)
if (groups.getReference(i).getNumChildren() > 0)
addFilesToFilter (groups.getReference(i), groups.getReference(i).getName(),
*cpps, *headers, *otherFilesGroup, *groupsXml);
for (int i = 0; i < getAllGroups().size(); ++i)
{
const Project::Item& group = getAllGroups().getReference(i);
if (group.getNumChildren() > 0)
addFilesToFilter (group, group.getName(), *cpps, *headers, *otherFilesGroup, *groupsXml);
}
if (iconFile.exists()) if (iconFile.exists())
{ {


+ 2
- 2
extras/Introjucer/Source/Project Saving/jucer_ProjectExport_Make.h View File

@@ -85,8 +85,8 @@ public:
void create (const OwnedArray<LibraryModule>&) const void create (const OwnedArray<LibraryModule>&) const
{ {
Array<RelativePath> files; Array<RelativePath> files;
for (int i = 0; i < groups.size(); ++i)
findAllFilesToCompile (groups.getReference(i), files);
for (int i = 0; i < getAllGroups().size(); ++i)
findAllFilesToCompile (getAllGroups().getReference(i), files);
MemoryOutputStream mo; MemoryOutputStream mo;
writeMakefile (mo, files); writeMakefile (mo, files);


+ 7
- 3
extras/Introjucer/Source/Project Saving/jucer_ProjectExport_XCode.h View File

@@ -311,9 +311,13 @@ private:
{ {
StringArray topLevelGroupIDs; StringArray topLevelGroupIDs;
for (int i = 0; i < groups.size(); ++i)
if (groups.getReference(i).getNumChildren() > 0)
topLevelGroupIDs.add (addProjectItem (groups.getReference(i)));
for (int i = 0; i < getAllGroups().size(); ++i)
{
const Project::Item& group = getAllGroups().getReference(i);
if (group.getNumChildren() > 0)
topLevelGroupIDs.add (addProjectItem (group));
}
{ // Add 'resources' group { // Add 'resources' group
String resourcesGroupID (createID ("__resources")); String resourcesGroupID (createID ("__resources"));


+ 37
- 3
extras/Introjucer/Source/Project Saving/jucer_ProjectExporter.cpp View File

@@ -123,6 +123,34 @@ ProjectExporter* ProjectExporter::createPlatformDefaultExporter (Project& projec
return best.release(); return best.release();
} }
bool ProjectExporter::canProjectBeLaunched (Project* project)
{
if (project != nullptr)
{
const char* types[] =
{
#if JUCE_MAC
XCodeProjectExporter::getValueTreeTypeName (false),
XCodeProjectExporter::getValueTreeTypeName (true),
#elif JUCE_WINDOWS
MSVCProjectExporterVC2005::getValueTreeTypeName(),
MSVCProjectExporterVC2008::getValueTreeTypeName(),
MSVCProjectExporterVC2010::getValueTreeTypeName(),
#elif JUCE_LINUX
MakefileProjectExporter::getValueTreeTypeName(),
#endif
nullptr
};
for (const char** type = types; *type != nullptr; ++type)
if (project->getExporters().getChildWithName (*type).isValid())
return true;
}
return false;
}
//============================================================================== //==============================================================================
ProjectExporter::ProjectExporter (Project& project_, const ValueTree& settings_) ProjectExporter::ProjectExporter (Project& project_, const ValueTree& settings_)
: xcodeIsBundle (false), : xcodeIsBundle (false),
@@ -139,7 +167,6 @@ ProjectExporter::ProjectExporter (Project& project_, const ValueTree& settings_)
projectFolder (project_.getFile().getParentDirectory()), projectFolder (project_.getFile().getParentDirectory()),
modulesGroup (nullptr) modulesGroup (nullptr)
{ {
groups.add (project.getMainGroup().createCopy());
} }
ProjectExporter::~ProjectExporter() ProjectExporter::~ProjectExporter()
@@ -264,12 +291,19 @@ String ProjectExporter::replacePreprocessorTokens (const ProjectExporter::BuildC
return replacePreprocessorDefs (getAllPreprocessorDefs (config), sourceString); return replacePreprocessorDefs (getAllPreprocessorDefs (config), sourceString);
} }
void ProjectExporter::copyMainGroupFromProject()
{
jassert (itemGroups.size() == 0);
itemGroups.add (project.getMainGroup().createCopy());
}
Project::Item& ProjectExporter::getModulesGroup() Project::Item& ProjectExporter::getModulesGroup()
{ {
if (modulesGroup == nullptr) if (modulesGroup == nullptr)
{ {
groups.add (Project::Item::createGroup (project, "Juce Modules", "__modulesgroup__"));
modulesGroup = &(groups.getReference (groups.size() - 1));
jassert (itemGroups.size() > 0); // must call copyMainGroupFromProject before this.
itemGroups.add (Project::Item::createGroup (project, "Juce Modules", "__modulesgroup__"));
modulesGroup = &(itemGroups.getReference (itemGroups.size() - 1));
} }
return *modulesGroup; return *modulesGroup;


+ 7
- 1
extras/Introjucer/Source/Project Saving/jucer_ProjectExporter.h View File

@@ -44,6 +44,7 @@ public:
static ProjectExporter* createNewExporter (Project&, const String& name); static ProjectExporter* createNewExporter (Project&, const String& name);
static ProjectExporter* createExporter (Project&, const ValueTree& settings); static ProjectExporter* createExporter (Project&, const ValueTree& settings);
static ProjectExporter* createPlatformDefaultExporter (Project&); static ProjectExporter* createPlatformDefaultExporter (Project&);
static bool canProjectBeLaunched (Project*);
static String getCurrentPlatformExporterName(); static String getCurrentPlatformExporterName();
@@ -123,7 +124,9 @@ public:
RelativePath getJucePathFromProjectFolder() const; RelativePath getJucePathFromProjectFolder() const;
//============================================================================== //==============================================================================
Array<Project::Item> groups;
void copyMainGroupFromProject();
Array<Project::Item>& getAllGroups() noexcept { jassert (itemGroups.size() > 0); return itemGroups; }
const Array<Project::Item>& getAllGroups() const noexcept { jassert (itemGroups.size() > 0); return itemGroups; }
Project::Item& getModulesGroup(); Project::Item& getModulesGroup();
//============================================================================== //==============================================================================
@@ -275,6 +278,9 @@ protected:
const ProjectType& projectType; const ProjectType& projectType;
const String projectName; const String projectName;
const File projectFolder; const File projectFolder;
mutable Array<Project::Item> itemGroups;
void initItemGroups() const;
Project::Item* modulesGroup; Project::Item* modulesGroup;
virtual BuildConfiguration::Ptr createBuildConfig (const ValueTree&) const = 0; virtual BuildConfiguration::Ptr createBuildConfig (const ValueTree&) const = 0;


+ 2
- 1
extras/Introjucer/Source/Project Saving/jucer_ProjectSaver.h View File

@@ -502,6 +502,7 @@ private:
{ {
if (exporter->getTargetFolder().createDirectory()) if (exporter->getTargetFolder().createDirectory())
{ {
exporter->copyMainGroupFromProject();
exporter->settings = exporter->settings.createCopy(); exporter->settings = exporter->settings.createCopy();
exporter->addToExtraSearchPaths (RelativePath ("JuceLibraryCode", RelativePath::projectFolder)); exporter->addToExtraSearchPaths (RelativePath ("JuceLibraryCode", RelativePath::projectFolder));
@@ -513,7 +514,7 @@ private:
modules.getUnchecked(j)->prepareExporter (*exporter, *this); modules.getUnchecked(j)->prepareExporter (*exporter, *this);
sortGroupRecursively (generatedFilesGroup); sortGroupRecursively (generatedFilesGroup);
exporter->groups.add (generatedFilesGroup);
exporter->getAllGroups().add (generatedFilesGroup);
threadPool.addJob (new ExporterJob (*this, exporter.exporter.release(), modules), true); threadPool.addJob (new ExporterJob (*this, exporter.exporter.release(), modules), true);
} }


+ 2
- 13
extras/Introjucer/Source/Project/jucer_ProjectContentComponent.cpp View File

@@ -402,17 +402,6 @@ void ProjectContentComponent::updateMainWindowTitle()
mw->updateTitle (currentDocument != nullptr ? currentDocument->getName() : String::empty); mw->updateTitle (currentDocument != nullptr ? currentDocument->getName() : String::empty);
} }
bool ProjectContentComponent::canProjectBeLaunched() const
{
if (project != nullptr)
{
ScopedPointer <ProjectExporter> launcher (ProjectExporter::createPlatformDefaultExporter (*project));
return launcher != nullptr;
}
return false;
}
ApplicationCommandTarget* ProjectContentComponent::getNextCommandTarget() ApplicationCommandTarget* ProjectContentComponent::getNextCommandTarget()
{ {
return findFirstTargetParentComponent(); return findFirstTargetParentComponent();
@@ -507,7 +496,7 @@ void ProjectContentComponent::getCommandInfo (const CommandID commandID, Applica
#endif #endif
"Launches the project in an external IDE", "Launches the project in an external IDE",
CommandCategories::general, 0); CommandCategories::general, 0);
result.setActive (canProjectBeLaunched());
result.setActive (ProjectExporter::canProjectBeLaunched (project));
break; break;
case CommandIDs::saveAndOpenInIDE: case CommandIDs::saveAndOpenInIDE:
@@ -520,7 +509,7 @@ void ProjectContentComponent::getCommandInfo (const CommandID commandID, Applica
#endif #endif
"Saves the project and launches it in an external IDE", "Saves the project and launches it in an external IDE",
CommandCategories::general, 0); CommandCategories::general, 0);
result.setActive (canProjectBeLaunched());
result.setActive (ProjectExporter::canProjectBeLaunched (project));
result.defaultKeypresses.add (KeyPress ('l', ModifierKeys::commandModifier, 0)); result.defaultKeypresses.add (KeyPress ('l', ModifierKeys::commandModifier, 0));
break; break;


+ 0
- 1
extras/Introjucer/Source/Project/jucer_ProjectContentComponent.h View File

@@ -98,7 +98,6 @@ protected:
void changeListenerCallback (ChangeBroadcaster*); void changeListenerCallback (ChangeBroadcaster*);
void updateMainWindowTitle(); void updateMainWindowTitle();
bool reinvokeCommandAfterClosingPropertyEditors (const InvocationInfo&); bool reinvokeCommandAfterClosingPropertyEditors (const InvocationInfo&);
bool canProjectBeLaunched() const;
TreeView* getFilesTreeView() const; TreeView* getFilesTreeView() const;
ProjectTreeViewBase* getFilesTreeRoot() const; ProjectTreeViewBase* getFilesTreeRoot() const;


Loading…
Cancel
Save