summaryrefslogtreecommitdiff
path: root/cpp/src/slice2javae/Gen.cpp
diff options
context:
space:
mode:
authorMichi Henning <michi@zeroc.com>2005-06-21 05:02:19 +0000
committerMichi Henning <michi@zeroc.com>2005-06-21 05:02:19 +0000
commitc3e7bb63185eb58315201fb7c1ee6f3bb63bf281 (patch)
treeaca7efd8c293e3958b0c18d6ca004b5a4e510f14 /cpp/src/slice2javae/Gen.cpp
parentfixing AMI bug: __response must be generated as protected internal (diff)
downloadice-c3e7bb63185eb58315201fb7c1ee6f3bb63bf281.tar.bz2
ice-c3e7bb63185eb58315201fb7c1ee6f3bb63bf281.tar.xz
ice-c3e7bb63185eb58315201fb7c1ee6f3bb63bf281.zip
Added one-shot constructors to icej and iceje.
Diffstat (limited to 'cpp/src/slice2javae/Gen.cpp')
-rw-r--r--cpp/src/slice2javae/Gen.cpp136
1 files changed, 131 insertions, 5 deletions
diff --git a/cpp/src/slice2javae/Gen.cpp b/cpp/src/slice2javae/Gen.cpp
index 3cadc8cd293..fe86758f6be 100644
--- a/cpp/src/slice2javae/Gen.cpp
+++ b/cpp/src/slice2javae/Gen.cpp
@@ -1071,8 +1071,17 @@ Slice::Gen::TypesVisitor::visitClassDefStart(const ClassDefPtr& p)
{
string name = p->name();
ClassList bases = p->bases();
+ ClassDefPtr baseClass;
+ if(!bases.empty() && !bases.front()->isInterface())
+ {
+ baseClass = bases.front();
+ }
+
string package = getPackage(p);
string absolute = getAbsolute(p);
+ DataMemberList members = p->dataMembers();
+ DataMemberList allDataMembers = p->allDataMembers();
+ DataMemberList::const_iterator d;
if(!open(absolute))
{
@@ -1139,8 +1148,7 @@ Slice::Gen::TypesVisitor::visitClassDefStart(const ClassDefPtr& p)
else
{
out << " extends ";
- ClassDefPtr base = bases.front();
- out << getAbsolute(base, package);
+ out << getAbsolute(baseClass, package);
bases.pop_front();
}
@@ -1190,6 +1198,53 @@ Slice::Gen::TypesVisitor::visitClassDefStart(const ClassDefPtr& p)
out << sb;
+ if(!p->isInterface() && !allDataMembers.empty())
+ {
+ //
+ // Constructors.
+ //
+ out << sp;
+ out << nl << "public " << name << "()";
+ out << sb;
+ if(baseClass)
+ {
+ out << nl << "super();";
+ }
+ out << eb;
+
+ out << sp << nl << "public " << name << spar;
+ vector<string> paramDecl;
+ for(d = allDataMembers.begin(); d != allDataMembers.end(); ++d)
+ {
+ string memberName = fixKwd((*d)->name());
+ string memberType = typeToString((*d)->type(), TypeModeMember, package, (*d)->getMetaData());
+ paramDecl.push_back(memberType + " " + memberName);
+ }
+ out << paramDecl << epar;
+ out << sb;
+ if(baseClass && allDataMembers.size() != members.size())
+ {
+ out << nl << "super" << spar;
+ vector<string> baseParamNames;
+ DataMemberList baseDataMembers = baseClass->allDataMembers();
+ for(d = baseDataMembers.begin(); d != baseDataMembers.end(); ++d)
+ {
+ baseParamNames.push_back(fixKwd((*d)->name()));
+ }
+ out << baseParamNames << epar << ';';
+ }
+ vector<string> paramNames;
+ for(d = members.begin(); d != members.end(); ++d)
+ {
+ paramNames.push_back(fixKwd((*d)->name()));
+ }
+ for(vector<string>::const_iterator i = paramNames.begin(); i != paramNames.end(); ++i)
+ {
+ out << nl << "this." << *i << " = " << *i << ';';
+ }
+ out << eb;
+ }
+
//
// Marshalling & dispatch support.
//
@@ -1206,8 +1261,7 @@ Slice::Gen::TypesVisitor::visitClassDefStart(const ClassDefPtr& p)
{
out << nl << "super.__copyFrom(source);";
}
- DataMemberList members = p->dataMembers();
- for(DataMemberList::const_iterator d = members.begin(); d != members.end(); ++d)
+ for(d = members.begin(); d != members.end(); ++d)
{
string memberName = fixKwd((*d)->name());
out << nl << memberName << " = " << "source." << memberName << ";";
@@ -1234,6 +1288,9 @@ Slice::Gen::TypesVisitor::visitExceptionStart(const ExceptionPtr& p)
ExceptionPtr base = p->base();
string package = getPackage(p);
string absolute = getAbsolute(p);
+ DataMemberList allDataMembers = p->allDataMembers();
+ DataMemberList members = p->dataMembers();
+ DataMemberList::const_iterator d;
if(!open(absolute))
{
@@ -1261,6 +1318,53 @@ Slice::Gen::TypesVisitor::visitExceptionStart(const ExceptionPtr& p)
}
out << sb;
+ if(!allDataMembers.empty())
+ {
+ //
+ // Constructors.
+ //
+ out << sp;
+ out << nl << "public " << name << "()";
+ out << sb;
+ if(base)
+ {
+ out << nl << "super();";
+ }
+ out << eb;
+
+ out << sp << nl << "public " << name << spar;
+ vector<string> paramDecl;
+ for(d = allDataMembers.begin(); d != allDataMembers.end(); ++d)
+ {
+ string memberName = fixKwd((*d)->name());
+ string memberType = typeToString((*d)->type(), TypeModeMember, package, (*d)->getMetaData());
+ paramDecl.push_back(memberType + " " + memberName);
+ }
+ out << paramDecl << epar;
+ out << sb;
+ if(base && allDataMembers.size() != members.size())
+ {
+ out << nl << "super" << spar;
+ vector<string> baseParamNames;
+ DataMemberList baseDataMembers = base->allDataMembers();
+ for(d = baseDataMembers.begin(); d != baseDataMembers.end(); ++d)
+ {
+ baseParamNames.push_back(fixKwd((*d)->name()));
+ }
+ out << baseParamNames << epar << ';';
+ }
+ vector<string> paramNames;
+ for(d = members.begin(); d != members.end(); ++d)
+ {
+ paramNames.push_back(fixKwd((*d)->name()));
+ }
+ for(vector<string>::const_iterator i = paramNames.begin(); i != paramNames.end(); ++i)
+ {
+ out << nl << "this." << *i << " = " << *i << ';';
+ }
+ out << eb;
+ }
+
out << sp << nl << "public String" << nl << "ice_name()";
out << sb;
out << nl << "return \"" << scoped.substr(2) << "\";";
@@ -1428,8 +1532,31 @@ Slice::Gen::TypesVisitor::visitStructEnd(const StructPtr& p)
DataMemberList::const_iterator d;
int iter;
+ string name = fixKwd(p->name());
string typeS = typeToString(p, TypeModeIn, package);
+ out << sp << nl << "public " << name << "()";
+ out << sb;
+ out << eb;
+
+ vector<string> paramDecl;
+ vector<string> paramNames;
+ for(d = members.begin(); d != members.end(); ++d)
+ {
+ string memberName = fixKwd((*d)->name());
+ string memberType = typeToString((*d)->type(), TypeModeMember, package, (*d)->getMetaData());
+ paramDecl.push_back(memberType + " " + memberName);
+ paramNames.push_back(memberName);
+ }
+
+ out << sp << nl << "public " << name << spar << paramDecl << epar;
+ out << sb;
+ for(vector<string>::const_iterator i = paramNames.begin(); i != paramNames.end(); ++i)
+ {
+ out << nl << "this." << *i << " = " << *i << ';';
+ }
+ out << eb;
+
out << sp << nl << "public boolean" << nl << "equals(java.lang.Object rhs)";
out << sb;
out << nl << typeS << " _r = null;";
@@ -1543,7 +1670,6 @@ Slice::Gen::TypesVisitor::visitStructEnd(const StructPtr& p)
out << nl << "return __h;";
out << eb;
- string name = fixKwd(p->name());
out << sp << nl << "public void" << nl << "__copyFrom(" << name << " source)";
out << sb;
for(d = members.begin(); d != members.end(); ++d)