diff options
author | Mark Spruiell <mes@zeroc.com> | 2003-03-26 19:58:31 +0000 |
---|---|---|
committer | Mark Spruiell <mes@zeroc.com> | 2003-03-26 19:58:31 +0000 |
commit | ff717c2a75ea7a1547f2407f43de9a1eb1a0a58f (patch) | |
tree | 066d2b98662bad2bc1c865e2f42fc2ec54b61009 /cpp/src | |
parent | docu (diff) | |
download | ice-ff717c2a75ea7a1547f2407f43de9a1eb1a0a58f.tar.bz2 ice-ff717c2a75ea7a1547f2407f43de9a1eb1a0a58f.tar.xz ice-ff717c2a75ea7a1547f2407f43de9a1eb1a0a58f.zip |
bug fixes for sequence comparsion, local object impl
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/slice2java/Gen.cpp | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/cpp/src/slice2java/Gen.cpp b/cpp/src/slice2java/Gen.cpp index 56735833de5..d0def6e3a0f 100644 --- a/cpp/src/slice2java/Gen.cpp +++ b/cpp/src/slice2java/Gen.cpp @@ -1570,18 +1570,36 @@ Slice::Gen::TypesVisitor::visitStructEnd(const StructPtr& p) { // // We treat sequences differently because the native equals() method for - // a Java array not perform a deep comparison, therefore we use the helper - // method java.util.Arrays.equals() instead. + // a Java array does not perform a deep comparison. If the mapped type + // is not overridden via metadata, we use the helper method + // java.util.Arrays.equals() to compare native arrays. // // For all other types, we can use the native equals() method. // SequencePtr seq = SequencePtr::dynamicCast((*d)->type()); if(seq) { - out << nl << "if(!java.util.Arrays.equals(" << memberName << ", _r." << memberName << "))"; - out << sb; - out << nl << "return false;"; - out << eb; + list<string> metaData = (*d)->getMetaData(); + string listType = findMetaData(metaData); + if(listType.empty()) + { + list<string> l = seq->getMetaData(); + listType = findMetaData(l); + } + if(!listType.empty()) + { + out << nl << "if(!" << memberName << ".equals(_r." << memberName << "))"; + out << sb; + out << nl << "return false;"; + out << eb; + } + else + { + out << nl << "if(!java.util.Arrays.equals(" << memberName << ", _r." << memberName << "))"; + out << sb; + out << nl << "return false;"; + out << eb; + } } else { @@ -3620,7 +3638,7 @@ Slice::Gen::ImplVisitor::visitClassDefStart(const ClassDefPtr& p) { if(p->isLocal()) { - out << " implements " << name; + out << " extends Ice.LocalObjectImpl implements " << name; } else { |