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

WIP: add cppumaker -U to directly read from .idl files

Change-Id: I420847515b6b691ae81a249a8820cf9a3d132372
üst 5c2ba4aa
...@@ -27,15 +27,19 @@ ...@@ -27,15 +27,19 @@
#include "codemaker/typemanager.hxx" #include "codemaker/typemanager.hxx"
#include "rtl/ref.hxx" #include "rtl/ref.hxx"
#include "rtl/ustring.hxx" #include "rtl/ustring.hxx"
#include "unoidl/sourceprovider.hxx"
#include "unoidl/unoidl.hxx" #include "unoidl/unoidl.hxx"
TypeManager::TypeManager(): manager_(new unoidl::Manager) {} TypeManager::TypeManager(): manager_(new unoidl::Manager) {}
TypeManager::~TypeManager() {} TypeManager::~TypeManager() {}
void TypeManager::loadProvider(OUString const & uri, bool primary) { void TypeManager::loadProvider(OUString const & uri, bool source, bool primary)
{
rtl::Reference< unoidl::Provider > prov( rtl::Reference< unoidl::Provider > prov(
unoidl::loadProvider(manager_, uri)); source
? new unoidl::SourceProvider(manager_, uri)
: unoidl::loadProvider(manager_, uri));
manager_->addProvider(prov); manager_->addProvider(prov);
if (primary) { if (primary) {
primaryProviders_.push_back(prov); primaryProviders_.push_back(prov);
......
...@@ -52,13 +52,15 @@ SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv) { ...@@ -52,13 +52,15 @@ SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv) {
options.getExtraInputFiles().begin()); options.getExtraInputFiles().begin());
i != options.getExtraInputFiles().end(); ++i) i != options.getExtraInputFiles().end(); ++i)
{ {
typeMgr->loadProvider(convertToFileUrl(*i), false); typeMgr->loadProvider(
convertToFileUrl(*i), options.isValid("-U"), false);
} }
for (std::vector< OString >::const_iterator i( for (std::vector< OString >::const_iterator i(
options.getInputFiles().begin()); options.getInputFiles().begin());
i != options.getInputFiles().end(); ++i) i != options.getInputFiles().end(); ++i)
{ {
typeMgr->loadProvider(convertToFileUrl(*i), true); typeMgr->loadProvider(
convertToFileUrl(*i), options.isValid("-U"), true);
} }
codemaker::GeneratedTypeSet generated; codemaker::GeneratedTypeSet generated;
if (options.isValid("-T")) { if (options.isValid("-T")) {
......
...@@ -139,6 +139,19 @@ sal_Bool CppuOptions::initOptions(int ac, char* av[], sal_Bool bCmdFile) ...@@ -139,6 +139,19 @@ sal_Bool CppuOptions::initOptions(int ac, char* av[], sal_Bool bCmdFile)
m_options["-T"] = OString(s); m_options["-T"] = OString(s);
} }
break; break;
case 'U':
if (av[i][2] != '\0')
{
OString tmp("'-U', please check");
if (i <= ac - 1)
{
tmp += " your input '" + OString(av[i]) + "'";
}
throw IllegalArgument(tmp);
}
m_options["-U"] = "";
break;
case 'L': case 'L':
if (av[i][2] != '\0') if (av[i][2] != '\0')
{ {
...@@ -321,9 +334,17 @@ OString CppuOptions::prepareHelp() ...@@ -321,9 +334,17 @@ OString CppuOptions::prepareHelp()
help += " -O<path> = path describes the root directory for the generated output.\n"; help += " -O<path> = path describes the root directory for the generated output.\n";
help += " The output directory tree is generated under this directory.\n"; help += " The output directory tree is generated under this directory.\n";
help += " -T<name> = name specifies a type or a list of types. The output for this\n"; help += " -T<name> = name specifies a type or a list of types. The output for this\n";
help += " [t1;...] type is generated. If no '-T' option is specified,\n"; help += " [t1;...] type and all dependent types are generated. If no '-T' option is\n";
help += " then output for all types is generated.\n"; help += " specified, then output for all types is generated.\n";
help += " Example: 'com.sun.star.uno.XInterface' is a valid type.\n"; help += " Example: 'com.sun.star.uno.XInterface' is a valid type.\n";
help += " -U = instead of interpreting file_1 ... file_n as type rdb files,\n";
help += " interpret them as (directories of) UNOIDL source files. If no\n";
help += " '-T' option is given, each file_i must denote a UNOIDL file, and\n";
help += " headers are generated for all entities defined in those files.";
help += " Otherwise, each file_i must denote a directory, and an entity\n";
help += " com.sun.star.uno.XInterface specified with '-T' would be searched\n";
help += " for as com/sun/star/uno/XInterface.idl under each of those\n";
help += " directories in turn.";
help += " -L = UNO type functions are generated lightweight, that means only\n"; help += " -L = UNO type functions are generated lightweight, that means only\n";
help += " the name and typeclass are given and everything else is retrieved\n"; help += " the name and typeclass are given and everything else is retrieved\n";
help += " from the type library dynamically. The default is that UNO type\n"; help += " from the type library dynamically. The default is that UNO type\n";
......
...@@ -52,13 +52,13 @@ SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv) { ...@@ -52,13 +52,13 @@ SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv) {
options.getExtraInputFiles().begin()); options.getExtraInputFiles().begin());
i != options.getExtraInputFiles().end(); ++i) i != options.getExtraInputFiles().end(); ++i)
{ {
typeMgr->loadProvider(convertToFileUrl(*i), false); typeMgr->loadProvider(convertToFileUrl(*i), false, false);
} }
for (std::vector< rtl::OString >::const_iterator i( for (std::vector< rtl::OString >::const_iterator i(
options.getInputFiles().begin()); options.getInputFiles().begin());
i != options.getInputFiles().end(); ++i) i != options.getInputFiles().end(); ++i)
{ {
typeMgr->loadProvider(convertToFileUrl(*i), true); typeMgr->loadProvider(convertToFileUrl(*i), false, true);
} }
codemaker::GeneratedTypeSet generated; codemaker::GeneratedTypeSet generated;
if (options.isValid("-T")) { if (options.isValid("-T")) {
......
...@@ -42,7 +42,7 @@ class TypeManager: public salhelper::SimpleReferenceObject { ...@@ -42,7 +42,7 @@ class TypeManager: public salhelper::SimpleReferenceObject {
public: public:
TypeManager(); TypeManager();
void loadProvider(OUString const & uri, bool primary); void loadProvider(OUString const & uri, bool source, bool primary);
bool foundAtPrimaryProvider(OUString const & name) const; bool foundAtPrimaryProvider(OUString const & name) const;
......
...@@ -268,7 +268,7 @@ SAL_IMPLEMENT_MAIN() ...@@ -268,7 +268,7 @@ SAL_IMPLEMENT_MAIN()
for (std::vector< OString >::const_iterator i(registries.begin()); for (std::vector< OString >::const_iterator i(registries.begin());
i != registries.end(); ++i) i != registries.end(); ++i)
{ {
manager->loadProvider(convertToFileUrl(*i), true); manager->loadProvider(convertToFileUrl(*i), false, true);
} }
if ( options.dump ) { if ( options.dump ) {
......
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