summaryrefslogtreecommitdiff
path: root/cpp/src/slice2java/Gen.cpp
diff options
context:
space:
mode:
authorJose <jose@zeroc.com>2012-11-12 20:18:19 +0100
committerJose <jose@zeroc.com>2012-11-12 20:18:19 +0100
commitd20f9b3983d0da9912da600506b52e7bd3272a03 (patch)
tree79acf9785d17efb5eb50a5a5de9f357882c930c8 /cpp/src/slice2java/Gen.cpp
parentEclipse plug-in minor updates (diff)
downloadice-d20f9b3983d0da9912da600506b52e7bd3272a03.tar.bz2
ice-d20f9b3983d0da9912da600506b52e7bd3272a03.tar.xz
ice-d20f9b3983d0da9912da600506b52e7bd3272a03.zip
Java serial versionUUID fixes
Diffstat (limited to 'cpp/src/slice2java/Gen.cpp')
-rw-r--r--cpp/src/slice2java/Gen.cpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/cpp/src/slice2java/Gen.cpp b/cpp/src/slice2java/Gen.cpp
index 5d8c60fad01..b85daa68764 100644
--- a/cpp/src/slice2java/Gen.cpp
+++ b/cpp/src/slice2java/Gen.cpp
@@ -2460,6 +2460,41 @@ Slice::Gen::TieVisitor::visitClassDefStart(const ClassDefPtr& p)
}
out << sp << nl << "private " << '_' << name << opIntfName << " _ice_delegate;";
+ out << sp << nl << "public static final long serialVersionUID = ";
+ string serialVersionUID;
+ if(p->findMetaData("java:serialVersionUID", serialVersionUID))
+ {
+ string::size_type pos = serialVersionUID.rfind(":") + 1;
+ if(pos == string::npos)
+ {
+ ostringstream os;
+ os << "ignoring invalid serialVersionUID for class `" << p->scoped() << "'; generating default value";
+ emitWarning("", "", os.str());
+ out << computeSerialVersionUUID(p);
+ }
+ else
+ {
+ Int64 v = 0;
+ serialVersionUID = serialVersionUID.substr(pos);
+ if(serialVersionUID != "0")
+ {
+ if(!stringToInt64(serialVersionUID, v)) // conversion error
+ {
+ ostringstream os;
+ os << "ignoring invalid serialVersionUID for class `" << p->scoped()
+ << "'; generating default value";
+ emitWarning("", "", os.str());
+ out << computeSerialVersionUUID(p);
+ }
+ }
+ out << v;
+ }
+ }
+ else
+ {
+ out << computeSerialVersionUUID(p);
+ }
+ out << "L;";
out << eb;
close();
@@ -3383,6 +3418,42 @@ Slice::Gen::TypesVisitor::visitExceptionEnd(const ExceptionPtr& p)
}
}
+ out << sp << nl << "public static final long serialVersionUID = ";
+ string serialVersionUID;
+ if(p->findMetaData("java:serialVersionUID", serialVersionUID))
+ {
+ string::size_type pos = serialVersionUID.rfind(":") + 1;
+ if(pos == string::npos)
+ {
+ ostringstream os;
+ os << "ignoring invalid serialVersionUID for exception `" << p->scoped() << "'; generating default value";
+ emitWarning("", "", os.str());
+ out << computeSerialVersionUUID(p);
+ }
+ else
+ {
+ Int64 v = 0;
+ serialVersionUID = serialVersionUID.substr(pos);
+ if(serialVersionUID != "0")
+ {
+ if(!stringToInt64(serialVersionUID, v)) // conversion error
+ {
+ ostringstream os;
+ os << "ignoring invalid serialVersionUID for exception `" << p->scoped()
+ << "'; generating default value";
+ emitWarning("", "", os.str());
+ out << computeSerialVersionUUID(p);
+ }
+ }
+ out << v;
+ }
+ }
+ else
+ {
+ out << computeSerialVersionUUID(p);
+ }
+ out << "L;";
+
out << eb;
close();
}