diff options
Diffstat (limited to 'cpp/src/slice2java/Gen.cpp')
-rw-r--r-- | cpp/src/slice2java/Gen.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/cpp/src/slice2java/Gen.cpp b/cpp/src/slice2java/Gen.cpp index a5f2244a862..16792718e7f 100644 --- a/cpp/src/slice2java/Gen.cpp +++ b/cpp/src/slice2java/Gen.cpp @@ -1688,6 +1688,8 @@ Slice::Gen::TypesVisitor::visitClassDefStart(const ClassDefPtr& p) out << sp << nl << "public void" << nl << "patch(Ice.Object v)"; out << sb; + out << nl << "try"; + out << sb; if(allClassMembers.size() > 1) { out << nl << "switch(__member)"; @@ -1720,6 +1722,14 @@ Slice::Gen::TypesVisitor::visitClassDefStart(const ClassDefPtr& p) out << eb; } out << eb; + out << nl << "catch(ClassCastException ex)"; + out << sb; + out << nl << "Ice.UnexpectedObjectException _e = new Ice.UnexpectedObjectException();"; + out << nl << "_e.type = v.ice_id();"; + out << nl << "_e.expectedType = type();"; + out << nl << "throw _e;"; + out << eb; + out << eb; out << sp << nl << "public String" << nl << "type()"; out << sb; @@ -2015,6 +2025,8 @@ Slice::Gen::TypesVisitor::visitExceptionEnd(const ExceptionPtr& p) out << sp << nl << "public void" << nl << "patch(Ice.Object v)"; out << sb; + out << nl << "try"; + out << sb; if(allClassMembers.size() > 1) { out << nl << "switch(__member)"; @@ -2047,6 +2059,14 @@ Slice::Gen::TypesVisitor::visitExceptionEnd(const ExceptionPtr& p) out << eb; } out << eb; + out << nl << "catch(ClassCastException ex)"; + out << sb; + out << nl << "Ice.UnexpectedObjectException _e = new Ice.UnexpectedObjectException();"; + out << nl << "_e.type = v.ice_id();"; + out << nl << "_e.expectedType = type();"; + out << nl << "throw _e;"; + out << eb; + out << eb; out << sp << nl << "public String" << nl << "type()"; out << sb; @@ -2419,6 +2439,8 @@ Slice::Gen::TypesVisitor::visitStructEnd(const StructPtr& p) out << sp << nl << "public void" << nl << "patch(Ice.Object v)"; out << sb; + out << nl << "try"; + out << sb; if(classMembers.size() > 1) { out << nl << "switch(__member)"; @@ -2451,6 +2473,14 @@ Slice::Gen::TypesVisitor::visitStructEnd(const StructPtr& p) out << eb; } out << eb; + out << nl << "catch(ClassCastException ex)"; + out << sb; + out << nl << "Ice.UnexpectedObjectException _e = new Ice.UnexpectedObjectException();"; + out << nl << "_e.type = v.ice_id();"; + out << nl << "_e.expectedType = type();"; + out << nl << "throw _e;"; + out << eb; + out << eb; out << sp << nl << "public String" << nl << "type()"; out << sb; @@ -3177,8 +3207,18 @@ Slice::Gen::HolderVisitor::writeHolder(const TypePtr& p) out << nl << "public void"; out << nl << "patch(Ice.Object v)"; out << sb; + out << nl << "try"; + out << sb; out << nl << "value = (" << typeS << ")v;"; out << eb; + out << nl << "catch(ClassCastException ex)"; + out << sb; + out << nl << "Ice.UnexpectedObjectException _e = new Ice.UnexpectedObjectException();"; + out << nl << "_e.type = v.ice_id();"; + out << nl << "_e.expectedType = type();"; + out << nl << "throw _e;"; + out << eb; + out << eb; out << sp << nl << "public String" << nl << "type()"; out << sb; |