diff options
author | Mark Spruiell <mes@zeroc.com> | 2004-10-13 23:07:35 +0000 |
---|---|---|
committer | Mark Spruiell <mes@zeroc.com> | 2004-10-13 23:07:35 +0000 |
commit | 9b656338c2c25062a720cd77c99cb2c382ad8f57 (patch) | |
tree | c075333793f6ff904b5c98c4981198ca0a1c05cb /cpp/src/slice2java/Gen.cpp | |
parent | - Fixed bug where global metadata causes unmarshaling of an exception or (diff) | |
download | ice-9b656338c2c25062a720cd77c99cb2c382ad8f57.tar.bz2 ice-9b656338c2c25062a720cd77c99cb2c382ad8f57.tar.xz ice-9b656338c2c25062a720cd77c99cb2c382ad8f57.zip |
generate marker class to validate package properties
Diffstat (limited to 'cpp/src/slice2java/Gen.cpp')
-rw-r--r-- | cpp/src/slice2java/Gen.cpp | 42 |
1 files changed, 42 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) { |