diff --git a/extras/Projucer/Source/Project/UI/jucer_ModulesInformationComponent.h b/extras/Projucer/Source/Project/UI/jucer_ModulesInformationComponent.h index 6cf4b9a8cc..490c2fcabf 100644 --- a/extras/Projucer/Source/Project/UI/jucer_ModulesInformationComponent.h +++ b/extras/Projucer/Source/Project/UI/jucer_ModulesInformationComponent.h @@ -152,6 +152,9 @@ public: for (Project::ExporterIterator exporter (project); exporter.next();) paths.addIfNotAlreadyThere (exporter->getPathForModuleString (moduleID).trim()); + paths.removeEmptyStrings(); + paths.removeDuplicates (true); + pathText = paths.joinIntoString (", "); } diff --git a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp index 4a2cd9d9d6..5f00efbeeb 100644 --- a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp +++ b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp @@ -662,6 +662,11 @@ void ProjectExporter::updateOldModulePaths() } } +static bool areSameExporters (const ProjectExporter& p1, const ProjectExporter& p2) +{ + return p1.getExporterIdentifier() == p2.getExporterIdentifier(); +} + static bool areCompatibleExporters (const ProjectExporter& p1, const ProjectExporter& p2) { return (p1.isVisualStudio() && p2.isVisualStudio()) @@ -673,39 +678,33 @@ static bool areCompatibleExporters (const ProjectExporter& p1, const ProjectExpo void ProjectExporter::createDefaultModulePaths() { - for (Project::ExporterIterator exporter (project); exporter.next();) + auto exporterToCopy = [this]() -> std::unique_ptr { - if (areCompatibleExporters (*this, *exporter)) - { - for (int i = project.getEnabledModules().getNumModules(); --i >= 0;) - { - auto modID = project.getEnabledModules().getModuleID (i); - getPathForModuleValue (modID) = exporter->getPathForModuleValue (modID); - } + std::vector> exporters; - return; - } - } + for (Project::ExporterIterator exporter (project); exporter.next();) + exporters.push_back (std::move (exporter.exporter)); - for (Project::ExporterIterator exporter (project); exporter.next();) - { - if (exporter->canLaunchProject()) + auto getIf = [&exporters] (auto predicate) { - for (int i = project.getEnabledModules().getNumModules(); --i >= 0;) - { - auto modID = project.getEnabledModules().getModuleID (i); - getPathForModuleValue (modID) = exporter->getPathForModuleValue (modID); - } + auto iter = std::find_if (exporters.begin(), exporters.end(), predicate); + return iter != exporters.end() ? std::move (*iter) : nullptr; + }; - return; - } - } + if (auto exporter = getIf ([this] (auto& x) { return areSameExporters (*this, *x); })) + return exporter; - for (int i = project.getEnabledModules().getNumModules(); --i >= 0;) - { - auto modID = project.getEnabledModules().getModuleID (i); - getPathForModuleValue (modID) = "../../juce"; - } + if (auto exporter = getIf ([this] (auto& x) { return areCompatibleExporters (*this, *x); })) + return exporter; + + if (auto exporter = getIf ([] (auto& x) { return x->canLaunchProject(); })) + return exporter; + + return {}; + }(); + + for (const auto& modID : project.getEnabledModules().getAllModules()) + getPathForModuleValue (modID) = (exporterToCopy != nullptr ? exporterToCopy->getPathForModuleString (modID) : "../../juce"); } //==============================================================================