diff options
Diffstat (limited to 'cpp/src/slice2java')
-rw-r--r-- | cpp/src/slice2java/Gen.cpp | 41 |
1 files changed, 30 insertions, 11 deletions
diff --git a/cpp/src/slice2java/Gen.cpp b/cpp/src/slice2java/Gen.cpp index 46cb2838c0c..10f27241263 100644 --- a/cpp/src/slice2java/Gen.cpp +++ b/cpp/src/slice2java/Gen.cpp @@ -1084,7 +1084,7 @@ Slice::Gen::TypesVisitor::visitClassDefStart(const ClassDefPtr& p) // // ice_copyStateFrom // - if(_clone && !p->isInterface() && p->hasDataMembers()) + if(!p->isInterface() && p->hasDataMembers()) { out << sp << nl << "protected void" << nl << "ice_copyStateFrom(Ice.Object __obj)"; @@ -1092,18 +1092,25 @@ Slice::Gen::TypesVisitor::visitClassDefStart(const ClassDefPtr& p) out << nl << "throws java.lang.CloneNotSupportedException"; out.dec(); out << sb; - out << nl << "super.ice_copyStateFrom(__obj);"; - out << nl << name << " __v = (" << name << ")__obj;"; + 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) + // + // 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 { - string memberName = fixKwd((*d)->name()); - out << nl << "this." << memberName << " = __v." << memberName << ';'; + out << nl << "throw new java.lang.CloneNotSupportedException();"; } out << eb; @@ -3295,6 +3302,18 @@ Slice::Gen::DispatcherVisitor::visitClassDefStart(const ClassDefPtr& p) << "Disp extends Ice.Object implements " << name; out << sb; + // + // ice_copyStateFrom + // + out << sp << nl << "protected void" + << nl << "ice_copyStateFrom(Ice.Object __obj)"; + out.inc(); + out << nl << "throws java.lang.CloneNotSupportedException"; + out.dec(); + out << sb; + out << nl << "throw new java.lang.CloneNotSupportedException();"; + out << eb; + writeDispatch(out, p); out << eb; |