summaryrefslogtreecommitdiff
path: root/cpp/src/slice2java/Gen.cpp
diff options
context:
space:
mode:
authorMark Spruiell <mes@zeroc.com>2002-09-18 21:00:15 +0000
committerMark Spruiell <mes@zeroc.com>2002-09-18 21:00:15 +0000
commitbc55c2fa8a3498c000660ab6123b2e99c101b7cd (patch)
treeae1c7333a4faee12cc8ff7f82b4dfc078c30c937 /cpp/src/slice2java/Gen.cpp
parentclone is no longer optional (diff)
downloadice-bc55c2fa8a3498c000660ab6123b2e99c101b7cd.tar.bz2
ice-bc55c2fa8a3498c000660ab6123b2e99c101b7cd.tar.xz
ice-bc55c2fa8a3498c000660ab6123b2e99c101b7cd.zip
simplified cloning; clone is no longer optional
Diffstat (limited to 'cpp/src/slice2java/Gen.cpp')
-rw-r--r--cpp/src/slice2java/Gen.cpp224
1 files changed, 83 insertions, 141 deletions
diff --git a/cpp/src/slice2java/Gen.cpp b/cpp/src/slice2java/Gen.cpp
index 5b6e6d344b2..e84ca86598a 100644
--- a/cpp/src/slice2java/Gen.cpp
+++ b/cpp/src/slice2java/Gen.cpp
@@ -597,12 +597,11 @@ Slice::JavaVisitor::writeDispatch(Output& out, const ClassDefPtr& p)
}
Slice::Gen::Gen(const string& name, const string& base, const vector<string>& includePaths, const string& package,
- const string& dir, bool clone) :
+ const string& dir) :
_base(base),
_includePaths(includePaths),
_package(package),
- _dir(dir),
- _clone(clone)
+ _dir(dir)
{
}
@@ -622,7 +621,7 @@ Slice::Gen::generate(const UnitPtr& unit)
OpsVisitor opsVisitor(_dir, _package);
unit->visit(&opsVisitor);
- TypesVisitor typesVisitor(_dir, _package, _clone);
+ TypesVisitor typesVisitor(_dir, _package);
unit->visit(&typesVisitor);
HolderVisitor holderVisitor(_dir, _package);
@@ -917,9 +916,8 @@ Slice::Gen::TieVisitor::visitClassDefStart(const ClassDefPtr& p)
return false;
}
-Slice::Gen::TypesVisitor::TypesVisitor(const string& dir, const string& package, bool clone) :
- JavaVisitor(dir, package),
- _clone(clone)
+Slice::Gen::TypesVisitor::TypesVisitor(const string& dir, const string& package) :
+ JavaVisitor(dir, package)
{
}
@@ -1090,41 +1088,6 @@ Slice::Gen::TypesVisitor::visitClassDefStart(const ClassDefPtr& p)
}
//
- // ice_copyStateFrom
- //
- if(!p->isInterface() && p->hasDataMembers())
- {
- out << sp << nl << "protected void"
- << nl << "ice_copyStateFrom(Ice.Object __obj)";
- out.inc();
- out << nl << "throws java.lang.CloneNotSupportedException";
- out.dec();
- out << sb;
- if(_clone)
- {
- out << nl << "super.ice_copyStateFrom(__obj);";
- out << nl << name << " __v = (" << name << ")__obj;";
-
- //
- // Perform a shallow copy.
- //
- DataMemberList members = p->dataMembers();
- DataMemberList::const_iterator d;
- for(d = members.begin(); d != members.end(); ++d)
- {
- string memberName = fixKwd((*d)->name());
- out << nl << "this." << memberName << " = __v." << memberName << ';';
- }
- }
- else
- {
- out << nl << "throw new java.lang.CloneNotSupportedException();";
- }
-
- out << eb;
- }
-
- //
// Default factory for non-abstract classes.
//
if(!p->isAbstract())
@@ -1442,11 +1405,7 @@ Slice::Gen::TypesVisitor::visitStructStart(const StructPtr& p)
Output& out = output();
- out << sp << nl << "public final class " << name;
- if(_clone)
- {
- out << " implements java.lang.Cloneable";
- }
+ out << sp << nl << "public final class " << name << " implements java.lang.Cloneable";
out << sb;
return true;
@@ -1465,116 +1424,99 @@ Slice::Gen::TypesVisitor::visitStructEnd(const StructPtr& p)
string typeS = typeToString(p, TypeModeIn, scope);
- if(!members.empty())
+ //
+ // equals
+ //
+ out << sp << nl << "public boolean"
+ << nl << "equals(java.lang.Object rhs)";
+ out << sb;
+ out << nl << typeS << " _r = null;";
+ out << nl << "try";
+ out << sb;
+ out << nl << "_r = (" << typeS << ")rhs;";
+ out << eb;
+ out << nl << "catch(ClassCastException ex)";
+ out << sb;
+ out << eb;
+ out << sp << nl << "if(_r != null)";
+ out << sb;
+ for(d = members.begin(); d != members.end(); ++d)
{
- //
- // equals
- //
- out << sp << nl << "public boolean"
- << nl << "equals(java.lang.Object rhs)";
- out << sb;
- out << nl << typeS << " _r = null;";
- out << nl << "try";
- out << sb;
- out << nl << "_r = (" << typeS << ")rhs;";
- out << eb;
- out << nl << "catch(ClassCastException ex)";
- out << sb;
- out << eb;
- out << sp << nl << "if(_r != null)";
- out << sb;
- for(d = members.begin(); d != members.end(); ++d)
+ string memberName = fixKwd((*d)->name());
+ BuiltinPtr b = BuiltinPtr::dynamicCast((*d)->type());
+ if(b)
{
- string memberName = fixKwd((*d)->name());
- BuiltinPtr b = BuiltinPtr::dynamicCast((*d)->type());
- if(b)
+ switch(b->kind())
{
- switch(b->kind())
+ case Builtin::KindByte:
+ case Builtin::KindBool:
+ case Builtin::KindShort:
+ case Builtin::KindInt:
+ case Builtin::KindLong:
+ case Builtin::KindFloat:
+ case Builtin::KindDouble:
{
- case Builtin::KindByte:
- case Builtin::KindBool:
- case Builtin::KindShort:
- case Builtin::KindInt:
- case Builtin::KindLong:
- case Builtin::KindFloat:
- case Builtin::KindDouble:
- {
- out << nl << "if(" << memberName << " != _r." << memberName << ")";
- out << sb;
- out << nl << "return false;";
- out << eb;
- break;
- }
+ out << nl << "if(" << memberName << " != _r." << memberName << ")";
+ out << sb;
+ out << nl << "return false;";
+ out << eb;
+ break;
+ }
- case Builtin::KindString:
- case Builtin::KindObject:
- case Builtin::KindObjectProxy:
- case Builtin::KindLocalObject:
- {
- out << nl << "if(!" << memberName << ".equals(_r." << memberName << "))";
- out << sb;
- out << nl << "return false;";
- out << eb;
- break;
- }
+ case Builtin::KindString:
+ case Builtin::KindObject:
+ case Builtin::KindObjectProxy:
+ case Builtin::KindLocalObject:
+ {
+ out << nl << "if(!" << memberName << ".equals(_r." << memberName << "))";
+ out << sb;
+ out << nl << "return false;";
+ out << eb;
+ break;
}
}
- else
- {
- out << nl << "if(!" << memberName << ".equals(_r." << memberName << "))";
- out << sb;
- out << nl << "return false;";
- out << eb;
- }
}
- out << sp << nl << "return true;";
- out << eb;
- out << sp << nl << "return false;";
- out << eb;
-
- //
- // hashCode
- //
- out << sp << nl << "public int"
- << nl << "hashCode()";
- out << sb;
- out << nl << "int __h = 0;";
- iter = 0;
- for(d = members.begin(); d != members.end(); ++d)
+ else
{
- string memberName = fixKwd((*d)->name());
- list<string> metaData = (*d)->getMetaData();
- writeHashCode(out, (*d)->type(), memberName, iter, metaData);
+ out << nl << "if(!" << memberName << ".equals(_r." << memberName << "))";
+ out << sb;
+ out << nl << "return false;";
+ out << eb;
}
- out << nl << "return __h;";
- out << eb;
}
+ out << sp << nl << "return true;";
+ out << eb;
+ out << sp << nl << "return false;";
+ out << eb;
//
- // clone()
+ // hashCode
//
- if(_clone)
+ out << sp << nl << "public int"
+ << nl << "hashCode()";
+ out << sb;
+ out << nl << "int __h = 0;";
+ iter = 0;
+ for(d = members.begin(); d != members.end(); ++d)
{
- string name = fixKwd(p->name());
-
- out << sp << nl << "public java.lang.Object"
- << nl << "clone()";
- out << sb;
- out << nl << name << " __result = new " << name << "();";
-
- //
- // Perform a shallow copy.
- //
- DataMemberList::const_iterator d;
- for(d = members.begin(); d != members.end(); ++d)
- {
- string memberName = fixKwd((*d)->name());
- out << nl << "__result." << memberName << " = " << memberName << ';';
- }
-
- out << nl << "return __result;";
- out << eb;
+ string memberName = fixKwd((*d)->name());
+ list<string> metaData = (*d)->getMetaData();
+ writeHashCode(out, (*d)->type(), memberName, iter, metaData);
}
+ out << nl << "return __h;";
+ out << eb;
+
+ //
+ // clone - need to override it to make it public
+ //
+ out << sp << nl << "public java.lang.Object"
+ << nl << "clone()";
+ out.inc();
+ out << nl << "throws java.lang.CloneNotSupportedException";
+ out.dec();
+ out << sb;
+ out << nl << "return super.clone();";
+ out << eb;
if(!p->isLocal())
{