summaryrefslogtreecommitdiff
path: root/cpp/src/slice2java/Gen.cpp
diff options
context:
space:
mode:
authorJose <jose@zeroc.com>2011-12-30 00:50:17 +0100
committerJose <jose@zeroc.com>2011-12-30 00:50:17 +0100
commit7c87650730bd406521e4a75a7374e62ba3128ad2 (patch)
treedddad39775ca64d5324f0be7b75469d6c1d78999 /cpp/src/slice2java/Gen.cpp
parentICE-4565 - Generate default value initialization in header file (diff)
downloadice-7c87650730bd406521e4a75a7374e62ba3128ad2.tar.bz2
ice-7c87650730bd406521e4a75a7374e62ba3128ad2.tar.xz
ice-7c87650730bd406521e4a75a7374e62ba3128ad2.zip
ICE-3441 - Compute serialVersionUID
Diffstat (limited to 'cpp/src/slice2java/Gen.cpp')
-rw-r--r--cpp/src/slice2java/Gen.cpp87
1 files changed, 85 insertions, 2 deletions
diff --git a/cpp/src/slice2java/Gen.cpp b/cpp/src/slice2java/Gen.cpp
index da876279cd4..70b91db68fb 100644
--- a/cpp/src/slice2java/Gen.cpp
+++ b/cpp/src/slice2java/Gen.cpp
@@ -2567,6 +2567,41 @@ void
Slice::Gen::TypesVisitor::visitClassDefEnd(const ClassDefPtr& p)
{
Output& out = output();
+ out << 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 << "Invalid serialVersionUID for class `" << p->scoped() << "' default to slice2java generated value.";
+ emitWarning("", "", os.str());
+ out << computeSerialVersionUUID(p);
+ }
+ else
+ {
+ long v = 0;
+ serialVersionUID = serialVersionUID.substr(pos);
+ if(serialVersionUID != "0")
+ {
+ v = atol(serialVersionUID.c_str());
+ if(v == 0) // conversion error
+ {
+ ostringstream os;
+ os << "Invalid serialVersionUID for class `" << p->scoped() << "' default to slice2java generated value.";
+ emitWarning("", "", os.str());
+ out << computeSerialVersionUUID(p);
+ }
+ }
+ out << v;
+ }
+ }
+ else
+ {
+ out << computeSerialVersionUUID(p);
+ }
+ out << "L;";
out << eb;
close();
}
@@ -3311,6 +3346,43 @@ Slice::Gen::TypesVisitor::visitStructEnd(const StructPtr& p)
out << eb;
}
}
+
+ out << nl;
+ out << 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 << "Invalid serialVersionUID for struct `" << p->scoped() << "' default to slice2java generated value.";
+ emitWarning("", "", os.str());
+ out << computeSerialVersionUUID(p);
+ }
+ else
+ {
+ long v = 0;
+ serialVersionUID = serialVersionUID.substr(pos);
+ if(serialVersionUID != "0")
+ {
+ v = atol(serialVersionUID.c_str());
+ if(v == 0) // conversion error
+ {
+ ostringstream os;
+ os << "Invalid serialVersionUID for struct `" << p->scoped() << "' default to slice2java generated value.";
+ emitWarning("", "", os.str());
+ out << computeSerialVersionUUID(p);
+ }
+ }
+ out << v;
+ }
+ }
+ else
+ {
+ out << computeSerialVersionUUID(p);
+ }
+ out << "L;";
out << eb;
close();
@@ -4426,8 +4498,14 @@ Slice::Gen::HelperVisitor::visitClassDefStart(const ClassDefPtr& p)
out << nl << "return null;";
out << eb;
}
-
+
+ //
+ // Avoid serialVersionUID warnings for Proxy Helper classes.
+ //
+ out << nl;
+ out << nl << "public static final long serialVersionUID = 0L;";
out << eb;
+
close();
if(_stream)
@@ -5382,7 +5460,12 @@ Slice::Gen::DispatcherVisitor::visitClassDefStart(const ClassDefPtr& p)
out << eb;
writeDispatchAndMarshalling(out, p, _stream);
-
+
+ //
+ // Avoid serialVersionUID warnings for dispatch classes.
+ //
+ out << nl;
+ out << nl << "public static final long serialVersionUID = 0L;";
out << eb;
close();