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( ...@@ -778,8 +778,7 @@ rtl::Reference< Entity > readEntity(
} }
LegacyProvider::LegacyProvider( LegacyProvider::LegacyProvider(Manager & manager, OUString const & uri):
rtl::Reference< Manager > const & manager, OUString const & uri):
manager_(manager) manager_(manager)
{ {
Registry reg; Registry reg;
...@@ -811,14 +810,14 @@ LegacyProvider::LegacyProvider( ...@@ -811,14 +810,14 @@ LegacyProvider::LegacyProvider(
} }
rtl::Reference< MapCursor > LegacyProvider::createRootCursor() const { 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) rtl::Reference< Entity > LegacyProvider::findEntity(OUString const & name)
const const
{ {
return ucr_.isValid() return ucr_.isValid()
? readEntity(manager_, ucr_, ucr_, name.replace('.', '/'), true) ? readEntity(&manager_, ucr_, ucr_, name.replace('.', '/'), true)
: rtl::Reference< Entity >(); : rtl::Reference< Entity >();
} }
......
...@@ -21,8 +21,7 @@ namespace unoidl { namespace detail { ...@@ -21,8 +21,7 @@ namespace unoidl { namespace detail {
class LegacyProvider: public Provider { class LegacyProvider: public Provider {
public: public:
// throws FileFormatException, NoSuchFileException: // throws FileFormatException, NoSuchFileException:
LegacyProvider( LegacyProvider(Manager & manager, OUString const & uri);
rtl::Reference< Manager > const & manager, OUString const & uri);
// throws FileFormatException: // throws FileFormatException:
virtual rtl::Reference< MapCursor > createRootCursor() const SAL_OVERRIDE; virtual rtl::Reference< MapCursor > createRootCursor() const SAL_OVERRIDE;
...@@ -34,7 +33,7 @@ public: ...@@ -34,7 +33,7 @@ public:
private: private:
virtual ~LegacyProvider() throw (); virtual ~LegacyProvider() throw ();
rtl::Reference< Manager > manager_; Manager & manager_;
mutable RegistryKey ucr_; mutable RegistryKey ucr_;
}; };
......
...@@ -120,8 +120,7 @@ private: ...@@ -120,8 +120,7 @@ private:
} }
SourceTreeProvider::SourceTreeProvider( SourceTreeProvider::SourceTreeProvider(Manager & manager, OUString const & uri):
rtl::Reference<Manager> const & manager, OUString const & uri):
manager_(manager), uri_(uri.endsWith("/") ? uri : uri + "/") manager_(manager), uri_(uri.endsWith("/") ? uri : uri + "/")
{} {}
...@@ -189,7 +188,7 @@ rtl::Reference<Entity> SourceTreeProvider::findEntity(OUString const & name) ...@@ -189,7 +188,7 @@ rtl::Reference<Entity> SourceTreeProvider::findEntity(OUString const & name)
ent = new SourceModuleEntity; ent = new SourceModuleEntity;
} else { } else {
uri += ".idl"; uri += ".idl";
SourceProviderScannerData data(manager_); SourceProviderScannerData data(&manager_);
if (parse(uri, &data)) { if (parse(uri, &data)) {
std::map<OUString, SourceProviderEntity>::const_iterator j( std::map<OUString, SourceProviderEntity>::const_iterator j(
data.entities.find(name)); data.entities.find(name));
......
...@@ -22,8 +22,7 @@ namespace unoidl { namespace detail { ...@@ -22,8 +22,7 @@ namespace unoidl { namespace detail {
class SourceTreeProvider: public Provider { class SourceTreeProvider: public Provider {
public: public:
// throws FileFormatException, NoSuchFileException: // throws FileFormatException, NoSuchFileException:
SourceTreeProvider( SourceTreeProvider(Manager & manager, OUString const & uri);
rtl::Reference<Manager> const & manager, OUString const & uri);
// throws FileFormatException: // throws FileFormatException:
virtual rtl::Reference<MapCursor> createRootCursor() const SAL_OVERRIDE; virtual rtl::Reference<MapCursor> createRootCursor() const SAL_OVERRIDE;
...@@ -34,7 +33,7 @@ public: ...@@ -34,7 +33,7 @@ public:
private: private:
virtual ~SourceTreeProvider() throw (); virtual ~SourceTreeProvider() throw ();
rtl::Reference<Manager> manager_; Manager & manager_;
OUString uri_; OUString uri_;
mutable std::map< OUString, rtl::Reference<Entity> > cache_; //TODO: at manager mutable std::map< OUString, rtl::Reference<Entity> > cache_; //TODO: at manager
}; };
......
...@@ -206,7 +206,7 @@ rtl::Reference< Provider > Manager::loadProvider(OUString const & uri) { ...@@ -206,7 +206,7 @@ rtl::Reference< Provider > Manager::loadProvider(OUString const & uri) {
if (item.getFileStatus(status) == osl::FileBase::E_None if (item.getFileStatus(status) == osl::FileBase::E_None
&& status.getFileType() == osl::FileStatus::Directory) && status.getFileType() == osl::FileStatus::Directory)
{ {
return new detail::SourceTreeProvider(this, uri); return new detail::SourceTreeProvider(*this, uri);
} }
} }
if (uri.endsWith(".idl")) { if (uri.endsWith(".idl")) {
...@@ -219,7 +219,7 @@ rtl::Reference< Provider > Manager::loadProvider(OUString const & uri) { ...@@ -219,7 +219,7 @@ rtl::Reference< Provider > Manager::loadProvider(OUString const & uri) {
"unoidl", "unoidl",
"FileFormatException \"" << e.getDetail() << "\", retrying <" << uri "FileFormatException \"" << e.getDetail() << "\", retrying <" << uri
<< "> as legacy format"); << "> 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