summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorMark Spruiell <mes@zeroc.com>2016-08-24 12:44:44 -0700
committerMark Spruiell <mes@zeroc.com>2016-08-24 12:44:44 -0700
commiteed747dd3f494d9739dd8d7fbb4918f14fb148ae (patch)
treeb152c37fac68d6f91883ebd0f66c934319d747db /cpp/src
parentslice fixes for slicing/objects test (diff)
downloadice-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.cpp36
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);
}