diff options
author | Michi Henning <michi@zeroc.com> | 2005-06-21 05:02:19 +0000 |
---|---|---|
committer | Michi Henning <michi@zeroc.com> | 2005-06-21 05:02:19 +0000 |
commit | c3e7bb63185eb58315201fb7c1ee6f3bb63bf281 (patch) | |
tree | aca7efd8c293e3958b0c18d6ca004b5a4e510f14 /cpp/src/slice2javae/Gen.cpp | |
parent | fixing AMI bug: __response must be generated as protected internal (diff) | |
download | ice-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.cpp | 136 |
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) |