summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorMichi Henning <michi@zeroc.com>2009-02-24 10:02:55 +1000
committerMichi Henning <michi@zeroc.com>2009-02-24 10:02:55 +1000
commitb0d4e6363a8640c814d8d32ecf397e17fd13b4ed (patch)
tree4937e621e7f9d1e7b945a4e830352db1046a907d /cpp
parentbug 3715 - translator changes to improve warning/error handling in Eclipse (diff)
downloadice-b0d4e6363a8640c814d8d32ecf397e17fd13b4ed.tar.bz2
ice-b0d4e6363a8640c814d8d32ecf397e17fd13b4ed.tar.xz
ice-b0d4e6363a8640c814d8d32ecf397e17fd13b4ed.zip
Bug 3751 - CsGenerator::MetaDataVisitor::visitParamDecl not called
- Added code to call parameter metadata validator. - Fixed typo in warning message. - Fixed incorect history update for global metadata. - Got rid of a few magic numbers in the metadata validation.
Diffstat (limited to 'cpp')
-rw-r--r--cpp/src/Slice/CsUtil.cpp30
1 files changed, 20 insertions, 10 deletions
diff --git a/cpp/src/Slice/CsUtil.cpp b/cpp/src/Slice/CsUtil.cpp
index 8a4cfa0307c..34af1de3790 100644
--- a/cpp/src/Slice/CsUtil.cpp
+++ b/cpp/src/Slice/CsUtil.cpp
@@ -1547,18 +1547,19 @@ Slice::CsGenerator::MetaDataVisitor::visitUnitStart(const UnitPtr& p)
{
if(s.find(csPrefix) == 0)
{
- static const string csAttributePrefix = "cs:attribute:";
+ static const string csAttributePrefix = csPrefix + "attribute:";
if(s.find(csAttributePrefix) == 0 && s.size() > csAttributePrefix.size())
{
continue;
}
emitWarning(file, -1, "ignoring invalid global metadata `" + s + "'");
+ _history.insert(s);
}
else if(s.find(clrPrefix) == 0)
{
emitWarning(file, -1, "ignoring invalid global metadata `" + s + "'");
+ _history.insert(s);
}
- _history.insert(s);
}
}
}
@@ -1628,13 +1629,19 @@ Slice::CsGenerator::MetaDataVisitor::visitOperation(const OperationPtr& p)
if(!cl->isLocal())
{
ostringstream os;
- os << "metdata directive `UserException' applies only to local operations "
+ os << "metadata directive `UserException' applies only to local operations "
<< "but enclosing " << (cl->isInterface() ? "interface" : "class") << "`" << cl->name()
<< "' is not local";
emitWarning(p->file(), p->line(), os.str());
}
}
validate(p);
+
+ ParamDeclList params = p->parameters();
+ for(ParamDeclList::const_iterator i = params.begin(); i != params.end(); ++i)
+ {
+ visitParamDecl(*i);
+ }
}
void
@@ -1696,9 +1703,10 @@ Slice::CsGenerator::MetaDataVisitor::validate(const ContainedPtr& cont)
{
continue;
}
- if(s.substr(prefix.size(), 8) == "generic:")
+ static const string clrGenericPrefix = prefix + "generic:";
+ if(s.find(clrGenericPrefix) == 0)
{
- string type = s.substr(prefix.size() + 8);
+ string type = s.substr(clrGenericPrefix.size());
if(type == "LinkedList" || type == "Queue" || type == "Stack")
{
ClassDeclPtr cd = ClassDeclPtr::dynamicCast(seq->type());
@@ -1713,7 +1721,8 @@ Slice::CsGenerator::MetaDataVisitor::validate(const ContainedPtr& cont)
continue; // Custom type or List<T>
}
}
- if(s.substr(prefix.size(), 13) == "serializable:")
+ static const string clrSerializablePrefix = prefix + "serializable:";
+ if(s.find(clrSerializablePrefix) == 0)
{
string meta;
if(cont->findMetaData(prefix + "collection", meta)
@@ -1722,7 +1731,7 @@ Slice::CsGenerator::MetaDataVisitor::validate(const ContainedPtr& cont)
emitWarning(cont->file(), cont->line(), msg + " `" + meta + "':\n" +
"serialization can only be used with the array mapping for byte sequences");
}
- string type = s.substr(prefix.size() + 13);
+ string type = s.substr(clrSerializablePrefix.size());
BuiltinPtr builtin = BuiltinPtr::dynamicCast(seq->type());
if(!type.empty() && builtin && builtin->kind() == Builtin::KindByte)
{
@@ -1754,9 +1763,10 @@ Slice::CsGenerator::MetaDataVisitor::validate(const ContainedPtr& cont)
{
continue;
}
- if(s.substr(prefix.size(), 8) == "generic:")
+ static const string clrGenericPrefix = prefix + "generic:";
+ if(s.find(clrGenericPrefix) == 0)
{
- string type = s.substr(prefix.size() + 8);
+ string type = s.substr(clrGenericPrefix.size());
if(type == "SortedDictionary" || type == "SortedList")
{
continue;
@@ -1773,7 +1783,7 @@ Slice::CsGenerator::MetaDataVisitor::validate(const ContainedPtr& cont)
{
if(s.find(prefix) == 0)
{
- static const string csAttributePrefix = "cs:attribute:";
+ static const string csAttributePrefix = prefix + "attribute:";
if(s.find(csAttributePrefix) == 0 && s.size() > csAttributePrefix.size())
{
continue;