diff options
author | Mark Spruiell <mes@zeroc.com> | 2010-05-15 20:00:27 -0700 |
---|---|---|
committer | Mark Spruiell <mes@zeroc.com> | 2010-05-15 20:00:27 -0700 |
commit | 656503c0f5c305afe91f8d70e0e9b5e9d558b22d (patch) | |
tree | 6f37ea66dd2f28d8be5021a78b7a5c773b13975d /cpp/src/slice2java/Gen.cpp | |
parent | bug 4749 - duplicate Slice files cause slice2java to fail (diff) | |
download | ice-656503c0f5c305afe91f8d70e0e9b5e9d558b22d.tar.bz2 ice-656503c0f5c305afe91f8d70e0e9b5e9d558b22d.tar.xz ice-656503c0f5c305afe91f8d70e0e9b5e9d558b22d.zip |
bug 4739 - fixing equals() method for structures
Diffstat (limited to 'cpp/src/slice2java/Gen.cpp')
-rw-r--r-- | cpp/src/slice2java/Gen.cpp | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/cpp/src/slice2java/Gen.cpp b/cpp/src/slice2java/Gen.cpp index 6b35169b764..2564f7e904e 100644 --- a/cpp/src/slice2java/Gen.cpp +++ b/cpp/src/slice2java/Gen.cpp @@ -2997,11 +2997,14 @@ Slice::Gen::TypesVisitor::visitStructEnd(const StructPtr& p) case Builtin::KindObjectProxy: case Builtin::KindLocalObject: { - out << nl << "if(" << memberName << " != _r." << memberName << " && " << memberName - << " != null && !" << memberName << ".equals(_r." << memberName << "))"; + out << nl << "if(" << memberName << " != _r." << memberName << ')'; + out << sb; + out << nl << "if(" << memberName << " == null || _r." << memberName << " == null || !" + << memberName << ".equals(_r." << memberName << "))"; out << sb; out << nl << "return false;"; out << eb; + out << eb; break; } } @@ -3021,14 +3024,20 @@ Slice::Gen::TypesVisitor::visitStructEnd(const StructPtr& p) { if(hasTypeMetaData(seq, (*d)->getMetaData())) { - out << nl << "if(" << memberName << " != _r." << memberName << " && " << memberName - << " != null && !" << memberName << ".equals(_r." << memberName << "))"; + out << nl << "if(" << memberName << " != _r." << memberName << ')'; + out << sb; + out << nl << "if(" << memberName << " == null || _r." << memberName << " == null || !" + << memberName << ".equals(_r." << memberName << "))"; out << sb; out << nl << "return false;"; out << eb; + out << eb; } else { + // + // Arrays.equals() handles null values. + // out << nl << "if(!java.util.Arrays.equals(" << memberName << ", _r." << memberName << "))"; out << sb; out << nl << "return false;"; @@ -3037,11 +3046,14 @@ Slice::Gen::TypesVisitor::visitStructEnd(const StructPtr& p) } else { - out << nl << "if(" << memberName << " != _r." << memberName << " && " << memberName - << " != null && !" << memberName << ".equals(_r." << memberName << "))"; + out << nl << "if(" << memberName << " != _r." << memberName << ')'; + out << sb; + out << nl << "if(" << memberName << " == null || _r." << memberName << " == null || !" + << memberName << ".equals(_r." << memberName << "))"; out << sb; out << nl << "return false;"; out << eb; + out << eb; } } } |