diff options
author | Mark Spruiell <mes@zeroc.com> | 2016-08-24 12:44:44 -0700 |
---|---|---|
committer | Mark Spruiell <mes@zeroc.com> | 2016-08-24 12:44:44 -0700 |
commit | eed747dd3f494d9739dd8d7fbb4918f14fb148ae (patch) | |
tree | b152c37fac68d6f91883ebd0f66c934319d747db /cpp/src | |
parent | slice fixes for slicing/objects test (diff) | |
download | ice-eed747dd3f494d9739dd8d7fbb4918f14fb148ae.tar.bz2 ice-eed747dd3f494d9739dd8d7fbb4918f14fb148ae.tar.xz ice-eed747dd3f494d9739dd8d7fbb4918f14fb148ae.zip |
generated MarshaledResult types in servant interface for Java
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/slice2java/Gen.cpp | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/cpp/src/slice2java/Gen.cpp b/cpp/src/slice2java/Gen.cpp index 192281628a0..8b0b07934c0 100644 --- a/cpp/src/slice2java/Gen.cpp +++ b/cpp/src/slice2java/Gen.cpp @@ -205,18 +205,26 @@ Slice::JavaVisitor::getResultType(const OperationPtr& op, const string& package, { if(dispatch && op->hasMarshaledResult()) { - ContainedPtr c = ContainedPtr::dynamicCast(op->container()); + const ClassDefPtr c = ClassDefPtr::dynamicCast(op->container()); assert(c); - string abs = getAbsolute(c, package); + string abs; + if(c->isInterface()) + { + abs = getAbsolute(c, package); + } + else + { + abs = getAbsolute(c, package, "_", "Disp"); + } string name = op->name(); name[0] = toupper(static_cast<unsigned char>(name[0])); return abs + "." + name + "MarshaledResult"; } else if(op->returnsMultipleValues()) { - ContainedPtr c = ContainedPtr::dynamicCast(op->container()); + const ContainedPtr c = ContainedPtr::dynamicCast(op->container()); assert(c); - string abs = getAbsolute(c, package); + const string abs = getAbsolute(c, package); string name = op->name(); name[0] = toupper(static_cast<unsigned char>(name[0])); return abs + "." + name + "Result"; @@ -932,6 +940,14 @@ Slice::JavaVisitor::writeDispatch(Output& out, const ClassDefPtr& p) { OperationPtr op = *r; + // + // The "MarshaledResult" type is generated in the servant interface. + // + if(!p->isInterface() && op->hasMarshaledResult()) + { + writeMarshaledResultType(out, op, package); + } + vector<string> params = getParams(op, package); const bool amd = p->hasMetaData("amd") || op->hasMetaData("amd"); @@ -1019,10 +1035,7 @@ Slice::JavaVisitor::writeDispatch(Output& out, const ClassDefPtr& p) { OperationPtr op = *r; StringList opMetaData = op->getMetaData(); - ContainerPtr container = op->container(); - ClassDefPtr cl = ClassDefPtr::dynamicCast(container); - assert(cl); - string deprecateReason = getDeprecateReason(op, cl, "operation"); + string deprecateReason = getDeprecateReason(op, p, "operation"); string opName = op->name(); out << sp; @@ -1049,7 +1062,7 @@ Slice::JavaVisitor::writeDispatch(Output& out, const ClassDefPtr& p) } out << sb; - const bool amd = cl->hasMetaData("amd") || op->hasMetaData("amd"); + const bool amd = p->hasMetaData("amd") || op->hasMetaData("amd"); const TypePtr ret = op->returnType(); @@ -2659,7 +2672,10 @@ Slice::Gen::TypesVisitor::visitOperation(const OperationPtr& p) writeResultType(out, p, package); } - if(p->hasMarshaledResult()) + // + // The "MarshaledResult" type is generated in the servant interface. + // + if(cl->isInterface() && p->hasMarshaledResult()) { writeMarshaledResultType(out, p, package); } |