summaryrefslogtreecommitdiff
path: root/cpp/src/slice2java/Gen.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/slice2java/Gen.cpp')
-rw-r--r--cpp/src/slice2java/Gen.cpp19
1 files changed, 16 insertions, 3 deletions
diff --git a/cpp/src/slice2java/Gen.cpp b/cpp/src/slice2java/Gen.cpp
index 4289a6ae5a9..724c4a8a129 100644
--- a/cpp/src/slice2java/Gen.cpp
+++ b/cpp/src/slice2java/Gen.cpp
@@ -2274,7 +2274,7 @@ Slice::Gen::TypesVisitor::visitStructStart(const StructPtr& p)
out << nl << " **/";
}
- out << nl << "public final class " << name << " implements java.lang.Cloneable";
+ out << nl << "public final class " << name << " implements java.lang.Cloneable, java.io.Serializable";
out << sb;
return true;
@@ -2799,7 +2799,7 @@ Slice::Gen::TypesVisitor::visitEnum(const EnumPtr& p)
if(java2)
{
- out << nl << "public final class " << name;
+ out << nl << "public final class " << name << " implements java.io.Serializable";
out << sb;
out << nl << "private static " << name << "[] __values = new " << name << "[" << sz << "];";
@@ -2852,7 +2852,7 @@ Slice::Gen::TypesVisitor::visitEnum(const EnumPtr& p)
}
else
{
- out << nl << "public enum " << name;
+ out << nl << "public enum " << name << " implements java.io.Serializable";
out << sb;
for(en = enumerators.begin(); en != enumerators.end(); ++en)
@@ -2978,8 +2978,21 @@ Slice::Gen::TypesVisitor::visitEnum(const EnumPtr& p)
if(java2)
{
+ //
+ // Without this method, Java would create a new instance of an enumerator
+ // during deserialization, but we want it to use one of the predefined
+ // enumerators instead.
+ //
+ out << sp << nl << "private java.lang.Object" << nl << "readResolve()";
+ out.inc();
+ out << nl << "throws java.io.ObjectStreamException";
+ out.dec();
+ out << sb;
+ out << nl << "return convert(__value);";
+ out << eb;
out << sp << nl << "final static private String[] __T =";
out << sb;
+
en = enumerators.begin();
while(en != enumerators.end())
{