diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/slice2java/Gen.cpp | 42 | ||||
-rw-r--r-- | cpp/src/slice2java/Gen.h | 9 |
2 files changed, 51 insertions, 0 deletions
diff --git a/cpp/src/slice2java/Gen.cpp b/cpp/src/slice2java/Gen.cpp index 16777338943..c6c6309e02e 100644 --- a/cpp/src/slice2java/Gen.cpp +++ b/cpp/src/slice2java/Gen.cpp @@ -916,6 +916,9 @@ Slice::Gen::generate(const UnitPtr& p) OpsVisitor opsVisitor(_dir); p->visit(&opsVisitor, false); + PackageVisitor packageVisitor(_dir); + p->visit(&packageVisitor, false); + TypesVisitor typesVisitor(_dir); p->visit(&typesVisitor, false); @@ -1310,6 +1313,45 @@ Slice::Gen::TieVisitor::visitClassDefStart(const ClassDefPtr& p) return false; } +Slice::Gen::PackageVisitor::PackageVisitor(const string& dir) : + JavaVisitor(dir) +{ +} + +bool +Slice::Gen::PackageVisitor::visitModuleStart(const ModulePtr& p) +{ + DefinitionContextPtr dc = p->definitionContext(); + assert(dc); + StringList globalMetaData = dc->getMetaData(); + + static const string packagePrefix = "java:package:"; + + for(StringList::const_iterator q = globalMetaData.begin(); q != globalMetaData.end(); ++q) + { + string s = *q; + if(s.find(packagePrefix) == 0) + { + string markerClass = s.substr(packagePrefix.size()) + "." + fixKwd(p->name()) + "._Marker"; + + if(!open(markerClass)) + { + cerr << "can't open class `" << markerClass << "' for writing: " << strerror(errno) << endl; + return false; + } + + Output& out = output(); + out << sp << nl << "interface _Marker"; + out << sb; + out << eb; + + close(); + } + } + + return false; +} + Slice::Gen::TypesVisitor::TypesVisitor(const string& dir) : JavaVisitor(dir) { diff --git a/cpp/src/slice2java/Gen.h b/cpp/src/slice2java/Gen.h index 10d167ef940..996d0f40229 100644 --- a/cpp/src/slice2java/Gen.h +++ b/cpp/src/slice2java/Gen.h @@ -110,6 +110,15 @@ private: virtual bool visitClassDefStart(const ClassDefPtr&); }; + class PackageVisitor : public JavaVisitor + { + public: + + PackageVisitor(const std::string&); + + virtual bool visitModuleStart(const ModulePtr&); + }; + class TypesVisitor : public JavaVisitor { public: |