Kaydet (Commit) 8949bcad authored tarafından Stephan Bergmann's avatar Stephan Bergmann

Remove circular references between unoidl::Manager and its providers

Change-Id: Ic6ad3e2c7f69dd123077a913f35f1971f1e8ca13
üst d0322208
......@@ -778,8 +778,7 @@ rtl::Reference< Entity > readEntity(
}
LegacyProvider::LegacyProvider(
rtl::Reference< Manager > const & manager, OUString const & uri):
LegacyProvider::LegacyProvider(Manager & manager, OUString const & uri):
manager_(manager)
{
Registry reg;
......@@ -811,14 +810,14 @@ LegacyProvider::LegacyProvider(
}
rtl::Reference< MapCursor > LegacyProvider::createRootCursor() const {
return new Cursor(manager_, ucr_, ucr_);
return new Cursor(&manager_, ucr_, ucr_);
}
rtl::Reference< Entity > LegacyProvider::findEntity(OUString const & name)
const
{
return ucr_.isValid()
? readEntity(manager_, ucr_, ucr_, name.replace('.', '/'), true)
? readEntity(&manager_, ucr_, ucr_, name.replace('.', '/'), true)
: rtl::Reference< Entity >();
}
......
......@@ -21,8 +21,7 @@ namespace unoidl { namespace detail {
class LegacyProvider: public Provider {
public:
// throws FileFormatException, NoSuchFileException:
LegacyProvider(
rtl::Reference< Manager > const & manager, OUString const & uri);
LegacyProvider(Manager & manager, OUString const & uri);
// throws FileFormatException:
virtual rtl::Reference< MapCursor > createRootCursor() const SAL_OVERRIDE;
......@@ -34,7 +33,7 @@ public:
private:
virtual ~LegacyProvider() throw ();
rtl::Reference< Manager > manager_;
Manager & manager_;
mutable RegistryKey ucr_;
};
......
......@@ -120,8 +120,7 @@ private:
}
SourceTreeProvider::SourceTreeProvider(
rtl::Reference<Manager> const & manager, OUString const & uri):
SourceTreeProvider::SourceTreeProvider(Manager & manager, OUString const & uri):
manager_(manager), uri_(uri.endsWith("/") ? uri : uri + "/")
{}
......@@ -189,7 +188,7 @@ rtl::Reference<Entity> SourceTreeProvider::findEntity(OUString const & name)
ent = new SourceModuleEntity;
} else {
uri += ".idl";
SourceProviderScannerData data(manager_);
SourceProviderScannerData data(&manager_);
if (parse(uri, &data)) {
std::map<OUString, SourceProviderEntity>::const_iterator j(
data.entities.find(name));
......
......@@ -22,8 +22,7 @@ namespace unoidl { namespace detail {
class SourceTreeProvider: public Provider {
public:
// throws FileFormatException, NoSuchFileException:
SourceTreeProvider(
rtl::Reference<Manager> const & manager, OUString const & uri);
SourceTreeProvider(Manager & manager, OUString const & uri);
// throws FileFormatException:
virtual rtl::Reference<MapCursor> createRootCursor() const SAL_OVERRIDE;
......@@ -34,7 +33,7 @@ public:
private:
virtual ~SourceTreeProvider() throw ();
rtl::Reference<Manager> manager_;
Manager & manager_;
OUString uri_;
mutable std::map< OUString, rtl::Reference<Entity> > cache_; //TODO: at manager
};
......
......@@ -206,7 +206,7 @@ rtl::Reference< Provider > Manager::loadProvider(OUString const & uri) {
if (item.getFileStatus(status) == osl::FileBase::E_None
&& status.getFileType() == osl::FileStatus::Directory)
{
return new detail::SourceTreeProvider(this, uri);
return new detail::SourceTreeProvider(*this, uri);
}
}
if (uri.endsWith(".idl")) {
......@@ -219,7 +219,7 @@ rtl::Reference< Provider > Manager::loadProvider(OUString const & uri) {
"unoidl",
"FileFormatException \"" << e.getDetail() << "\", retrying <" << uri
<< "> as legacy format");
return new detail::LegacyProvider(this, uri);
return new detail::LegacyProvider(*this, uri);
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment