diff options
Diffstat (limited to 'cpp/src/slice2java/Gen.cpp')
-rw-r--r-- | cpp/src/slice2java/Gen.cpp | 19 |
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()) { |