summaryrefslogtreecommitdiff
path: root/configmgr/source/components.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'configmgr/source/components.cxx')
-rw-r--r--configmgr/source/components.cxx20
1 files changed, 12 insertions, 8 deletions
diff --git a/configmgr/source/components.cxx b/configmgr/source/components.cxx
index 6476cd841fd5..82b4be70d9bb 100644
--- a/configmgr/source/components.cxx
+++ b/configmgr/source/components.cxx
@@ -23,6 +23,7 @@
#include <cassert>
#include <cstddef>
#include <list>
+#include <set>
#include "com/sun/star/beans/Optional.hpp"
#include "com/sun/star/beans/UnknownPropertyException.hpp"
@@ -92,7 +93,7 @@ void parseXcsFile(
assert(partial == 0 && modifications == 0 && additions == 0);
(void) partial; (void) modifications; (void) additions;
bool ok = rtl::Reference< ParseManager >(
- new ParseManager(url, new XcsParser(layer, data)))->parse();
+ new ParseManager(url, new XcsParser(layer, data)))->parse(0);
assert(ok);
(void) ok; // avoid warnings
}
@@ -107,7 +108,7 @@ void parseXcuFile(
new ParseManager(
url,
new XcuParser(layer, data, partial, modifications, additions)))->
- parse();
+ parse(0);
assert(ok);
(void) ok; // avoid warnings
}
@@ -724,7 +725,8 @@ void Components::parseXcdFiles(int layer, rtl::OUString const & url) {
css::uno::Reference< css::uno::XInterface >());
}
UnresolvedList unres;
- XcdParser::Dependencies deps;
+ std::set< OUString > existingDeps;
+ std::set< OUString > processedDeps;
for (;;) {
osl::DirectoryItem i;
osl::FileBase::RC rc = dir.getNextItem(i, SAL_MAX_UINT32);
@@ -758,10 +760,12 @@ void Components::parseXcdFiles(int layer, rtl::OUString const & url) {
rtl::OUString name(
file.copy(
0, file.getLength() - RTL_CONSTASCII_LENGTH(".xcd")));
+ existingDeps.insert(name);
rtl::Reference< ParseManager > manager;
try {
manager = new ParseManager(
- stat.getFileURL(), new XcdParser(layer, deps, data_));
+ stat.getFileURL(),
+ new XcdParser(layer, processedDeps, data_));
} catch (css::container::NoSuchElementException & e) {
throw css::uno::RuntimeException(
(rtl::OUString(
@@ -770,8 +774,8 @@ void Components::parseXcdFiles(int layer, rtl::OUString const & url) {
e.Message),
css::uno::Reference< css::uno::XInterface >());
}
- if (manager->parse()) {
- deps.insert(name);
+ if (manager->parse(0)) {
+ processedDeps.insert(name);
} else {
unres.push_back(UnresolvedListItem(name, manager));
}
@@ -781,8 +785,8 @@ void Components::parseXcdFiles(int layer, rtl::OUString const & url) {
while (!unres.empty()) {
bool resolved = false;
for (UnresolvedList::iterator i(unres.begin()); i != unres.end();) {
- if (i->manager->parse()) {
- deps.insert(i->name);
+ if (i->manager->parse(&existingDeps)) {
+ processedDeps.insert(i->name);
unres.erase(i++);
resolved = true;
} else {