summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorJose <jose@zeroc.com>2017-02-03 18:10:20 +0100
committerJose <jose@zeroc.com>2017-02-03 18:10:20 +0100
commit7274ebf13c7a1ff3b587598335201c3a4e848c90 (patch)
treead673e775b6ab68d511bcc86cf420c519b65948d /cpp/src
parentConnection::close fixes for C#/Java/JS (diff)
downloadice-7274ebf13c7a1ff3b587598335201c3a4e848c90.tar.bz2
ice-7274ebf13c7a1ff3b587598335201c3a4e848c90.tar.xz
ice-7274ebf13c7a1ff3b587598335201c3a4e848c90.zip
Rework warning suppression to use global meta data
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/Slice/Checksum.cpp9
-rw-r--r--cpp/src/Slice/Checksum.h2
-rw-r--r--cpp/src/Slice/JavaUtil.cpp58
-rw-r--r--cpp/src/Slice/JavaUtil.h4
-rw-r--r--cpp/src/Slice/Parser.cpp18
-rw-r--r--cpp/src/Slice/Parser.h14
-rw-r--r--cpp/src/Slice/Python.cpp19
-rw-r--r--cpp/src/Slice/PythonUtil.cpp56
-rw-r--r--cpp/src/Slice/PythonUtil.h2
-rw-r--r--cpp/src/Slice/Ruby.cpp6
-rw-r--r--cpp/src/Slice/RubyUtil.cpp12
-rw-r--r--cpp/src/Slice/RubyUtil.h2
-rw-r--r--cpp/src/slice2confluence/Gen.cpp23
-rw-r--r--cpp/src/slice2confluence/Gen.h10
-rw-r--r--cpp/src/slice2confluence/Main.cpp6
-rw-r--r--cpp/src/slice2cpp/Gen.cpp282
-rw-r--r--cpp/src/slice2cpp/Gen.h60
-rw-r--r--cpp/src/slice2cpp/Main.cpp6
-rw-r--r--cpp/src/slice2cs/CsUtil.cpp24
-rw-r--r--cpp/src/slice2cs/CsUtil.h4
-rw-r--r--cpp/src/slice2cs/Gen.cpp82
-rw-r--r--cpp/src/slice2cs/Gen.h30
-rw-r--r--cpp/src/slice2cs/Main.cpp6
-rw-r--r--cpp/src/slice2html/Gen.cpp22
-rw-r--r--cpp/src/slice2html/Gen.h10
-rw-r--r--cpp/src/slice2html/Main.cpp6
-rw-r--r--cpp/src/slice2java/Gen.cpp81
-rw-r--r--cpp/src/slice2java/Gen.h20
-rw-r--r--cpp/src/slice2java/GenCompat.cpp114
-rw-r--r--cpp/src/slice2java/GenCompat.h30
-rw-r--r--cpp/src/slice2java/Main.cpp10
-rw-r--r--cpp/src/slice2js/Gen.cpp32
-rw-r--r--cpp/src/slice2js/Gen.h15
-rw-r--r--cpp/src/slice2js/Main.cpp8
-rw-r--r--cpp/src/slice2objc/Gen.cpp56
-rw-r--r--cpp/src/slice2objc/Gen.h20
-rw-r--r--cpp/src/slice2objc/Main.cpp7
-rw-r--r--cpp/src/slice2objc/ObjCUtil.cpp16
-rw-r--r--cpp/src/slice2objc/ObjCUtil.h3
-rw-r--r--cpp/src/slice2php/Main.cpp26
40 files changed, 607 insertions, 604 deletions
diff --git a/cpp/src/Slice/Checksum.cpp b/cpp/src/Slice/Checksum.cpp
index 1dd25cef5c8..1c8a21511e8 100644
--- a/cpp/src/Slice/Checksum.cpp
+++ b/cpp/src/Slice/Checksum.cpp
@@ -21,7 +21,7 @@ class ChecksumVisitor : public ParserVisitor
{
public:
- ChecksumVisitor(ChecksumMap&, int);
+ ChecksumVisitor(ChecksumMap&);
virtual bool visitClassDefStart(const ClassDefPtr&);
virtual bool visitExceptionStart(const ExceptionPtr&);
@@ -41,8 +41,7 @@ private:
}
-Slice::ChecksumVisitor::ChecksumVisitor(ChecksumMap& m, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::ChecksumVisitor::ChecksumVisitor(ChecksumMap& m) :
_map(m)
{
}
@@ -442,11 +441,11 @@ Slice::ChecksumVisitor::updateMap(const string& scoped, const string& data)
}
Slice::ChecksumMap
-Slice::createChecksums(const UnitPtr& u, int warningLevel)
+Slice::createChecksums(const UnitPtr& u)
{
ChecksumMap result;
- ChecksumVisitor visitor(result, warningLevel);
+ ChecksumVisitor visitor(result);
u->visit(&visitor, false);
return result;
diff --git a/cpp/src/Slice/Checksum.h b/cpp/src/Slice/Checksum.h
index 158ac182f77..3744d8a6ad4 100644
--- a/cpp/src/Slice/Checksum.h
+++ b/cpp/src/Slice/Checksum.h
@@ -19,7 +19,7 @@ namespace Slice
typedef std::map<std::string, std::vector<unsigned char> > ChecksumMap;
-ChecksumMap createChecksums(const UnitPtr&, int);
+ChecksumMap createChecksums(const UnitPtr&);
}
diff --git a/cpp/src/Slice/JavaUtil.cpp b/cpp/src/Slice/JavaUtil.cpp
index 7c2f83fb20e..461f9b7c09e 100644
--- a/cpp/src/Slice/JavaUtil.cpp
+++ b/cpp/src/Slice/JavaUtil.cpp
@@ -139,10 +139,6 @@ class MetaDataVisitor : public ParserVisitor
{
public:
- MetaDataVisitor(int warningLevel) : ParserVisitor(warningLevel)
- {
- }
-
virtual bool visitUnitStart(const UnitPtr& p)
{
static const string prefix = "java:";
@@ -157,6 +153,7 @@ public:
string file = *q;
DefinitionContextPtr dc = p->findDefinitionContext(file);
assert(dc);
+ bool emitWarnings = !dc->suppressWarning("invalid-metadata");
StringList globalMetaData = dc->getMetaData();
for(StringList::const_iterator r = globalMetaData.begin(); r != globalMetaData.end();)
{
@@ -175,7 +172,7 @@ public:
}
else
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
emitWarning(file, "", "ignoring invalid global metadata `" + s + "'");
}
@@ -238,6 +235,11 @@ public:
TypePtr returnType = p->returnType();
StringList metaData = getMetaData(p);
+ UnitPtr unit = p->unit();
+ string file = p->file();
+ DefinitionContextPtr dc = unit->findDefinitionContext(p->file());
+ bool emitWarnings = !dc->suppressWarning("invalid-metadata");
+
if(!returnType)
{
for(StringList::const_iterator q = metaData.begin(); q != metaData.end();)
@@ -245,7 +247,7 @@ public:
string s = *q++;
if(s.find("java:type:", 0) == 0)
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
emitWarning(p->file(), p->line(), "ignoring invalid metadata `" + s +
"' for operation with void return type");
@@ -290,6 +292,10 @@ public:
const string file = p->file();
const string line = p->line();
+ const UnitPtr unit = p->unit();
+ const DefinitionContextPtr dc = unit->findDefinitionContext(file);
+ bool emitWarnings = !dc->suppressWarning("invalid-metadata");
+
for(StringList::const_iterator q = metaData.begin(); q != metaData.end(); )
{
string s = *q++;
@@ -303,7 +309,7 @@ public:
BuiltinPtr builtin = BuiltinPtr::dynamicCast(p->type());
if(!builtin || builtin->kind() != Builtin::KindByte)
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
emitWarning(file, line, "ignoring invalid metadata `" + s + "': " +
"this metadata can only be used with a byte sequence");
@@ -322,7 +328,7 @@ public:
builtin->kind() != Builtin::KindInt && builtin->kind() != Builtin::KindLong &&
builtin->kind() != Builtin::KindFloat && builtin->kind() != Builtin::KindDouble))
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
emitWarning(file, line, "ignoring invalid metadata `" + s + "': " +
"this metadata can not be used with this type");
@@ -372,6 +378,12 @@ private:
StringList metaData = cont->getMetaData();
StringList result;
+ UnitPtr unit = cont->container()->unit();
+ string file = cont->file();
+ DefinitionContextPtr dc = unit->findDefinitionContext(file);
+ assert(dc);
+ bool emitWarnings = !dc->suppressWarning("invalid-metadata");
+
for(StringList::const_iterator p = metaData.begin(); p != metaData.end(); ++p)
{
string s = *p;
@@ -431,7 +443,7 @@ private:
continue;
}
- if(warningLevel() > 0)
+ if(emitWarnings)
{
emitWarning(cont->file(), cont->line(), "ignoring invalid metadata `" + s + "'");
}
@@ -448,6 +460,10 @@ private:
StringList validateType(const SyntaxTreeBasePtr& p, const StringList& metaData, const string& file, const string& line)
{
+ const UnitPtr unit = p->unit();
+ const DefinitionContextPtr dc = unit->findDefinitionContext(file);
+ assert(dc);
+ bool emitWarnings = !dc->suppressWarning("invalid-metadata");
StringList newMetaData;
for(StringList::const_iterator i = metaData.begin(); i != metaData.end(); ++i)
{
@@ -468,7 +484,7 @@ private:
assert(b);
str = b->typeId();
}
- if(warningLevel() > 0)
+ if(emitWarnings)
{
emitWarning(file, line, "invalid metadata for " + str);
}
@@ -490,7 +506,7 @@ private:
}
- if(warningLevel() > 0)
+ if(emitWarnings)
{
emitWarning(file, line, "ignoring invalid metadata `" + *i + "'");
}
@@ -500,7 +516,7 @@ private:
//
// Only valid in sequence definition which is checked in visitSequence
//
- if(warningLevel() > 0)
+ if(emitWarnings)
{
emitWarning(file, line, "ignoring invalid metadata `" + *i + "'");
}
@@ -512,7 +528,7 @@ private:
{
newMetaData.push_back(*i);
}
- else if(warningLevel() > 0)
+ else if(emitWarnings)
{
emitWarning(file, line, "ignoring invalid metadata `" + *i + "'");
}
@@ -523,7 +539,7 @@ private:
{
newMetaData.push_back(*i);
}
- else if(warningLevel() > 0)
+ else if(emitWarnings)
{
emitWarning(file, line, "ignoring invalid metadata `" + *i + "'");
}
@@ -538,6 +554,10 @@ private:
StringList validateGetSet(const SyntaxTreeBasePtr& p, const StringList& metaData, const string& file, const string& line)
{
+ const UnitPtr unit = p->unit();
+ const DefinitionContextPtr dc= unit->findDefinitionContext(file);
+ assert(dc);
+ bool emitWarnings = !dc->suppressWarning("invalid-metadata");
StringList newMetaData;
for(StringList::const_iterator i = metaData.begin(); i != metaData.end(); ++i)
{
@@ -560,7 +580,7 @@ private:
assert(b);
str = b->typeId();
}
- if(warningLevel() > 0)
+ if(emitWarnings)
{
emitWarning(file, line, "invalid metadata for " + str);
}
@@ -3219,9 +3239,9 @@ Slice::JavaCompatGenerator::createOutput()
}
void
-Slice::JavaCompatGenerator::validateMetaData(const UnitPtr& u, int warningLevel)
+Slice::JavaCompatGenerator::validateMetaData(const UnitPtr& u)
{
- MetaDataVisitor visitor(warningLevel);
+ MetaDataVisitor visitor;
u->visit(&visitor, true);
}
@@ -5530,8 +5550,8 @@ Slice::JavaGenerator::createOutput()
}
void
-Slice::JavaGenerator::validateMetaData(const UnitPtr& u, int warningLevel)
+Slice::JavaGenerator::validateMetaData(const UnitPtr& u)
{
- MetaDataVisitor visitor(warningLevel);
+ MetaDataVisitor visitor;
u->visit(&visitor, true);
}
diff --git a/cpp/src/Slice/JavaUtil.h b/cpp/src/Slice/JavaUtil.h
index c16f78a3247..fcc77d30f63 100644
--- a/cpp/src/Slice/JavaUtil.h
+++ b/cpp/src/Slice/JavaUtil.h
@@ -68,7 +68,7 @@ public:
//
// Validate all metadata in the unit with a "java:" prefix.
//
- static void validateMetaData(const UnitPtr&, int);
+ static void validateMetaData(const UnitPtr&);
void close();
@@ -235,7 +235,7 @@ public:
//
// Validate all metadata in the unit with a "java:" prefix.
//
- static void validateMetaData(const UnitPtr&, int);
+ static void validateMetaData(const UnitPtr&);
void close();
diff --git a/cpp/src/Slice/Parser.cpp b/cpp/src/Slice/Parser.cpp
index 5db58db7ef9..9b95062c035 100644
--- a/cpp/src/Slice/Parser.cpp
+++ b/cpp/src/Slice/Parser.cpp
@@ -122,17 +122,6 @@ Unit* unit;
}
-Slice::ParserVisitor::ParserVisitor(int warningLevel) :
- _warningLevel(warningLevel)
-{
-}
-
-int
-Slice::ParserVisitor::warningLevel()
-{
- return _warningLevel;
-}
-
// ----------------------------------------------------------------------
// DefinitionContext
// ----------------------------------------------------------------------
@@ -204,6 +193,13 @@ Slice::DefinitionContext::getMetaData() const
return _metaData;
}
+bool
+Slice::DefinitionContext::suppressWarning(const string& name) const
+{
+ string q = findMetaData("suppress-warning");
+ return q == "suppress-warning" || q == "supress-warning:all" || q == ("suppress-warning:" + name);
+}
+
// ----------------------------------------------------------------------
// SyntaxTreeBase
// ----------------------------------------------------------------------
diff --git a/cpp/src/Slice/Parser.h b/cpp/src/Slice/Parser.h
index 3f969dbf330..9363105a066 100644
--- a/cpp/src/Slice/Parser.h
+++ b/cpp/src/Slice/Parser.h
@@ -191,8 +191,6 @@ class ParserVisitor
{
public:
- ParserVisitor(int warningLevel = 1);
-
virtual ~ParserVisitor() { }
virtual bool visitUnitStart(const UnitPtr&) { return true; }
virtual void visitUnitEnd(const UnitPtr&) { }
@@ -212,12 +210,6 @@ public:
virtual void visitDictionary(const DictionaryPtr&) { }
virtual void visitEnum(const EnumPtr&) { }
virtual void visitConst(const ConstPtr&) { }
-
- int warningLevel();
-
-private:
-
- int _warningLevel;
};
// ----------------------------------------------------------------------
@@ -242,6 +234,12 @@ public:
std::string findMetaData(const std::string&) const;
StringList getMetaData() const;
+ //
+ // Check if we need to suppress the given warnings based
+ // on the [["supress-warning"]] global meta-data
+ //
+ bool suppressWarning(const std::string& = "") const;
+
private:
int _includeLevel;
diff --git a/cpp/src/Slice/Python.cpp b/cpp/src/Slice/Python.cpp
index 057fb22cca4..bc1da962d70 100644
--- a/cpp/src/Slice/Python.cpp
+++ b/cpp/src/Slice/Python.cpp
@@ -101,13 +101,13 @@ class PackageVisitor : public ParserVisitor
{
public:
- static void createModules(const UnitPtr&, const string&, const string&, int);
+ static void createModules(const UnitPtr&, const string&, const string&);
virtual void visitModuleEnd(const ModulePtr&);
private:
- PackageVisitor(StringList&, int);
+ PackageVisitor(StringList&);
enum ReadState { PreModules, InModules, InSubmodules };
@@ -128,17 +128,16 @@ private:
const char* PackageVisitor::_moduleTag = "# Modules:";
const char* PackageVisitor::_submoduleTag = "# Submodules:";
-PackageVisitor::PackageVisitor(StringList& modules, int warningLevel) :
- ParserVisitor(warningLevel),
+PackageVisitor::PackageVisitor(StringList& modules) :
_modules(modules)
{
}
void
-PackageVisitor::createModules(const UnitPtr& unit, const string& module, const string& dir, int warningLevel)
+PackageVisitor::createModules(const UnitPtr& unit, const string& module, const string& dir)
{
StringList modules;
- PackageVisitor v(modules, warningLevel);
+ PackageVisitor v(modules);
unit->visit(&v, false);
for(StringList::iterator p = modules.begin(); p != modules.end(); ++p)
@@ -404,7 +403,6 @@ usage(const string& n)
"--all Generate code for Slice definitions in included files.\n"
"--checksum Generate checksums for Slice definitions.\n"
"--prefix PREFIX Prepend filenames of Python modules with PREFIX.\n"
- "--no-warn Disable all warnings.\n"
;
}
@@ -432,7 +430,6 @@ Slice::Python::compile(const vector<string>& argv)
opts.addOpt("", "build-package");
opts.addOpt("", "checksum");
opts.addOpt("", "prefix", IceUtilInternal::Options::NeedArg);
- opts.addOpt("", "no-warn");
vector<string> args;
try
@@ -503,8 +500,6 @@ Slice::Python::compile(const vector<string>& argv)
string prefix = opts.optArg("prefix");
- int warningLevel = opts.isSet("no-warn") ? 0 : 1;
-
if(args.empty())
{
consoleErr << argv[0] << ": error: no input file" << endl;
@@ -670,7 +665,7 @@ Slice::Python::compile(const vector<string>& argv)
//
// Generate Python code.
//
- generate(u, all, checksum, includePaths, out, warningLevel);
+ generate(u, all, checksum, includePaths, out);
out.close();
}
@@ -680,7 +675,7 @@ Slice::Python::compile(const vector<string>& argv)
//
if(!noPackage)
{
- PackageVisitor::createModules(u, prefix + base + "_ice", output, warningLevel);
+ PackageVisitor::createModules(u, prefix + base + "_ice", output);
}
}
catch(const Slice::FileException& ex)
diff --git a/cpp/src/Slice/PythonUtil.cpp b/cpp/src/Slice/PythonUtil.cpp
index 4d5a23caf9d..9f09a765ed4 100644
--- a/cpp/src/Slice/PythonUtil.cpp
+++ b/cpp/src/Slice/PythonUtil.cpp
@@ -50,8 +50,6 @@ class MetaDataVisitor : public ParserVisitor
{
public:
- MetaDataVisitor(int);
-
virtual bool visitUnitStart(const UnitPtr&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitClassDecl(const ClassDeclPtr&);
@@ -93,7 +91,7 @@ class ModuleVisitor : public ParserVisitor
{
public:
- ModuleVisitor(Output&, set<string>&, int);
+ ModuleVisitor(Output&, set<string>&);
virtual bool visitModuleStart(const ModulePtr&);
@@ -110,7 +108,7 @@ class CodeVisitor : public ParserVisitor
{
public:
- CodeVisitor(IceUtilInternal::Output&, set<string>&, int);
+ CodeVisitor(IceUtilInternal::Output&, set<string>&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -293,8 +291,7 @@ getDictLookup(const ContainedPtr& cont, const string& suffix = "", const string&
//
// ModuleVisitor implementation.
//
-Slice::Python::ModuleVisitor::ModuleVisitor(Output& out, set<string>& history, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::Python::ModuleVisitor::ModuleVisitor(Output& out, set<string>& history) :
_out(out), _history(history)
{
}
@@ -344,8 +341,7 @@ Slice::Python::ModuleVisitor::visitModuleStart(const ModulePtr& p)
//
// CodeVisitor implementation.
//
-Slice::Python::CodeVisitor::CodeVisitor(Output& out, set<string>& moduleHistory, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::Python::CodeVisitor::CodeVisitor(Output& out, set<string>& moduleHistory) :
_out(out),
_moduleHistory(moduleHistory)
{
@@ -2835,9 +2831,9 @@ Slice::Python::CodeVisitor::writeDocstring(const OperationPtr& op, DocstringMode
void
Slice::Python::generate(const UnitPtr& un, bool all, bool checksum, const vector<string>& includePaths,
- Output& out, int warningLevel)
+ Output& out)
{
- Slice::Python::MetaDataVisitor visitor(warningLevel);
+ Slice::Python::MetaDataVisitor visitor;
un->visit(&visitor, false);
out << nl << "from sys import version_info as _version_info_";
@@ -2862,15 +2858,15 @@ Slice::Python::generate(const UnitPtr& un, bool all, bool checksum, const vector
set<string> moduleHistory;
- ModuleVisitor moduleVisitor(out, moduleHistory, warningLevel);
+ ModuleVisitor moduleVisitor(out, moduleHistory);
un->visit(&moduleVisitor, true);
- CodeVisitor codeVisitor(out, moduleHistory, warningLevel);
+ CodeVisitor codeVisitor(out, moduleHistory);
un->visit(&codeVisitor, false);
if(checksum)
{
- ChecksumMap checksums = createChecksums(un, warningLevel);
+ ChecksumMap checksums = createChecksums(un);
if(!checksums.empty())
{
out << sp;
@@ -2986,11 +2982,6 @@ Slice::Python::printHeader(IceUtilInternal::Output& out)
out << "#\n";
}
-Slice::Python::MetaDataVisitor::MetaDataVisitor(int warningLevel) :
- ParserVisitor(warningLevel)
-{
-}
-
bool
Slice::Python::MetaDataVisitor::visitUnitStart(const UnitPtr& p)
{
@@ -3000,12 +2991,12 @@ Slice::Python::MetaDataVisitor::visitUnitStart(const UnitPtr& p)
// Validate global metadata in the top-level file and all included files.
//
StringList files = p->allFiles();
-
for(StringList::iterator q = files.begin(); q != files.end(); ++q)
{
string file = *q;
DefinitionContextPtr dc = p->findDefinitionContext(file);
assert(dc);
+ bool emitWarnings = !dc->suppressWarning("invalid-metadata");
StringList globalMetaData = dc->getMetaData();
for(StringList::const_iterator r = globalMetaData.begin(); r != globalMetaData.end();)
{
@@ -3018,7 +3009,7 @@ Slice::Python::MetaDataVisitor::visitUnitStart(const UnitPtr& p)
continue;
}
- if(warningLevel() > 0)
+ if(emitWarnings)
{
emitWarning(file, "", "ignoring invalid global metadata `" + s + "'");
}
@@ -3094,6 +3085,11 @@ Slice::Python::MetaDataVisitor::visitSequence(const SequencePtr& p)
const string file = p->file();
const string line = p->line();
StringList protobufMetaData;
+ const UnitPtr unit = p->unit();
+ const DefinitionContextPtr dc = unit->findDefinitionContext(file);
+ assert(dc);
+ bool emitWarnings = !dc->suppressWarning("invalid-metadata");
+
for(StringList::const_iterator q = metaData.begin(); q != metaData.end(); )
{
string s = *q++;
@@ -3106,7 +3102,7 @@ Slice::Python::MetaDataVisitor::visitSequence(const SequencePtr& p)
BuiltinPtr builtin = BuiltinPtr::dynamicCast(p->type());
if(!builtin || builtin->kind() != Builtin::KindByte)
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
emitWarning(file, line, "ignoring invalid metadata `" + s + ": " +
"`protobuf' encoding must be a byte sequence");
@@ -3146,6 +3142,11 @@ StringList
Slice::Python::MetaDataVisitor::validateSequence(const string& file, const string& line,
const TypePtr& type, const StringList& metaData)
{
+ const UnitPtr unit = type->unit();
+ const DefinitionContextPtr dc = unit->findDefinitionContext(file);
+ assert(dc);
+ bool emitWarnings = !dc->suppressWarning("invalid-metadata");
+
static const string prefix = "python:";
StringList newMetaData = metaData;
for(StringList::const_iterator p = newMetaData.begin(); p != newMetaData.end();)
@@ -3166,7 +3167,7 @@ Slice::Python::MetaDataVisitor::validateSequence(const string& file, const strin
}
}
}
- if(warningLevel() > 0)
+ if(emitWarnings)
{
emitWarning(file, line, "ignoring invalid metadata `" + s + "'");
}
@@ -3181,12 +3182,21 @@ Slice::Python::MetaDataVisitor::reject(const ContainedPtr& cont)
{
StringList localMetaData = cont->getMetaData();
static const string prefix = "python:";
+
+ const UnitPtr unit = cont->unit();
+ const DefinitionContextPtr dc = unit->findDefinitionContext(cont->file());
+ assert(dc);
+ bool emitWarnings = !dc->suppressWarning("invalid-metadata");
+
for(StringList::const_iterator p = localMetaData.begin(); p != localMetaData.end();)
{
string s = *p++;
if(s.find(prefix) == 0)
{
- emitWarning(cont->file(), cont->line(), "ignoring invalid metadata `" + s + "'");
+ if(emitWarnings)
+ {
+ emitWarning(cont->file(), cont->line(), "ignoring invalid metadata `" + s + "'");
+ }
localMetaData.remove(s);
}
}
diff --git a/cpp/src/Slice/PythonUtil.h b/cpp/src/Slice/PythonUtil.h
index 161d3bdb148..9d48b3d3871 100644
--- a/cpp/src/Slice/PythonUtil.h
+++ b/cpp/src/Slice/PythonUtil.h
@@ -21,7 +21,7 @@ namespace Python
//
// Generate Python code for a translation unit.
//
-void generate(const Slice::UnitPtr&, bool, bool, const std::vector<std::string>&, IceUtilInternal::Output&, int);
+void generate(const Slice::UnitPtr&, bool, bool, const std::vector<std::string>&, IceUtilInternal::Output&);
//
// Convert a scoped name into a Python name.
diff --git a/cpp/src/Slice/Ruby.cpp b/cpp/src/Slice/Ruby.cpp
index 7bd4dd07d17..7861bcb8c0b 100644
--- a/cpp/src/Slice/Ruby.cpp
+++ b/cpp/src/Slice/Ruby.cpp
@@ -81,7 +81,6 @@ usage(const string& n)
" deprecated: use instead [[\"ice-prefix\"]] metadata.\n"
"--underscore Allow underscores in Slice identifiers\n"
" deprecated: use instead [[\"underscore\"]] metadata.\n"
- "--no-warn Disable all warnings.\n"
;
}
@@ -106,7 +105,6 @@ Slice::Ruby::compile(const vector<string>& argv)
opts.addOpt("", "underscore");
opts.addOpt("", "all");
opts.addOpt("", "checksum");
- opts.addOpt("", "no-warn");
vector<string> args;
try
@@ -171,8 +169,6 @@ Slice::Ruby::compile(const vector<string>& argv)
bool checksum = opts.isSet("checksum");
- int warningLevel = opts.isSet("no-warn") ? 0 : 1;
-
if(args.empty())
{
consoleErr << argv[0] << ": error: no input file" << endl;
@@ -315,7 +311,7 @@ Slice::Ruby::compile(const vector<string>& argv)
//
// Generate the Ruby mapping.
//
- generate(u, all, checksum, includePaths, out, warningLevel);
+ generate(u, all, checksum, includePaths, out);
out.close();
}
diff --git a/cpp/src/Slice/RubyUtil.cpp b/cpp/src/Slice/RubyUtil.cpp
index 574a7cf2644..9c1a32d8e77 100644
--- a/cpp/src/Slice/RubyUtil.cpp
+++ b/cpp/src/Slice/RubyUtil.cpp
@@ -52,7 +52,7 @@ class CodeVisitor : public ParserVisitor
{
public:
- CodeVisitor(IceUtilInternal::Output&, int);
+ CodeVisitor(IceUtilInternal::Output&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -184,8 +184,7 @@ splitScopedName(const string& scoped)
//
// CodeVisitor implementation.
//
-Slice::Ruby::CodeVisitor::CodeVisitor(Output& out, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::Ruby::CodeVisitor::CodeVisitor(Output& out) :
_out(out)
{
}
@@ -1446,8 +1445,7 @@ Slice::Ruby::CodeVisitor::collectExceptionMembers(const ExceptionPtr& p, MemberI
}
void
-Slice::Ruby::generate(const UnitPtr& un, bool all, bool checksum, const vector<string>& includePaths, Output& out,
- int warningLevel)
+Slice::Ruby::generate(const UnitPtr& un, bool all, bool checksum, const vector<string>& includePaths, Output& out)
{
out << nl << "require 'Ice'";
@@ -1467,12 +1465,12 @@ Slice::Ruby::generate(const UnitPtr& un, bool all, bool checksum, const vector<s
}
}
- CodeVisitor codeVisitor(out, warningLevel);
+ CodeVisitor codeVisitor(out);
un->visit(&codeVisitor, false);
if(checksum)
{
- ChecksumMap checksums = createChecksums(un, warningLevel);
+ ChecksumMap checksums = createChecksums(un);
if(!checksums.empty())
{
out << sp;
diff --git a/cpp/src/Slice/RubyUtil.h b/cpp/src/Slice/RubyUtil.h
index 387cbc67073..e67ecd1b623 100644
--- a/cpp/src/Slice/RubyUtil.h
+++ b/cpp/src/Slice/RubyUtil.h
@@ -21,7 +21,7 @@ namespace Ruby
//
// Generate Ruby code for a translation unit.
//
-void generate(const Slice::UnitPtr&, bool, bool, const std::vector<std::string>&, IceUtilInternal::Output&, int);
+void generate(const Slice::UnitPtr&, bool, bool, const std::vector<std::string>&, IceUtilInternal::Output&);
//
// Check the given identifier against Ruby's list of reserved words. If it matches
diff --git a/cpp/src/slice2confluence/Gen.cpp b/cpp/src/slice2confluence/Gen.cpp
index 77624f6cdfa..678ab4bfda6 100644
--- a/cpp/src/slice2confluence/Gen.cpp
+++ b/cpp/src/slice2confluence/Gen.cpp
@@ -39,8 +39,7 @@ namespace Slice
void
generate(const UnitPtr& unit, const string& dir, const string& header, const string& footer,
const string& indexHeader, const string& indexFooter, const string& imageDir, const string& logoURL,
- const string& searchAction, unsigned indexCount, unsigned warnSummary, const vector<string>& sortOrder,
- int warningLevel)
+ const string& searchAction, unsigned indexCount, unsigned warnSummary, const vector<string>& sortOrder)
{
unit->mergeModules();
@@ -69,19 +68,19 @@ generate(const UnitPtr& unit, const string& dir, const string& header, const str
// to the symbol; if the latter, we cannot.
//
Files files;
- FileVisitor tv(files, warningLevel);
+ FileVisitor tv(files);
unit->visit(&tv, false);
//
// Generate the start page.
//
- StartPageVisitor spv(files, warningLevel);
+ StartPageVisitor spv(files);
unit->visit(&spv, false);
//
// Generate the table of contents.
//
- TOCVisitor tocv(files, indexHeader, indexFooter, warningLevel);
+ TOCVisitor tocv(files, indexHeader, indexFooter);
unit->visit(&tocv, false);
tocv.generate();
@@ -89,7 +88,7 @@ generate(const UnitPtr& unit, const string& dir, const string& header, const str
// Generate the individual HTML pages.
//
GeneratorBase::setSymbols(tocv.symbols());
- PageVisitor v(files, warningLevel);
+ PageVisitor v(files);
unit->visit(&v, false);
}
@@ -1954,8 +1953,7 @@ Slice::StartPageGenerator::printHeaderFooter()
// Do nothing
}
-Slice::FileVisitor::FileVisitor(Files& files, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::FileVisitor::FileVisitor(Files& files) :
_files(files)
{
}
@@ -2018,8 +2016,7 @@ Slice::FileVisitor::visitEnum(const EnumPtr& e)
_files.insert(e->file());
}
-Slice::StartPageVisitor::StartPageVisitor(const Files& files, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::StartPageVisitor::StartPageVisitor(const Files& files) :
_spg(files)
{
}
@@ -2176,8 +2173,7 @@ TOCGenerator::writeEntry(const ContainedPtr& c)
end();
}
-TOCVisitor::TOCVisitor(const Files& files, const string& header, const string& footer, int warningLevel) :
- ParserVisitor(warningLevel),
+TOCVisitor::TOCVisitor(const Files& files, const string& header, const string& footer) :
_tg(files, header, footer)
{
}
@@ -3267,8 +3263,7 @@ Slice::EnumGenerator::generate(const EnumPtr& e)
assert(_out.currIndent() == indent);
}
-Slice::PageVisitor::PageVisitor(const Files& files, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::PageVisitor::PageVisitor(const Files& files) :
_files(files)
{
}
diff --git a/cpp/src/slice2confluence/Gen.h b/cpp/src/slice2confluence/Gen.h
index 587e28c7d1e..bc10790604b 100644
--- a/cpp/src/slice2confluence/Gen.h
+++ b/cpp/src/slice2confluence/Gen.h
@@ -21,7 +21,7 @@ namespace Slice
void generate(const UnitPtr&, const ::std::string&, const ::std::string&, const ::std::string&, const std::string&,
const ::std::string&, const ::std::string&, const ::std::string&, const ::std::string&,
- unsigned, unsigned, const ::std::vector<std::string>& = ::std::vector<std::string>(), int = 1);
+ unsigned, unsigned, const ::std::vector<std::string>& = ::std::vector<std::string>());
typedef ::std::set< ::std::string> Files;
@@ -165,7 +165,7 @@ class FileVisitor : private ::IceUtil::noncopyable, public ParserVisitor
{
public:
- FileVisitor(Files&, int);
+ FileVisitor(Files&);
virtual bool visitUnitStart(const UnitPtr&);
virtual bool visitModuleStart(const ModulePtr&);
@@ -186,7 +186,7 @@ class StartPageVisitor : private ::IceUtil::noncopyable, public ParserVisitor
{
public:
- StartPageVisitor(const Files&, int);
+ StartPageVisitor(const Files&);
virtual bool visitUnitStart(const UnitPtr&);
virtual bool visitModuleStart(const ModulePtr&);
@@ -219,7 +219,7 @@ class TOCVisitor : private ::IceUtil::noncopyable, public ParserVisitor
{
public:
- TOCVisitor(const Files&, const ::std::string&, const ::std::string&, int);
+ TOCVisitor(const Files&, const ::std::string&, const ::std::string&);
virtual bool visitUnitStart(const UnitPtr&);
virtual bool visitModuleStart(const ModulePtr&);
@@ -279,7 +279,7 @@ class PageVisitor : private ::IceUtil::noncopyable, public ParserVisitor
{
public:
- PageVisitor(const Files&, int);
+ PageVisitor(const Files&);
virtual bool visitUnitStart(const UnitPtr&);
virtual bool visitModuleStart(const ModulePtr&);
diff --git a/cpp/src/slice2confluence/Main.cpp b/cpp/src/slice2confluence/Main.cpp
index 38c7d5e2319..8eeca1c303b 100644
--- a/cpp/src/slice2confluence/Main.cpp
+++ b/cpp/src/slice2confluence/Main.cpp
@@ -108,7 +108,6 @@ usage(const string& n)
" deprecated: use instead [[\"ice-prefix\"]] metadata.\n"
"--underscore Allow underscores in Slice identifiers\n"
" deprecated: use instead [[\"underscore\"]] metadata.\n"
- "--no-warn Disable all warnings.\n"
;
}
@@ -137,7 +136,6 @@ compile(const vector<string>& argv)
opts.addOpt("d", "debug");
opts.addOpt("", "ice");
opts.addOpt("", "underscore");
- opts.addOpt("", "no-warn");
bool validate = find(argv.begin(), argv.end(), "--validate") != argv.end();
vector<string> args;
@@ -250,8 +248,6 @@ compile(const vector<string>& argv)
bool underscore = opts.isSet("underscore");
- int warningLevel = opts.isSet("no-warn") ? 0 : 1;
-
if(args.empty())
{
consoleErr << argv[0] << ": error: no input file" << endl;
@@ -322,7 +318,7 @@ compile(const vector<string>& argv)
try
{
Slice::generate(p, output, header, footer, indexHeader, indexFooter, imageDir, logoURL,
- searchAction, indexCount, summaryCount, sort_order, warningLevel);
+ searchAction, indexCount, summaryCount, sort_order);
}
catch(const Slice::FileException& ex)
{
diff --git a/cpp/src/slice2cpp/Gen.cpp b/cpp/src/slice2cpp/Gen.cpp
index dd1ca22855c..beae822ec6b 100644
--- a/cpp/src/slice2cpp/Gen.cpp
+++ b/cpp/src/slice2cpp/Gen.cpp
@@ -377,7 +377,7 @@ condString(bool ok, const string& str)
Slice::Gen::Gen(const string& base, const string& headerExtension, const string& sourceExtension,
const vector<string>& extraHeaders, const string& include,
const vector<string>& includePaths, const string& dllExport, const string& dir,
- bool implCpp98, bool implCpp11, bool checksum, bool ice, int warningLevel) :
+ bool implCpp98, bool implCpp11, bool checksum, bool ice) :
_base(base),
_headerExtension(headerExtension),
_implHeaderExtension(headerExtension),
@@ -390,8 +390,7 @@ Slice::Gen::Gen(const string& base, const string& headerExtension, const string&
_implCpp98(implCpp98),
_implCpp11(implCpp11),
_checksum(checksum),
- _ice(ice),
- _warningLevel(warningLevel)
+ _ice(ice)
{
for(vector<string>::iterator p = _includePaths.begin(); p != _includePaths.end(); ++p)
{
@@ -423,7 +422,7 @@ Slice::Gen::generateChecksumMap(const UnitPtr& p)
{
if(_checksum)
{
- ChecksumMap map = createChecksums(p, _warningLevel);
+ ChecksumMap map = createChecksums(p);
if(!map.empty())
{
C << sp << nl << "namespace";
@@ -456,13 +455,19 @@ Slice::Gen::generate(const UnitPtr& p)
string file = p->topLevelFile();
//
- // Give precedence to header-ext global metadata.
+ // Give precedence to header-ext/source-ext global metadata.
//
string headerExtension = getHeaderExt(file, p);
if(!headerExtension.empty())
{
_headerExtension = headerExtension;
}
+
+ string sourceExtension = getSourceExt(file, p);
+ if(!sourceExtension.empty())
+ {
+ _sourceExtension = sourceExtension;
+ }
//
// Give precedence to --dll-export command-line option
@@ -574,7 +579,7 @@ Slice::Gen::generate(const UnitPtr& p)
H << "\n#define __" << s << "__";
H << '\n';
- validateMetaData(p, _warningLevel);
+ validateMetaData(p);
writeExtraHeaders(C);
@@ -685,15 +690,30 @@ Slice::Gen::generate(const UnitPtr& p)
DefinitionContextPtr dc = p->findDefinitionContext(file);
assert(dc);
StringList globalMetaData = dc->getMetaData();
- for(StringList::const_iterator q = globalMetaData.begin(); q != globalMetaData.end(); ++q)
+ bool emitWarnings = dc->suppressWarning("invalid-metadata");
+ for(StringList::const_iterator q = globalMetaData.begin(); q != globalMetaData.end();)
{
- string s = *q;
+ string s = *q++;
static const string includePrefix = "cpp:include:";
- if(s.find(includePrefix) == 0 && s.size() > includePrefix.size())
+ if(s.find(includePrefix) == 0)
{
- H << nl << "#include <" << s.substr(includePrefix.size()) << ">";
+ if(s.size() > includePrefix.size())
+ {
+ H << nl << "#include <" << s.substr(includePrefix.size()) << ">";
+ }
+ else
+ {
+ if(emitWarnings)
+ {
+ ostringstream ostr;
+ ostr << "ignoring invalid global metadata `" << s << "'";
+ emitWarning(file, -1, ostr.str());
+ }
+ globalMetaData.remove(s);
+ }
}
}
+ dc->setMetaData(globalMetaData);
}
//
@@ -728,27 +748,27 @@ Slice::Gen::generate(const UnitPtr& p)
C << nl << "#ifdef ICE_CPP11_MAPPING // C++11 mapping";
C.restoreIndent();
{
- normalizeMetaData(p, true, _warningLevel);
+ normalizeMetaData(p, true);
- Cpp11DeclVisitor declVisitor(H, C, _dllExport, _warningLevel);
+ Cpp11DeclVisitor declVisitor(H, C, _dllExport);
p->visit(&declVisitor, false);
- Cpp11TypesVisitor typesVisitor(H, C, _dllExport, _warningLevel);
+ Cpp11TypesVisitor typesVisitor(H, C, _dllExport);
p->visit(&typesVisitor, false);
- Cpp11LocalObjectVisitor localObjectVisitor(H, C, _dllExport, _warningLevel);
+ Cpp11LocalObjectVisitor localObjectVisitor(H, C, _dllExport);
p->visit(&localObjectVisitor, false);
- Cpp11InterfaceVisitor interfaceVisitor(H, C, _dllExport, _warningLevel);
+ Cpp11InterfaceVisitor interfaceVisitor(H, C, _dllExport);
p->visit(&interfaceVisitor, false);
- Cpp11ValueVisitor valueVisitor(H, C, _dllExport, _warningLevel);
+ Cpp11ValueVisitor valueVisitor(H, C, _dllExport);
p->visit(&valueVisitor, false);
- Cpp11ProxyVisitor proxyVisitor(H, C, _dllExport, _warningLevel);
+ Cpp11ProxyVisitor proxyVisitor(H, C, _dllExport);
p->visit(&proxyVisitor, false);
- Cpp11StreamVisitor streamVisitor(H, C, _dllExport, _warningLevel);
+ Cpp11StreamVisitor streamVisitor(H, C, _dllExport);
p->visit(&streamVisitor, false);
if(_implCpp11)
@@ -769,11 +789,11 @@ Slice::Gen::generate(const UnitPtr& p)
}
implC << _base << "I." << _implHeaderExtension << ">";
- Cpp11ImplVisitor implVisitor(implH, implC, _dllExport, _warningLevel);
+ Cpp11ImplVisitor implVisitor(implH, implC, _dllExport);
p->visit(&implVisitor, false);
}
- Cpp11CompatibilityVisitor compatibilityVisitor(H, C, _dllExport, _warningLevel);
+ Cpp11CompatibilityVisitor compatibilityVisitor(H, C, _dllExport);
p->visit(&compatibilityVisitor, false);
generateChecksumMap(p);
@@ -788,21 +808,21 @@ Slice::Gen::generate(const UnitPtr& p)
C << nl << "#else // C++98 mapping";
C.restoreIndent();
{
- normalizeMetaData(p, false, _warningLevel);
+ normalizeMetaData(p, false);
- ProxyDeclVisitor proxyDeclVisitor(H, C, _dllExport, _warningLevel);
+ ProxyDeclVisitor proxyDeclVisitor(H, C, _dllExport);
p->visit(&proxyDeclVisitor, false);
- ObjectDeclVisitor objectDeclVisitor(H, C, _dllExport, _warningLevel);
+ ObjectDeclVisitor objectDeclVisitor(H, C, _dllExport);
p->visit(&objectDeclVisitor, false);
- TypesVisitor typesVisitor(H, C, _dllExport, _warningLevel);
+ TypesVisitor typesVisitor(H, C, _dllExport);
p->visit(&typesVisitor, false);
- AsyncVisitor asyncVisitor(H, C, _dllExport, _warningLevel);
+ AsyncVisitor asyncVisitor(H, C, _dllExport);
p->visit(&asyncVisitor, false);
- AsyncImplVisitor asyncImplVisitor(H, C, _dllExport, _warningLevel);
+ AsyncImplVisitor asyncImplVisitor(H, C, _dllExport);
p->visit(&asyncImplVisitor, false);
//
@@ -811,16 +831,16 @@ Slice::Gen::generate(const UnitPtr& p)
// the proxy relies on knowing the hierarchy to make the begin_
// methods type-safe.
//
- AsyncCallbackVisitor asyncCallbackVisitor(H, C, _dllExport, _warningLevel);
+ AsyncCallbackVisitor asyncCallbackVisitor(H, C, _dllExport);
p->visit(&asyncCallbackVisitor, false);
- ProxyVisitor proxyVisitor(H, C, _dllExport, _warningLevel);
+ ProxyVisitor proxyVisitor(H, C, _dllExport);
p->visit(&proxyVisitor, false);
- ObjectVisitor objectVisitor(H, C, _dllExport, _warningLevel);
+ ObjectVisitor objectVisitor(H, C, _dllExport);
p->visit(&objectVisitor, false);
- StreamVisitor streamVisitor(H, C, _dllExport, _warningLevel);
+ StreamVisitor streamVisitor(H, C, _dllExport);
p->visit(&streamVisitor, false);
//
@@ -828,7 +848,7 @@ Slice::Gen::generate(const UnitPtr& p)
// definition, because completed calls the begin_ method in the
// proxy.
//
- AsyncCallbackTemplateVisitor asyncCallbackTemplateVisitor(H, C, _dllExport, _warningLevel);
+ AsyncCallbackTemplateVisitor asyncCallbackTemplateVisitor(H, C, _dllExport);
p->visit(&asyncCallbackTemplateVisitor, false);
if(_implCpp98)
@@ -849,7 +869,7 @@ Slice::Gen::generate(const UnitPtr& p)
}
implC << _base << "I." << _implHeaderExtension << ">";
- ImplVisitor implVisitor(implH, implC, _dllExport, _warningLevel);
+ ImplVisitor implVisitor(implH, implC, _dllExport);
p->visit(&implVisitor, false);
}
@@ -903,8 +923,7 @@ Slice::Gen::writeExtraHeaders(IceUtilInternal::Output& out)
}
}
-Slice::Gen::TypesVisitor::TypesVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::Gen::TypesVisitor::TypesVisitor(Output& h, Output& c, const string& dllExport) :
H(h), C(c), _dllExport(dllExport), _doneStaticSymbol(false), _useWstring(false)
{
}
@@ -1538,8 +1557,7 @@ Slice::Gen::TypesVisitor::emitUpcall(const ExceptionPtr& base, const string& cal
<< call;
}
-Slice::Gen::ProxyDeclVisitor::ProxyDeclVisitor(Output& h, Output&, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::Gen::ProxyDeclVisitor::ProxyDeclVisitor(Output& h, Output&, const string& dllExport) :
H(h), _dllExport(dllExport)
{
}
@@ -1606,8 +1624,8 @@ Slice::Gen::ProxyDeclVisitor::visitClassDecl(const ClassDeclPtr& p)
H << nl << _dllExport << "::IceProxy::Ice::Object* upCast(::IceProxy" << scoped << "*);";
}
-Slice::Gen::ProxyVisitor::ProxyVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel), H(h), C(c), _dllExport(dllExport), _dllClassExport(toDllClassExport(dllExport)),
+Slice::Gen::ProxyVisitor::ProxyVisitor(Output& h, Output& c, const string& dllExport) :
+ H(h), C(c), _dllExport(dllExport), _dllClassExport(toDllClassExport(dllExport)),
_dllMemberExport(toDllMemberExport(dllExport)), _useWstring(false)
{
}
@@ -2156,8 +2174,7 @@ Slice::Gen::ProxyVisitor::visitOperation(const OperationPtr& p)
}
}
-Slice::Gen::ObjectDeclVisitor::ObjectDeclVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::Gen::ObjectDeclVisitor::ObjectDeclVisitor(Output& h, Output& c, const string& dllExport) :
H(h), C(c), _dllExport(dllExport)
{
}
@@ -2226,8 +2243,7 @@ Slice::Gen::ObjectDeclVisitor::visitOperation(const OperationPtr& p)
}
}
-Slice::Gen::ObjectVisitor::ObjectVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::Gen::ObjectVisitor::ObjectVisitor(Output& h, Output& c, const string& dllExport) :
H(h), C(c), _dllExport(dllExport), _doneStaticSymbol(false), _useWstring(false)
{
}
@@ -3387,8 +3403,7 @@ Slice::Gen::ObjectVisitor::emitUpcall(const ClassDefPtr& base, const string& cal
C << nl << (base ? fixKwd(base->scoped()) : string("::Ice::Object")) << call;
}
-Slice::Gen::AsyncCallbackVisitor::AsyncCallbackVisitor(Output& h, Output&, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::Gen::AsyncCallbackVisitor::AsyncCallbackVisitor(Output& h, Output&, const string& dllExport) :
H(h), _dllExport(dllExport), _useWstring(false)
{
}
@@ -3447,8 +3462,8 @@ Slice::Gen::AsyncCallbackVisitor::visitOperation(const OperationPtr& p)
H << nl << "typedef ::IceUtil::Handle< " << delName << "_Base> " << delName << "Ptr;";
}
-Slice::Gen::AsyncCallbackTemplateVisitor::AsyncCallbackTemplateVisitor(Output& h, Output&, const string& dllExport, int warningLevel)
- : ParserVisitor(warningLevel), H(h), _dllExport(dllExport), _useWstring(false)
+Slice::Gen::AsyncCallbackTemplateVisitor::AsyncCallbackTemplateVisitor(Output& h, Output&, const string& dllExport)
+ : H(h), _dllExport(dllExport), _useWstring(false)
{
}
@@ -3751,8 +3766,8 @@ Slice::Gen::AsyncCallbackTemplateVisitor::generateOperation(const OperationPtr&
}
}
-Slice::Gen::ImplVisitor::ImplVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel), H(h), C(c), _dllExport(dllExport), _useWstring(false)
+Slice::Gen::ImplVisitor::ImplVisitor(Output& h, Output& c, const string& dllExport) :
+ H(h), C(c), _dllExport(dllExport), _useWstring(false)
{
}
@@ -4043,8 +4058,8 @@ Slice::Gen::ImplVisitor::visitClassDefStart(const ClassDefPtr& p)
return true;
}
-Slice::Gen::AsyncVisitor::AsyncVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel), H(h), C(c), _dllExport(dllExport), _useWstring(false)
+Slice::Gen::AsyncVisitor::AsyncVisitor(Output& h, Output& c, const string& dllExport) :
+ H(h), C(c), _dllExport(dllExport), _useWstring(false)
{
}
@@ -4178,8 +4193,8 @@ Slice::Gen::AsyncVisitor::visitOperation(const OperationPtr& p)
}
}
-Slice::Gen::AsyncImplVisitor::AsyncImplVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel), H(h), C(c), _dllExport(dllExport), _useWstring(false)
+Slice::Gen::AsyncImplVisitor::AsyncImplVisitor(Output& h, Output& c, const string& dllExport) :
+ H(h), C(c), _dllExport(dllExport), _useWstring(false)
{
}
@@ -4343,8 +4358,7 @@ Slice::Gen::AsyncImplVisitor::visitOperation(const OperationPtr& p)
C << eb;
}
-Slice::Gen::StreamVisitor::StreamVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::Gen::StreamVisitor::StreamVisitor(Output& h, Output& c, const string& dllExport) :
H(h),
C(c),
_dllExport(dllExport)
@@ -4475,16 +4489,12 @@ Slice::Gen::StreamVisitor::visitEnum(const EnumPtr& p)
}
void
-Slice::Gen::validateMetaData(const UnitPtr& u, int warningLevel)
+Slice::Gen::validateMetaData(const UnitPtr& u)
{
- MetaDataVisitor visitor(warningLevel);
+ MetaDataVisitor visitor;
u->visit(&visitor, false);
}
-Slice::Gen::MetaDataVisitor::MetaDataVisitor(int warningLevel) : ParserVisitor(warningLevel)
-{
-}
-
bool
Slice::Gen::MetaDataVisitor::visitUnitStart(const UnitPtr& p)
{
@@ -4502,22 +4512,22 @@ Slice::Gen::MetaDataVisitor::visitUnitStart(const UnitPtr& p)
DefinitionContextPtr dc = p->findDefinitionContext(file);
assert(dc);
StringList globalMetaData = dc->getMetaData();
- StringList newGlobalMetaData;
int headerExtension = 0;
+ int sourceExtension = 0;
int dllExport = 0;
- for(StringList::const_iterator r = globalMetaData.begin(); r != globalMetaData.end(); ++r)
+ bool emitWarnings = !dc->suppressWarning("invalid-metadata");
+ for(StringList::const_iterator r = globalMetaData.begin(); r != globalMetaData.end();)
{
- string s = *r;
-
+ string s = *r++;
if(s.find(prefix) == 0)
{
static const string cppIncludePrefix = "cpp:include:";
static const string cppHeaderExtPrefix = "cpp:header-ext:";
+ static const string cppSourceExtPrefix = "cpp:source-ext:";
static const string cppDllExportPrefix = "cpp:dll-export:";
if(s.find(cppIncludePrefix) == 0 && s.size() > cppIncludePrefix.size())
{
- newGlobalMetaData.push_back(s);
continue;
}
else if(s.find(cppHeaderExtPrefix) == 0 && s.size() > cppHeaderExtPrefix.size())
@@ -4525,17 +4535,30 @@ Slice::Gen::MetaDataVisitor::visitUnitStart(const UnitPtr& p)
headerExtension++;
if(headerExtension > 1)
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
ostringstream ostr;
ostr << "ignoring invalid global metadata `" << s
<< "': directive can appear only once per file";
emitWarning(file, -1, ostr.str());
}
+ globalMetaData.remove(s);
}
- else
+ continue;
+ }
+ else if(s.find(cppSourceExtPrefix) == 0 && s.size() > cppSourceExtPrefix.size())
+ {
+ sourceExtension++;
+ if(sourceExtension > 1)
{
- newGlobalMetaData.push_back(s);
+ if(emitWarnings)
+ {
+ ostringstream ostr;
+ ostr << "ignoring invalid global metadata `" << s
+ << "': directive can appear only once per file";
+ emitWarning(file, -1, ostr.str());
+ }
+ globalMetaData.remove(s);
}
continue;
}
@@ -4544,31 +4567,29 @@ Slice::Gen::MetaDataVisitor::visitUnitStart(const UnitPtr& p)
dllExport++;
if(dllExport > 1)
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
ostringstream ostr;
ostr << "ignoring invalid global metadata `" << s
<< "': directive can appear only once per file";
emitWarning(file, -1, ostr.str());
}
- }
- else
- {
- newGlobalMetaData.push_back(s);
+ globalMetaData.remove(s);
}
continue;
}
- if(warningLevel() > 0)
+ if(emitWarnings)
{
ostringstream ostr;
ostr << "ignoring invalid global metadata `" << s << "'";
emitWarning(file, -1, ostr.str());
}
+ globalMetaData.remove(s);
}
}
- dc->setMetaData(newGlobalMetaData);
+ dc->setMetaData(globalMetaData);
}
return true;
@@ -4640,9 +4661,14 @@ Slice::Gen::MetaDataVisitor::visitOperation(const OperationPtr& p)
StringList metaData = p->getMetaData();
+ const UnitPtr unit = p->unit();
+ const DefinitionContextPtr dc = unit->findDefinitionContext(p->file());
+ assert(dc);
+ bool emitWarnings = !dc->suppressWarning("invalid-metadata");
+
if(!cl->isLocal() && p->hasMetaData("cpp:noexcept"))
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
emitWarning(p->file(), p->line(), "ignoring metadata `cpp:noexcept' for non local interface");
}
@@ -4654,18 +4680,18 @@ Slice::Gen::MetaDataVisitor::visitOperation(const OperationPtr& p)
{
for(StringList::const_iterator q = metaData.begin(); q != metaData.end();)
{
- if(q->find("cpp:type:") == 0 || q->find("cpp:view-type:") == 0 ||
- q->find("cpp:range") == 0 || (*q) == "cpp:array")
+ string s = *q++;
+ if(s.find("cpp:type:") == 0 || s.find("cpp:view-type:") == 0 ||
+ s.find("cpp:range") == 0 || s == "cpp:array")
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
- emitWarning(p->file(), p->line(), "ignoring invalid metadata `" + *q +
+ emitWarning(p->file(), p->line(), "ignoring invalid metadata `" + s +
"' for operation with void return type");
}
- metaData.remove(*q);
+ metaData.remove(s);
continue;
}
- ++q;
}
}
else
@@ -4726,10 +4752,15 @@ Slice::Gen::MetaDataVisitor::validate(const SyntaxTreeBasePtr& cont, const Strin
static const string cpp11Prefix = "cpp11:";
static const string cpp98Prefix = "cpp98:";
- StringList newMetaData;
- for(StringList::const_iterator p = metaData.begin(); p != metaData.end(); ++p)
+ const UnitPtr unit = cont->unit();
+ const DefinitionContextPtr dc = unit->findDefinitionContext(file);
+ assert(dc);
+ bool emitWarnings = !dc->suppressWarning("invalid-metadata");
+
+ StringList newMetaData = metaData;
+ for(StringList::const_iterator p = newMetaData.begin(); p != newMetaData.end();)
{
- string s = *p;
+ string s = *p++;
string prefix;
bool cpp98 = false;
@@ -4752,7 +4783,6 @@ Slice::Gen::MetaDataVisitor::validate(const SyntaxTreeBasePtr& cont, const Strin
if(s == "cpp:const" && operation)
{
- newMetaData.push_back(s);
continue;
}
if(!prefix.empty())
@@ -4767,7 +4797,6 @@ Slice::Gen::MetaDataVisitor::validate(const SyntaxTreeBasePtr& cont, const Strin
ExceptionPtr exception = ExceptionPtr::dynamicCast(cont);
if((builtin && builtin->kind() == Builtin::KindString) || module || clss || strct || exception)
{
- newMetaData.push_back(s);
continue;
}
}
@@ -4775,7 +4804,6 @@ Slice::Gen::MetaDataVisitor::validate(const SyntaxTreeBasePtr& cont, const Strin
{
if(BuiltinPtr::dynamicCast(cont)->kind() == Builtin::KindString)
{
- newMetaData.push_back(s);
continue;
}
}
@@ -4783,18 +4811,15 @@ Slice::Gen::MetaDataVisitor::validate(const SyntaxTreeBasePtr& cont, const Strin
{
if(ss.find("type:") == 0 || ss.find("view-type:") == 0 || ss == "array" || ss.find("range") == 0)
{
- newMetaData.push_back(s);
continue;
}
}
if(DictionaryPtr::dynamicCast(cont) && (ss.find("type:") == 0 || ss.find("view-type:") == 0))
{
- newMetaData.push_back(s);
continue;
}
if(!cpp11 && StructPtr::dynamicCast(cont) && (ss == "class" || ss == "comparable"))
{
- newMetaData.push_back(s);
continue;
}
@@ -4804,18 +4829,15 @@ Slice::Gen::MetaDataVisitor::validate(const SyntaxTreeBasePtr& cont, const Strin
(cl->isLocal() && ss.find("type:") == 0) ||
(!cpp11 && cl->isLocal() && ss == "comparable")))
{
- newMetaData.push_back(s);
continue;
}
}
if(ExceptionPtr::dynamicCast(cont) && ss == "ice_print")
{
- newMetaData.push_back(s);
continue;
}
if(!cpp98 && EnumPtr::dynamicCast(cont) && ss == "unscoped")
{
- newMetaData.push_back(s);
continue;
}
@@ -4823,15 +4845,15 @@ Slice::Gen::MetaDataVisitor::validate(const SyntaxTreeBasePtr& cont, const Strin
ClassDeclPtr cl = ClassDeclPtr::dynamicCast(cont);
if(cl && cl->isLocal() && ss.find("type:") == 0)
{
- newMetaData.push_back(s);
continue;
}
}
- if(warningLevel() > 0)
+ if(emitWarnings)
{
emitWarning(file, line, "ignoring invalid metadata `" + s + "'");
}
+ newMetaData.remove(s);
continue;
}
@@ -4840,31 +4862,29 @@ Slice::Gen::MetaDataVisitor::validate(const SyntaxTreeBasePtr& cont, const Strin
ClassDefPtr cl = ClassDefPtr::dynamicCast(cont);
if(cl && cl->isDelegate())
{
- newMetaData.push_back(s);
continue;
}
- if(warningLevel() > 0)
+ if(emitWarnings)
{
emitWarning(file, line, "ignoring invalid metadata `" + s + "'");
}
+ newMetaData.remove(s);
continue;
}
- newMetaData.push_back(s);
}
return newMetaData;
}
void
-Slice::Gen::normalizeMetaData(const UnitPtr& u, bool cpp11, int warningLevel)
+Slice::Gen::normalizeMetaData(const UnitPtr& u, bool cpp11)
{
- NormalizeMetaDataVisitor visitor(cpp11, warningLevel);
+ NormalizeMetaDataVisitor visitor(cpp11);
u->visit(&visitor, false);
}
-Slice::Gen::NormalizeMetaDataVisitor::NormalizeMetaDataVisitor(bool cpp11, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::Gen::NormalizeMetaDataVisitor::NormalizeMetaDataVisitor(bool cpp11) :
_cpp11(cpp11)
{
}
@@ -5138,9 +5158,24 @@ Slice::Gen::getHeaderExt(const string& file, const UnitPtr& unit)
return ext;
}
+string
+Slice::Gen::getSourceExt(const string& file, const UnitPtr& unit)
+{
+ string ext;
+ static const string sourceExtPrefix = "cpp:source-ext:";
+ DefinitionContextPtr dc = unit->findDefinitionContext(file);
+ assert(dc);
+ string meta = dc->findMetaData(sourceExtPrefix);
+ if(meta.size() > sourceExtPrefix.size())
+ {
+ ext = meta.substr(sourceExtPrefix.size());
+ }
+ return ext;
+}
+
// C++11 visitors
-Slice::Gen::Cpp11DeclVisitor::Cpp11DeclVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel), H(h), C(c), _dllExport(dllExport)
+Slice::Gen::Cpp11DeclVisitor::Cpp11DeclVisitor(Output& h, Output& c, const string& dllExport) :
+ H(h), C(c), _dllExport(dllExport)
{
}
@@ -5295,8 +5330,8 @@ Slice::Gen::Cpp11DeclVisitor::visitOperation(const OperationPtr& p)
}
}
-Slice::Gen::Cpp11TypesVisitor::Cpp11TypesVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel), H(h), C(c), _dllExport(dllExport), _dllClassExport(toDllClassExport(dllExport)),
+Slice::Gen::Cpp11TypesVisitor::Cpp11TypesVisitor(Output& h, Output& c, const string& dllExport) :
+ H(h), C(c), _dllExport(dllExport), _dllClassExport(toDllClassExport(dllExport)),
_dllMemberExport(toDllMemberExport(dllExport)), _doneStaticSymbol(false), _useWstring(false)
{
}
@@ -5693,8 +5728,8 @@ Slice::Gen::Cpp11TypesVisitor::visitDictionary(const DictionaryPtr& p)
}
}
-Slice::Gen::Cpp11ProxyVisitor::Cpp11ProxyVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel), H(h), C(c), _dllClassExport(toDllClassExport(dllExport)),
+Slice::Gen::Cpp11ProxyVisitor::Cpp11ProxyVisitor(Output& h, Output& c, const string& dllExport) :
+ H(h), C(c), _dllClassExport(toDllClassExport(dllExport)),
_dllMemberExport(toDllMemberExport(dllExport)),
_useWstring(false)
{
@@ -6283,9 +6318,7 @@ Slice::Gen::Cpp11TypesVisitor::emitUpcall(const ExceptionPtr& base, const string
Slice::Gen::Cpp11ObjectVisitor::Cpp11ObjectVisitor(::IceUtilInternal::Output& h,
::IceUtilInternal::Output& c,
- const std::string& dllExport,
- int warningLevel) :
- ParserVisitor(warningLevel),
+ const std::string& dllExport) :
H(h),
C(c),
_dllExport(dllExport),
@@ -6338,9 +6371,8 @@ Slice::Gen::Cpp11ValueVisitor::emitUpcall(const ClassDefPtr& base, const string&
Slice::Gen::Cpp11LocalObjectVisitor::Cpp11LocalObjectVisitor(::IceUtilInternal::Output& h,
::IceUtilInternal::Output& c,
- const std::string& dllExport,
- int warningLevel) :
- Cpp11ObjectVisitor(h, c, dllExport, warningLevel)
+ const std::string& dllExport) :
+ Cpp11ObjectVisitor(h, c, dllExport)
{
}
@@ -6687,9 +6719,8 @@ Slice::Gen::Cpp11LocalObjectVisitor::visitOperation(const OperationPtr& p)
Slice::Gen::Cpp11InterfaceVisitor::Cpp11InterfaceVisitor(::IceUtilInternal::Output& h,
::IceUtilInternal::Output& c,
- const std::string& dllExport,
- int warningLevel) :
- Cpp11ObjectVisitor(h, c, dllExport, warningLevel)
+ const std::string& dllExport) :
+ Cpp11ObjectVisitor(h, c, dllExport)
{
}
@@ -7142,9 +7173,8 @@ Slice::Gen::Cpp11InterfaceVisitor::visitOperation(const OperationPtr& p)
Slice::Gen::Cpp11ValueVisitor::Cpp11ValueVisitor(::IceUtilInternal::Output& h,
::IceUtilInternal::Output& c,
- const std::string& dllExport,
- int warningLevel) :
- Cpp11ObjectVisitor(h, c, dllExport, warningLevel)
+ const std::string& dllExport) :
+ Cpp11ObjectVisitor(h, c, dllExport)
{
}
@@ -7497,8 +7527,7 @@ Slice::Gen::Cpp11ObjectVisitor::emitOneShotConstructor(const ClassDefPtr& p)
}
}
-Slice::Gen::Cpp11StreamVisitor::Cpp11StreamVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::Gen::Cpp11StreamVisitor::Cpp11StreamVisitor(Output& h, Output& c, const string& dllExport) :
H(h),
C(c),
_dllExport(dllExport)
@@ -7610,8 +7639,7 @@ Slice::Gen::Cpp11StreamVisitor::visitEnum(const EnumPtr& p)
}
-Slice::Gen::Cpp11CompatibilityVisitor::Cpp11CompatibilityVisitor(Output& h, Output&, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::Gen::Cpp11CompatibilityVisitor::Cpp11CompatibilityVisitor(Output& h, Output&, const string& dllExport) :
H(h),
_dllExport(dllExport)
{
@@ -7661,8 +7689,8 @@ Slice::Gen::Cpp11CompatibilityVisitor::visitClassDecl(const ClassDeclPtr& p)
}
}
-Slice::Gen::Cpp11ImplVisitor::Cpp11ImplVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel), H(h), C(c), _dllExport(dllExport), _useWstring(false)
+Slice::Gen::Cpp11ImplVisitor::Cpp11ImplVisitor(Output& h, Output& c, const string& dllExport) :
+ H(h), C(c), _dllExport(dllExport), _useWstring(false)
{
}
diff --git a/cpp/src/slice2cpp/Gen.h b/cpp/src/slice2cpp/Gen.h
index 660267b0539..b27d791a106 100644
--- a/cpp/src/slice2cpp/Gen.h
+++ b/cpp/src/slice2cpp/Gen.h
@@ -31,8 +31,7 @@ public:
bool,
bool,
bool,
- bool,
- int);
+ bool);
~Gen();
void generate(const UnitPtr&);
@@ -52,6 +51,12 @@ private:
// or an empty string if no global metadata was found.
//
std::string getHeaderExt(const std::string& file, const UnitPtr& unit);
+
+ //
+ // Returns the source extension defined in the global metadata for a given file,
+ // or an empty string if no global metadata was found.
+ //
+ std::string getSourceExt(const std::string& file, const UnitPtr& unit);
::IceUtilInternal::Output H;
::IceUtilInternal::Output C;
@@ -72,13 +77,12 @@ private:
bool _implCpp11;
bool _checksum;
bool _ice;
- int _warningLevel;
class TypesVisitor : private ::IceUtil::noncopyable, public ParserVisitor
{
public:
- TypesVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ TypesVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -110,7 +114,7 @@ private:
{
public:
- ProxyDeclVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ ProxyDeclVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitUnitStart(const UnitPtr&);
virtual void visitUnitEnd(const UnitPtr&);
@@ -129,7 +133,7 @@ private:
{
public:
- ProxyVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ ProxyVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitUnitStart(const UnitPtr&);
virtual void visitUnitEnd(const UnitPtr&);
@@ -155,7 +159,7 @@ private:
{
public:
- ObjectDeclVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ ObjectDeclVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -174,7 +178,7 @@ private:
{
public:
- ObjectVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ ObjectVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -207,7 +211,7 @@ private:
{
public:
- AsyncCallbackVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ AsyncCallbackVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -228,7 +232,7 @@ private:
{
public:
- AsyncCallbackTemplateVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ AsyncCallbackTemplateVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitUnitStart(const UnitPtr&);
virtual void visitUnitEnd(const UnitPtr&);
@@ -253,7 +257,7 @@ private:
{
public:
- ImplVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ ImplVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -283,7 +287,7 @@ private:
{
public:
- AsyncVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ AsyncVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -305,7 +309,7 @@ private:
{
public:
- AsyncImplVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ AsyncImplVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitUnitStart(const UnitPtr&);
virtual void visitUnitEnd(const UnitPtr&);
@@ -329,7 +333,7 @@ private:
{
public:
- StreamVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ StreamVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -351,7 +355,7 @@ private:
{
public:
- Cpp11DeclVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ Cpp11DeclVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitUnitStart(const UnitPtr&);
virtual void visitUnitEnd(const UnitPtr&);
@@ -374,7 +378,7 @@ private:
{
public:
- Cpp11TypesVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ Cpp11TypesVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -408,7 +412,7 @@ private:
{
public:
- Cpp11ProxyVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ Cpp11ProxyVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitUnitStart(const UnitPtr&);
virtual void visitUnitEnd(const UnitPtr&);
@@ -434,7 +438,7 @@ private:
{
public:
- Cpp11ObjectVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ Cpp11ObjectVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
protected:
@@ -457,7 +461,7 @@ private:
{
public:
- Cpp11LocalObjectVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ Cpp11LocalObjectVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -472,7 +476,7 @@ private:
{
public:
- Cpp11InterfaceVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ Cpp11InterfaceVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -488,7 +492,7 @@ private:
{
public:
- Cpp11ValueVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ Cpp11ValueVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -504,7 +508,7 @@ private:
{
public:
- Cpp11StreamVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ Cpp11StreamVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -525,7 +529,7 @@ private:
{
public:
- Cpp11CompatibilityVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ Cpp11CompatibilityVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -541,7 +545,7 @@ private:
{
public:
- Cpp11ImplVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ Cpp11ImplVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -573,8 +577,6 @@ private:
{
public:
- MetaDataVisitor(int);
-
virtual bool visitUnitStart(const UnitPtr&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -602,7 +604,7 @@ private:
{
public:
- NormalizeMetaDataVisitor(bool, int);
+ NormalizeMetaDataVisitor(bool);
virtual bool visitUnitStart(const UnitPtr&);
virtual bool visitModuleStart(const ModulePtr&);
@@ -628,8 +630,8 @@ private:
bool _cpp11;
};
- static void validateMetaData(const UnitPtr&, int);
- static void normalizeMetaData(const UnitPtr&, bool, int);
+ static void validateMetaData(const UnitPtr&);
+ static void normalizeMetaData(const UnitPtr&, bool);
};
}
diff --git a/cpp/src/slice2cpp/Main.cpp b/cpp/src/slice2cpp/Main.cpp
index 83b19b943c9..7378da1b118 100644
--- a/cpp/src/slice2cpp/Main.cpp
+++ b/cpp/src/slice2cpp/Main.cpp
@@ -88,7 +88,6 @@ usage(const string& n)
" deprecated: use instead [[\"ice-prefix\"]] metadata.\n"
"--underscore Allow underscores in Slice identifiers\n"
" deprecated: use instead [[\"underscore\"]] metadata.\n"
- "--no-warn Disable all warnings.\n"
;
}
@@ -118,7 +117,6 @@ compile(const vector<string>& argv)
opts.addOpt("", "ice");
opts.addOpt("", "underscore");
opts.addOpt("", "checksum");
- opts.addOpt("", "no-warn");
bool validate = find(argv.begin(), argv.end(), "--validate") != argv.end();
vector<string> args;
@@ -199,8 +197,6 @@ compile(const vector<string>& argv)
bool checksum = opts.isSet("checksum");
- int warningLevel = opts.isSet("no-warn") ? 0 : 1;
-
if(args.empty())
{
consoleErr << argv[0] << ": error: no input file" << endl;
@@ -333,7 +329,7 @@ compile(const vector<string>& argv)
try
{
Gen gen(icecpp->getBaseName(), headerExtension, sourceExtension, extraHeaders, include,
- includePaths, dllExport, output, implCpp98, implCpp11, checksum, ice, warningLevel);
+ includePaths, dllExport, output, implCpp98, implCpp11, checksum, ice);
gen.generate(u);
}
catch(const Slice::FileException& ex)
diff --git a/cpp/src/slice2cs/CsUtil.cpp b/cpp/src/slice2cs/CsUtil.cpp
index 5de4582dd56..dac1c6a362e 100644
--- a/cpp/src/slice2cs/CsUtil.cpp
+++ b/cpp/src/slice2cs/CsUtil.cpp
@@ -2335,16 +2335,12 @@ Slice::CsGenerator::toArrayAlloc(const string& decl, const string& sz)
}
void
-Slice::CsGenerator::validateMetaData(const UnitPtr& u, int warningLevel)
+Slice::CsGenerator::validateMetaData(const UnitPtr& u)
{
- MetaDataVisitor visitor(warningLevel);
+ MetaDataVisitor visitor;
u->visit(&visitor, true);
}
-Slice::CsGenerator::MetaDataVisitor::MetaDataVisitor(int warningLevel) : ParserVisitor(warningLevel)
-{
-}
-
bool
Slice::CsGenerator::MetaDataVisitor::visitUnitStart(const UnitPtr& p)
{
@@ -2352,7 +2348,6 @@ Slice::CsGenerator::MetaDataVisitor::visitUnitStart(const UnitPtr& p)
// Validate global metadata in the top-level file and all included files.
//
StringList files = p->allFiles();
-
for(StringList::iterator q = files.begin(); q != files.end(); ++q)
{
string file = *q;
@@ -2360,7 +2355,7 @@ Slice::CsGenerator::MetaDataVisitor::visitUnitStart(const UnitPtr& p)
assert(dc);
StringList globalMetaData = dc->getMetaData();
StringList newGlobalMetaData;
-
+ bool emitWarnings = !dc->suppressWarning("invalid-metadata");
static const string csPrefix = "cs:";
static const string clrPrefix = "clr:";
@@ -2379,7 +2374,7 @@ Slice::CsGenerator::MetaDataVisitor::visitUnitStart(const UnitPtr& p)
static const string csAttributePrefix = csPrefix + "attribute:";
if(s.find(csAttributePrefix) != 0 || s.size() == csAttributePrefix.size())
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
emitWarning(file, -1, "ignoring invalid global metadata `" + oldS + "'");
}
@@ -2504,6 +2499,11 @@ Slice::CsGenerator::MetaDataVisitor::validate(const ContainedPtr& cont)
StringList localMetaData = cont->getMetaData();
StringList newLocalMetaData;
+ const UnitPtr unit = cont->unit();
+ const DefinitionContextPtr dc = unit->findDefinitionContext(cont->file());
+ assert(dc);
+ bool emitWarnings = !dc->suppressWarning("invalid-metadata");
+
for(StringList::iterator p = localMetaData.begin(); p != localMetaData.end(); ++p)
{
string& s = *p;
@@ -2547,7 +2547,7 @@ Slice::CsGenerator::MetaDataVisitor::validate(const ContainedPtr& cont)
string meta;
if(cont->findMetaData(csPrefix + "generic:", meta))
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
emitWarning(cont->file(), cont->line(), msg + " `" + meta + "':\n" +
"serialization can only be used with the array mapping for byte sequences");
@@ -2623,7 +2623,7 @@ Slice::CsGenerator::MetaDataVisitor::validate(const ContainedPtr& cont)
continue;
}
- if(warningLevel() > 0)
+ if(emitWarnings)
{
emitWarning(cont->file(), cont->line(), msg + " `" + oldS + "'");
}
@@ -2638,7 +2638,7 @@ Slice::CsGenerator::MetaDataVisitor::validate(const ContainedPtr& cont)
continue;
}
- if(warningLevel() > 0)
+ if(emitWarnings)
{
emitWarning(cont->file(), cont->line(), msg + " `" + s + "'");
}
diff --git a/cpp/src/slice2cs/CsUtil.h b/cpp/src/slice2cs/CsUtil.h
index 1741150f100..16ebd8a3c54 100644
--- a/cpp/src/slice2cs/CsUtil.h
+++ b/cpp/src/slice2cs/CsUtil.h
@@ -30,7 +30,7 @@ public:
//
// Validate all metadata in the unit with a "cs:" prefix.
//
- static void validateMetaData(const UnitPtr&, int);
+ static void validateMetaData(const UnitPtr&);
protected:
@@ -65,8 +65,6 @@ private:
{
public:
- MetaDataVisitor(int);
-
virtual bool visitUnitStart(const UnitPtr&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
diff --git a/cpp/src/slice2cs/Gen.cpp b/cpp/src/slice2cs/Gen.cpp
index c1377db72cd..0008249211a 100644
--- a/cpp/src/slice2cs/Gen.cpp
+++ b/cpp/src/slice2cs/Gen.cpp
@@ -154,8 +154,7 @@ resultStructReturnValueName(const ParamDeclList& outParams)
}
-Slice::CsVisitor::CsVisitor(Output& out, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::CsVisitor::CsVisitor(Output& out) :
_out(out)
{
}
@@ -2021,10 +2020,9 @@ Slice::CsVisitor::writeDocCommentParam(const OperationPtr& p, ParamDir paramType
}
Slice::Gen::Gen(const string& base, const vector<string>& includePaths, const string& dir,
- bool tie, bool impl, bool implTie, int warningLevel) :
+ bool tie, bool impl, bool implTie) :
_includePaths(includePaths),
- _tie(tie),
- _warningLevel(warningLevel)
+ _tie(tie)
{
string fileBase = base;
string::size_type pos = base.find_last_of("/\\");
@@ -2094,58 +2092,58 @@ Slice::Gen::~Gen()
void
Slice::Gen::generate(const UnitPtr& p)
{
- CsGenerator::validateMetaData(p, _warningLevel);
+ CsGenerator::validateMetaData(p);
- UnitVisitor unitVisitor(_out, _warningLevel);
+ UnitVisitor unitVisitor(_out);
p->visit(&unitVisitor, false);
- CompactIdVisitor compactIdVisitor(_out, _warningLevel);
+ CompactIdVisitor compactIdVisitor(_out);
p->visit(&compactIdVisitor, false);
- TypesVisitor typesVisitor(_out, _warningLevel);
+ TypesVisitor typesVisitor(_out);
p->visit(&typesVisitor, false);
//
// The async delegates are emitted before the proxy definition
// because the proxy methods need to know the type.
//
- AsyncDelegateVisitor asyncDelegateVisitor(_out, _warningLevel);
+ AsyncDelegateVisitor asyncDelegateVisitor(_out);
p->visit(&asyncDelegateVisitor, false);
- ResultVisitor resultVisitor(_out, _warningLevel);
+ ResultVisitor resultVisitor(_out);
p->visit(&resultVisitor, false);
- ProxyVisitor proxyVisitor(_out, _warningLevel);
+ ProxyVisitor proxyVisitor(_out);
p->visit(&proxyVisitor, false);
- OpsVisitor opsVisitor(_out, _warningLevel);
+ OpsVisitor opsVisitor(_out);
p->visit(&opsVisitor, false);
- HelperVisitor helperVisitor(_out, _warningLevel);
+ HelperVisitor helperVisitor(_out);
p->visit(&helperVisitor, false);
- DispatcherVisitor dispatcherVisitor(_out, _tie, _warningLevel);
+ DispatcherVisitor dispatcherVisitor(_out, _tie);
p->visit(&dispatcherVisitor, false);
}
void
Slice::Gen::generateImpl(const UnitPtr& p)
{
- ImplVisitor implVisitor(_impl, _warningLevel);
+ ImplVisitor implVisitor(_impl);
p->visit(&implVisitor, false);
}
void
Slice::Gen::generateImplTie(const UnitPtr& p)
{
- ImplTieVisitor implTieVisitor(_impl, _warningLevel);
+ ImplTieVisitor implTieVisitor(_impl);
p->visit(&implTieVisitor, false);
}
void
Slice::Gen::generateChecksums(const UnitPtr& u)
{
- ChecksumMap map = createChecksums(u, _warningLevel);
+ ChecksumMap map = createChecksums(u);
if(!map.empty())
{
string className = "X" + generateUUID();
@@ -2214,8 +2212,8 @@ Slice::Gen::printHeader()
_out << "//\n";
}
-Slice::Gen::UnitVisitor::UnitVisitor(IceUtilInternal::Output& out, int warningLevel) :
- CsVisitor(out, warningLevel)
+Slice::Gen::UnitVisitor::UnitVisitor(IceUtilInternal::Output& out) :
+ CsVisitor(out)
{
}
@@ -2246,8 +2244,8 @@ Slice::Gen::UnitVisitor::visitUnitStart(const UnitPtr& p)
return false;
}
-Slice::Gen::CompactIdVisitor::CompactIdVisitor(IceUtilInternal::Output& out, int warningLevel) :
- CsVisitor(out, warningLevel)
+Slice::Gen::CompactIdVisitor::CompactIdVisitor(IceUtilInternal::Output& out) :
+ CsVisitor(out)
{
}
@@ -2280,8 +2278,8 @@ Slice::Gen::CompactIdVisitor::visitClassDefStart(const ClassDefPtr& p)
return false;
}
-Slice::Gen::TypesVisitor::TypesVisitor(IceUtilInternal::Output& out, int warningLevel) :
- CsVisitor(out, warningLevel)
+Slice::Gen::TypesVisitor::TypesVisitor(IceUtilInternal::Output& out) :
+ CsVisitor(out)
{
}
@@ -3767,8 +3765,8 @@ Slice::Gen::TypesVisitor::writeMemberEquals(const DataMemberList& dataMembers, i
}
}
-Slice::Gen::ResultVisitor::ResultVisitor(::IceUtilInternal::Output& out, int warningLevel)
- : CsVisitor(out, warningLevel)
+Slice::Gen::ResultVisitor::ResultVisitor(::IceUtilInternal::Output& out)
+ : CsVisitor(out)
{
}
@@ -3926,8 +3924,8 @@ Slice::Gen::ResultVisitor::visitOperation(const OperationPtr& p)
}
}
-Slice::Gen::ProxyVisitor::ProxyVisitor(IceUtilInternal::Output& out, int warningLevel) :
- CsVisitor(out, warningLevel)
+Slice::Gen::ProxyVisitor::ProxyVisitor(IceUtilInternal::Output& out) :
+ CsVisitor(out)
{
}
@@ -4114,8 +4112,8 @@ Slice::Gen::ProxyVisitor::visitOperation(const OperationPtr& p)
}
}
-Slice::Gen::AsyncDelegateVisitor::AsyncDelegateVisitor(IceUtilInternal::Output& out, int warningLevel)
- : CsVisitor(out, warningLevel)
+Slice::Gen::AsyncDelegateVisitor::AsyncDelegateVisitor(IceUtilInternal::Output& out)
+ : CsVisitor(out)
{
}
@@ -4171,8 +4169,8 @@ Slice::Gen::AsyncDelegateVisitor::visitOperation(const OperationPtr& p)
_out << paramDeclAMI << epar << ';';
}
-Slice::Gen::OpsVisitor::OpsVisitor(IceUtilInternal::Output& out, int warningLevel)
- : CsVisitor(out, warningLevel)
+Slice::Gen::OpsVisitor::OpsVisitor(IceUtilInternal::Output& out)
+ : CsVisitor(out)
{
}
@@ -4269,8 +4267,8 @@ Slice::Gen::OpsVisitor::visitClassDefStart(const ClassDefPtr& p)
return false;
}
-Slice::Gen::HelperVisitor::HelperVisitor(IceUtilInternal::Output& out, int warningLevel) :
- CsVisitor(out, warningLevel)
+Slice::Gen::HelperVisitor::HelperVisitor(IceUtilInternal::Output& out) :
+ CsVisitor(out)
{
}
@@ -5200,8 +5198,8 @@ Slice::Gen::HelperVisitor::visitDictionary(const DictionaryPtr& p)
_out << eb;
}
-Slice::Gen::DispatcherVisitor::DispatcherVisitor(::IceUtilInternal::Output& out, bool tie, int warningLevel) :
- CsVisitor(out, warningLevel),
+Slice::Gen::DispatcherVisitor::DispatcherVisitor(::IceUtilInternal::Output& out, bool tie) :
+ CsVisitor(out),
_tie(tie)
{
}
@@ -5414,8 +5412,8 @@ Slice::Gen::DispatcherVisitor::writeTieOperations(const ClassDefPtr& p, NameSet*
}
}
-Slice::Gen::BaseImplVisitor::BaseImplVisitor(IceUtilInternal::Output& out, int warningLevel)
- : CsVisitor(out, warningLevel)
+Slice::Gen::BaseImplVisitor::BaseImplVisitor(IceUtilInternal::Output& out)
+ : CsVisitor(out)
{
}
@@ -5522,8 +5520,8 @@ Slice::Gen::BaseImplVisitor::writeOperation(const OperationPtr& op, bool comment
}
}
-Slice::Gen::ImplVisitor::ImplVisitor(IceUtilInternal::Output& out, int warningLevel) :
- BaseImplVisitor(out, warningLevel)
+Slice::Gen::ImplVisitor::ImplVisitor(IceUtilInternal::Output& out) :
+ BaseImplVisitor(out)
{
}
@@ -5590,8 +5588,8 @@ Slice::Gen::ImplVisitor::visitClassDefEnd(const ClassDefPtr&)
_out << eb;
}
-Slice::Gen::ImplTieVisitor::ImplTieVisitor(IceUtilInternal::Output& out, int warningLevel)
- : BaseImplVisitor(out, warningLevel)
+Slice::Gen::ImplTieVisitor::ImplTieVisitor(IceUtilInternal::Output& out)
+ : BaseImplVisitor(out)
{
}
diff --git a/cpp/src/slice2cs/Gen.h b/cpp/src/slice2cs/Gen.h
index f07bbc77cdc..d061616693d 100644
--- a/cpp/src/slice2cs/Gen.h
+++ b/cpp/src/slice2cs/Gen.h
@@ -20,7 +20,7 @@ class CsVisitor : public CsGenerator, public ParserVisitor
{
public:
- CsVisitor(::IceUtilInternal::Output&, int);
+ CsVisitor(::IceUtilInternal::Output&);
virtual ~CsVisitor();
protected:
@@ -87,8 +87,7 @@ public:
const std::string&,
bool,
bool,
- bool,
- int);
+ bool);
~Gen();
void generate(const UnitPtr&);
@@ -103,7 +102,6 @@ private:
IceUtilInternal::Output _impl;
std::vector<std::string> _includePaths;
bool _tie;
- int _warningLevel;
void printHeader();
@@ -111,7 +109,7 @@ private:
{
public:
- UnitVisitor(::IceUtilInternal::Output&, int);
+ UnitVisitor(::IceUtilInternal::Output&);
virtual bool visitUnitStart(const UnitPtr&);
};
@@ -120,7 +118,7 @@ private:
{
public:
- CompactIdVisitor(IceUtilInternal::Output&, int);
+ CompactIdVisitor(IceUtilInternal::Output&);
virtual bool visitUnitStart(const UnitPtr&);
virtual void visitUnitEnd(const UnitPtr&);
@@ -131,7 +129,7 @@ private:
{
public:
- TypesVisitor(::IceUtilInternal::Output&, int);
+ TypesVisitor(::IceUtilInternal::Output&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -158,7 +156,7 @@ private:
{
public:
- AsyncDelegateVisitor(::IceUtilInternal::Output&, int);
+ AsyncDelegateVisitor(::IceUtilInternal::Output&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -171,7 +169,7 @@ private:
{
public:
- ResultVisitor(::IceUtilInternal::Output&, int);
+ ResultVisitor(::IceUtilInternal::Output&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -184,7 +182,7 @@ private:
{
public:
- ProxyVisitor(::IceUtilInternal::Output&, int);
+ ProxyVisitor(::IceUtilInternal::Output&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -197,7 +195,7 @@ private:
{
public:
- OpsVisitor(::IceUtilInternal::Output&, int);
+ OpsVisitor(::IceUtilInternal::Output&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -208,7 +206,7 @@ private:
{
public:
- HelperVisitor(::IceUtilInternal::Output&, int);
+ HelperVisitor(::IceUtilInternal::Output&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -222,7 +220,7 @@ private:
{
public:
- DispatcherVisitor(::IceUtilInternal::Output&, bool, int);
+ DispatcherVisitor(::IceUtilInternal::Output&, bool);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -241,7 +239,7 @@ private:
{
public:
- BaseImplVisitor(::IceUtilInternal::Output&, int);
+ BaseImplVisitor(::IceUtilInternal::Output&);
protected:
@@ -252,7 +250,7 @@ private:
{
public:
- ImplVisitor(::IceUtilInternal::Output&, int);
+ ImplVisitor(::IceUtilInternal::Output&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -264,7 +262,7 @@ private:
{
public:
- ImplTieVisitor(::IceUtilInternal::Output&, int);
+ ImplTieVisitor(::IceUtilInternal::Output&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
diff --git a/cpp/src/slice2cs/Main.cpp b/cpp/src/slice2cs/Main.cpp
index 31b60cee93d..21738ba6f83 100644
--- a/cpp/src/slice2cs/Main.cpp
+++ b/cpp/src/slice2cs/Main.cpp
@@ -82,7 +82,6 @@ usage(const string& n)
" deprecated: use instead [[\"ice-prefix\"]] metadata.\n"
"--underscore Allow underscores in Slice identifiers\n"
" deprecated: use instead [[\"underscore\"]] metadata.\n"
- "--no-warn Disable all warnings.\n"
;
}
@@ -108,7 +107,6 @@ compile(const vector<string>& argv)
opts.addOpt("", "ice");
opts.addOpt("", "underscore");
opts.addOpt("", "checksum");
- opts.addOpt("", "no-warn");
bool validate = find(argv.begin(), argv.end(), "--validate") != argv.end();
vector<string> args;
@@ -181,8 +179,6 @@ compile(const vector<string>& argv)
bool checksum = opts.isSet("checksum");
- int warningLevel = opts.isSet("no-warn") ? 0 : 1;
-
if(args.empty())
{
consoleErr << argv[0] << ": error: no input file" << endl;
@@ -313,7 +309,7 @@ compile(const vector<string>& argv)
{
try
{
- Gen gen(icecpp->getBaseName(), includePaths, output, tie, impl, implTie, warningLevel);
+ Gen gen(icecpp->getBaseName(), includePaths, output, tie, impl, implTie);
gen.generate(p);
if(impl)
{
diff --git a/cpp/src/slice2html/Gen.cpp b/cpp/src/slice2html/Gen.cpp
index bd226fbd027..54383af7030 100644
--- a/cpp/src/slice2html/Gen.cpp
+++ b/cpp/src/slice2html/Gen.cpp
@@ -37,7 +37,7 @@ namespace Slice
void
generate(const UnitPtr& unit, const string& dir, const string& header, const string& footer,
const string& indexHeader, const string& indexFooter, const string& imageDir, const string& logoURL,
- const string& searchAction, unsigned indexCount, unsigned warnSummary, int warningLevel)
+ const string& searchAction, unsigned indexCount, unsigned warnSummary)
{
unit->mergeModules();
@@ -66,19 +66,19 @@ generate(const UnitPtr& unit, const string& dir, const string& header, const str
// to the symbol; if the latter, we cannot.
//
Files files;
- FileVisitor tv(files, warningLevel);
+ FileVisitor tv(files);
unit->visit(&tv, false);
//
// Generate the start page.
//
- StartPageVisitor spv(files, warningLevel);
+ StartPageVisitor spv(files);
unit->visit(&spv, false);
//
// Generate the table of contents.
//
- TOCVisitor tocv(files, indexHeader, indexFooter, warningLevel);
+ TOCVisitor tocv(files, indexHeader, indexFooter);
unit->visit(&tocv, false);
tocv.generate();
@@ -86,7 +86,7 @@ generate(const UnitPtr& unit, const string& dir, const string& header, const str
// Generate the individual HTML pages.
//
GeneratorBase::setSymbols(tocv.symbols());
- PageVisitor v(files, warningLevel);
+ PageVisitor v(files);
unit->visit(&v, false);
}
@@ -1800,8 +1800,7 @@ Slice::StartPageGenerator::printHeaderFooter()
end(); // table
}
-Slice::FileVisitor::FileVisitor(Files& files, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::FileVisitor::FileVisitor(Files& files) :
_files(files)
{
}
@@ -1864,8 +1863,7 @@ Slice::FileVisitor::visitEnum(const EnumPtr& e)
_files.insert(e->file());
}
-Slice::StartPageVisitor::StartPageVisitor(const Files& files, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::StartPageVisitor::StartPageVisitor(const Files& files) :
_spg(files)
{
}
@@ -2043,8 +2041,7 @@ TOCGenerator::writeEntry(const ContainedPtr& c)
end();
}
-TOCVisitor::TOCVisitor(const Files& files, const string& header, const string& footer, int warningLevel) :
- ParserVisitor(warningLevel),
+TOCVisitor::TOCVisitor(const Files& files, const string& header, const string& footer) :
_tg(files, header, footer)
{
}
@@ -2979,8 +2976,7 @@ Slice::EnumGenerator::generate(const EnumPtr& e)
assert(_out.currIndent() == indent);
}
-Slice::PageVisitor::PageVisitor(const Files& files, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::PageVisitor::PageVisitor(const Files& files) :
_files(files)
{
}
diff --git a/cpp/src/slice2html/Gen.h b/cpp/src/slice2html/Gen.h
index b38556e4bb2..8fb67136bc0 100644
--- a/cpp/src/slice2html/Gen.h
+++ b/cpp/src/slice2html/Gen.h
@@ -18,7 +18,7 @@ namespace Slice
void generate(const UnitPtr&, const ::std::string&, const ::std::string&, const ::std::string&, const std::string&,
const ::std::string&, const ::std::string&, const ::std::string&, const ::std::string&,
- unsigned, unsigned, int);
+ unsigned, unsigned);
typedef ::std::set< ::std::string> Files;
@@ -141,7 +141,7 @@ class FileVisitor : private ::IceUtil::noncopyable, public ParserVisitor
{
public:
- FileVisitor(Files&, int);
+ FileVisitor(Files&);
virtual bool visitUnitStart(const UnitPtr&);
virtual bool visitModuleStart(const ModulePtr&);
@@ -162,7 +162,7 @@ class StartPageVisitor : private ::IceUtil::noncopyable, public ParserVisitor
{
public:
- StartPageVisitor(const Files&, int);
+ StartPageVisitor(const Files&);
virtual bool visitUnitStart(const UnitPtr&);
virtual bool visitModuleStart(const ModulePtr&);
@@ -195,7 +195,7 @@ class TOCVisitor : private ::IceUtil::noncopyable, public ParserVisitor
{
public:
- TOCVisitor(const Files&, const ::std::string&, const ::std::string&, int);
+ TOCVisitor(const Files&, const ::std::string&, const ::std::string&);
virtual bool visitUnitStart(const UnitPtr&);
virtual bool visitModuleStart(const ModulePtr&);
@@ -255,7 +255,7 @@ class PageVisitor : private ::IceUtil::noncopyable, public ParserVisitor
{
public:
- PageVisitor(const Files&, int);
+ PageVisitor(const Files&);
virtual bool visitUnitStart(const UnitPtr&);
virtual bool visitModuleStart(const ModulePtr&);
diff --git a/cpp/src/slice2html/Main.cpp b/cpp/src/slice2html/Main.cpp
index 7b5a6562968..ae2bfaa75ff 100644
--- a/cpp/src/slice2html/Main.cpp
+++ b/cpp/src/slice2html/Main.cpp
@@ -85,7 +85,6 @@ usage(const string& n)
" deprecated: use instead [[\"ice-prefix\"]] metadata.\n"
"--underscore Allow underscores in Slice identifiers\n"
" deprecated: use instead [[\"underscore\"]] metadata.\n"
- "--no-warn Disable all warnings.\n"
;
}
@@ -113,7 +112,6 @@ compile(const vector<string>& argv)
opts.addOpt("d", "debug");
opts.addOpt("", "ice");
opts.addOpt("", "underscore");
- opts.addOpt("", "no-warn");
bool validate = find(argv.begin(), argv.end(), "--validate") != argv.end();
vector<string> args;
@@ -222,8 +220,6 @@ compile(const vector<string>& argv)
bool underscore = opts.isSet("underscore");
- int warningLevel = opts.isSet("no-warn") ? 0 : 1;
-
if(args.empty())
{
consoleErr << argv[0] << ": error: no input file" << endl;
@@ -294,7 +290,7 @@ compile(const vector<string>& argv)
try
{
Slice::generate(p, output, header, footer, indexHeader, indexFooter, imageDir, logoURL,
- searchAction, indexCount, summaryCount, warningLevel);
+ searchAction, indexCount, summaryCount);
}
catch(const Slice::FileException& ex)
{
diff --git a/cpp/src/slice2java/Gen.cpp b/cpp/src/slice2java/Gen.cpp
index 376a8edd86e..f33a44286cd 100644
--- a/cpp/src/slice2java/Gen.cpp
+++ b/cpp/src/slice2java/Gen.cpp
@@ -144,9 +144,8 @@ string ofFactory(const TypePtr& type)
}
-Slice::JavaVisitor::JavaVisitor(const string& dir, int warningLevel) :
- JavaGenerator(dir),
- ParserVisitor(warningLevel)
+Slice::JavaVisitor::JavaVisitor(const string& dir) :
+ JavaGenerator(dir)
{
}
@@ -2299,12 +2298,10 @@ Slice::JavaVisitor::writeServantDocComment(Output& out, const OperationPtr& p, c
out << nl << " **/";
}
-Slice::Gen::Gen(const string& /*name*/, const string& base, const vector<string>& includePaths, const string& dir,
- int warningLevel) :
+Slice::Gen::Gen(const string& /*name*/, const string& base, const vector<string>& includePaths, const string& dir) :
_base(base),
_includePaths(includePaths),
- _dir(dir),
- _warningLevel(warningLevel)
+ _dir(dir)
{
}
@@ -2315,31 +2312,31 @@ Slice::Gen::~Gen()
void
Slice::Gen::generate(const UnitPtr& p)
{
- JavaGenerator::validateMetaData(p, _warningLevel);
+ JavaGenerator::validateMetaData(p);
- PackageVisitor packageVisitor(_dir, _warningLevel);
+ PackageVisitor packageVisitor(_dir);
p->visit(&packageVisitor, false);
- TypesVisitor typesVisitor(_dir, _warningLevel);
+ TypesVisitor typesVisitor(_dir);
p->visit(&typesVisitor, false);
- CompactIdVisitor compactIdVisitor(_dir, _warningLevel);
+ CompactIdVisitor compactIdVisitor(_dir);
p->visit(&compactIdVisitor, false);
- HelperVisitor helperVisitor(_dir, _warningLevel);
+ HelperVisitor helperVisitor(_dir);
p->visit(&helperVisitor, false);
- ProxyVisitor proxyVisitor(_dir, _warningLevel);
+ ProxyVisitor proxyVisitor(_dir);
p->visit(&proxyVisitor, false);
- DispatcherVisitor dispatcherVisitor(_dir, _warningLevel);
+ DispatcherVisitor dispatcherVisitor(_dir);
p->visit(&dispatcherVisitor, false);
}
void
Slice::Gen::generateImpl(const UnitPtr& p)
{
- ImplVisitor implVisitor(_dir, _warningLevel);
+ ImplVisitor implVisitor(_dir);
p->visit(&implVisitor, false);
}
@@ -2398,8 +2395,8 @@ Slice::Gen::writeChecksumClass(const string& checksumClass, const string& dir, c
out << nl;
}
-Slice::Gen::PackageVisitor::PackageVisitor(const string& dir, int warningLevel) :
- JavaVisitor(dir, warningLevel)
+Slice::Gen::PackageVisitor::PackageVisitor(const string& dir) :
+ JavaVisitor(dir)
{
}
@@ -2423,8 +2420,8 @@ Slice::Gen::PackageVisitor::visitModuleStart(const ModulePtr& p)
return false;
}
-Slice::Gen::TypesVisitor::TypesVisitor(const string& dir, int warningLevel) :
- JavaVisitor(dir, warningLevel)
+Slice::Gen::TypesVisitor::TypesVisitor(const string& dir) :
+ JavaVisitor(dir)
{
}
@@ -2760,10 +2757,15 @@ Slice::Gen::TypesVisitor::visitClassDefEnd(const ClassDefPtr& p)
string serialVersionUID;
if(p->findMetaData("java:serialVersionUID", serialVersionUID))
{
+ const UnitPtr unit = p->unit();
+ const DefinitionContextPtr dc = unit->findDefinitionContext(p->file());
+ assert(dc);
+ bool emitWarnings = !dc->suppressWarning("invalid-metadata");
+
string::size_type pos = serialVersionUID.rfind(":") + 1;
if(pos == string::npos)
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
ostringstream os;
os << "ignoring invalid serialVersionUID for class `" << p->scoped() << "'; generating default value";
@@ -2779,7 +2781,7 @@ Slice::Gen::TypesVisitor::visitClassDefEnd(const ClassDefPtr& p)
{
if(!stringToInt64(serialVersionUID, v)) // conversion error
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
ostringstream os;
os << "ignoring invalid serialVersionUID for class `" << p->scoped()
@@ -3291,10 +3293,15 @@ Slice::Gen::TypesVisitor::visitExceptionEnd(const ExceptionPtr& p)
string serialVersionUID;
if(p->findMetaData("java:serialVersionUID", serialVersionUID))
{
+ const UnitPtr unit = p->unit();
+ const DefinitionContextPtr dc = unit->findDefinitionContext(p->file());
+ assert(dc);
+ bool emitWarnings = !dc->suppressWarning("invalid-metadata");
+
string::size_type pos = serialVersionUID.rfind(":") + 1;
if(pos == string::npos)
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
ostringstream os;
os << "ignoring invalid serialVersionUID for exception `" << p->scoped() << "'; generating default value";
@@ -3310,7 +3317,7 @@ Slice::Gen::TypesVisitor::visitExceptionEnd(const ExceptionPtr& p)
{
if(!stringToInt64(serialVersionUID, v)) // conversion error
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
ostringstream os;
os << "ignoring invalid serialVersionUID for exception `" << p->scoped()
@@ -3610,10 +3617,14 @@ Slice::Gen::TypesVisitor::visitStructEnd(const StructPtr& p)
string serialVersionUID;
if(p->findMetaData("java:serialVersionUID", serialVersionUID))
{
+ const UnitPtr unit = p->unit();
+ const DefinitionContextPtr dc = unit->findDefinitionContext(p->file());
+ assert(dc);
+ bool emitWarnings = !dc->suppressWarning("invalid-metadata");
string::size_type pos = serialVersionUID.rfind(":") + 1;
if(pos == string::npos)
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
ostringstream os;
os << "ignoring invalid serialVersionUID for struct `" << p->scoped() << "'; generating default value";
@@ -3629,7 +3640,7 @@ Slice::Gen::TypesVisitor::visitStructEnd(const StructPtr& p)
{
if(!stringToInt64(serialVersionUID, v)) // conversion error
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
ostringstream os;
os << "ignoring invalid serialVersionUID for struct `" << p->scoped()
@@ -4160,8 +4171,8 @@ Slice::Gen::TypesVisitor::validateMethod(const OperationList& ops, const std::st
return true;
}
-Slice::Gen::CompactIdVisitor::CompactIdVisitor(const string& dir, int warningLevel) :
- JavaVisitor(dir, warningLevel)
+Slice::Gen::CompactIdVisitor::CompactIdVisitor(const string& dir) :
+ JavaVisitor(dir)
{
}
@@ -4190,8 +4201,8 @@ Slice::Gen::CompactIdVisitor::visitClassDefStart(const ClassDefPtr& p)
return false;
}
-Slice::Gen::HelperVisitor::HelperVisitor(const string& dir, int warningLevel) :
- JavaVisitor(dir, warningLevel)
+Slice::Gen::HelperVisitor::HelperVisitor(const string& dir) :
+ JavaVisitor(dir)
{
}
@@ -4355,8 +4366,8 @@ Slice::Gen::HelperVisitor::visitDictionary(const DictionaryPtr& p)
close();
}
-Slice::Gen::ProxyVisitor::ProxyVisitor(const string& dir, int warningLevel) :
- JavaVisitor(dir, warningLevel)
+Slice::Gen::ProxyVisitor::ProxyVisitor(const string& dir) :
+ JavaVisitor(dir)
{
}
@@ -5110,8 +5121,8 @@ Slice::Gen::ProxyVisitor::visitOperation(const OperationPtr& p)
}
}
-Slice::Gen::DispatcherVisitor::DispatcherVisitor(const string& dir, int warningLevel) :
- JavaVisitor(dir, warningLevel)
+Slice::Gen::DispatcherVisitor::DispatcherVisitor(const string& dir) :
+ JavaVisitor(dir)
{
}
@@ -5184,8 +5195,8 @@ Slice::Gen::DispatcherVisitor::visitClassDefStart(const ClassDefPtr& p)
return false;
}
-Slice::Gen::ImplVisitor::ImplVisitor(const string& dir, int warningLevel) :
- JavaVisitor(dir, warningLevel)
+Slice::Gen::ImplVisitor::ImplVisitor(const string& dir) :
+ JavaVisitor(dir)
{
}
diff --git a/cpp/src/slice2java/Gen.h b/cpp/src/slice2java/Gen.h
index d2ce2ef44c1..11c7d0f7e45 100644
--- a/cpp/src/slice2java/Gen.h
+++ b/cpp/src/slice2java/Gen.h
@@ -25,7 +25,7 @@ public:
protected:
- JavaVisitor(const std::string&, int);
+ JavaVisitor(const std::string&);
enum ParamDir { InParam, OutParam };
@@ -129,8 +129,7 @@ public:
Gen(const std::string&,
const std::string&,
const std::vector<std::string>&,
- const std::string&,
- int);
+ const std::string&);
~Gen();
void generate(const UnitPtr&);
@@ -143,13 +142,12 @@ private:
std::string _base;
std::vector<std::string> _includePaths;
std::string _dir;
- int _warningLevel;
class PackageVisitor : public JavaVisitor
{
public:
- PackageVisitor(const std::string&, int);
+ PackageVisitor(const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
};
@@ -158,7 +156,7 @@ private:
{
public:
- TypesVisitor(const std::string&, int);
+ TypesVisitor(const std::string&);
virtual bool visitClassDefStart(const ClassDefPtr&);
virtual void visitClassDefEnd(const ClassDefPtr&);
@@ -183,7 +181,7 @@ private:
{
public:
- CompactIdVisitor(const std::string&, int);
+ CompactIdVisitor(const std::string&);
virtual bool visitClassDefStart(const ClassDefPtr&);
};
@@ -192,7 +190,7 @@ private:
{
public:
- HelperVisitor(const std::string&, int);
+ HelperVisitor(const std::string&);
virtual void visitSequence(const SequencePtr&);
virtual void visitDictionary(const DictionaryPtr&);
@@ -202,7 +200,7 @@ private:
{
public:
- ProxyVisitor(const std::string&, int);
+ ProxyVisitor(const std::string&);
virtual bool visitClassDefStart(const ClassDefPtr&);
virtual void visitClassDefEnd(const ClassDefPtr&);
@@ -213,7 +211,7 @@ private:
{
public:
- DispatcherVisitor(const std::string&, int);
+ DispatcherVisitor(const std::string&);
virtual bool visitClassDefStart(const ClassDefPtr&);
};
@@ -222,7 +220,7 @@ private:
{
public:
- ImplVisitor(const std::string&, int);
+ ImplVisitor(const std::string&);
virtual bool visitClassDefStart(const ClassDefPtr&);
diff --git a/cpp/src/slice2java/GenCompat.cpp b/cpp/src/slice2java/GenCompat.cpp
index 6579642d280..a3f4179ed8f 100644
--- a/cpp/src/slice2java/GenCompat.cpp
+++ b/cpp/src/slice2java/GenCompat.cpp
@@ -191,9 +191,8 @@ writeParamList(Output& out, vector<string> params, bool end = true, bool newLine
}
-Slice::JavaCompatVisitor::JavaCompatVisitor(const string& dir, int warningLevel) :
- JavaCompatGenerator(dir),
- ParserVisitor(warningLevel)
+Slice::JavaCompatVisitor::JavaCompatVisitor(const string& dir) :
+ JavaCompatGenerator(dir)
{
}
@@ -2280,12 +2279,11 @@ Slice::JavaCompatVisitor::writeDocCommentParam(Output& out, const OperationPtr&
}
Slice::GenCompat::GenCompat(const string& /*name*/, const string& base, const vector<string>& includePaths,
- const string& dir, bool tie, int warningLevel) :
+ const string& dir, bool tie) :
_base(base),
_includePaths(includePaths),
_dir(dir),
- _tie(tie),
- _warningLevel(warningLevel)
+ _tie(tie)
{
}
@@ -2296,47 +2294,47 @@ Slice::GenCompat::~GenCompat()
void
Slice::GenCompat::generate(const UnitPtr& p)
{
- JavaGenerator::validateMetaData(p, _warningLevel);
+ JavaGenerator::validateMetaData(p);
- OpsVisitor opsVisitor(_dir, _warningLevel);
+ OpsVisitor opsVisitor(_dir);
p->visit(&opsVisitor, false);
- PackageVisitor packageVisitor(_dir, _warningLevel);
+ PackageVisitor packageVisitor(_dir);
p->visit(&packageVisitor, false);
- TypesVisitor typesVisitor(_dir, _warningLevel);
+ TypesVisitor typesVisitor(_dir);
p->visit(&typesVisitor, false);
- CompactIdVisitor compactIdVisitor(_dir, _warningLevel);
+ CompactIdVisitor compactIdVisitor(_dir);
p->visit(&compactIdVisitor, false);
- HolderVisitor holderVisitor(_dir, _warningLevel);
+ HolderVisitor holderVisitor(_dir);
p->visit(&holderVisitor, false);
- HelperVisitor helperVisitor(_dir, _warningLevel);
+ HelperVisitor helperVisitor(_dir);
p->visit(&helperVisitor, false);
- ProxyVisitor proxyVisitor(_dir, _warningLevel);
+ ProxyVisitor proxyVisitor(_dir);
p->visit(&proxyVisitor, false);
- DispatcherVisitor dispatcherVisitor(_dir, _tie, _warningLevel);
+ DispatcherVisitor dispatcherVisitor(_dir, _tie);
p->visit(&dispatcherVisitor, false);
- AsyncVisitor asyncVisitor(_dir, _warningLevel);
+ AsyncVisitor asyncVisitor(_dir);
p->visit(&asyncVisitor, false);
}
void
Slice::GenCompat::generateImpl(const UnitPtr& p)
{
- ImplVisitor implVisitor(_dir, _warningLevel);
+ ImplVisitor implVisitor(_dir);
p->visit(&implVisitor, false);
}
void
Slice::GenCompat::generateImplTie(const UnitPtr& p)
{
- ImplTieVisitor implTieVisitor(_dir, _warningLevel);
+ ImplTieVisitor implTieVisitor(_dir);
p->visit(&implTieVisitor, false);
}
@@ -2395,8 +2393,8 @@ Slice::GenCompat::writeChecksumClass(const string& checksumClass, const string&
out << nl;
}
-Slice::GenCompat::OpsVisitor::OpsVisitor(const string& dir, int warningLevel) :
- JavaCompatVisitor(dir, warningLevel)
+Slice::GenCompat::OpsVisitor::OpsVisitor(const string& dir) :
+ JavaCompatVisitor(dir)
{
}
@@ -2530,8 +2528,8 @@ Slice::GenCompat::OpsVisitor::writeOperations(const ClassDefPtr& p, bool noCurre
close();
}
-Slice::GenCompat::PackageVisitor::PackageVisitor(const string& dir, int warningLevel) :
- JavaCompatVisitor(dir, warningLevel)
+Slice::GenCompat::PackageVisitor::PackageVisitor(const string& dir) :
+ JavaCompatVisitor(dir)
{
}
@@ -2555,8 +2553,8 @@ Slice::GenCompat::PackageVisitor::visitModuleStart(const ModulePtr& p)
return false;
}
-Slice::GenCompat::TypesVisitor::TypesVisitor(const string& dir, int warningLevel) :
- JavaCompatVisitor(dir, warningLevel)
+Slice::GenCompat::TypesVisitor::TypesVisitor(const string& dir) :
+ JavaCompatVisitor(dir)
{
}
@@ -3014,10 +3012,14 @@ Slice::GenCompat::TypesVisitor::visitClassDefEnd(const ClassDefPtr& p)
string serialVersionUID;
if(p->findMetaData("java:serialVersionUID", serialVersionUID))
{
+ const UnitPtr unit = p->unit();
+ const DefinitionContextPtr dc = unit->findDefinitionContext(p->file());
+ assert(dc);
+ bool emitWarnings = !dc->suppressWarning("invalid-metadata");
string::size_type pos = serialVersionUID.rfind(":") + 1;
if(pos == string::npos)
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
ostringstream os;
os << "ignoring invalid serialVersionUID for class `" << p->scoped() << "'; generating default value";
@@ -3033,7 +3035,7 @@ Slice::GenCompat::TypesVisitor::visitClassDefEnd(const ClassDefPtr& p)
{
if(!stringToInt64(serialVersionUID, v)) // conversion error
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
ostringstream os;
os << "ignoring invalid serialVersionUID for class `" << p->scoped()
@@ -3440,10 +3442,14 @@ Slice::GenCompat::TypesVisitor::visitExceptionEnd(const ExceptionPtr& p)
string serialVersionUID;
if(p->findMetaData("java:serialVersionUID", serialVersionUID))
{
+ const UnitPtr unit = p->unit();
+ const DefinitionContextPtr dc = unit->findDefinitionContext(p->file());
+ assert(dc);
+ bool emitWarnings = !dc->suppressWarning("invalid-metadata");
string::size_type pos = serialVersionUID.rfind(":") + 1;
if(pos == string::npos)
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
ostringstream os;
os << "ignoring invalid serialVersionUID for exception `" << p->scoped() << "'; generating default value";
@@ -3459,7 +3465,7 @@ Slice::GenCompat::TypesVisitor::visitExceptionEnd(const ExceptionPtr& p)
{
if(!stringToInt64(serialVersionUID, v)) // conversion error
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
ostringstream os;
os << "ignoring invalid serialVersionUID for exception `" << p->scoped()
@@ -3762,10 +3768,14 @@ Slice::GenCompat::TypesVisitor::visitStructEnd(const StructPtr& p)
string serialVersionUID;
if(p->findMetaData("java:serialVersionUID", serialVersionUID))
{
+ const UnitPtr unit = p->unit();
+ const DefinitionContextPtr dc = unit->findDefinitionContext(p->file());
+ assert(dc);
+ bool emitWarnings = !dc->suppressWarning("invalid-metadata");
string::size_type pos = serialVersionUID.rfind(":") + 1;
if(pos == string::npos)
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
ostringstream os;
os << "ignoring invalid serialVersionUID for struct `" << p->scoped() << "'; generating default value";
@@ -3781,7 +3791,7 @@ Slice::GenCompat::TypesVisitor::visitStructEnd(const StructPtr& p)
{
if(!stringToInt64(serialVersionUID, v)) // conversion error
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
ostringstream os;
os << "ignoring invalid serialVersionUID for struct `" << p->scoped()
@@ -4212,8 +4222,8 @@ Slice::GenCompat::TypesVisitor::validateMethod(const OperationList& ops, const s
return true;
}
-Slice::GenCompat::CompactIdVisitor::CompactIdVisitor(const string& dir, int warningLevel) :
- JavaCompatVisitor(dir, warningLevel)
+Slice::GenCompat::CompactIdVisitor::CompactIdVisitor(const string& dir) :
+ JavaCompatVisitor(dir)
{
}
@@ -4242,8 +4252,8 @@ Slice::GenCompat::CompactIdVisitor::visitClassDefStart(const ClassDefPtr& p)
return false;
}
-Slice::GenCompat::HolderVisitor::HolderVisitor(const string& dir, int warningLevel) :
- JavaCompatVisitor(dir, warningLevel)
+Slice::GenCompat::HolderVisitor::HolderVisitor(const string& dir) :
+ JavaCompatVisitor(dir)
{
}
@@ -4391,8 +4401,8 @@ Slice::GenCompat::HolderVisitor::writeHolder(const TypePtr& p)
close();
}
-Slice::GenCompat::HelperVisitor::HelperVisitor(const string& dir, int warningLevel) :
- JavaCompatVisitor(dir, warningLevel)
+Slice::GenCompat::HelperVisitor::HelperVisitor(const string& dir) :
+ JavaCompatVisitor(dir)
{
}
@@ -5324,8 +5334,8 @@ Slice::GenCompat::HelperVisitor::writeOperation(const ClassDefPtr& p, const stri
}
}
-Slice::GenCompat::ProxyVisitor::ProxyVisitor(const string& dir, int warningLevel) :
- JavaCompatVisitor(dir, warningLevel)
+Slice::GenCompat::ProxyVisitor::ProxyVisitor(const string& dir) :
+ JavaCompatVisitor(dir)
{
}
@@ -5644,8 +5654,8 @@ Slice::GenCompat::ProxyVisitor::visitOperation(const OperationPtr& p)
}
}
-Slice::GenCompat::DispatcherVisitor::DispatcherVisitor(const string& dir, bool tie, int warningLevel) :
- JavaCompatVisitor(dir, warningLevel),
+Slice::GenCompat::DispatcherVisitor::DispatcherVisitor(const string& dir, bool tie) :
+ JavaCompatVisitor(dir),
_tie(tie)
{
}
@@ -5843,10 +5853,14 @@ Slice::GenCompat::DispatcherVisitor::visitClassDefStart(const ClassDefPtr& p)
string serialVersionUID;
if(p->findMetaData("java:serialVersionUID", serialVersionUID))
{
+ const UnitPtr unit = p->unit();
+ const DefinitionContextPtr dc = unit->findDefinitionContext(p->file());
+ assert(dc);
+ bool emitWarnings = !dc->suppressWarning("invalid-metadata");
string::size_type pos = serialVersionUID.rfind(":") + 1;
if(pos == string::npos)
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
ostringstream os;
os << "ignoring invalid serialVersionUID for class `" << p->scoped() << "'; generating default value";
@@ -5862,7 +5876,7 @@ Slice::GenCompat::DispatcherVisitor::visitClassDefStart(const ClassDefPtr& p)
{
if(!stringToInt64(serialVersionUID, v)) // conversion error
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
ostringstream os;
os << "ignoring invalid serialVersionUID for class `" << p->scoped()
@@ -5887,8 +5901,8 @@ Slice::GenCompat::DispatcherVisitor::visitClassDefStart(const ClassDefPtr& p)
return false;
}
-Slice::GenCompat::BaseImplVisitor::BaseImplVisitor(const string& dir, int warningLevel) :
- JavaCompatVisitor(dir, warningLevel)
+Slice::GenCompat::BaseImplVisitor::BaseImplVisitor(const string& dir) :
+ JavaCompatVisitor(dir)
{
}
@@ -6152,8 +6166,8 @@ Slice::GenCompat::BaseImplVisitor::writeOperation(Output& out, const string& pac
}
}
-Slice::GenCompat::ImplVisitor::ImplVisitor(const string& dir, int warningLevel) :
- BaseImplVisitor(dir, warningLevel)
+Slice::GenCompat::ImplVisitor::ImplVisitor(const string& dir) :
+ BaseImplVisitor(dir)
{
}
@@ -6208,8 +6222,8 @@ Slice::GenCompat::ImplVisitor::visitClassDefStart(const ClassDefPtr& p)
return false;
}
-Slice::GenCompat::ImplTieVisitor::ImplTieVisitor(const string& dir, int warningLevel) :
- BaseImplVisitor(dir, warningLevel)
+Slice::GenCompat::ImplTieVisitor::ImplTieVisitor(const string& dir) :
+ BaseImplVisitor(dir)
{
}
@@ -6297,8 +6311,8 @@ Slice::GenCompat::ImplTieVisitor::visitClassDefStart(const ClassDefPtr& p)
return false;
}
-Slice::GenCompat::AsyncVisitor::AsyncVisitor(const string& dir, int warningLevel) :
- JavaCompatVisitor(dir, warningLevel)
+Slice::GenCompat::AsyncVisitor::AsyncVisitor(const string& dir) :
+ JavaCompatVisitor(dir)
{
}
diff --git a/cpp/src/slice2java/GenCompat.h b/cpp/src/slice2java/GenCompat.h
index 25d2d0b7091..5f8ba85aa9d 100644
--- a/cpp/src/slice2java/GenCompat.h
+++ b/cpp/src/slice2java/GenCompat.h
@@ -25,7 +25,7 @@ public:
protected:
- JavaCompatVisitor(const std::string&, int);
+ JavaCompatVisitor(const std::string&);
enum ParamDir { InParam, OutParam };
@@ -131,8 +131,7 @@ public:
const std::string&,
const std::vector<std::string>&,
const std::string&,
- bool,
- int);
+ bool);
~GenCompat();
void generate(const UnitPtr&);
@@ -147,13 +146,12 @@ private:
std::vector<std::string> _includePaths;
std::string _dir;
bool _tie;
- int _warningLevel;
class OpsVisitor : public JavaCompatVisitor
{
public:
- OpsVisitor(const std::string&, int);
+ OpsVisitor(const std::string&);
virtual bool visitClassDefStart(const ClassDefPtr&);
@@ -165,7 +163,7 @@ private:
{
public:
- PackageVisitor(const std::string&, int);
+ PackageVisitor(const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
};
@@ -174,7 +172,7 @@ private:
{
public:
- TypesVisitor(const std::string&, int);
+ TypesVisitor(const std::string&);
virtual bool visitClassDefStart(const ClassDefPtr&);
virtual void visitClassDefEnd(const ClassDefPtr&);
@@ -198,7 +196,7 @@ private:
{
public:
- CompactIdVisitor(const std::string&, int);
+ CompactIdVisitor(const std::string&);
virtual bool visitClassDefStart(const ClassDefPtr&);
};
@@ -207,7 +205,7 @@ private:
{
public:
- HolderVisitor(const std::string&, int);
+ HolderVisitor(const std::string&);
virtual bool visitClassDefStart(const ClassDefPtr&);
virtual bool visitStructStart(const StructPtr&);
@@ -224,7 +222,7 @@ private:
{
public:
- HelperVisitor(const std::string&, int);
+ HelperVisitor(const std::string&);
virtual bool visitClassDefStart(const ClassDefPtr&);
virtual void visitSequence(const SequencePtr&);
@@ -239,7 +237,7 @@ private:
{
public:
- ProxyVisitor(const std::string&, int);
+ ProxyVisitor(const std::string&);
virtual bool visitClassDefStart(const ClassDefPtr&);
virtual void visitClassDefEnd(const ClassDefPtr&);
@@ -250,7 +248,7 @@ private:
{
public:
- DispatcherVisitor(const std::string&, bool, int);
+ DispatcherVisitor(const std::string&, bool);
virtual bool visitClassDefStart(const ClassDefPtr&);
@@ -262,7 +260,7 @@ private:
{
public:
- BaseImplVisitor(const std::string&, int);
+ BaseImplVisitor(const std::string&);
protected:
@@ -288,7 +286,7 @@ private:
{
public:
- ImplVisitor(const std::string&, int);
+ ImplVisitor(const std::string&);
virtual bool visitClassDefStart(const ClassDefPtr&);
};
@@ -297,7 +295,7 @@ private:
{
public:
- ImplTieVisitor(const std::string&, int);
+ ImplTieVisitor(const std::string&);
virtual bool visitClassDefStart(const ClassDefPtr&);
};
@@ -306,7 +304,7 @@ private:
{
public:
- AsyncVisitor(const std::string&, int);
+ AsyncVisitor(const std::string&);
virtual void visitOperation(const OperationPtr&);
};
diff --git a/cpp/src/slice2java/Main.cpp b/cpp/src/slice2java/Main.cpp
index c14a467d3b7..a1ff63c6127 100644
--- a/cpp/src/slice2java/Main.cpp
+++ b/cpp/src/slice2java/Main.cpp
@@ -87,7 +87,6 @@ usage(const string& n)
" deprecated: use instead [[\"ice-prefix\"]] metadata.\n"
"--underscore Allow underscores in Slice identifiers\n"
" deprecated: use instead [[\"underscore\"]] metadata.\n"
- "--no-warn Disable all warnings.\n"
;
}
@@ -116,7 +115,6 @@ compile(const vector<string>& argv)
opts.addOpt("", "checksum", IceUtilInternal::Options::NeedArg);
opts.addOpt("", "meta", IceUtilInternal::Options::NeedArg, "", IceUtilInternal::Options::Repeat);
opts.addOpt("", "compat");
- opts.addOpt("", "no-warn");
bool validate = find(argv.begin(), argv.end(), "--validate") != argv.end();
vector<string>args;
@@ -195,8 +193,6 @@ compile(const vector<string>& argv)
bool compat = opts.isSet("compat");
- int warningLevel = opts.isSet("no-warn") ? 0 : 1;
-
if(args.empty())
{
consoleErr << argv[0] << ": error: no input file" << endl;
@@ -354,7 +350,7 @@ compile(const vector<string>& argv)
{
if(compat)
{
- GenCompat gen(argv[0], icecpp->getBaseName(), includePaths, output, tie, warningLevel);
+ GenCompat gen(argv[0], icecpp->getBaseName(), includePaths, output, tie);
gen.generate(p);
if(impl)
{
@@ -367,7 +363,7 @@ compile(const vector<string>& argv)
}
else
{
- Gen gen(argv[0], icecpp->getBaseName(), includePaths, output, warningLevel);
+ Gen gen(argv[0], icecpp->getBaseName(), includePaths, output);
gen.generate(p);
if(impl)
{
@@ -380,7 +376,7 @@ compile(const vector<string>& argv)
//
// Calculate checksums for the Slice definitions in the unit.
//
- ChecksumMap m = createChecksums(p, warningLevel);
+ ChecksumMap m = createChecksums(p);
copy(m.begin(), m.end(), inserter(checksums, checksums.begin()));
}
if(listGenerated)
diff --git a/cpp/src/slice2js/Gen.cpp b/cpp/src/slice2js/Gen.cpp
index 74297f80738..29c1c9f47dc 100644
--- a/cpp/src/slice2js/Gen.cpp
+++ b/cpp/src/slice2js/Gen.cpp
@@ -89,7 +89,7 @@ getDeprecateReason(const ContainedPtr& p1, const ContainedPtr& p2, const string&
}
-Slice::JsVisitor::JsVisitor(Output& out, int warningLevel) : ParserVisitor(warningLevel), _out(out)
+Slice::JsVisitor::JsVisitor(Output& out) : _out(out)
{
}
@@ -329,10 +329,9 @@ Slice::JsVisitor::writeDocComment(const ContainedPtr& p, const string& deprecate
_out << nl << " **/";
}
-Slice::Gen::Gen(const string& base, const vector<string>& includePaths, const string& dir, int warningLevel) :
+Slice::Gen::Gen(const string& base, const vector<string>& includePaths, const string& dir) :
_includePaths(includePaths),
- _useStdout(false),
- _warningLevel(warningLevel)
+ _useStdout(false)
{
_fileBase = base;
string::size_type pos = base.find_last_of("/\\");
@@ -362,12 +361,10 @@ Slice::Gen::Gen(const string& base, const vector<string>& includePaths, const st
printGeneratedHeader(_out, _fileBase + ".ice");
}
-Slice::Gen::Gen(const string& base, const vector<string>& includePaths, const string& dir, ostream& out,
- int warningLevel) :
+Slice::Gen::Gen(const string& base, const vector<string>& includePaths, const string& dir, ostream& out) :
_out(out),
_includePaths(includePaths),
- _useStdout(true),
- _warningLevel(warningLevel)
+ _useStdout(true)
{
_fileBase = base;
string::size_type pos = base.find_last_of("/\\");
@@ -418,17 +415,17 @@ Slice::Gen::generate(const UnitPtr& p)
_out.restoreIndent();
}
}
- RequireVisitor requireVisitor(_out, _includePaths, icejs, es6module, _warningLevel);
+ RequireVisitor requireVisitor(_out, _includePaths, icejs, es6module);
p->visit(&requireVisitor, false);
vector<string> seenModules = requireVisitor.writeRequires(p);
- TypesVisitor typesVisitor(_out, seenModules, icejs, _warningLevel);
+ TypesVisitor typesVisitor(_out, seenModules, icejs);
p->visit(&typesVisitor, false);
//
// Export the top-level modules.
//
- ExportVisitor exportVisitor(_out, icejs, es6module, _warningLevel);
+ ExportVisitor exportVisitor(_out, icejs, es6module);
p->visit(&exportVisitor, false);
if(!es6module)
@@ -481,8 +478,8 @@ Slice::Gen::printHeader()
}
Slice::Gen::RequireVisitor::RequireVisitor(IceUtilInternal::Output& out, vector<string> includePaths,
- bool icejs, bool es6modules, int warningLevel) :
- JsVisitor(out, warningLevel),
+ bool icejs, bool es6modules) :
+ JsVisitor(out),
_icejs(icejs),
_es6modules(es6modules),
_seenClass(false),
@@ -843,9 +840,8 @@ Slice::Gen::RequireVisitor::writeRequires(const UnitPtr& p)
return seenModules;
}
-Slice::Gen::TypesVisitor::TypesVisitor(IceUtilInternal::Output& out, vector<string> seenModules, bool icejs,
- int warningLevel) :
- JsVisitor(out, warningLevel),
+Slice::Gen::TypesVisitor::TypesVisitor(IceUtilInternal::Output& out, vector<string> seenModules, bool icejs) :
+ JsVisitor(out),
_seenModules(seenModules),
_icejs(icejs)
{
@@ -1849,8 +1845,8 @@ Slice::Gen::TypesVisitor::encodeTypeForOperation(const TypePtr& type)
return "???";
}
-Slice::Gen::ExportVisitor::ExportVisitor(IceUtilInternal::Output& out, bool icejs, bool es6modules, int warningLevel) :
- JsVisitor(out, warningLevel),
+Slice::Gen::ExportVisitor::ExportVisitor(IceUtilInternal::Output& out, bool icejs, bool es6modules) :
+ JsVisitor(out),
_icejs(icejs),
_es6modules(es6modules)
{
diff --git a/cpp/src/slice2js/Gen.h b/cpp/src/slice2js/Gen.h
index dc3b65f18ba..8196ba1b48b 100644
--- a/cpp/src/slice2js/Gen.h
+++ b/cpp/src/slice2js/Gen.h
@@ -19,7 +19,7 @@ class JsVisitor : public JsGenerator, public ParserVisitor
{
public:
- JsVisitor(::IceUtilInternal::Output&, int);
+ JsVisitor(::IceUtilInternal::Output&);
virtual ~JsVisitor();
protected:
@@ -44,14 +44,12 @@ public:
Gen(const std::string&,
const std::vector<std::string>&,
- const std::string&,
- int);
+ const std::string&);
Gen(const std::string&,
const std::vector<std::string>&,
const std::string&,
- std::ostream&,
- int);
+ std::ostream&);
~Gen();
@@ -66,7 +64,6 @@ private:
std::vector<std::string> _includePaths;
std::string _fileBase;
bool _useStdout;
- int _warningLevel;
void printHeader();
@@ -74,7 +71,7 @@ private:
{
public:
- RequireVisitor(::IceUtilInternal::Output&, std::vector<std::string>, bool, bool, int);
+ RequireVisitor(::IceUtilInternal::Output&, std::vector<std::string>, bool, bool);
virtual bool visitClassDefStart(const ClassDefPtr&);
virtual bool visitStructStart(const StructPtr&);
@@ -106,7 +103,7 @@ private:
{
public:
- TypesVisitor(::IceUtilInternal::Output&, std::vector< std::string>, bool, int);
+ TypesVisitor(::IceUtilInternal::Output&, std::vector< std::string>, bool);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -130,7 +127,7 @@ private:
{
public:
- ExportVisitor(::IceUtilInternal::Output&, bool, bool, int);
+ ExportVisitor(::IceUtilInternal::Output&, bool, bool);
virtual bool visitModuleStart(const ModulePtr&);
private:
diff --git a/cpp/src/slice2js/Main.cpp b/cpp/src/slice2js/Main.cpp
index 03f17331e59..a73738fcee9 100644
--- a/cpp/src/slice2js/Main.cpp
+++ b/cpp/src/slice2js/Main.cpp
@@ -80,7 +80,6 @@ usage(const string& n)
" deprecated: use instead [[\"ice-prefix\"]] metadata.\n"
"--underscore Allow underscores in Slice identifiers\n"
" deprecated: use instead [[\"underscore\"]] metadata.\n"
- "--no-warn Disable all warnings.\n"
;
}
@@ -104,7 +103,6 @@ compile(const vector<string>& argv)
opts.addOpt("d", "debug");
opts.addOpt("", "ice");
opts.addOpt("", "underscore");
- opts.addOpt("", "no-warn");
bool validate = find(argv.begin(), argv.end(), "--validate") != argv.end();
@@ -174,8 +172,6 @@ compile(const vector<string>& argv)
bool underscore = opts.isSet("underscore");
- int warningLevel = opts.isSet("no-warn") ? 0 : 1;
-
if(args.empty())
{
consoleErr << argv[0] << ": error: no input file" << endl;
@@ -339,12 +335,12 @@ compile(const vector<string>& argv)
{
if(useStdout)
{
- Gen gen(icecpp->getBaseName(), includePaths, output, cout, warningLevel);
+ Gen gen(icecpp->getBaseName(), includePaths, output, cout);
gen.generate(p);
}
else
{
- Gen gen(icecpp->getBaseName(), includePaths, output, warningLevel);
+ Gen gen(icecpp->getBaseName(), includePaths, output);
gen.generate(p);
}
}
diff --git a/cpp/src/slice2objc/Gen.cpp b/cpp/src/slice2objc/Gen.cpp
index cc7b718c7e3..80b5609417e 100644
--- a/cpp/src/slice2objc/Gen.cpp
+++ b/cpp/src/slice2objc/Gen.cpp
@@ -12,9 +12,9 @@
#include <limits>
#include <sys/stat.h>
#ifndef _WIN32
-#include <unistd.h>
+# include <unistd.h>
#else
-#include <direct.h>
+# include <direct.h>
#endif
#include <IceUtil/Iterator.h>
#include <IceUtil/UUID.h>
@@ -133,8 +133,7 @@ public:
}
-Slice::ObjCVisitor::ObjCVisitor(Output& h, Output& m, const string& dllExport, int warningLevel) :
- ParserVisitor(warningLevel),
+Slice::ObjCVisitor::ObjCVisitor(Output& h, Output& m, const string& dllExport) :
_H(h),
_M(m),
_dllExport(dllExport)
@@ -658,12 +657,11 @@ Slice::ObjCVisitor::getServerArgs(const OperationPtr& op) const
}
Slice::Gen::Gen(const string& name, const string& base, const string& include, const vector<string>& includePaths,
- const string& dir, const string& dllExport, int warningLevel) :
+ const string& dir, const string& dllExport) :
_base(base),
_include(include),
_includePaths(includePaths),
- _dllExport(dllExport),
- _warningLevel(warningLevel)
+ _dllExport(dllExport)
{
for(vector<string>::iterator p = _includePaths.begin(); p != _includePaths.end(); ++p)
{
@@ -734,7 +732,7 @@ Slice::Gen::operator!() const
void
Slice::Gen::generate(const UnitPtr& p)
{
- ObjCGenerator::validateMetaData(p, _warningLevel);
+ ObjCGenerator::validateMetaData(p);
//
// Give precedence to --dll-export command-line option
@@ -834,25 +832,25 @@ Slice::Gen::generate(const UnitPtr& p)
_M << nl << "# pragma clang diagnostic ignored \"-Wshadow-ivar\"";
_M << nl << "#endif";
- UnitVisitor unitVisitor(_H, _M, _dllExport, _warningLevel);
+ UnitVisitor unitVisitor(_H, _M, _dllExport);
p->visit(&unitVisitor, false);
- ObjectDeclVisitor objectDeclVisitor(_H, _M, _dllExport, _warningLevel);
+ ObjectDeclVisitor objectDeclVisitor(_H, _M, _dllExport);
p->visit(&objectDeclVisitor, false);
- ProxyDeclVisitor proxyDeclVisitor(_H, _M, _dllExport, _warningLevel);
+ ProxyDeclVisitor proxyDeclVisitor(_H, _M, _dllExport);
p->visit(&proxyDeclVisitor, false);
- TypesVisitor typesVisitor(_H, _M, _dllExport, _warningLevel);
+ TypesVisitor typesVisitor(_H, _M, _dllExport);
p->visit(&typesVisitor, false);
- ProxyVisitor proxyVisitor(_H, _M, _dllExport, _warningLevel);
+ ProxyVisitor proxyVisitor(_H, _M, _dllExport);
p->visit(&proxyVisitor, false);
- DelegateMVisitor delegateMVisitor(_H, _M, _dllExport, _warningLevel);
+ DelegateMVisitor delegateMVisitor(_H, _M, _dllExport);
p->visit(&delegateMVisitor, false);
- HelperVisitor HelperVisitor(_H, _M, _dllExport, _warningLevel);
+ HelperVisitor HelperVisitor(_H, _M, _dllExport);
p->visit(&HelperVisitor, false);
}
@@ -881,8 +879,8 @@ Slice::Gen::printHeader(Output& o)
o << "\n// Ice version " << ICE_STRING_VERSION;
}
-Slice::Gen::UnitVisitor::UnitVisitor(Output& H, Output& M, const string& dllExport, int warningLevel) :
- ObjCVisitor(H, M, dllExport, warningLevel)
+Slice::Gen::UnitVisitor::UnitVisitor(Output& H, Output& M, const string& dllExport) :
+ ObjCVisitor(H, M, dllExport)
{
}
@@ -923,8 +921,8 @@ Slice::Gen::UnitVisitor::visitUnitEnd(const UnitPtr& unit)
}
}
-Slice::Gen::ObjectDeclVisitor::ObjectDeclVisitor(Output& H, Output& M, const string& dllExport, int warningLevel)
- : ObjCVisitor(H, M, dllExport, warningLevel)
+Slice::Gen::ObjectDeclVisitor::ObjectDeclVisitor(Output& H, Output& M, const string& dllExport)
+ : ObjCVisitor(H, M, dllExport)
{
}
@@ -944,8 +942,8 @@ Slice::Gen::ObjectDeclVisitor::visitClassDecl(const ClassDeclPtr& p)
_H << nl << "@protocol " << fixName(p) << ";";
}
-Slice::Gen::ProxyDeclVisitor::ProxyDeclVisitor(Output& H, Output& M, const string& dllExport, int warningLevel)
- : ObjCVisitor(H, M, dllExport, warningLevel)
+Slice::Gen::ProxyDeclVisitor::ProxyDeclVisitor(Output& H, Output& M, const string& dllExport)
+ : ObjCVisitor(H, M, dllExport)
{
}
@@ -959,8 +957,8 @@ Slice::Gen::ProxyDeclVisitor::visitClassDecl(const ClassDeclPtr& p)
}
}
-Slice::Gen::TypesVisitor::TypesVisitor(Output& H, Output& M, const string& dllExport, int warningLevel)
- : ObjCVisitor(H, M, dllExport, warningLevel)
+Slice::Gen::TypesVisitor::TypesVisitor(Output& H, Output& M, const string& dllExport)
+ : ObjCVisitor(H, M, dllExport)
{
}
@@ -2221,8 +2219,8 @@ Slice::Gen::TypesVisitor::writeMemberUnmarshal(const DataMemberList& dataMembers
}
}
-Slice::Gen::ProxyVisitor::ProxyVisitor(Output& H, Output& M, const string& dllExport, int warningLevel)
- : ObjCVisitor(H, M, dllExport, warningLevel)
+Slice::Gen::ProxyVisitor::ProxyVisitor(Output& H, Output& M, const string& dllExport)
+ : ObjCVisitor(H, M, dllExport)
{
}
@@ -2340,8 +2338,8 @@ Slice::Gen::ProxyVisitor::visitOperation(const OperationPtr& p)
_H << " response" << responseExceptionSentDecl << deprecateSymbol << ";";
}
-Slice::Gen::HelperVisitor::HelperVisitor(Output& H, Output& M, const string& dllExport, int warningLevel) :
- ObjCVisitor(H, M, dllExport, warningLevel)
+Slice::Gen::HelperVisitor::HelperVisitor(Output& H, Output& M, const string& dllExport) :
+ ObjCVisitor(H, M, dllExport)
{
}
@@ -2643,8 +2641,8 @@ Slice::Gen::HelperVisitor::visitStructStart(const StructPtr& p)
return false;
}
-Slice::Gen::DelegateMVisitor::DelegateMVisitor(Output& H, Output& M, const string& dllExport, int warningLevel)
- : ObjCVisitor(H, M, dllExport, warningLevel)
+Slice::Gen::DelegateMVisitor::DelegateMVisitor(Output& H, Output& M, const string& dllExport)
+ : ObjCVisitor(H, M, dllExport)
{
}
diff --git a/cpp/src/slice2objc/Gen.h b/cpp/src/slice2objc/Gen.h
index 6b6c4c99b10..0c9ef639e7d 100644
--- a/cpp/src/slice2objc/Gen.h
+++ b/cpp/src/slice2objc/Gen.h
@@ -20,7 +20,7 @@ class ObjCVisitor : public ObjCGenerator, public ParserVisitor
{
public:
- ObjCVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ ObjCVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual ~ObjCVisitor();
protected:
@@ -54,8 +54,7 @@ public:
const std::string&,
const std::vector<std::string>&,
const std::string&,
- const std::string&,
- int);
+ const std::string&);
~Gen();
bool operator!() const; // Returns true if there was a constructor error
@@ -72,7 +71,6 @@ private:
std::string _include;
std::vector<std::string> _includePaths;
std::string _dllExport;
- int _warningLevel;
void printHeader(::IceUtilInternal::Output&);
@@ -80,7 +78,7 @@ private:
{
public:
- UnitVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ UnitVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitUnitEnd(const UnitPtr&);
@@ -94,7 +92,7 @@ private:
{
public:
- ObjectDeclVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ ObjectDeclVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual void visitClassDecl(const ClassDeclPtr&);
};
@@ -103,7 +101,7 @@ private:
{
public:
- ProxyDeclVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ ProxyDeclVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual void visitClassDecl(const ClassDeclPtr&);
};
@@ -112,7 +110,7 @@ private:
{
public:
- TypesVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ TypesVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
@@ -158,7 +156,7 @@ private:
{
public:
- ProxyVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ ProxyVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitClassDefStart(const ClassDefPtr&);
virtual void visitClassDefEnd(const ClassDefPtr&);
@@ -169,7 +167,7 @@ private:
{
public:
- HelperVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ HelperVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitClassDefStart(const ClassDefPtr&);
virtual void visitEnum(const EnumPtr&);
@@ -182,7 +180,7 @@ private:
{
public:
- DelegateMVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int);
+ DelegateMVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&);
virtual bool visitModuleStart(const ModulePtr&);
virtual void visitModuleEnd(const ModulePtr&);
diff --git a/cpp/src/slice2objc/Main.cpp b/cpp/src/slice2objc/Main.cpp
index 7877c072ca0..24ac096d92c 100644
--- a/cpp/src/slice2objc/Main.cpp
+++ b/cpp/src/slice2objc/Main.cpp
@@ -80,7 +80,6 @@ usage(const string& n)
" deprecated: use instead [[\"ice-prefix\"]] metadata.\n"
"--underscore Allow underscores in Slice identifiers\n"
" deprecated: use instead [[\"underscore\"]] metadata.\n"
- "--no-warn Disable all warnings.\n"
;
// Note: --case-sensitive is intentionally not shown here!
}
@@ -106,7 +105,6 @@ compile(const vector<string>& argv)
opts.addOpt("", "ice");
opts.addOpt("", "underscore");
opts.addOpt("", "case-sensitive");
- opts.addOpt("", "no-warn");
bool validate = find(argv.begin(), argv.end(), "--validate") != argv.end();
@@ -175,8 +173,6 @@ compile(const vector<string>& argv)
bool underscore = opts.isSet("underscore");
- int warningLevel = opts.isSet("no-warn") ? 0 : 1;
-
if(args.empty())
{
consoleErr << argv[0] << ": no input file" << endl;
@@ -289,8 +285,7 @@ compile(const vector<string>& argv)
{
try
{
- Gen gen(argv[0], icecpp->getBaseName(), include, includePaths, output, dllExport,
- warningLevel);
+ Gen gen(argv[0], icecpp->getBaseName(), include, includePaths, output, dllExport);
if(!gen)
{
u->destroy();
diff --git a/cpp/src/slice2objc/ObjCUtil.cpp b/cpp/src/slice2objc/ObjCUtil.cpp
index ad2787308bc..e86290b8db3 100644
--- a/cpp/src/slice2objc/ObjCUtil.cpp
+++ b/cpp/src/slice2objc/ObjCUtil.cpp
@@ -1043,20 +1043,15 @@ Slice::ObjCGenerator::writeOptParamMarshalUnmarshalCode(Output &out, const TypeP
}
void
-Slice::ObjCGenerator::validateMetaData(const UnitPtr& u, int warningLevel)
+Slice::ObjCGenerator::validateMetaData(const UnitPtr& u)
{
- MetaDataVisitor visitor(warningLevel);
+ MetaDataVisitor visitor;
u->visit(&visitor, true);
}
const string Slice::ObjCGenerator::MetaDataVisitor::_objcPrefix = "objc:";
const string Slice::ObjCGenerator::MetaDataVisitor::_msg = "ignoring invalid metadata";
-Slice::ObjCGenerator::MetaDataVisitor::MetaDataVisitor(int warningLevel) :
- ParserVisitor(warningLevel)
-{
-}
-
bool
Slice::ObjCGenerator::MetaDataVisitor::visitUnitStart(const UnitPtr& p)
{
@@ -1071,6 +1066,7 @@ Slice::ObjCGenerator::MetaDataVisitor::visitUnitStart(const UnitPtr& p)
DefinitionContextPtr dc = p->findDefinitionContext(file);
assert(dc);
StringList globalMetaData = dc->getMetaData();
+ bool emitWarnings = dc->suppressWarning("invalid-metadata");
int headerDir = 0;
int dllExport = 0;
for(StringList::const_iterator r = globalMetaData.begin(); r != globalMetaData.end();)
@@ -1086,7 +1082,7 @@ Slice::ObjCGenerator::MetaDataVisitor::visitUnitStart(const UnitPtr& p)
headerDir++;
if(headerDir > 1)
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
ostringstream ostr;
ostr << "ignoring invalid global metadata `" << s
@@ -1102,7 +1098,7 @@ Slice::ObjCGenerator::MetaDataVisitor::visitUnitStart(const UnitPtr& p)
dllExport++;
if(dllExport > 1)
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
ostringstream ostr;
ostr << "ignoring invalid global metadata `" << s
@@ -1113,7 +1109,7 @@ Slice::ObjCGenerator::MetaDataVisitor::visitUnitStart(const UnitPtr& p)
}
continue;
}
- if(warningLevel() > 0)
+ if(emitWarnings)
{
ostringstream ostr;
ostr << "ignoring invalid global metadata `" << s << "'";
diff --git a/cpp/src/slice2objc/ObjCUtil.h b/cpp/src/slice2objc/ObjCUtil.h
index 11e4cece024..cf5f1ee0b46 100644
--- a/cpp/src/slice2objc/ObjCUtil.h
+++ b/cpp/src/slice2objc/ObjCUtil.h
@@ -32,7 +32,7 @@ public:
//
// Validate all metadata in the unit with an "objc:" prefix.
//
- static void validateMetaData(const UnitPtr&, int);
+ static void validateMetaData(const UnitPtr&);
protected:
struct ModulePrefix
@@ -81,7 +81,6 @@ private:
class MetaDataVisitor : public ParserVisitor
{
public:
- MetaDataVisitor(int);
virtual bool visitUnitStart(const UnitPtr&);
virtual bool visitModuleStart(const ModulePtr&);
diff --git a/cpp/src/slice2php/Main.cpp b/cpp/src/slice2php/Main.cpp
index 787e83ac1b8..aace7d638ec 100644
--- a/cpp/src/slice2php/Main.cpp
+++ b/cpp/src/slice2php/Main.cpp
@@ -63,7 +63,7 @@ class CodeVisitor : public ParserVisitor
{
public:
- CodeVisitor(IceUtilInternal::Output&, bool, int);
+ CodeVisitor(IceUtilInternal::Output&, bool);
virtual void visitClassDecl(const ClassDeclPtr&);
virtual bool visitClassDefStart(const ClassDefPtr&);
@@ -141,8 +141,7 @@ private:
//
// CodeVisitor implementation.
//
-CodeVisitor::CodeVisitor(Output& out, bool ns, int warningLevel) :
- ParserVisitor(warningLevel),
+CodeVisitor::CodeVisitor(Output& out, bool ns) :
_out(out),
_ns(ns)
{
@@ -946,6 +945,11 @@ CodeVisitor::visitDictionary(const DictionaryPtr& p)
TypePtr keyType = p->keyType();
BuiltinPtr b = BuiltinPtr::dynamicCast(keyType);
+
+ const UnitPtr unit = p->unit();
+ const DefinitionContextPtr dc = unit->findDefinitionContext(p->file());
+ assert(dc);
+ bool emitWarnings = !dc->suppressWarning("invalid-metadata");
if(b)
{
switch(b->kind())
@@ -964,7 +968,7 @@ CodeVisitor::visitDictionary(const DictionaryPtr& p)
case Slice::Builtin::KindFloat:
case Slice::Builtin::KindDouble:
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
emitWarning(p->file(), p->line(), "dictionary key type not supported in PHP");
}
@@ -980,7 +984,7 @@ CodeVisitor::visitDictionary(const DictionaryPtr& p)
}
else if(!EnumPtr::dynamicCast(keyType))
{
- if(warningLevel() > 0)
+ if(emitWarnings)
{
emitWarning(p->file(), p->line(), "dictionary key type not supported in PHP");
}
@@ -1473,7 +1477,7 @@ CodeVisitor::collectExceptionMembers(const ExceptionPtr& p, MemberInfoList& allM
}
static void
-generate(const UnitPtr& un, bool all, bool checksum, bool ns, const vector<string>& includePaths, Output& out, int warningLevel)
+generate(const UnitPtr& un, bool all, bool checksum, bool ns, const vector<string>& includePaths, Output& out)
{
if(!all)
{
@@ -1504,12 +1508,12 @@ generate(const UnitPtr& un, bool all, bool checksum, bool ns, const vector<strin
}
}
- CodeVisitor codeVisitor(out, ns, warningLevel);
+ CodeVisitor codeVisitor(out, ns);
un->visit(&codeVisitor, false);
if(checksum)
{
- ChecksumMap checksums = createChecksums(un, warningLevel);
+ ChecksumMap checksums = createChecksums(un);
if(!checksums.empty())
{
out << sp;
@@ -1620,7 +1624,6 @@ usage(const string& n)
" deprecated: use instead [[\"ice-prefix\"]] metadata.\n"
"--underscore Allow underscores in Slice identifiers\n"
" deprecated: use instead [[\"underscore\"]] metadata.\n"
- "--no-warn Disable all warnings.\n"
;
}
@@ -1645,7 +1648,6 @@ compile(const vector<string>& argv)
opts.addOpt("", "all");
opts.addOpt("", "checksum");
opts.addOpt("n", "no-namespace");
- opts.addOpt("", "no-warn");
bool validate = find(argv.begin(), argv.end(), "--validate") != argv.end();
@@ -1717,8 +1719,6 @@ compile(const vector<string>& argv)
bool ns = !opts.isSet("no-namespace");
- int warningLevel = opts.isSet("no-warn") ? 0 : 1;
-
if(args.empty())
{
consoleErr << argv[0] << ": error: no input file" << endl;
@@ -1870,7 +1870,7 @@ compile(const vector<string>& argv)
//
// Generate the PHP mapping.
//
- generate(u, all, checksum, ns, includePaths, out, warningLevel);
+ generate(u, all, checksum, ns, includePaths, out);
out << "?>\n";
out.close();