summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorMark Spruiell <mes@zeroc.com>2004-10-13 23:07:35 +0000
committerMark Spruiell <mes@zeroc.com>2004-10-13 23:07:35 +0000
commit9b656338c2c25062a720cd77c99cb2c382ad8f57 (patch)
treec075333793f6ff904b5c98c4981198ca0a1c05cb /cpp/src
parent- Fixed bug where global metadata causes unmarshaling of an exception or (diff)
downloadice-9b656338c2c25062a720cd77c99cb2c382ad8f57.tar.bz2
ice-9b656338c2c25062a720cd77c99cb2c382ad8f57.tar.xz
ice-9b656338c2c25062a720cd77c99cb2c382ad8f57.zip
generate marker class to validate package properties
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/slice2java/Gen.cpp42
-rw-r--r--cpp/src/slice2java/Gen.h9
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: