summaryrefslogtreecommitdiff
path: root/cpp/src/slice2java/Gen.cpp
diff options
context:
space:
mode:
authorMark Spruiell <mes@zeroc.com>2003-03-26 19:58:31 +0000
committerMark Spruiell <mes@zeroc.com>2003-03-26 19:58:31 +0000
commitff717c2a75ea7a1547f2407f43de9a1eb1a0a58f (patch)
tree066d2b98662bad2bc1c865e2f42fc2ec54b61009 /cpp/src/slice2java/Gen.cpp
parentdocu (diff)
downloadice-ff717c2a75ea7a1547f2407f43de9a1eb1a0a58f.tar.bz2
ice-ff717c2a75ea7a1547f2407f43de9a1eb1a0a58f.tar.xz
ice-ff717c2a75ea7a1547f2407f43de9a1eb1a0a58f.zip
bug fixes for sequence comparsion, local object impl
Diffstat (limited to 'cpp/src/slice2java/Gen.cpp')
-rw-r--r--cpp/src/slice2java/Gen.cpp32
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
{