summaryrefslogtreecommitdiff
path: root/cpp/src/Slice/JavaUtil.cpp
diff options
context:
space:
mode:
authorJoe George <joe@zeroc.com>2015-12-03 09:45:09 -0500
committerJoe George <joe@zeroc.com>2015-12-03 09:45:09 -0500
commiteb1473089bfe9105b3884a490edafeb561df935e (patch)
tree71249e567e5dc11b26b27543083d1ec5c5585037 /cpp/src/Slice/JavaUtil.cpp
parentC++11 mapping: update & timeout tests (diff)
downloadice-eb1473089bfe9105b3884a490edafeb561df935e.tar.bz2
ice-eb1473089bfe9105b3884a490edafeb561df935e.tar.xz
ice-eb1473089bfe9105b3884a490edafeb561df935e.zip
ICE-6897 - Add delegate metadata
The "delegate" metadata tag can be applied to interfaces with one operation. In C++ they are mapped to std::function's, in C# delegates. In Java we still generate a interface with one operation, which is a FunctionalInterface.
Diffstat (limited to 'cpp/src/Slice/JavaUtil.cpp')
-rw-r--r--cpp/src/Slice/JavaUtil.cpp22
1 files changed, 18 insertions, 4 deletions
diff --git a/cpp/src/Slice/JavaUtil.cpp b/cpp/src/Slice/JavaUtil.cpp
index dd35e40abb0..f84b30eb8d5 100644
--- a/cpp/src/Slice/JavaUtil.cpp
+++ b/cpp/src/Slice/JavaUtil.cpp
@@ -1640,7 +1640,7 @@ Slice::JavaGenerator::writeMarshalUnmarshalCode(Output& out,
BuiltinPtr elemBuiltin = BuiltinPtr::dynamicCast(elemType);
if(optionalParam && elemBuiltin && elemBuiltin->kind() != Builtin::KindObject &&
- elemBuiltin->kind() != Builtin::KindObjectProxy && elemBuiltin->kind() != Builtin::KindValue &&
+ elemBuiltin->kind() != Builtin::KindObjectProxy && elemBuiltin->kind() != Builtin::KindValue &&
!hasTypeMetaData(seq, metaData))
{
static const char* builtinTable[] =
@@ -2343,7 +2343,7 @@ Slice::JavaGenerator::writeSequenceMarshalUnmarshalCode(Output& out,
{
BuiltinPtr b = BuiltinPtr::dynamicCast(type);
if(b && b->kind() != Builtin::KindObject &&
- b->kind() != Builtin::KindValue &&
+ b->kind() != Builtin::KindValue &&
b->kind() != Builtin::KindObjectProxy)
{
switch(b->kind())
@@ -3201,7 +3201,7 @@ Slice::JavaGenerator::writeStreamDictionaryMarshalUnmarshalCode(Output& out,
}
}
BuiltinPtr builtin = BuiltinPtr::dynamicCast(value);
- if(!(builtin && (builtin->kind() == Builtin::KindObject || builtin->kind() == Builtin::KindValue)) &&
+ if(!(builtin && (builtin->kind() == Builtin::KindObject || builtin->kind() == Builtin::KindValue)) &&
!ClassDeclPtr::dynamicCast(value))
{
out << nl << "" << v << ".put(__key, __value);";
@@ -3536,7 +3536,7 @@ Slice::JavaGenerator::writeStreamSequenceMarshalUnmarshalCode(Output& out,
{
BuiltinPtr b = BuiltinPtr::dynamicCast(type);
if(b && b->kind() != Builtin::KindObject &&
- b->kind() != Builtin::KindValue &&
+ b->kind() != Builtin::KindValue &&
b->kind() != Builtin::KindObjectProxy)
{
switch(b->kind())
@@ -4280,6 +4280,11 @@ Slice::JavaGenerator::MetaDataVisitor::getMetaData(const ContainedPtr& cont)
emitWarning(cont->file(), cont->line(), "ignoring invalid metadata `" + s + "'");
}
+ else if(s == "delegate")
+ {
+ result.push_back(s);
+ continue;
+ }
_history.insert(s);
}
@@ -4337,6 +4342,15 @@ Slice::JavaGenerator::MetaDataVisitor::validateType(const SyntaxTreeBasePtr& p,
//
emitWarning(file, line, "ignoring invalid metadata `" + *i + "'");
}
+ else if(i->find("delegate") == 0)
+ {
+ ClassDefPtr cl = ClassDefPtr::dynamicCast(p);
+ if(cl && cl->isDelegate())
+ {
+ continue;
+ }
+ emitWarning(file, line, "ignoring invalid metadata `" + *i + "'");
+ }
}
}