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.cpp23
1 files changed, 19 insertions, 4 deletions
diff --git a/cpp/src/slice2java/Gen.cpp b/cpp/src/slice2java/Gen.cpp
index eb26d6921d2..ef0e9cf62ae 100644
--- a/cpp/src/slice2java/Gen.cpp
+++ b/cpp/src/slice2java/Gen.cpp
@@ -1067,11 +1067,25 @@ Slice::Gen::TieVisitor::visitClassDefStart(const ClassDefPtr& p)
string params = getParams((*r), scope);
string args = getArgs(*r);
+ bool hasAMD = p->hasMetaData("amd") || (*r)->hasMetaData("amd");
+
out << sp;
- out << nl << "public " << retS << nl << opName << '(' << params;
+ out << nl << "public " << (hasAMD ? "void" : retS) << nl << opName;
+ if(hasAMD)
+ {
+ out << "_async";
+ }
+ out << '(';
+ if(hasAMD)
+ {
+ ContainedPtr definingContainer = ContainedPtr::dynamicCast((*r)->container());
+ out << "AMD_" << fixKwd(definingContainer->name()) << '_' << opName << " __cb, ";
+ }
+ out << params;
+
if(!p->isLocal())
{
- if(!params.empty())
+ if(!params.empty() || hasAMD)
{
out << ", ";
}
@@ -1085,11 +1099,12 @@ Slice::Gen::TieVisitor::visitClassDefStart(const ClassDefPtr& p)
writeThrowsClause(scope, throws);
out << sb;
out << nl;
- if(ret)
+ if(ret && !hasAMD)
{
out << "return ";
}
- out << "_ice_delegate." << opName << '(' << args;
+ out << "_ice_delegate." << opName << (hasAMD ? "_async(__cb, " : "(");
+ out << args;
if(!p->isLocal())
{
if(!args.empty())