diff options
author | Jose <jose@zeroc.com> | 2017-02-01 23:16:30 +0100 |
---|---|---|
committer | Jose <jose@zeroc.com> | 2017-02-01 23:16:30 +0100 |
commit | ca131951f8d81ea3da13277172a24234b5c848ea (patch) | |
tree | 28b8d9ad6a09f550ef43f3b24df8048da8e70d7d /cpp | |
parent | Added entries for support of try-with-resources/with statement in Java/Python (diff) | |
download | ice-ca131951f8d81ea3da13277172a24234b5c848ea.tar.bz2 ice-ca131951f8d81ea3da13277172a24234b5c848ea.tar.xz ice-ca131951f8d81ea3da13277172a24234b5c848ea.zip |
Add --no-warn option to Slice compilers
Diffstat (limited to 'cpp')
39 files changed, 773 insertions, 549 deletions
diff --git a/cpp/src/Slice/Checksum.cpp b/cpp/src/Slice/Checksum.cpp index 1c8a21511e8..887a350903f 100644 --- a/cpp/src/Slice/Checksum.cpp +++ b/cpp/src/Slice/Checksum.cpp @@ -21,7 +21,7 @@ class ChecksumVisitor : public ParserVisitor { public: - ChecksumVisitor(ChecksumMap&); + ChecksumVisitor(ChecksumMap&, int); virtual bool visitClassDefStart(const ClassDefPtr&); virtual bool visitExceptionStart(const ExceptionPtr&); @@ -41,7 +41,8 @@ private: } -Slice::ChecksumVisitor::ChecksumVisitor(ChecksumMap& m) : +Slice::ChecksumVisitor::ChecksumVisitor(ChecksumMap& m, int warningLevel) : + ParserVisitor(warningLevel), _map(m) { } @@ -445,7 +446,7 @@ Slice::createChecksums(const UnitPtr& u) { ChecksumMap result; - ChecksumVisitor visitor(result); + ChecksumVisitor visitor(result, 0); u->visit(&visitor, false); return result; diff --git a/cpp/src/Slice/JavaUtil.cpp b/cpp/src/Slice/JavaUtil.cpp index 7bb4ab6dcea..7c2f83fb20e 100644 --- a/cpp/src/Slice/JavaUtil.cpp +++ b/cpp/src/Slice/JavaUtil.cpp @@ -139,6 +139,10 @@ class MetaDataVisitor : public ParserVisitor { public: + MetaDataVisitor(int warningLevel) : ParserVisitor(warningLevel) + { + } + virtual bool visitUnitStart(const UnitPtr& p) { static const string prefix = "java:"; @@ -171,7 +175,10 @@ public: } else { - emitWarning(file, "", "ignoring invalid global metadata `" + s + "'"); + if(warningLevel() > 0) + { + emitWarning(file, "", "ignoring invalid global metadata `" + s + "'"); + } globalMetaData.remove(s); continue; } @@ -238,8 +245,11 @@ public: string s = *q++; if(s.find("java:type:", 0) == 0) { - emitWarning(p->file(), p->line(), "ignoring invalid metadata `" + s + - "' for operation with void return type"); + if(warningLevel() > 0) + { + emitWarning(p->file(), p->line(), "ignoring invalid metadata `" + s + + "' for operation with void return type"); + } metaData.remove(s); continue; } @@ -293,8 +303,11 @@ public: BuiltinPtr builtin = BuiltinPtr::dynamicCast(p->type()); if(!builtin || builtin->kind() != Builtin::KindByte) { - emitWarning(file, line, "ignoring invalid metadata `" + s + "': " + - "this metadata can only be used with a byte sequence"); + if(warningLevel() > 0) + { + emitWarning(file, line, "ignoring invalid metadata `" + s + "': " + + "this metadata can only be used with a byte sequence"); + } continue; } newMetaData.push_back(s); @@ -309,8 +322,11 @@ public: builtin->kind() != Builtin::KindInt && builtin->kind() != Builtin::KindLong && builtin->kind() != Builtin::KindFloat && builtin->kind() != Builtin::KindDouble)) { - emitWarning(file, line, "ignoring invalid metadata `" + s + "': " + - "this metadata can not be used with this type"); + if(warningLevel() > 0) + { + emitWarning(file, line, "ignoring invalid metadata `" + s + "': " + + "this metadata can not be used with this type"); + } continue; } newMetaData.push_back(s); @@ -415,7 +431,10 @@ private: continue; } - emitWarning(cont->file(), cont->line(), "ignoring invalid metadata `" + s + "'"); + if(warningLevel() > 0) + { + emitWarning(cont->file(), cont->line(), "ignoring invalid metadata `" + s + "'"); + } } else { @@ -449,7 +468,10 @@ private: assert(b); str = b->typeId(); } - emitWarning(file, line, "invalid metadata for " + str); + if(warningLevel() > 0) + { + emitWarning(file, line, "invalid metadata for " + str); + } } else if(i->find("java:buffer") == 0) { @@ -467,14 +489,21 @@ private: } } - emitWarning(file, line, "ignoring invalid metadata `" + *i + "'"); + + if(warningLevel() > 0) + { + emitWarning(file, line, "ignoring invalid metadata `" + *i + "'"); + } } else if(i->find("java:protobuf:") == 0 || i->find("java:serializable:") == 0) { // // Only valid in sequence definition which is checked in visitSequence // - emitWarning(file, line, "ignoring invalid metadata `" + *i + "'"); + if(warningLevel() > 0) + { + emitWarning(file, line, "ignoring invalid metadata `" + *i + "'"); + } } else if(i->find("delegate") == 0) { @@ -483,7 +512,7 @@ private: { newMetaData.push_back(*i); } - else + else if(warningLevel() > 0) { emitWarning(file, line, "ignoring invalid metadata `" + *i + "'"); } @@ -494,7 +523,7 @@ private: { newMetaData.push_back(*i); } - else + else if(warningLevel() > 0) { emitWarning(file, line, "ignoring invalid metadata `" + *i + "'"); } @@ -531,7 +560,10 @@ private: assert(b); str = b->typeId(); } - emitWarning(file, line, "invalid metadata for " + str); + if(warningLevel() > 0) + { + emitWarning(file, line, "invalid metadata for " + str); + } continue; } newMetaData.push_back(*i); @@ -3187,9 +3219,9 @@ Slice::JavaCompatGenerator::createOutput() } void -Slice::JavaCompatGenerator::validateMetaData(const UnitPtr& u) +Slice::JavaCompatGenerator::validateMetaData(const UnitPtr& u, int warningLevel) { - MetaDataVisitor visitor; + MetaDataVisitor visitor(warningLevel); u->visit(&visitor, true); } @@ -5498,8 +5530,8 @@ Slice::JavaGenerator::createOutput() } void -Slice::JavaGenerator::validateMetaData(const UnitPtr& u) +Slice::JavaGenerator::validateMetaData(const UnitPtr& u, int warningLevel) { - MetaDataVisitor visitor; + MetaDataVisitor visitor(warningLevel); u->visit(&visitor, true); } diff --git a/cpp/src/Slice/JavaUtil.h b/cpp/src/Slice/JavaUtil.h index fcc77d30f63..c16f78a3247 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&); + static void validateMetaData(const UnitPtr&, int); void close(); @@ -235,7 +235,7 @@ public: // // Validate all metadata in the unit with a "java:" prefix. // - static void validateMetaData(const UnitPtr&); + static void validateMetaData(const UnitPtr&, int); void close(); diff --git a/cpp/src/Slice/Parser.cpp b/cpp/src/Slice/Parser.cpp index f400cf90467..5db58db7ef9 100644 --- a/cpp/src/Slice/Parser.cpp +++ b/cpp/src/Slice/Parser.cpp @@ -122,6 +122,17 @@ Unit* unit; } +Slice::ParserVisitor::ParserVisitor(int warningLevel) : + _warningLevel(warningLevel) +{ +} + +int +Slice::ParserVisitor::warningLevel() +{ + return _warningLevel; +} + // ---------------------------------------------------------------------- // DefinitionContext // ---------------------------------------------------------------------- diff --git a/cpp/src/Slice/Parser.h b/cpp/src/Slice/Parser.h index 38be6b6c7bc..3f969dbf330 100644 --- a/cpp/src/Slice/Parser.h +++ b/cpp/src/Slice/Parser.h @@ -191,6 +191,8 @@ class ParserVisitor { public: + ParserVisitor(int warningLevel = 1); + virtual ~ParserVisitor() { } virtual bool visitUnitStart(const UnitPtr&) { return true; } virtual void visitUnitEnd(const UnitPtr&) { } @@ -210,6 +212,12 @@ public: virtual void visitDictionary(const DictionaryPtr&) { } virtual void visitEnum(const EnumPtr&) { } virtual void visitConst(const ConstPtr&) { } + + int warningLevel(); + +private: + + int _warningLevel; }; // ---------------------------------------------------------------------- diff --git a/cpp/src/Slice/Python.cpp b/cpp/src/Slice/Python.cpp index bc1da962d70..057fb22cca4 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&); + static void createModules(const UnitPtr&, const string&, const string&, int); virtual void visitModuleEnd(const ModulePtr&); private: - PackageVisitor(StringList&); + PackageVisitor(StringList&, int); enum ReadState { PreModules, InModules, InSubmodules }; @@ -128,16 +128,17 @@ private: const char* PackageVisitor::_moduleTag = "# Modules:"; const char* PackageVisitor::_submoduleTag = "# Submodules:"; -PackageVisitor::PackageVisitor(StringList& modules) : +PackageVisitor::PackageVisitor(StringList& modules, int warningLevel) : + ParserVisitor(warningLevel), _modules(modules) { } void -PackageVisitor::createModules(const UnitPtr& unit, const string& module, const string& dir) +PackageVisitor::createModules(const UnitPtr& unit, const string& module, const string& dir, int warningLevel) { StringList modules; - PackageVisitor v(modules); + PackageVisitor v(modules, warningLevel); unit->visit(&v, false); for(StringList::iterator p = modules.begin(); p != modules.end(); ++p) @@ -403,6 +404,7 @@ 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" ; } @@ -430,6 +432,7 @@ 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 @@ -500,6 +503,8 @@ 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; @@ -665,7 +670,7 @@ Slice::Python::compile(const vector<string>& argv) // // Generate Python code. // - generate(u, all, checksum, includePaths, out); + generate(u, all, checksum, includePaths, out, warningLevel); out.close(); } @@ -675,7 +680,7 @@ Slice::Python::compile(const vector<string>& argv) // if(!noPackage) { - PackageVisitor::createModules(u, prefix + base + "_ice", output); + PackageVisitor::createModules(u, prefix + base + "_ice", output, warningLevel); } } catch(const Slice::FileException& ex) diff --git a/cpp/src/Slice/PythonUtil.cpp b/cpp/src/Slice/PythonUtil.cpp index 8373daabb4f..c3e98bd1627 100644 --- a/cpp/src/Slice/PythonUtil.cpp +++ b/cpp/src/Slice/PythonUtil.cpp @@ -50,6 +50,8 @@ class MetaDataVisitor : public ParserVisitor { public: + MetaDataVisitor(int); + virtual bool visitUnitStart(const UnitPtr&); virtual bool visitModuleStart(const ModulePtr&); virtual void visitClassDecl(const ClassDeclPtr&); @@ -91,7 +93,7 @@ class ModuleVisitor : public ParserVisitor { public: - ModuleVisitor(Output&, set<string>&); + ModuleVisitor(Output&, set<string>&, int); virtual bool visitModuleStart(const ModulePtr&); @@ -108,7 +110,7 @@ class CodeVisitor : public ParserVisitor { public: - CodeVisitor(IceUtilInternal::Output&, set<string>&); + CodeVisitor(IceUtilInternal::Output&, set<string>&, int); virtual bool visitModuleStart(const ModulePtr&); virtual void visitModuleEnd(const ModulePtr&); @@ -291,7 +293,8 @@ getDictLookup(const ContainedPtr& cont, const string& suffix = "", const string& // // ModuleVisitor implementation. // -Slice::Python::ModuleVisitor::ModuleVisitor(Output& out, set<string>& history) : +Slice::Python::ModuleVisitor::ModuleVisitor(Output& out, set<string>& history, int warningLevel) : + ParserVisitor(warningLevel), _out(out), _history(history) { } @@ -341,8 +344,10 @@ Slice::Python::ModuleVisitor::visitModuleStart(const ModulePtr& p) // // CodeVisitor implementation. // -Slice::Python::CodeVisitor::CodeVisitor(Output& out, set<string>& moduleHistory) : - _out(out), _moduleHistory(moduleHistory) +Slice::Python::CodeVisitor::CodeVisitor(Output& out, set<string>& moduleHistory, int warningLevel) : + ParserVisitor(warningLevel), + _out(out), + _moduleHistory(moduleHistory) { } @@ -2830,9 +2835,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) + Output& out, int warningLevel) { - Slice::Python::MetaDataVisitor visitor; + Slice::Python::MetaDataVisitor visitor(warningLevel); un->visit(&visitor, false); out << nl << "from sys import version_info as _version_info_"; @@ -2857,10 +2862,10 @@ Slice::Python::generate(const UnitPtr& un, bool all, bool checksum, const vector set<string> moduleHistory; - ModuleVisitor moduleVisitor(out, moduleHistory); + ModuleVisitor moduleVisitor(out, moduleHistory, warningLevel); un->visit(&moduleVisitor, true); - CodeVisitor codeVisitor(out, moduleHistory); + CodeVisitor codeVisitor(out, moduleHistory, warningLevel); un->visit(&codeVisitor, false); if(checksum) @@ -2981,6 +2986,11 @@ Slice::Python::printHeader(IceUtilInternal::Output& out) out << "#\n"; } +Slice::Python::MetaDataVisitor::MetaDataVisitor(int warningLevel) : + ParserVisitor(warningLevel) +{ +} + bool Slice::Python::MetaDataVisitor::visitUnitStart(const UnitPtr& p) { @@ -3007,7 +3017,11 @@ Slice::Python::MetaDataVisitor::visitUnitStart(const UnitPtr& p) { continue; } - emitWarning(file, "", "ignoring invalid global metadata `" + s + "'"); + + if(warningLevel() > 0) + { + emitWarning(file, "", "ignoring invalid global metadata `" + s + "'"); + } globalMetaData.remove(s); } } @@ -3092,8 +3106,11 @@ Slice::Python::MetaDataVisitor::visitSequence(const SequencePtr& p) BuiltinPtr builtin = BuiltinPtr::dynamicCast(p->type()); if(!builtin || builtin->kind() != Builtin::KindByte) { - emitWarning(file, line, "ignoring invalid metadata `" + s + ": " + - "`protobuf' encoding must be a byte sequence"); + if(warningLevel() > 0) + { + emitWarning(file, line, "ignoring invalid metadata `" + s + ": " + + "`protobuf' encoding must be a byte sequence"); + } } else { @@ -3149,7 +3166,10 @@ Slice::Python::MetaDataVisitor::validateSequence(const string& file, const strin } } } - emitWarning(file, line, "ignoring invalid metadata `" + s + "'"); + if(warningLevel() > 0) + { + emitWarning(file, line, "ignoring invalid metadata `" + s + "'"); + } newMetaData.remove(s); } } diff --git a/cpp/src/Slice/PythonUtil.h b/cpp/src/Slice/PythonUtil.h index 9d48b3d3871..161d3bdb148 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&); +void generate(const Slice::UnitPtr&, bool, bool, const std::vector<std::string>&, IceUtilInternal::Output&, int); // // Convert a scoped name into a Python name. diff --git a/cpp/src/Slice/Ruby.cpp b/cpp/src/Slice/Ruby.cpp index 7861bcb8c0b..7bd4dd07d17 100644 --- a/cpp/src/Slice/Ruby.cpp +++ b/cpp/src/Slice/Ruby.cpp @@ -81,6 +81,7 @@ 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" ; } @@ -105,6 +106,7 @@ Slice::Ruby::compile(const vector<string>& argv) opts.addOpt("", "underscore"); opts.addOpt("", "all"); opts.addOpt("", "checksum"); + opts.addOpt("", "no-warn"); vector<string> args; try @@ -169,6 +171,8 @@ 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; @@ -311,7 +315,7 @@ Slice::Ruby::compile(const vector<string>& argv) // // Generate the Ruby mapping. // - generate(u, all, checksum, includePaths, out); + generate(u, all, checksum, includePaths, out, warningLevel); out.close(); } diff --git a/cpp/src/Slice/RubyUtil.cpp b/cpp/src/Slice/RubyUtil.cpp index 9c1a32d8e77..f0cbcdc7fb1 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&); + CodeVisitor(IceUtilInternal::Output&, int); virtual bool visitModuleStart(const ModulePtr&); virtual void visitModuleEnd(const ModulePtr&); @@ -184,7 +184,8 @@ splitScopedName(const string& scoped) // // CodeVisitor implementation. // -Slice::Ruby::CodeVisitor::CodeVisitor(Output& out) : +Slice::Ruby::CodeVisitor::CodeVisitor(Output& out, int warningLevel) : + ParserVisitor(warningLevel), _out(out) { } @@ -1445,7 +1446,8 @@ 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) +Slice::Ruby::generate(const UnitPtr& un, bool all, bool checksum, const vector<string>& includePaths, Output& out, + int warningLevel) { out << nl << "require 'Ice'"; @@ -1465,7 +1467,7 @@ Slice::Ruby::generate(const UnitPtr& un, bool all, bool checksum, const vector<s } } - CodeVisitor codeVisitor(out); + CodeVisitor codeVisitor(out, warningLevel); un->visit(&codeVisitor, false); if(checksum) diff --git a/cpp/src/Slice/RubyUtil.h b/cpp/src/Slice/RubyUtil.h index e67ecd1b623..387cbc67073 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&); +void generate(const Slice::UnitPtr&, bool, bool, const std::vector<std::string>&, IceUtilInternal::Output&, int); // // 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 00bd746812d..77624f6cdfa 100644 --- a/cpp/src/slice2confluence/Gen.cpp +++ b/cpp/src/slice2confluence/Gen.cpp @@ -39,7 +39,8 @@ 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) + const string& searchAction, unsigned indexCount, unsigned warnSummary, const vector<string>& sortOrder, + int warningLevel) { unit->mergeModules(); @@ -68,19 +69,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); + FileVisitor tv(files, warningLevel); unit->visit(&tv, false); // // Generate the start page. // - StartPageVisitor spv(files); + StartPageVisitor spv(files, warningLevel); unit->visit(&spv, false); // // Generate the table of contents. // - TOCVisitor tocv(files, indexHeader, indexFooter); + TOCVisitor tocv(files, indexHeader, indexFooter, warningLevel); unit->visit(&tocv, false); tocv.generate(); @@ -88,7 +89,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); + PageVisitor v(files, warningLevel); unit->visit(&v, false); } @@ -1953,8 +1954,9 @@ Slice::StartPageGenerator::printHeaderFooter() // Do nothing } -Slice::FileVisitor::FileVisitor(Files& files) - : _files(files) +Slice::FileVisitor::FileVisitor(Files& files, int warningLevel) : + ParserVisitor(warningLevel), + _files(files) { } @@ -2016,8 +2018,9 @@ Slice::FileVisitor::visitEnum(const EnumPtr& e) _files.insert(e->file()); } -Slice::StartPageVisitor::StartPageVisitor(const Files& files) - : _spg(files) +Slice::StartPageVisitor::StartPageVisitor(const Files& files, int warningLevel) : + ParserVisitor(warningLevel), + _spg(files) { } @@ -2173,8 +2176,9 @@ TOCGenerator::writeEntry(const ContainedPtr& c) end(); } -TOCVisitor::TOCVisitor(const Files& files, const string& header, const string& footer) - : _tg(files, header, footer) +TOCVisitor::TOCVisitor(const Files& files, const string& header, const string& footer, int warningLevel) : + ParserVisitor(warningLevel), + _tg(files, header, footer) { } @@ -3263,8 +3267,9 @@ Slice::EnumGenerator::generate(const EnumPtr& e) assert(_out.currIndent() == indent); } -Slice::PageVisitor::PageVisitor(const Files& files) - : _files(files) +Slice::PageVisitor::PageVisitor(const Files& files, int warningLevel) : + ParserVisitor(warningLevel), + _files(files) { } diff --git a/cpp/src/slice2confluence/Gen.h b/cpp/src/slice2confluence/Gen.h index bc10790604b..587e28c7d1e 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>()); + unsigned, unsigned, const ::std::vector<std::string>& = ::std::vector<std::string>(), int = 1); typedef ::std::set< ::std::string> Files; @@ -165,7 +165,7 @@ class FileVisitor : private ::IceUtil::noncopyable, public ParserVisitor { public: - FileVisitor(Files&); + FileVisitor(Files&, int); 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&); + StartPageVisitor(const Files&, int); 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&); + TOCVisitor(const Files&, const ::std::string&, const ::std::string&, int); 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&); + PageVisitor(const Files&, int); 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 8eeca1c303b..38c7d5e2319 100644 --- a/cpp/src/slice2confluence/Main.cpp +++ b/cpp/src/slice2confluence/Main.cpp @@ -108,6 +108,7 @@ 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" ; } @@ -136,6 +137,7 @@ 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; @@ -248,6 +250,8 @@ 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; @@ -318,7 +322,7 @@ compile(const vector<string>& argv) try { Slice::generate(p, output, header, footer, indexHeader, indexFooter, imageDir, logoURL, - searchAction, indexCount, summaryCount, sort_order); + searchAction, indexCount, summaryCount, sort_order, warningLevel); } catch(const Slice::FileException& ex) { diff --git a/cpp/src/slice2cpp/Gen.cpp b/cpp/src/slice2cpp/Gen.cpp index d227ef1e88a..df72af69bc0 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) : + bool implCpp98, bool implCpp11, bool checksum, bool ice, int warningLevel) : _base(base), _headerExtension(headerExtension), _implHeaderExtension(headerExtension), @@ -390,7 +390,8 @@ Slice::Gen::Gen(const string& base, const string& headerExtension, const string& _implCpp98(implCpp98), _implCpp11(implCpp11), _checksum(checksum), - _ice(ice) + _ice(ice), + _warningLevel(warningLevel) { for(vector<string>::iterator p = _includePaths.begin(); p != _includePaths.end(); ++p) { @@ -573,7 +574,7 @@ Slice::Gen::generate(const UnitPtr& p) H << "\n#define __" << s << "__"; H << '\n'; - validateMetaData(p); + validateMetaData(p, _warningLevel); writeExtraHeaders(C); @@ -727,27 +728,27 @@ Slice::Gen::generate(const UnitPtr& p) C << nl << "#ifdef ICE_CPP11_MAPPING // C++11 mapping"; C.restoreIndent(); { - normalizeMetaData(p, true); + normalizeMetaData(p, true, _warningLevel); - Cpp11DeclVisitor declVisitor(H, C, _dllExport); + Cpp11DeclVisitor declVisitor(H, C, _dllExport, _warningLevel); p->visit(&declVisitor, false); - Cpp11TypesVisitor typesVisitor(H, C, _dllExport); + Cpp11TypesVisitor typesVisitor(H, C, _dllExport, _warningLevel); p->visit(&typesVisitor, false); - Cpp11LocalObjectVisitor localObjectVisitor(H, C, _dllExport); + Cpp11LocalObjectVisitor localObjectVisitor(H, C, _dllExport, _warningLevel); p->visit(&localObjectVisitor, false); - Cpp11InterfaceVisitor interfaceVisitor(H, C, _dllExport); + Cpp11InterfaceVisitor interfaceVisitor(H, C, _dllExport, _warningLevel); p->visit(&interfaceVisitor, false); - Cpp11ValueVisitor valueVisitor(H, C, _dllExport); + Cpp11ValueVisitor valueVisitor(H, C, _dllExport, _warningLevel); p->visit(&valueVisitor, false); - Cpp11ProxyVisitor proxyVisitor(H, C, _dllExport); + Cpp11ProxyVisitor proxyVisitor(H, C, _dllExport, _warningLevel); p->visit(&proxyVisitor, false); - Cpp11StreamVisitor streamVisitor(H, C, _dllExport); + Cpp11StreamVisitor streamVisitor(H, C, _dllExport, _warningLevel); p->visit(&streamVisitor, false); if(_implCpp11) @@ -768,11 +769,11 @@ Slice::Gen::generate(const UnitPtr& p) } implC << _base << "I." << _implHeaderExtension << ">"; - Cpp11ImplVisitor implVisitor(implH, implC, _dllExport); + Cpp11ImplVisitor implVisitor(implH, implC, _dllExport, _warningLevel); p->visit(&implVisitor, false); } - Cpp11CompatibilityVisitor compatibilityVisitor(H, C, _dllExport); + Cpp11CompatibilityVisitor compatibilityVisitor(H, C, _dllExport, _warningLevel); p->visit(&compatibilityVisitor, false); generateChecksumMap(p); @@ -787,21 +788,21 @@ Slice::Gen::generate(const UnitPtr& p) C << nl << "#else // C++98 mapping"; C.restoreIndent(); { - normalizeMetaData(p, false); + normalizeMetaData(p, false, _warningLevel); - ProxyDeclVisitor proxyDeclVisitor(H, C, _dllExport); + ProxyDeclVisitor proxyDeclVisitor(H, C, _dllExport, _warningLevel); p->visit(&proxyDeclVisitor, false); - ObjectDeclVisitor objectDeclVisitor(H, C, _dllExport); + ObjectDeclVisitor objectDeclVisitor(H, C, _dllExport, _warningLevel); p->visit(&objectDeclVisitor, false); - TypesVisitor typesVisitor(H, C, _dllExport); + TypesVisitor typesVisitor(H, C, _dllExport, _warningLevel); p->visit(&typesVisitor, false); - AsyncVisitor asyncVisitor(H, C, _dllExport); + AsyncVisitor asyncVisitor(H, C, _dllExport, _warningLevel); p->visit(&asyncVisitor, false); - AsyncImplVisitor asyncImplVisitor(H, C, _dllExport); + AsyncImplVisitor asyncImplVisitor(H, C, _dllExport, _warningLevel); p->visit(&asyncImplVisitor, false); // @@ -810,16 +811,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); + AsyncCallbackVisitor asyncCallbackVisitor(H, C, _dllExport, _warningLevel); p->visit(&asyncCallbackVisitor, false); - ProxyVisitor proxyVisitor(H, C, _dllExport); + ProxyVisitor proxyVisitor(H, C, _dllExport, _warningLevel); p->visit(&proxyVisitor, false); - ObjectVisitor objectVisitor(H, C, _dllExport); + ObjectVisitor objectVisitor(H, C, _dllExport, _warningLevel); p->visit(&objectVisitor, false); - StreamVisitor streamVisitor(H, C, _dllExport); + StreamVisitor streamVisitor(H, C, _dllExport, _warningLevel); p->visit(&streamVisitor, false); // @@ -827,7 +828,7 @@ Slice::Gen::generate(const UnitPtr& p) // definition, because completed calls the begin_ method in the // proxy. // - AsyncCallbackTemplateVisitor asyncCallbackTemplateVisitor(H, C, _dllExport); + AsyncCallbackTemplateVisitor asyncCallbackTemplateVisitor(H, C, _dllExport, _warningLevel); p->visit(&asyncCallbackTemplateVisitor, false); if(_implCpp98) @@ -848,7 +849,7 @@ Slice::Gen::generate(const UnitPtr& p) } implC << _base << "I." << _implHeaderExtension << ">"; - ImplVisitor implVisitor(implH, implC, _dllExport); + ImplVisitor implVisitor(implH, implC, _dllExport, _warningLevel); p->visit(&implVisitor, false); } @@ -902,7 +903,8 @@ Slice::Gen::writeExtraHeaders(IceUtilInternal::Output& out) } } -Slice::Gen::TypesVisitor::TypesVisitor(Output& h, Output& c, const string& dllExport) : +Slice::Gen::TypesVisitor::TypesVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) : + ParserVisitor(warningLevel), H(h), C(c), _dllExport(dllExport), _doneStaticSymbol(false), _useWstring(false) { } @@ -1536,7 +1538,8 @@ Slice::Gen::TypesVisitor::emitUpcall(const ExceptionPtr& base, const string& cal << call; } -Slice::Gen::ProxyDeclVisitor::ProxyDeclVisitor(Output& h, Output&, const string& dllExport) : +Slice::Gen::ProxyDeclVisitor::ProxyDeclVisitor(Output& h, Output&, const string& dllExport, int warningLevel) : + ParserVisitor(warningLevel), H(h), _dllExport(dllExport) { } @@ -1603,8 +1606,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) : - H(h), C(c), _dllExport(dllExport), _dllClassExport(toDllClassExport(dllExport)), +Slice::Gen::ProxyVisitor::ProxyVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) : + ParserVisitor(warningLevel), H(h), C(c), _dllExport(dllExport), _dllClassExport(toDllClassExport(dllExport)), _dllMemberExport(toDllMemberExport(dllExport)), _useWstring(false) { } @@ -2153,7 +2156,8 @@ Slice::Gen::ProxyVisitor::visitOperation(const OperationPtr& p) } } -Slice::Gen::ObjectDeclVisitor::ObjectDeclVisitor(Output& h, Output& c, const string& dllExport) : +Slice::Gen::ObjectDeclVisitor::ObjectDeclVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) : + ParserVisitor(warningLevel), H(h), C(c), _dllExport(dllExport) { } @@ -2222,7 +2226,8 @@ Slice::Gen::ObjectDeclVisitor::visitOperation(const OperationPtr& p) } } -Slice::Gen::ObjectVisitor::ObjectVisitor(Output& h, Output& c, const string& dllExport) : +Slice::Gen::ObjectVisitor::ObjectVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) : + ParserVisitor(warningLevel), H(h), C(c), _dllExport(dllExport), _doneStaticSymbol(false), _useWstring(false) { } @@ -3382,7 +3387,8 @@ 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) : +Slice::Gen::AsyncCallbackVisitor::AsyncCallbackVisitor(Output& h, Output&, const string& dllExport, int warningLevel) : + ParserVisitor(warningLevel), H(h), _dllExport(dllExport), _useWstring(false) { } @@ -3441,8 +3447,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) - : H(h), _dllExport(dllExport), _useWstring(false) +Slice::Gen::AsyncCallbackTemplateVisitor::AsyncCallbackTemplateVisitor(Output& h, Output&, const string& dllExport, int warningLevel) + : ParserVisitor(warningLevel), H(h), _dllExport(dllExport), _useWstring(false) { } @@ -3745,8 +3751,8 @@ Slice::Gen::AsyncCallbackTemplateVisitor::generateOperation(const OperationPtr& } } -Slice::Gen::ImplVisitor::ImplVisitor(Output& h, Output& c, const string& dllExport) : - H(h), C(c), _dllExport(dllExport), _useWstring(false) +Slice::Gen::ImplVisitor::ImplVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) : + ParserVisitor(warningLevel), H(h), C(c), _dllExport(dllExport), _useWstring(false) { } @@ -4037,8 +4043,8 @@ Slice::Gen::ImplVisitor::visitClassDefStart(const ClassDefPtr& p) return true; } -Slice::Gen::AsyncVisitor::AsyncVisitor(Output& h, Output& c, const string& dllExport) : - H(h), C(c), _dllExport(dllExport), _useWstring(false) +Slice::Gen::AsyncVisitor::AsyncVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) : + ParserVisitor(warningLevel), H(h), C(c), _dllExport(dllExport), _useWstring(false) { } @@ -4172,8 +4178,8 @@ Slice::Gen::AsyncVisitor::visitOperation(const OperationPtr& p) } } -Slice::Gen::AsyncImplVisitor::AsyncImplVisitor(Output& h, Output& c, const string& dllExport) : - H(h), C(c), _dllExport(dllExport), _useWstring(false) +Slice::Gen::AsyncImplVisitor::AsyncImplVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) : + ParserVisitor(warningLevel), H(h), C(c), _dllExport(dllExport), _useWstring(false) { } @@ -4337,7 +4343,8 @@ Slice::Gen::AsyncImplVisitor::visitOperation(const OperationPtr& p) C << eb; } -Slice::Gen::StreamVisitor::StreamVisitor(Output& h, Output& c, const string& dllExport) : +Slice::Gen::StreamVisitor::StreamVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) : + ParserVisitor(warningLevel), H(h), C(c), _dllExport(dllExport) @@ -4468,12 +4475,16 @@ Slice::Gen::StreamVisitor::visitEnum(const EnumPtr& p) } void -Slice::Gen::validateMetaData(const UnitPtr& u) +Slice::Gen::validateMetaData(const UnitPtr& u, int warningLevel) { - MetaDataVisitor visitor; + MetaDataVisitor visitor(warningLevel); u->visit(&visitor, false); } +Slice::Gen::MetaDataVisitor::MetaDataVisitor(int warningLevel) : ParserVisitor(warningLevel) +{ +} + bool Slice::Gen::MetaDataVisitor::visitUnitStart(const UnitPtr& p) { @@ -4514,10 +4525,13 @@ Slice::Gen::MetaDataVisitor::visitUnitStart(const UnitPtr& p) headerExtension++; if(headerExtension > 1) { - ostringstream ostr; - ostr << "ignoring invalid global metadata `" << s - << "': directive can appear only once per file"; - emitWarning(file, -1, ostr.str()); + if(warningLevel() > 0) + { + ostringstream ostr; + ostr << "ignoring invalid global metadata `" << s + << "': directive can appear only once per file"; + emitWarning(file, -1, ostr.str()); + } } else { @@ -4530,10 +4544,13 @@ Slice::Gen::MetaDataVisitor::visitUnitStart(const UnitPtr& p) dllExport++; if(dllExport > 1) { - ostringstream ostr; - ostr << "ignoring invalid global metadata `" << s - << "': directive can appear only once per file"; - emitWarning(file, -1, ostr.str()); + if(warningLevel() > 0) + { + ostringstream ostr; + ostr << "ignoring invalid global metadata `" << s + << "': directive can appear only once per file"; + emitWarning(file, -1, ostr.str()); + } } else { @@ -4542,9 +4559,12 @@ Slice::Gen::MetaDataVisitor::visitUnitStart(const UnitPtr& p) continue; } - ostringstream ostr; - ostr << "ignoring invalid global metadata `" << s << "'"; - emitWarning(file, -1, ostr.str()); + if(warningLevel() > 0) + { + ostringstream ostr; + ostr << "ignoring invalid global metadata `" << s << "'"; + emitWarning(file, -1, ostr.str()); + } } } @@ -4622,7 +4642,10 @@ Slice::Gen::MetaDataVisitor::visitOperation(const OperationPtr& p) if(!cl->isLocal() && p->hasMetaData("cpp:noexcept")) { - emitWarning(p->file(), p->line(), "ignoring metadata `cpp:noexcept' for non local interface"); + if(warningLevel() > 0) + { + emitWarning(p->file(), p->line(), "ignoring metadata `cpp:noexcept' for non local interface"); + } metaData.remove("cpp:noexcept"); } @@ -4634,9 +4657,11 @@ Slice::Gen::MetaDataVisitor::visitOperation(const OperationPtr& p) if(q->find("cpp:type:") == 0 || q->find("cpp:view-type:") == 0 || q->find("cpp:range") == 0 || (*q) == "cpp:array") { - emitWarning(p->file(), p->line(), "ignoring invalid metadata `" + *q + - "' for operation with void return type"); - + if(warningLevel() > 0) + { + emitWarning(p->file(), p->line(), "ignoring invalid metadata `" + *q + + "' for operation with void return type"); + } metaData.remove(*q); continue; } @@ -4802,7 +4827,11 @@ Slice::Gen::MetaDataVisitor::validate(const SyntaxTreeBasePtr& cont, const Strin continue; } } - emitWarning(file, line, "ignoring invalid metadata `" + s + "'"); + + if(warningLevel() > 0) + { + emitWarning(file, line, "ignoring invalid metadata `" + s + "'"); + } continue; } @@ -4814,7 +4843,11 @@ Slice::Gen::MetaDataVisitor::validate(const SyntaxTreeBasePtr& cont, const Strin newMetaData.push_back(s); continue; } - emitWarning(file, line, "ignoring invalid metadata `" + s + "'"); + + if(warningLevel() > 0) + { + emitWarning(file, line, "ignoring invalid metadata `" + s + "'"); + } continue; } newMetaData.push_back(s); @@ -4824,13 +4857,14 @@ Slice::Gen::MetaDataVisitor::validate(const SyntaxTreeBasePtr& cont, const Strin void -Slice::Gen::normalizeMetaData(const UnitPtr& u, bool cpp11) +Slice::Gen::normalizeMetaData(const UnitPtr& u, bool cpp11, int warningLevel) { - NormalizeMetaDataVisitor visitor(cpp11); + NormalizeMetaDataVisitor visitor(cpp11, warningLevel); u->visit(&visitor, false); } -Slice::Gen::NormalizeMetaDataVisitor::NormalizeMetaDataVisitor(bool cpp11) : +Slice::Gen::NormalizeMetaDataVisitor::NormalizeMetaDataVisitor(bool cpp11, int warningLevel) : + ParserVisitor(warningLevel), _cpp11(cpp11) { } @@ -5105,8 +5139,8 @@ Slice::Gen::getHeaderExt(const string& file, const UnitPtr& unit) } // C++11 visitors -Slice::Gen::Cpp11DeclVisitor::Cpp11DeclVisitor(Output& h, Output& c, const string& dllExport) : - H(h), C(c), _dllExport(dllExport) +Slice::Gen::Cpp11DeclVisitor::Cpp11DeclVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) : + ParserVisitor(warningLevel), H(h), C(c), _dllExport(dllExport) { } @@ -5261,8 +5295,8 @@ Slice::Gen::Cpp11DeclVisitor::visitOperation(const OperationPtr& p) } } -Slice::Gen::Cpp11TypesVisitor::Cpp11TypesVisitor(Output& h, Output& c, const string& dllExport) : - H(h), C(c), _dllExport(dllExport), _dllClassExport(toDllClassExport(dllExport)), +Slice::Gen::Cpp11TypesVisitor::Cpp11TypesVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) : + ParserVisitor(warningLevel), H(h), C(c), _dllExport(dllExport), _dllClassExport(toDllClassExport(dllExport)), _dllMemberExport(toDllMemberExport(dllExport)), _doneStaticSymbol(false), _useWstring(false) { } @@ -5659,8 +5693,9 @@ Slice::Gen::Cpp11TypesVisitor::visitDictionary(const DictionaryPtr& p) } } -Slice::Gen::Cpp11ProxyVisitor::Cpp11ProxyVisitor(Output& h, Output& c, const string& dllExport) : - H(h), C(c), _dllClassExport(toDllClassExport(dllExport)), _dllMemberExport(toDllMemberExport(dllExport)), +Slice::Gen::Cpp11ProxyVisitor::Cpp11ProxyVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) : + ParserVisitor(warningLevel), H(h), C(c), _dllClassExport(toDllClassExport(dllExport)), + _dllMemberExport(toDllMemberExport(dllExport)), _useWstring(false) { } @@ -6248,7 +6283,9 @@ Slice::Gen::Cpp11TypesVisitor::emitUpcall(const ExceptionPtr& base, const string Slice::Gen::Cpp11ObjectVisitor::Cpp11ObjectVisitor(::IceUtilInternal::Output& h, ::IceUtilInternal::Output& c, - const std::string& dllExport) : + const std::string& dllExport, + int warningLevel) : + ParserVisitor(warningLevel), H(h), C(c), _dllExport(dllExport), @@ -6301,8 +6338,9 @@ Slice::Gen::Cpp11ValueVisitor::emitUpcall(const ClassDefPtr& base, const string& Slice::Gen::Cpp11LocalObjectVisitor::Cpp11LocalObjectVisitor(::IceUtilInternal::Output& h, ::IceUtilInternal::Output& c, - const std::string& dllExport) : - Cpp11ObjectVisitor(h, c, dllExport) + const std::string& dllExport, + int warningLevel) : + Cpp11ObjectVisitor(h, c, dllExport, warningLevel) { } @@ -6649,8 +6687,9 @@ Slice::Gen::Cpp11LocalObjectVisitor::visitOperation(const OperationPtr& p) Slice::Gen::Cpp11InterfaceVisitor::Cpp11InterfaceVisitor(::IceUtilInternal::Output& h, ::IceUtilInternal::Output& c, - const std::string& dllExport) : - Cpp11ObjectVisitor(h, c, dllExport) + const std::string& dllExport, + int warningLevel) : + Cpp11ObjectVisitor(h, c, dllExport, warningLevel) { } @@ -7103,8 +7142,9 @@ Slice::Gen::Cpp11InterfaceVisitor::visitOperation(const OperationPtr& p) Slice::Gen::Cpp11ValueVisitor::Cpp11ValueVisitor(::IceUtilInternal::Output& h, ::IceUtilInternal::Output& c, - const std::string& dllExport) : - Cpp11ObjectVisitor(h, c, dllExport) + const std::string& dllExport, + int warningLevel) : + Cpp11ObjectVisitor(h, c, dllExport, warningLevel) { } @@ -7457,7 +7497,8 @@ Slice::Gen::Cpp11ObjectVisitor::emitOneShotConstructor(const ClassDefPtr& p) } } -Slice::Gen::Cpp11StreamVisitor::Cpp11StreamVisitor(Output& h, Output& c, const string& dllExport) : +Slice::Gen::Cpp11StreamVisitor::Cpp11StreamVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) : + ParserVisitor(warningLevel), H(h), C(c), _dllExport(dllExport) @@ -7569,7 +7610,8 @@ Slice::Gen::Cpp11StreamVisitor::visitEnum(const EnumPtr& p) } -Slice::Gen::Cpp11CompatibilityVisitor::Cpp11CompatibilityVisitor(Output& h, Output&, const string& dllExport) : +Slice::Gen::Cpp11CompatibilityVisitor::Cpp11CompatibilityVisitor(Output& h, Output&, const string& dllExport, int warningLevel) : + ParserVisitor(warningLevel), H(h), _dllExport(dllExport) { @@ -7619,8 +7661,8 @@ Slice::Gen::Cpp11CompatibilityVisitor::visitClassDecl(const ClassDeclPtr& p) } } -Slice::Gen::Cpp11ImplVisitor::Cpp11ImplVisitor(Output& h, Output& c, const string& dllExport) : - H(h), C(c), _dllExport(dllExport), _useWstring(false) +Slice::Gen::Cpp11ImplVisitor::Cpp11ImplVisitor(Output& h, Output& c, const string& dllExport, int warningLevel) : + ParserVisitor(warningLevel), H(h), C(c), _dllExport(dllExport), _useWstring(false) { } diff --git a/cpp/src/slice2cpp/Gen.h b/cpp/src/slice2cpp/Gen.h index 768a148969a..660267b0539 100644 --- a/cpp/src/slice2cpp/Gen.h +++ b/cpp/src/slice2cpp/Gen.h @@ -31,7 +31,8 @@ public: bool, bool, bool, - bool); + bool, + int); ~Gen(); void generate(const UnitPtr&); @@ -71,12 +72,13 @@ 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&); + TypesVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int); virtual bool visitModuleStart(const ModulePtr&); virtual void visitModuleEnd(const ModulePtr&); @@ -108,7 +110,7 @@ private: { public: - ProxyDeclVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&); + ProxyDeclVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int); virtual bool visitUnitStart(const UnitPtr&); virtual void visitUnitEnd(const UnitPtr&); @@ -127,7 +129,7 @@ private: { public: - ProxyVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&); + ProxyVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int); virtual bool visitUnitStart(const UnitPtr&); virtual void visitUnitEnd(const UnitPtr&); @@ -153,7 +155,7 @@ private: { public: - ObjectDeclVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&); + ObjectDeclVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int); virtual bool visitModuleStart(const ModulePtr&); virtual void visitModuleEnd(const ModulePtr&); @@ -172,7 +174,7 @@ private: { public: - ObjectVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&); + ObjectVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int); virtual bool visitModuleStart(const ModulePtr&); virtual void visitModuleEnd(const ModulePtr&); @@ -205,7 +207,7 @@ private: { public: - AsyncCallbackVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&); + AsyncCallbackVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int); virtual bool visitModuleStart(const ModulePtr&); virtual void visitModuleEnd(const ModulePtr&); @@ -226,7 +228,7 @@ private: { public: - AsyncCallbackTemplateVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&); + AsyncCallbackTemplateVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int); virtual bool visitUnitStart(const UnitPtr&); virtual void visitUnitEnd(const UnitPtr&); @@ -251,7 +253,7 @@ private: { public: - ImplVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&); + ImplVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int); virtual bool visitModuleStart(const ModulePtr&); virtual void visitModuleEnd(const ModulePtr&); @@ -281,7 +283,7 @@ private: { public: - AsyncVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&); + AsyncVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int); virtual bool visitModuleStart(const ModulePtr&); virtual void visitModuleEnd(const ModulePtr&); @@ -303,7 +305,7 @@ private: { public: - AsyncImplVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&); + AsyncImplVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int); virtual bool visitUnitStart(const UnitPtr&); virtual void visitUnitEnd(const UnitPtr&); @@ -327,7 +329,7 @@ private: { public: - StreamVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&); + StreamVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int); virtual bool visitModuleStart(const ModulePtr&); virtual void visitModuleEnd(const ModulePtr&); @@ -349,7 +351,7 @@ private: { public: - Cpp11DeclVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&); + Cpp11DeclVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int); virtual bool visitUnitStart(const UnitPtr&); virtual void visitUnitEnd(const UnitPtr&); @@ -372,7 +374,7 @@ private: { public: - Cpp11TypesVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&); + Cpp11TypesVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int); virtual bool visitModuleStart(const ModulePtr&); virtual void visitModuleEnd(const ModulePtr&); @@ -406,7 +408,7 @@ private: { public: - Cpp11ProxyVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&); + Cpp11ProxyVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int); virtual bool visitUnitStart(const UnitPtr&); virtual void visitUnitEnd(const UnitPtr&); @@ -432,7 +434,7 @@ private: { public: - Cpp11ObjectVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&); + Cpp11ObjectVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int); protected: @@ -455,7 +457,7 @@ private: { public: - Cpp11LocalObjectVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&); + Cpp11LocalObjectVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int); virtual bool visitModuleStart(const ModulePtr&); virtual void visitModuleEnd(const ModulePtr&); @@ -470,7 +472,7 @@ private: { public: - Cpp11InterfaceVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&); + Cpp11InterfaceVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int); virtual bool visitModuleStart(const ModulePtr&); virtual void visitModuleEnd(const ModulePtr&); @@ -486,7 +488,7 @@ private: { public: - Cpp11ValueVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&); + Cpp11ValueVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int); virtual bool visitModuleStart(const ModulePtr&); virtual void visitModuleEnd(const ModulePtr&); @@ -498,56 +500,11 @@ private: void emitUpcall(const ClassDefPtr&, const std::string&); }; - class Cpp11AsyncVisitor : private ::IceUtil::noncopyable, public ParserVisitor - { - public: - - Cpp11AsyncVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&); - - virtual bool visitModuleStart(const ModulePtr&); - virtual void visitModuleEnd(const ModulePtr&); - virtual bool visitClassDefStart(const ClassDefPtr&); - virtual void visitClassDefEnd(const ClassDefPtr&); - virtual void visitOperation(const OperationPtr&); - - private: - - ::IceUtilInternal::Output& H; - - std::string _dllExport; - int _useWstring; - std::list<int> _useWstringHist; - }; - - class Cpp11AsyncImplVisitor : private ::IceUtil::noncopyable, public ParserVisitor - { - public: - - Cpp11AsyncImplVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&); - - virtual bool visitUnitStart(const UnitPtr&); - virtual void visitUnitEnd(const UnitPtr&); - virtual bool visitModuleStart(const ModulePtr&); - virtual void visitModuleEnd(const ModulePtr&); - virtual bool visitClassDefStart(const ClassDefPtr&); - virtual void visitClassDefEnd(const ClassDefPtr&); - virtual void visitOperation(const OperationPtr&); - - private: - - ::IceUtilInternal::Output& H; - ::IceUtilInternal::Output& C; - - std::string _dllExport; - int _useWstring; - std::list<int> _useWstringHist; - }; - class Cpp11StreamVisitor : private ::IceUtil::noncopyable, public ParserVisitor { public: - Cpp11StreamVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&); + Cpp11StreamVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int); virtual bool visitModuleStart(const ModulePtr&); virtual void visitModuleEnd(const ModulePtr&); @@ -568,7 +525,7 @@ private: { public: - Cpp11CompatibilityVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&); + Cpp11CompatibilityVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int); virtual bool visitModuleStart(const ModulePtr&); virtual void visitModuleEnd(const ModulePtr&); @@ -584,7 +541,7 @@ private: { public: - Cpp11ImplVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&); + Cpp11ImplVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int); virtual bool visitModuleStart(const ModulePtr&); virtual void visitModuleEnd(const ModulePtr&); @@ -616,6 +573,8 @@ private: { public: + MetaDataVisitor(int); + virtual bool visitUnitStart(const UnitPtr&); virtual bool visitModuleStart(const ModulePtr&); virtual void visitModuleEnd(const ModulePtr&); @@ -643,7 +602,7 @@ private: { public: - explicit NormalizeMetaDataVisitor(bool); + NormalizeMetaDataVisitor(bool, int); virtual bool visitUnitStart(const UnitPtr&); virtual bool visitModuleStart(const ModulePtr&); @@ -669,8 +628,8 @@ private: bool _cpp11; }; - static void validateMetaData(const UnitPtr&); - static void normalizeMetaData(const UnitPtr&, bool); + static void validateMetaData(const UnitPtr&, int); + static void normalizeMetaData(const UnitPtr&, bool, int); }; } diff --git a/cpp/src/slice2cpp/Main.cpp b/cpp/src/slice2cpp/Main.cpp index 7378da1b118..83b19b943c9 100644 --- a/cpp/src/slice2cpp/Main.cpp +++ b/cpp/src/slice2cpp/Main.cpp @@ -88,6 +88,7 @@ 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" ; } @@ -117,6 +118,7 @@ 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; @@ -197,6 +199,8 @@ 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; @@ -329,7 +333,7 @@ compile(const vector<string>& argv) try { Gen gen(icecpp->getBaseName(), headerExtension, sourceExtension, extraHeaders, include, - includePaths, dllExport, output, implCpp98, implCpp11, checksum, ice); + includePaths, dllExport, output, implCpp98, implCpp11, checksum, ice, warningLevel); gen.generate(u); } catch(const Slice::FileException& ex) diff --git a/cpp/src/slice2cs/CsUtil.cpp b/cpp/src/slice2cs/CsUtil.cpp index 251b910f473..5de4582dd56 100644 --- a/cpp/src/slice2cs/CsUtil.cpp +++ b/cpp/src/slice2cs/CsUtil.cpp @@ -2335,12 +2335,16 @@ Slice::CsGenerator::toArrayAlloc(const string& decl, const string& sz) } void -Slice::CsGenerator::validateMetaData(const UnitPtr& u) +Slice::CsGenerator::validateMetaData(const UnitPtr& u, int warningLevel) { - MetaDataVisitor visitor; + MetaDataVisitor visitor(warningLevel); u->visit(&visitor, true); } +Slice::CsGenerator::MetaDataVisitor::MetaDataVisitor(int warningLevel) : ParserVisitor(warningLevel) +{ +} + bool Slice::CsGenerator::MetaDataVisitor::visitUnitStart(const UnitPtr& p) { @@ -2375,7 +2379,10 @@ Slice::CsGenerator::MetaDataVisitor::visitUnitStart(const UnitPtr& p) static const string csAttributePrefix = csPrefix + "attribute:"; if(s.find(csAttributePrefix) != 0 || s.size() == csAttributePrefix.size()) { - emitWarning(file, -1, "ignoring invalid global metadata `" + oldS + "'"); + if(warningLevel() > 0) + { + emitWarning(file, -1, "ignoring invalid global metadata `" + oldS + "'"); + } continue; } } @@ -2540,8 +2547,11 @@ Slice::CsGenerator::MetaDataVisitor::validate(const ContainedPtr& cont) string meta; if(cont->findMetaData(csPrefix + "generic:", meta)) { - emitWarning(cont->file(), cont->line(), msg + " `" + meta + "':\n" + - "serialization can only be used with the array mapping for byte sequences"); + if(warningLevel() > 0) + { + emitWarning(cont->file(), cont->line(), msg + " `" + meta + "':\n" + + "serialization can only be used with the array mapping for byte sequences"); + } continue; } string type = s.substr(csSerializablePrefix.size()); @@ -2613,7 +2623,10 @@ Slice::CsGenerator::MetaDataVisitor::validate(const ContainedPtr& cont) continue; } - emitWarning(cont->file(), cont->line(), msg + " `" + oldS + "'"); + if(warningLevel() > 0) + { + emitWarning(cont->file(), cont->line(), msg + " `" + oldS + "'"); + } continue; } else if(s == "delegate") @@ -2624,7 +2637,11 @@ Slice::CsGenerator::MetaDataVisitor::validate(const ContainedPtr& cont) newLocalMetaData.push_back(s); continue; } - emitWarning(cont->file(), cont->line(), msg + " `" + s + "'"); + + if(warningLevel() > 0) + { + emitWarning(cont->file(), cont->line(), msg + " `" + s + "'"); + } continue; } newLocalMetaData.push_back(s); diff --git a/cpp/src/slice2cs/CsUtil.h b/cpp/src/slice2cs/CsUtil.h index 16ebd8a3c54..1741150f100 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&); + static void validateMetaData(const UnitPtr&, int); protected: @@ -65,6 +65,8 @@ 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 0008249211a..5e6fc6b6407 100644 --- a/cpp/src/slice2cs/Gen.cpp +++ b/cpp/src/slice2cs/Gen.cpp @@ -154,7 +154,8 @@ resultStructReturnValueName(const ParamDeclList& outParams) } -Slice::CsVisitor::CsVisitor(Output& out) : +Slice::CsVisitor::CsVisitor(Output& out, int warningLevel) : + ParserVisitor(warningLevel), _out(out) { } @@ -2020,9 +2021,10 @@ 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) : + bool tie, bool impl, bool implTie, int warningLevel) : _includePaths(includePaths), - _tie(tie) + _tie(tie), + _warningLevel(warningLevel) { string fileBase = base; string::size_type pos = base.find_last_of("/\\"); @@ -2092,51 +2094,51 @@ Slice::Gen::~Gen() void Slice::Gen::generate(const UnitPtr& p) { - CsGenerator::validateMetaData(p); + CsGenerator::validateMetaData(p, _warningLevel); - UnitVisitor unitVisitor(_out); + UnitVisitor unitVisitor(_out, _warningLevel); p->visit(&unitVisitor, false); - CompactIdVisitor compactIdVisitor(_out); + CompactIdVisitor compactIdVisitor(_out, _warningLevel); p->visit(&compactIdVisitor, false); - TypesVisitor typesVisitor(_out); + TypesVisitor typesVisitor(_out, _warningLevel); 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); + AsyncDelegateVisitor asyncDelegateVisitor(_out, _warningLevel); p->visit(&asyncDelegateVisitor, false); - ResultVisitor resultVisitor(_out); + ResultVisitor resultVisitor(_out, _warningLevel); p->visit(&resultVisitor, false); - ProxyVisitor proxyVisitor(_out); + ProxyVisitor proxyVisitor(_out, _warningLevel); p->visit(&proxyVisitor, false); - OpsVisitor opsVisitor(_out); + OpsVisitor opsVisitor(_out, _warningLevel); p->visit(&opsVisitor, false); - HelperVisitor helperVisitor(_out); + HelperVisitor helperVisitor(_out, _warningLevel); p->visit(&helperVisitor, false); - DispatcherVisitor dispatcherVisitor(_out, _tie); + DispatcherVisitor dispatcherVisitor(_out, _tie, _warningLevel); p->visit(&dispatcherVisitor, false); } void Slice::Gen::generateImpl(const UnitPtr& p) { - ImplVisitor implVisitor(_impl); + ImplVisitor implVisitor(_impl, _warningLevel); p->visit(&implVisitor, false); } void Slice::Gen::generateImplTie(const UnitPtr& p) { - ImplTieVisitor implTieVisitor(_impl); + ImplTieVisitor implTieVisitor(_impl, _warningLevel); p->visit(&implTieVisitor, false); } @@ -2212,8 +2214,8 @@ Slice::Gen::printHeader() _out << "//\n"; } -Slice::Gen::UnitVisitor::UnitVisitor(IceUtilInternal::Output& out) : - CsVisitor(out) +Slice::Gen::UnitVisitor::UnitVisitor(IceUtilInternal::Output& out, int warningLevel) : + CsVisitor(out, warningLevel) { } @@ -2244,8 +2246,8 @@ Slice::Gen::UnitVisitor::visitUnitStart(const UnitPtr& p) return false; } -Slice::Gen::CompactIdVisitor::CompactIdVisitor(IceUtilInternal::Output& out) : - CsVisitor(out) +Slice::Gen::CompactIdVisitor::CompactIdVisitor(IceUtilInternal::Output& out, int warningLevel) : + CsVisitor(out, warningLevel) { } @@ -2278,8 +2280,8 @@ Slice::Gen::CompactIdVisitor::visitClassDefStart(const ClassDefPtr& p) return false; } -Slice::Gen::TypesVisitor::TypesVisitor(IceUtilInternal::Output& out) : - CsVisitor(out) +Slice::Gen::TypesVisitor::TypesVisitor(IceUtilInternal::Output& out, int warningLevel) : + CsVisitor(out, warningLevel) { } @@ -3765,8 +3767,8 @@ Slice::Gen::TypesVisitor::writeMemberEquals(const DataMemberList& dataMembers, i } } -Slice::Gen::ResultVisitor::ResultVisitor(::IceUtilInternal::Output& out) - : CsVisitor(out) +Slice::Gen::ResultVisitor::ResultVisitor(::IceUtilInternal::Output& out, int warningLevel) + : CsVisitor(out, warningLevel) { } @@ -3924,8 +3926,8 @@ Slice::Gen::ResultVisitor::visitOperation(const OperationPtr& p) } } -Slice::Gen::ProxyVisitor::ProxyVisitor(IceUtilInternal::Output& out) : - CsVisitor(out) +Slice::Gen::ProxyVisitor::ProxyVisitor(IceUtilInternal::Output& out, int warningLevel) : + CsVisitor(out, warningLevel) { } @@ -4112,8 +4114,8 @@ Slice::Gen::ProxyVisitor::visitOperation(const OperationPtr& p) } } -Slice::Gen::AsyncDelegateVisitor::AsyncDelegateVisitor(IceUtilInternal::Output& out) - : CsVisitor(out) +Slice::Gen::AsyncDelegateVisitor::AsyncDelegateVisitor(IceUtilInternal::Output& out, int warningLevel) + : CsVisitor(out, warningLevel) { } @@ -4169,8 +4171,8 @@ Slice::Gen::AsyncDelegateVisitor::visitOperation(const OperationPtr& p) _out << paramDeclAMI << epar << ';'; } -Slice::Gen::OpsVisitor::OpsVisitor(IceUtilInternal::Output& out) - : CsVisitor(out) +Slice::Gen::OpsVisitor::OpsVisitor(IceUtilInternal::Output& out, int warningLevel) + : CsVisitor(out, warningLevel) { } @@ -4267,8 +4269,8 @@ Slice::Gen::OpsVisitor::visitClassDefStart(const ClassDefPtr& p) return false; } -Slice::Gen::HelperVisitor::HelperVisitor(IceUtilInternal::Output& out) : - CsVisitor(out) +Slice::Gen::HelperVisitor::HelperVisitor(IceUtilInternal::Output& out, int warningLevel) : + CsVisitor(out, warningLevel) { } @@ -5198,8 +5200,8 @@ Slice::Gen::HelperVisitor::visitDictionary(const DictionaryPtr& p) _out << eb; } -Slice::Gen::DispatcherVisitor::DispatcherVisitor(::IceUtilInternal::Output& out, bool tie) : - CsVisitor(out), +Slice::Gen::DispatcherVisitor::DispatcherVisitor(::IceUtilInternal::Output& out, bool tie, int warningLevel) : + CsVisitor(out, warningLevel), _tie(tie) { } @@ -5412,8 +5414,8 @@ Slice::Gen::DispatcherVisitor::writeTieOperations(const ClassDefPtr& p, NameSet* } } -Slice::Gen::BaseImplVisitor::BaseImplVisitor(IceUtilInternal::Output& out) - : CsVisitor(out) +Slice::Gen::BaseImplVisitor::BaseImplVisitor(IceUtilInternal::Output& out, int warningLevel) + : CsVisitor(out, warningLevel) { } @@ -5520,8 +5522,8 @@ Slice::Gen::BaseImplVisitor::writeOperation(const OperationPtr& op, bool comment } } -Slice::Gen::ImplVisitor::ImplVisitor(IceUtilInternal::Output& out) : - BaseImplVisitor(out) +Slice::Gen::ImplVisitor::ImplVisitor(IceUtilInternal::Output& out, int warningLevel) : + BaseImplVisitor(out, warningLevel) { } @@ -5588,8 +5590,8 @@ Slice::Gen::ImplVisitor::visitClassDefEnd(const ClassDefPtr&) _out << eb; } -Slice::Gen::ImplTieVisitor::ImplTieVisitor(IceUtilInternal::Output& out) - : BaseImplVisitor(out) +Slice::Gen::ImplTieVisitor::ImplTieVisitor(IceUtilInternal::Output& out, int warningLevel) + : BaseImplVisitor(out, warningLevel) { } diff --git a/cpp/src/slice2cs/Gen.h b/cpp/src/slice2cs/Gen.h index d061616693d..f07bbc77cdc 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&); + CsVisitor(::IceUtilInternal::Output&, int); virtual ~CsVisitor(); protected: @@ -87,7 +87,8 @@ public: const std::string&, bool, bool, - bool); + bool, + int); ~Gen(); void generate(const UnitPtr&); @@ -102,6 +103,7 @@ private: IceUtilInternal::Output _impl; std::vector<std::string> _includePaths; bool _tie; + int _warningLevel; void printHeader(); @@ -109,7 +111,7 @@ private: { public: - UnitVisitor(::IceUtilInternal::Output&); + UnitVisitor(::IceUtilInternal::Output&, int); virtual bool visitUnitStart(const UnitPtr&); }; @@ -118,7 +120,7 @@ private: { public: - CompactIdVisitor(IceUtilInternal::Output&); + CompactIdVisitor(IceUtilInternal::Output&, int); virtual bool visitUnitStart(const UnitPtr&); virtual void visitUnitEnd(const UnitPtr&); @@ -129,7 +131,7 @@ private: { public: - TypesVisitor(::IceUtilInternal::Output&); + TypesVisitor(::IceUtilInternal::Output&, int); virtual bool visitModuleStart(const ModulePtr&); virtual void visitModuleEnd(const ModulePtr&); @@ -156,7 +158,7 @@ private: { public: - AsyncDelegateVisitor(::IceUtilInternal::Output&); + AsyncDelegateVisitor(::IceUtilInternal::Output&, int); virtual bool visitModuleStart(const ModulePtr&); virtual void visitModuleEnd(const ModulePtr&); @@ -169,7 +171,7 @@ private: { public: - ResultVisitor(::IceUtilInternal::Output&); + ResultVisitor(::IceUtilInternal::Output&, int); virtual bool visitModuleStart(const ModulePtr&); virtual void visitModuleEnd(const ModulePtr&); @@ -182,7 +184,7 @@ private: { public: - ProxyVisitor(::IceUtilInternal::Output&); + ProxyVisitor(::IceUtilInternal::Output&, int); virtual bool visitModuleStart(const ModulePtr&); virtual void visitModuleEnd(const ModulePtr&); @@ -195,7 +197,7 @@ private: { public: - OpsVisitor(::IceUtilInternal::Output&); + OpsVisitor(::IceUtilInternal::Output&, int); virtual bool visitModuleStart(const ModulePtr&); virtual void visitModuleEnd(const ModulePtr&); @@ -206,7 +208,7 @@ private: { public: - HelperVisitor(::IceUtilInternal::Output&); + HelperVisitor(::IceUtilInternal::Output&, int); virtual bool visitModuleStart(const ModulePtr&); virtual void visitModuleEnd(const ModulePtr&); @@ -220,7 +222,7 @@ private: { public: - DispatcherVisitor(::IceUtilInternal::Output&, bool); + DispatcherVisitor(::IceUtilInternal::Output&, bool, int); virtual bool visitModuleStart(const ModulePtr&); virtual void visitModuleEnd(const ModulePtr&); @@ -239,7 +241,7 @@ private: { public: - BaseImplVisitor(::IceUtilInternal::Output&); + BaseImplVisitor(::IceUtilInternal::Output&, int); protected: @@ -250,7 +252,7 @@ private: { public: - ImplVisitor(::IceUtilInternal::Output&); + ImplVisitor(::IceUtilInternal::Output&, int); virtual bool visitModuleStart(const ModulePtr&); virtual void visitModuleEnd(const ModulePtr&); @@ -262,7 +264,7 @@ private: { public: - ImplTieVisitor(::IceUtilInternal::Output&); + ImplTieVisitor(::IceUtilInternal::Output&, int); 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 21738ba6f83..31b60cee93d 100644 --- a/cpp/src/slice2cs/Main.cpp +++ b/cpp/src/slice2cs/Main.cpp @@ -82,6 +82,7 @@ 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" ; } @@ -107,6 +108,7 @@ 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; @@ -179,6 +181,8 @@ 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; @@ -309,7 +313,7 @@ compile(const vector<string>& argv) { try { - Gen gen(icecpp->getBaseName(), includePaths, output, tie, impl, implTie); + Gen gen(icecpp->getBaseName(), includePaths, output, tie, impl, implTie, warningLevel); gen.generate(p); if(impl) { diff --git a/cpp/src/slice2html/Gen.cpp b/cpp/src/slice2html/Gen.cpp index 1c4de107d54..bd226fbd027 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) + const string& searchAction, unsigned indexCount, unsigned warnSummary, int warningLevel) { 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); + FileVisitor tv(files, warningLevel); unit->visit(&tv, false); // // Generate the start page. // - StartPageVisitor spv(files); + StartPageVisitor spv(files, warningLevel); unit->visit(&spv, false); // // Generate the table of contents. // - TOCVisitor tocv(files, indexHeader, indexFooter); + TOCVisitor tocv(files, indexHeader, indexFooter, warningLevel); 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); + PageVisitor v(files, warningLevel); unit->visit(&v, false); } @@ -1800,8 +1800,9 @@ Slice::StartPageGenerator::printHeaderFooter() end(); // table } -Slice::FileVisitor::FileVisitor(Files& files) - : _files(files) +Slice::FileVisitor::FileVisitor(Files& files, int warningLevel) : + ParserVisitor(warningLevel), + _files(files) { } @@ -1863,8 +1864,9 @@ Slice::FileVisitor::visitEnum(const EnumPtr& e) _files.insert(e->file()); } -Slice::StartPageVisitor::StartPageVisitor(const Files& files) - : _spg(files) +Slice::StartPageVisitor::StartPageVisitor(const Files& files, int warningLevel) : + ParserVisitor(warningLevel), + _spg(files) { } @@ -2041,8 +2043,9 @@ TOCGenerator::writeEntry(const ContainedPtr& c) end(); } -TOCVisitor::TOCVisitor(const Files& files, const string& header, const string& footer) - : _tg(files, header, footer) +TOCVisitor::TOCVisitor(const Files& files, const string& header, const string& footer, int warningLevel) : + ParserVisitor(warningLevel), + _tg(files, header, footer) { } @@ -2976,8 +2979,9 @@ Slice::EnumGenerator::generate(const EnumPtr& e) assert(_out.currIndent() == indent); } -Slice::PageVisitor::PageVisitor(const Files& files) - : _files(files) +Slice::PageVisitor::PageVisitor(const Files& files, int warningLevel) : + ParserVisitor(warningLevel), + _files(files) { } diff --git a/cpp/src/slice2html/Gen.h b/cpp/src/slice2html/Gen.h index 8fb67136bc0..b38556e4bb2 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); + unsigned, unsigned, int); typedef ::std::set< ::std::string> Files; @@ -141,7 +141,7 @@ class FileVisitor : private ::IceUtil::noncopyable, public ParserVisitor { public: - FileVisitor(Files&); + FileVisitor(Files&, int); 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&); + StartPageVisitor(const Files&, int); 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&); + TOCVisitor(const Files&, const ::std::string&, const ::std::string&, int); 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&); + PageVisitor(const Files&, int); 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 ae2bfaa75ff..7b5a6562968 100644 --- a/cpp/src/slice2html/Main.cpp +++ b/cpp/src/slice2html/Main.cpp @@ -85,6 +85,7 @@ 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" ; } @@ -112,6 +113,7 @@ 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; @@ -220,6 +222,8 @@ 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; @@ -290,7 +294,7 @@ compile(const vector<string>& argv) try { Slice::generate(p, output, header, footer, indexHeader, indexFooter, imageDir, logoURL, - searchAction, indexCount, summaryCount); + searchAction, indexCount, summaryCount, warningLevel); } catch(const Slice::FileException& ex) { diff --git a/cpp/src/slice2java/Gen.cpp b/cpp/src/slice2java/Gen.cpp index 6fea7f223f1..376a8edd86e 100644 --- a/cpp/src/slice2java/Gen.cpp +++ b/cpp/src/slice2java/Gen.cpp @@ -144,8 +144,9 @@ string ofFactory(const TypePtr& type) } -Slice::JavaVisitor::JavaVisitor(const string& dir) : - JavaGenerator(dir) +Slice::JavaVisitor::JavaVisitor(const string& dir, int warningLevel) : + JavaGenerator(dir), + ParserVisitor(warningLevel) { } @@ -2298,10 +2299,12 @@ 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) : +Slice::Gen::Gen(const string& /*name*/, const string& base, const vector<string>& includePaths, const string& dir, + int warningLevel) : _base(base), _includePaths(includePaths), - _dir(dir) + _dir(dir), + _warningLevel(warningLevel) { } @@ -2312,31 +2315,31 @@ Slice::Gen::~Gen() void Slice::Gen::generate(const UnitPtr& p) { - JavaGenerator::validateMetaData(p); + JavaGenerator::validateMetaData(p, _warningLevel); - PackageVisitor packageVisitor(_dir); + PackageVisitor packageVisitor(_dir, _warningLevel); p->visit(&packageVisitor, false); - TypesVisitor typesVisitor(_dir); + TypesVisitor typesVisitor(_dir, _warningLevel); p->visit(&typesVisitor, false); - CompactIdVisitor compactIdVisitor(_dir); + CompactIdVisitor compactIdVisitor(_dir, _warningLevel); p->visit(&compactIdVisitor, false); - HelperVisitor helperVisitor(_dir); + HelperVisitor helperVisitor(_dir, _warningLevel); p->visit(&helperVisitor, false); - ProxyVisitor proxyVisitor(_dir); + ProxyVisitor proxyVisitor(_dir, _warningLevel); p->visit(&proxyVisitor, false); - DispatcherVisitor dispatcherVisitor(_dir); + DispatcherVisitor dispatcherVisitor(_dir, _warningLevel); p->visit(&dispatcherVisitor, false); } void Slice::Gen::generateImpl(const UnitPtr& p) { - ImplVisitor implVisitor(_dir); + ImplVisitor implVisitor(_dir, _warningLevel); p->visit(&implVisitor, false); } @@ -2395,8 +2398,8 @@ Slice::Gen::writeChecksumClass(const string& checksumClass, const string& dir, c out << nl; } -Slice::Gen::PackageVisitor::PackageVisitor(const string& dir) : - JavaVisitor(dir) +Slice::Gen::PackageVisitor::PackageVisitor(const string& dir, int warningLevel) : + JavaVisitor(dir, warningLevel) { } @@ -2420,8 +2423,8 @@ Slice::Gen::PackageVisitor::visitModuleStart(const ModulePtr& p) return false; } -Slice::Gen::TypesVisitor::TypesVisitor(const string& dir) : - JavaVisitor(dir) +Slice::Gen::TypesVisitor::TypesVisitor(const string& dir, int warningLevel) : + JavaVisitor(dir, warningLevel) { } @@ -2760,9 +2763,12 @@ Slice::Gen::TypesVisitor::visitClassDefEnd(const ClassDefPtr& p) string::size_type pos = serialVersionUID.rfind(":") + 1; if(pos == string::npos) { - ostringstream os; - os << "ignoring invalid serialVersionUID for class `" << p->scoped() << "'; generating default value"; - emitWarning("", "", os.str()); + if(warningLevel() > 0) + { + ostringstream os; + os << "ignoring invalid serialVersionUID for class `" << p->scoped() << "'; generating default value"; + emitWarning("", "", os.str()); + } out << computeSerialVersionUUID(p); } else @@ -2773,10 +2779,13 @@ Slice::Gen::TypesVisitor::visitClassDefEnd(const ClassDefPtr& p) { if(!stringToInt64(serialVersionUID, v)) // conversion error { - ostringstream os; - os << "ignoring invalid serialVersionUID for class `" << p->scoped() - << "'; generating default value"; - emitWarning("", "", os.str()); + if(warningLevel() > 0) + { + ostringstream os; + os << "ignoring invalid serialVersionUID for class `" << p->scoped() + << "'; generating default value"; + emitWarning("", "", os.str()); + } out << computeSerialVersionUUID(p); } } @@ -3285,9 +3294,12 @@ Slice::Gen::TypesVisitor::visitExceptionEnd(const ExceptionPtr& p) string::size_type pos = serialVersionUID.rfind(":") + 1; if(pos == string::npos) { - ostringstream os; - os << "ignoring invalid serialVersionUID for exception `" << p->scoped() << "'; generating default value"; - emitWarning("", "", os.str()); + if(warningLevel() > 0) + { + ostringstream os; + os << "ignoring invalid serialVersionUID for exception `" << p->scoped() << "'; generating default value"; + emitWarning("", "", os.str()); + } out << computeSerialVersionUUID(p); } else @@ -3298,10 +3310,13 @@ Slice::Gen::TypesVisitor::visitExceptionEnd(const ExceptionPtr& p) { if(!stringToInt64(serialVersionUID, v)) // conversion error { - ostringstream os; - os << "ignoring invalid serialVersionUID for exception `" << p->scoped() - << "'; generating default value"; - emitWarning("", "", os.str()); + if(warningLevel() > 0) + { + ostringstream os; + os << "ignoring invalid serialVersionUID for exception `" << p->scoped() + << "'; generating default value"; + emitWarning("", "", os.str()); + } out << computeSerialVersionUUID(p); } } @@ -3598,9 +3613,12 @@ Slice::Gen::TypesVisitor::visitStructEnd(const StructPtr& p) string::size_type pos = serialVersionUID.rfind(":") + 1; if(pos == string::npos) { - ostringstream os; - os << "ignoring invalid serialVersionUID for struct `" << p->scoped() << "'; generating default value"; - emitWarning("", "", os.str()); + if(warningLevel() > 0) + { + ostringstream os; + os << "ignoring invalid serialVersionUID for struct `" << p->scoped() << "'; generating default value"; + emitWarning("", "", os.str()); + } out << computeSerialVersionUUID(p); } else @@ -3611,10 +3629,13 @@ Slice::Gen::TypesVisitor::visitStructEnd(const StructPtr& p) { if(!stringToInt64(serialVersionUID, v)) // conversion error { - ostringstream os; - os << "ignoring invalid serialVersionUID for struct `" << p->scoped() - << "'; generating default value"; - emitWarning("", "", os.str()); + if(warningLevel() > 0) + { + ostringstream os; + os << "ignoring invalid serialVersionUID for struct `" << p->scoped() + << "'; generating default value"; + emitWarning("", "", os.str()); + } out << computeSerialVersionUUID(p); } } @@ -4139,8 +4160,8 @@ Slice::Gen::TypesVisitor::validateMethod(const OperationList& ops, const std::st return true; } -Slice::Gen::CompactIdVisitor::CompactIdVisitor(const string& dir) : - JavaVisitor(dir) +Slice::Gen::CompactIdVisitor::CompactIdVisitor(const string& dir, int warningLevel) : + JavaVisitor(dir, warningLevel) { } @@ -4169,8 +4190,8 @@ Slice::Gen::CompactIdVisitor::visitClassDefStart(const ClassDefPtr& p) return false; } -Slice::Gen::HelperVisitor::HelperVisitor(const string& dir) : - JavaVisitor(dir) +Slice::Gen::HelperVisitor::HelperVisitor(const string& dir, int warningLevel) : + JavaVisitor(dir, warningLevel) { } @@ -4334,8 +4355,8 @@ Slice::Gen::HelperVisitor::visitDictionary(const DictionaryPtr& p) close(); } -Slice::Gen::ProxyVisitor::ProxyVisitor(const string& dir) : - JavaVisitor(dir) +Slice::Gen::ProxyVisitor::ProxyVisitor(const string& dir, int warningLevel) : + JavaVisitor(dir, warningLevel) { } @@ -5089,8 +5110,8 @@ Slice::Gen::ProxyVisitor::visitOperation(const OperationPtr& p) } } -Slice::Gen::DispatcherVisitor::DispatcherVisitor(const string& dir) : - JavaVisitor(dir) +Slice::Gen::DispatcherVisitor::DispatcherVisitor(const string& dir, int warningLevel) : + JavaVisitor(dir, warningLevel) { } @@ -5163,8 +5184,8 @@ Slice::Gen::DispatcherVisitor::visitClassDefStart(const ClassDefPtr& p) return false; } -Slice::Gen::ImplVisitor::ImplVisitor(const string& dir) : - JavaVisitor(dir) +Slice::Gen::ImplVisitor::ImplVisitor(const string& dir, int warningLevel) : + JavaVisitor(dir, warningLevel) { } diff --git a/cpp/src/slice2java/Gen.h b/cpp/src/slice2java/Gen.h index 11c7d0f7e45..d2ce2ef44c1 100644 --- a/cpp/src/slice2java/Gen.h +++ b/cpp/src/slice2java/Gen.h @@ -25,7 +25,7 @@ public: protected: - JavaVisitor(const std::string&); + JavaVisitor(const std::string&, int); enum ParamDir { InParam, OutParam }; @@ -129,7 +129,8 @@ public: Gen(const std::string&, const std::string&, const std::vector<std::string>&, - const std::string&); + const std::string&, + int); ~Gen(); void generate(const UnitPtr&); @@ -142,12 +143,13 @@ private: std::string _base; std::vector<std::string> _includePaths; std::string _dir; + int _warningLevel; class PackageVisitor : public JavaVisitor { public: - PackageVisitor(const std::string&); + PackageVisitor(const std::string&, int); virtual bool visitModuleStart(const ModulePtr&); }; @@ -156,7 +158,7 @@ private: { public: - TypesVisitor(const std::string&); + TypesVisitor(const std::string&, int); virtual bool visitClassDefStart(const ClassDefPtr&); virtual void visitClassDefEnd(const ClassDefPtr&); @@ -181,7 +183,7 @@ private: { public: - CompactIdVisitor(const std::string&); + CompactIdVisitor(const std::string&, int); virtual bool visitClassDefStart(const ClassDefPtr&); }; @@ -190,7 +192,7 @@ private: { public: - HelperVisitor(const std::string&); + HelperVisitor(const std::string&, int); virtual void visitSequence(const SequencePtr&); virtual void visitDictionary(const DictionaryPtr&); @@ -200,7 +202,7 @@ private: { public: - ProxyVisitor(const std::string&); + ProxyVisitor(const std::string&, int); virtual bool visitClassDefStart(const ClassDefPtr&); virtual void visitClassDefEnd(const ClassDefPtr&); @@ -211,7 +213,7 @@ private: { public: - DispatcherVisitor(const std::string&); + DispatcherVisitor(const std::string&, int); virtual bool visitClassDefStart(const ClassDefPtr&); }; @@ -220,7 +222,7 @@ private: { public: - ImplVisitor(const std::string&); + ImplVisitor(const std::string&, int); virtual bool visitClassDefStart(const ClassDefPtr&); diff --git a/cpp/src/slice2java/GenCompat.cpp b/cpp/src/slice2java/GenCompat.cpp index 7bccb844408..6579642d280 100644 --- a/cpp/src/slice2java/GenCompat.cpp +++ b/cpp/src/slice2java/GenCompat.cpp @@ -191,8 +191,9 @@ writeParamList(Output& out, vector<string> params, bool end = true, bool newLine } -Slice::JavaCompatVisitor::JavaCompatVisitor(const string& dir) : - JavaCompatGenerator(dir) +Slice::JavaCompatVisitor::JavaCompatVisitor(const string& dir, int warningLevel) : + JavaCompatGenerator(dir), + ParserVisitor(warningLevel) { } @@ -2278,11 +2279,13 @@ 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) : +Slice::GenCompat::GenCompat(const string& /*name*/, const string& base, const vector<string>& includePaths, + const string& dir, bool tie, int warningLevel) : _base(base), _includePaths(includePaths), _dir(dir), - _tie(tie) + _tie(tie), + _warningLevel(warningLevel) { } @@ -2293,47 +2296,47 @@ Slice::GenCompat::~GenCompat() void Slice::GenCompat::generate(const UnitPtr& p) { - JavaGenerator::validateMetaData(p); + JavaGenerator::validateMetaData(p, _warningLevel); - OpsVisitor opsVisitor(_dir); + OpsVisitor opsVisitor(_dir, _warningLevel); p->visit(&opsVisitor, false); - PackageVisitor packageVisitor(_dir); + PackageVisitor packageVisitor(_dir, _warningLevel); p->visit(&packageVisitor, false); - TypesVisitor typesVisitor(_dir); + TypesVisitor typesVisitor(_dir, _warningLevel); p->visit(&typesVisitor, false); - CompactIdVisitor compactIdVisitor(_dir); + CompactIdVisitor compactIdVisitor(_dir, _warningLevel); p->visit(&compactIdVisitor, false); - HolderVisitor holderVisitor(_dir); + HolderVisitor holderVisitor(_dir, _warningLevel); p->visit(&holderVisitor, false); - HelperVisitor helperVisitor(_dir); + HelperVisitor helperVisitor(_dir, _warningLevel); p->visit(&helperVisitor, false); - ProxyVisitor proxyVisitor(_dir); + ProxyVisitor proxyVisitor(_dir, _warningLevel); p->visit(&proxyVisitor, false); - DispatcherVisitor dispatcherVisitor(_dir, _tie); + DispatcherVisitor dispatcherVisitor(_dir, _tie, _warningLevel); p->visit(&dispatcherVisitor, false); - AsyncVisitor asyncVisitor(_dir); + AsyncVisitor asyncVisitor(_dir, _warningLevel); p->visit(&asyncVisitor, false); } void Slice::GenCompat::generateImpl(const UnitPtr& p) { - ImplVisitor implVisitor(_dir); + ImplVisitor implVisitor(_dir, _warningLevel); p->visit(&implVisitor, false); } void Slice::GenCompat::generateImplTie(const UnitPtr& p) { - ImplTieVisitor implTieVisitor(_dir); + ImplTieVisitor implTieVisitor(_dir, _warningLevel); p->visit(&implTieVisitor, false); } @@ -2392,8 +2395,8 @@ Slice::GenCompat::writeChecksumClass(const string& checksumClass, const string& out << nl; } -Slice::GenCompat::OpsVisitor::OpsVisitor(const string& dir) : - JavaCompatVisitor(dir) +Slice::GenCompat::OpsVisitor::OpsVisitor(const string& dir, int warningLevel) : + JavaCompatVisitor(dir, warningLevel) { } @@ -2527,8 +2530,8 @@ Slice::GenCompat::OpsVisitor::writeOperations(const ClassDefPtr& p, bool noCurre close(); } -Slice::GenCompat::PackageVisitor::PackageVisitor(const string& dir) : - JavaCompatVisitor(dir) +Slice::GenCompat::PackageVisitor::PackageVisitor(const string& dir, int warningLevel) : + JavaCompatVisitor(dir, warningLevel) { } @@ -2552,8 +2555,8 @@ Slice::GenCompat::PackageVisitor::visitModuleStart(const ModulePtr& p) return false; } -Slice::GenCompat::TypesVisitor::TypesVisitor(const string& dir) : - JavaCompatVisitor(dir) +Slice::GenCompat::TypesVisitor::TypesVisitor(const string& dir, int warningLevel) : + JavaCompatVisitor(dir, warningLevel) { } @@ -3014,9 +3017,12 @@ Slice::GenCompat::TypesVisitor::visitClassDefEnd(const ClassDefPtr& p) string::size_type pos = serialVersionUID.rfind(":") + 1; if(pos == string::npos) { - ostringstream os; - os << "ignoring invalid serialVersionUID for class `" << p->scoped() << "'; generating default value"; - emitWarning("", "", os.str()); + if(warningLevel() > 0) + { + ostringstream os; + os << "ignoring invalid serialVersionUID for class `" << p->scoped() << "'; generating default value"; + emitWarning("", "", os.str()); + } out << computeSerialVersionUUID(p); } else @@ -3027,10 +3033,13 @@ Slice::GenCompat::TypesVisitor::visitClassDefEnd(const ClassDefPtr& p) { if(!stringToInt64(serialVersionUID, v)) // conversion error { - ostringstream os; - os << "ignoring invalid serialVersionUID for class `" << p->scoped() - << "'; generating default value"; - emitWarning("", "", os.str()); + if(warningLevel() > 0) + { + ostringstream os; + os << "ignoring invalid serialVersionUID for class `" << p->scoped() + << "'; generating default value"; + emitWarning("", "", os.str()); + } out << computeSerialVersionUUID(p); } } @@ -3434,9 +3443,12 @@ Slice::GenCompat::TypesVisitor::visitExceptionEnd(const ExceptionPtr& p) string::size_type pos = serialVersionUID.rfind(":") + 1; if(pos == string::npos) { - ostringstream os; - os << "ignoring invalid serialVersionUID for exception `" << p->scoped() << "'; generating default value"; - emitWarning("", "", os.str()); + if(warningLevel() > 0) + { + ostringstream os; + os << "ignoring invalid serialVersionUID for exception `" << p->scoped() << "'; generating default value"; + emitWarning("", "", os.str()); + } out << computeSerialVersionUUID(p); } else @@ -3447,10 +3459,13 @@ Slice::GenCompat::TypesVisitor::visitExceptionEnd(const ExceptionPtr& p) { if(!stringToInt64(serialVersionUID, v)) // conversion error { - ostringstream os; - os << "ignoring invalid serialVersionUID for exception `" << p->scoped() - << "'; generating default value"; - emitWarning("", "", os.str()); + if(warningLevel() > 0) + { + ostringstream os; + os << "ignoring invalid serialVersionUID for exception `" << p->scoped() + << "'; generating default value"; + emitWarning("", "", os.str()); + } out << computeSerialVersionUUID(p); } } @@ -3750,9 +3765,12 @@ Slice::GenCompat::TypesVisitor::visitStructEnd(const StructPtr& p) string::size_type pos = serialVersionUID.rfind(":") + 1; if(pos == string::npos) { - ostringstream os; - os << "ignoring invalid serialVersionUID for struct `" << p->scoped() << "'; generating default value"; - emitWarning("", "", os.str()); + if(warningLevel() > 0) + { + ostringstream os; + os << "ignoring invalid serialVersionUID for struct `" << p->scoped() << "'; generating default value"; + emitWarning("", "", os.str()); + } out << computeSerialVersionUUID(p); } else @@ -3763,10 +3781,13 @@ Slice::GenCompat::TypesVisitor::visitStructEnd(const StructPtr& p) { if(!stringToInt64(serialVersionUID, v)) // conversion error { - ostringstream os; - os << "ignoring invalid serialVersionUID for struct `" << p->scoped() - << "'; generating default value"; - emitWarning("", "", os.str()); + if(warningLevel() > 0) + { + ostringstream os; + os << "ignoring invalid serialVersionUID for struct `" << p->scoped() + << "'; generating default value"; + emitWarning("", "", os.str()); + } out << computeSerialVersionUUID(p); } } @@ -4191,8 +4212,8 @@ Slice::GenCompat::TypesVisitor::validateMethod(const OperationList& ops, const s return true; } -Slice::GenCompat::CompactIdVisitor::CompactIdVisitor(const string& dir) : - JavaCompatVisitor(dir) +Slice::GenCompat::CompactIdVisitor::CompactIdVisitor(const string& dir, int warningLevel) : + JavaCompatVisitor(dir, warningLevel) { } @@ -4221,8 +4242,8 @@ Slice::GenCompat::CompactIdVisitor::visitClassDefStart(const ClassDefPtr& p) return false; } -Slice::GenCompat::HolderVisitor::HolderVisitor(const string& dir) : - JavaCompatVisitor(dir) +Slice::GenCompat::HolderVisitor::HolderVisitor(const string& dir, int warningLevel) : + JavaCompatVisitor(dir, warningLevel) { } @@ -4370,8 +4391,8 @@ Slice::GenCompat::HolderVisitor::writeHolder(const TypePtr& p) close(); } -Slice::GenCompat::HelperVisitor::HelperVisitor(const string& dir) : - JavaCompatVisitor(dir) +Slice::GenCompat::HelperVisitor::HelperVisitor(const string& dir, int warningLevel) : + JavaCompatVisitor(dir, warningLevel) { } @@ -5303,8 +5324,8 @@ Slice::GenCompat::HelperVisitor::writeOperation(const ClassDefPtr& p, const stri } } -Slice::GenCompat::ProxyVisitor::ProxyVisitor(const string& dir) : - JavaCompatVisitor(dir) +Slice::GenCompat::ProxyVisitor::ProxyVisitor(const string& dir, int warningLevel) : + JavaCompatVisitor(dir, warningLevel) { } @@ -5623,8 +5644,8 @@ Slice::GenCompat::ProxyVisitor::visitOperation(const OperationPtr& p) } } -Slice::GenCompat::DispatcherVisitor::DispatcherVisitor(const string& dir, bool tie) : - JavaCompatVisitor(dir), +Slice::GenCompat::DispatcherVisitor::DispatcherVisitor(const string& dir, bool tie, int warningLevel) : + JavaCompatVisitor(dir, warningLevel), _tie(tie) { } @@ -5825,9 +5846,12 @@ Slice::GenCompat::DispatcherVisitor::visitClassDefStart(const ClassDefPtr& p) string::size_type pos = serialVersionUID.rfind(":") + 1; if(pos == string::npos) { - ostringstream os; - os << "ignoring invalid serialVersionUID for class `" << p->scoped() << "'; generating default value"; - emitWarning("", "", os.str()); + if(warningLevel() > 0) + { + ostringstream os; + os << "ignoring invalid serialVersionUID for class `" << p->scoped() << "'; generating default value"; + emitWarning("", "", os.str()); + } out << computeSerialVersionUUID(p); } else @@ -5838,10 +5862,13 @@ Slice::GenCompat::DispatcherVisitor::visitClassDefStart(const ClassDefPtr& p) { if(!stringToInt64(serialVersionUID, v)) // conversion error { - ostringstream os; - os << "ignoring invalid serialVersionUID for class `" << p->scoped() - << "'; generating default value"; - emitWarning("", "", os.str()); + if(warningLevel() > 0) + { + ostringstream os; + os << "ignoring invalid serialVersionUID for class `" << p->scoped() + << "'; generating default value"; + emitWarning("", "", os.str()); + } out << computeSerialVersionUUID(p); } } @@ -5860,8 +5887,8 @@ Slice::GenCompat::DispatcherVisitor::visitClassDefStart(const ClassDefPtr& p) return false; } -Slice::GenCompat::BaseImplVisitor::BaseImplVisitor(const string& dir) : - JavaCompatVisitor(dir) +Slice::GenCompat::BaseImplVisitor::BaseImplVisitor(const string& dir, int warningLevel) : + JavaCompatVisitor(dir, warningLevel) { } @@ -6125,8 +6152,8 @@ Slice::GenCompat::BaseImplVisitor::writeOperation(Output& out, const string& pac } } -Slice::GenCompat::ImplVisitor::ImplVisitor(const string& dir) : - BaseImplVisitor(dir) +Slice::GenCompat::ImplVisitor::ImplVisitor(const string& dir, int warningLevel) : + BaseImplVisitor(dir, warningLevel) { } @@ -6181,8 +6208,8 @@ Slice::GenCompat::ImplVisitor::visitClassDefStart(const ClassDefPtr& p) return false; } -Slice::GenCompat::ImplTieVisitor::ImplTieVisitor(const string& dir) : - BaseImplVisitor(dir) +Slice::GenCompat::ImplTieVisitor::ImplTieVisitor(const string& dir, int warningLevel) : + BaseImplVisitor(dir, warningLevel) { } @@ -6270,8 +6297,8 @@ Slice::GenCompat::ImplTieVisitor::visitClassDefStart(const ClassDefPtr& p) return false; } -Slice::GenCompat::AsyncVisitor::AsyncVisitor(const string& dir) : - JavaCompatVisitor(dir) +Slice::GenCompat::AsyncVisitor::AsyncVisitor(const string& dir, int warningLevel) : + JavaCompatVisitor(dir, warningLevel) { } diff --git a/cpp/src/slice2java/GenCompat.h b/cpp/src/slice2java/GenCompat.h index 5f8ba85aa9d..25d2d0b7091 100644 --- a/cpp/src/slice2java/GenCompat.h +++ b/cpp/src/slice2java/GenCompat.h @@ -25,7 +25,7 @@ public: protected: - JavaCompatVisitor(const std::string&); + JavaCompatVisitor(const std::string&, int); enum ParamDir { InParam, OutParam }; @@ -131,7 +131,8 @@ public: const std::string&, const std::vector<std::string>&, const std::string&, - bool); + bool, + int); ~GenCompat(); void generate(const UnitPtr&); @@ -146,12 +147,13 @@ private: std::vector<std::string> _includePaths; std::string _dir; bool _tie; + int _warningLevel; class OpsVisitor : public JavaCompatVisitor { public: - OpsVisitor(const std::string&); + OpsVisitor(const std::string&, int); virtual bool visitClassDefStart(const ClassDefPtr&); @@ -163,7 +165,7 @@ private: { public: - PackageVisitor(const std::string&); + PackageVisitor(const std::string&, int); virtual bool visitModuleStart(const ModulePtr&); }; @@ -172,7 +174,7 @@ private: { public: - TypesVisitor(const std::string&); + TypesVisitor(const std::string&, int); virtual bool visitClassDefStart(const ClassDefPtr&); virtual void visitClassDefEnd(const ClassDefPtr&); @@ -196,7 +198,7 @@ private: { public: - CompactIdVisitor(const std::string&); + CompactIdVisitor(const std::string&, int); virtual bool visitClassDefStart(const ClassDefPtr&); }; @@ -205,7 +207,7 @@ private: { public: - HolderVisitor(const std::string&); + HolderVisitor(const std::string&, int); virtual bool visitClassDefStart(const ClassDefPtr&); virtual bool visitStructStart(const StructPtr&); @@ -222,7 +224,7 @@ private: { public: - HelperVisitor(const std::string&); + HelperVisitor(const std::string&, int); virtual bool visitClassDefStart(const ClassDefPtr&); virtual void visitSequence(const SequencePtr&); @@ -237,7 +239,7 @@ private: { public: - ProxyVisitor(const std::string&); + ProxyVisitor(const std::string&, int); virtual bool visitClassDefStart(const ClassDefPtr&); virtual void visitClassDefEnd(const ClassDefPtr&); @@ -248,7 +250,7 @@ private: { public: - DispatcherVisitor(const std::string&, bool); + DispatcherVisitor(const std::string&, bool, int); virtual bool visitClassDefStart(const ClassDefPtr&); @@ -260,7 +262,7 @@ private: { public: - BaseImplVisitor(const std::string&); + BaseImplVisitor(const std::string&, int); protected: @@ -286,7 +288,7 @@ private: { public: - ImplVisitor(const std::string&); + ImplVisitor(const std::string&, int); virtual bool visitClassDefStart(const ClassDefPtr&); }; @@ -295,7 +297,7 @@ private: { public: - ImplTieVisitor(const std::string&); + ImplTieVisitor(const std::string&, int); virtual bool visitClassDefStart(const ClassDefPtr&); }; @@ -304,7 +306,7 @@ private: { public: - AsyncVisitor(const std::string&); + AsyncVisitor(const std::string&, int); virtual void visitOperation(const OperationPtr&); }; diff --git a/cpp/src/slice2java/Main.cpp b/cpp/src/slice2java/Main.cpp index 86b07bf60d5..2ea06372755 100644 --- a/cpp/src/slice2java/Main.cpp +++ b/cpp/src/slice2java/Main.cpp @@ -87,6 +87,7 @@ 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" ; } @@ -115,6 +116,7 @@ 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; @@ -193,6 +195,8 @@ 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; @@ -350,7 +354,7 @@ compile(const vector<string>& argv) { if(compat) { - GenCompat gen(argv[0], icecpp->getBaseName(), includePaths, output, tie); + GenCompat gen(argv[0], icecpp->getBaseName(), includePaths, output, tie, warningLevel); gen.generate(p); if(impl) { @@ -360,39 +364,28 @@ compile(const vector<string>& argv) { gen.generateImplTie(p); } - if(!checksumClass.empty()) - { - // - // Calculate checksums for the Slice definitions in the unit. - // - ChecksumMap m = createChecksums(p); - copy(m.begin(), m.end(), inserter(checksums, checksums.begin())); - } - if(listGenerated) - { - FileTracker::instance()->setOutput(os.str(), false); - } } else { - Gen gen(argv[0], icecpp->getBaseName(), includePaths, output); + Gen gen(argv[0], icecpp->getBaseName(), includePaths, output, warningLevel); gen.generate(p); if(impl) { gen.generateImpl(p); } - if(!checksumClass.empty()) - { - // - // Calculate checksums for the Slice definitions in the unit. - // - ChecksumMap m = createChecksums(p); - copy(m.begin(), m.end(), inserter(checksums, checksums.begin())); - } - if(listGenerated) - { - FileTracker::instance()->setOutput(os.str(), false); - } + } + + if(!checksumClass.empty()) + { + // + // Calculate checksums for the Slice definitions in the unit. + // + ChecksumMap m = createChecksums(p); + copy(m.begin(), m.end(), inserter(checksums, checksums.begin())); + } + if(listGenerated) + { + FileTracker::instance()->setOutput(os.str(), false); } } catch(const Slice::FileException& ex) diff --git a/cpp/src/slice2js/Gen.cpp b/cpp/src/slice2js/Gen.cpp index 29c1c9f47dc..74297f80738 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) : _out(out) +Slice::JsVisitor::JsVisitor(Output& out, int warningLevel) : ParserVisitor(warningLevel), _out(out) { } @@ -329,9 +329,10 @@ Slice::JsVisitor::writeDocComment(const ContainedPtr& p, const string& deprecate _out << nl << " **/"; } -Slice::Gen::Gen(const string& base, const vector<string>& includePaths, const string& dir) : +Slice::Gen::Gen(const string& base, const vector<string>& includePaths, const string& dir, int warningLevel) : _includePaths(includePaths), - _useStdout(false) + _useStdout(false), + _warningLevel(warningLevel) { _fileBase = base; string::size_type pos = base.find_last_of("/\\"); @@ -361,10 +362,12 @@ 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) : +Slice::Gen::Gen(const string& base, const vector<string>& includePaths, const string& dir, ostream& out, + int warningLevel) : _out(out), _includePaths(includePaths), - _useStdout(true) + _useStdout(true), + _warningLevel(warningLevel) { _fileBase = base; string::size_type pos = base.find_last_of("/\\"); @@ -415,17 +418,17 @@ Slice::Gen::generate(const UnitPtr& p) _out.restoreIndent(); } } - RequireVisitor requireVisitor(_out, _includePaths, icejs, es6module); + RequireVisitor requireVisitor(_out, _includePaths, icejs, es6module, _warningLevel); p->visit(&requireVisitor, false); vector<string> seenModules = requireVisitor.writeRequires(p); - TypesVisitor typesVisitor(_out, seenModules, icejs); + TypesVisitor typesVisitor(_out, seenModules, icejs, _warningLevel); p->visit(&typesVisitor, false); // // Export the top-level modules. // - ExportVisitor exportVisitor(_out, icejs, es6module); + ExportVisitor exportVisitor(_out, icejs, es6module, _warningLevel); p->visit(&exportVisitor, false); if(!es6module) @@ -478,8 +481,8 @@ Slice::Gen::printHeader() } Slice::Gen::RequireVisitor::RequireVisitor(IceUtilInternal::Output& out, vector<string> includePaths, - bool icejs, bool es6modules) : - JsVisitor(out), + bool icejs, bool es6modules, int warningLevel) : + JsVisitor(out, warningLevel), _icejs(icejs), _es6modules(es6modules), _seenClass(false), @@ -840,8 +843,9 @@ Slice::Gen::RequireVisitor::writeRequires(const UnitPtr& p) return seenModules; } -Slice::Gen::TypesVisitor::TypesVisitor(IceUtilInternal::Output& out, vector<string> seenModules, bool icejs) : - JsVisitor(out), +Slice::Gen::TypesVisitor::TypesVisitor(IceUtilInternal::Output& out, vector<string> seenModules, bool icejs, + int warningLevel) : + JsVisitor(out, warningLevel), _seenModules(seenModules), _icejs(icejs) { @@ -1845,8 +1849,8 @@ Slice::Gen::TypesVisitor::encodeTypeForOperation(const TypePtr& type) return "???"; } -Slice::Gen::ExportVisitor::ExportVisitor(IceUtilInternal::Output& out, bool icejs, bool es6modules) : - JsVisitor(out), +Slice::Gen::ExportVisitor::ExportVisitor(IceUtilInternal::Output& out, bool icejs, bool es6modules, int warningLevel) : + JsVisitor(out, warningLevel), _icejs(icejs), _es6modules(es6modules) { diff --git a/cpp/src/slice2js/Gen.h b/cpp/src/slice2js/Gen.h index 8196ba1b48b..dc3b65f18ba 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&); + JsVisitor(::IceUtilInternal::Output&, int); virtual ~JsVisitor(); protected: @@ -44,12 +44,14 @@ public: Gen(const std::string&, const std::vector<std::string>&, - const std::string&); + const std::string&, + int); Gen(const std::string&, const std::vector<std::string>&, const std::string&, - std::ostream&); + std::ostream&, + int); ~Gen(); @@ -64,6 +66,7 @@ private: std::vector<std::string> _includePaths; std::string _fileBase; bool _useStdout; + int _warningLevel; void printHeader(); @@ -71,7 +74,7 @@ private: { public: - RequireVisitor(::IceUtilInternal::Output&, std::vector<std::string>, bool, bool); + RequireVisitor(::IceUtilInternal::Output&, std::vector<std::string>, bool, bool, int); virtual bool visitClassDefStart(const ClassDefPtr&); virtual bool visitStructStart(const StructPtr&); @@ -103,7 +106,7 @@ private: { public: - TypesVisitor(::IceUtilInternal::Output&, std::vector< std::string>, bool); + TypesVisitor(::IceUtilInternal::Output&, std::vector< std::string>, bool, int); virtual bool visitModuleStart(const ModulePtr&); virtual void visitModuleEnd(const ModulePtr&); @@ -127,7 +130,7 @@ private: { public: - ExportVisitor(::IceUtilInternal::Output&, bool, bool); + ExportVisitor(::IceUtilInternal::Output&, bool, bool, int); virtual bool visitModuleStart(const ModulePtr&); private: diff --git a/cpp/src/slice2js/Main.cpp b/cpp/src/slice2js/Main.cpp index a73738fcee9..03f17331e59 100644 --- a/cpp/src/slice2js/Main.cpp +++ b/cpp/src/slice2js/Main.cpp @@ -80,6 +80,7 @@ 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" ; } @@ -103,6 +104,7 @@ 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(); @@ -172,6 +174,8 @@ 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; @@ -335,12 +339,12 @@ compile(const vector<string>& argv) { if(useStdout) { - Gen gen(icecpp->getBaseName(), includePaths, output, cout); + Gen gen(icecpp->getBaseName(), includePaths, output, cout, warningLevel); gen.generate(p); } else { - Gen gen(icecpp->getBaseName(), includePaths, output); + Gen gen(icecpp->getBaseName(), includePaths, output, warningLevel); gen.generate(p); } } diff --git a/cpp/src/slice2objc/Gen.cpp b/cpp/src/slice2objc/Gen.cpp index 8b927cc9830..cc7b718c7e3 100644 --- a/cpp/src/slice2objc/Gen.cpp +++ b/cpp/src/slice2objc/Gen.cpp @@ -133,7 +133,11 @@ public: } -Slice::ObjCVisitor::ObjCVisitor(Output& h, Output& m, const string& dllExport) : _H(h), _M(m), _dllExport(dllExport) +Slice::ObjCVisitor::ObjCVisitor(Output& h, Output& m, const string& dllExport, int warningLevel) : + ParserVisitor(warningLevel), + _H(h), + _M(m), + _dllExport(dllExport) { } @@ -654,11 +658,12 @@ 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) - : _base(base), - _include(include), - _includePaths(includePaths), - _dllExport(dllExport) + const string& dir, const string& dllExport, int warningLevel) : + _base(base), + _include(include), + _includePaths(includePaths), + _dllExport(dllExport), + _warningLevel(warningLevel) { for(vector<string>::iterator p = _includePaths.begin(); p != _includePaths.end(); ++p) { @@ -729,7 +734,7 @@ Slice::Gen::operator!() const void Slice::Gen::generate(const UnitPtr& p) { - ObjCGenerator::validateMetaData(p); + ObjCGenerator::validateMetaData(p, _warningLevel); // // Give precedence to --dll-export command-line option @@ -829,25 +834,25 @@ Slice::Gen::generate(const UnitPtr& p) _M << nl << "# pragma clang diagnostic ignored \"-Wshadow-ivar\""; _M << nl << "#endif"; - UnitVisitor unitVisitor(_H, _M, _dllExport); + UnitVisitor unitVisitor(_H, _M, _dllExport, _warningLevel); p->visit(&unitVisitor, false); - ObjectDeclVisitor objectDeclVisitor(_H, _M, _dllExport); + ObjectDeclVisitor objectDeclVisitor(_H, _M, _dllExport, _warningLevel); p->visit(&objectDeclVisitor, false); - ProxyDeclVisitor proxyDeclVisitor(_H, _M, _dllExport); + ProxyDeclVisitor proxyDeclVisitor(_H, _M, _dllExport, _warningLevel); p->visit(&proxyDeclVisitor, false); - TypesVisitor typesVisitor(_H, _M, _dllExport); + TypesVisitor typesVisitor(_H, _M, _dllExport, _warningLevel); p->visit(&typesVisitor, false); - ProxyVisitor proxyVisitor(_H, _M, _dllExport); + ProxyVisitor proxyVisitor(_H, _M, _dllExport, _warningLevel); p->visit(&proxyVisitor, false); - DelegateMVisitor delegateMVisitor(_H, _M, _dllExport); + DelegateMVisitor delegateMVisitor(_H, _M, _dllExport, _warningLevel); p->visit(&delegateMVisitor, false); - HelperVisitor HelperVisitor(_H, _M, _dllExport); + HelperVisitor HelperVisitor(_H, _M, _dllExport, _warningLevel); p->visit(&HelperVisitor, false); } @@ -876,8 +881,8 @@ Slice::Gen::printHeader(Output& o) o << "\n// Ice version " << ICE_STRING_VERSION; } -Slice::Gen::UnitVisitor::UnitVisitor(Output& H, Output& M, const string& dllExport) : - ObjCVisitor(H, M, dllExport) +Slice::Gen::UnitVisitor::UnitVisitor(Output& H, Output& M, const string& dllExport, int warningLevel) : + ObjCVisitor(H, M, dllExport, warningLevel) { } @@ -918,8 +923,8 @@ Slice::Gen::UnitVisitor::visitUnitEnd(const UnitPtr& unit) } } -Slice::Gen::ObjectDeclVisitor::ObjectDeclVisitor(Output& H, Output& M, const string& dllExport) - : ObjCVisitor(H, M, dllExport) +Slice::Gen::ObjectDeclVisitor::ObjectDeclVisitor(Output& H, Output& M, const string& dllExport, int warningLevel) + : ObjCVisitor(H, M, dllExport, warningLevel) { } @@ -939,8 +944,8 @@ Slice::Gen::ObjectDeclVisitor::visitClassDecl(const ClassDeclPtr& p) _H << nl << "@protocol " << fixName(p) << ";"; } -Slice::Gen::ProxyDeclVisitor::ProxyDeclVisitor(Output& H, Output& M, const string& dllExport) - : ObjCVisitor(H, M, dllExport) +Slice::Gen::ProxyDeclVisitor::ProxyDeclVisitor(Output& H, Output& M, const string& dllExport, int warningLevel) + : ObjCVisitor(H, M, dllExport, warningLevel) { } @@ -954,8 +959,8 @@ Slice::Gen::ProxyDeclVisitor::visitClassDecl(const ClassDeclPtr& p) } } -Slice::Gen::TypesVisitor::TypesVisitor(Output& H, Output& M, const string& dllExport) - : ObjCVisitor(H, M, dllExport) +Slice::Gen::TypesVisitor::TypesVisitor(Output& H, Output& M, const string& dllExport, int warningLevel) + : ObjCVisitor(H, M, dllExport, warningLevel) { } @@ -2216,8 +2221,8 @@ Slice::Gen::TypesVisitor::writeMemberUnmarshal(const DataMemberList& dataMembers } } -Slice::Gen::ProxyVisitor::ProxyVisitor(Output& H, Output& M, const string& dllExport) - : ObjCVisitor(H, M, dllExport) +Slice::Gen::ProxyVisitor::ProxyVisitor(Output& H, Output& M, const string& dllExport, int warningLevel) + : ObjCVisitor(H, M, dllExport, warningLevel) { } @@ -2335,8 +2340,8 @@ Slice::Gen::ProxyVisitor::visitOperation(const OperationPtr& p) _H << " response" << responseExceptionSentDecl << deprecateSymbol << ";"; } -Slice::Gen::HelperVisitor::HelperVisitor(Output& H, Output& M, const string& dllExport) : - ObjCVisitor(H, M, dllExport) +Slice::Gen::HelperVisitor::HelperVisitor(Output& H, Output& M, const string& dllExport, int warningLevel) : + ObjCVisitor(H, M, dllExport, warningLevel) { } @@ -2638,8 +2643,8 @@ Slice::Gen::HelperVisitor::visitStructStart(const StructPtr& p) return false; } -Slice::Gen::DelegateMVisitor::DelegateMVisitor(Output& H, Output& M, const string& dllExport) - : ObjCVisitor(H, M, dllExport) +Slice::Gen::DelegateMVisitor::DelegateMVisitor(Output& H, Output& M, const string& dllExport, int warningLevel) + : ObjCVisitor(H, M, dllExport, warningLevel) { } diff --git a/cpp/src/slice2objc/Gen.h b/cpp/src/slice2objc/Gen.h index 0c9ef639e7d..6b6c4c99b10 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&); + ObjCVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int); virtual ~ObjCVisitor(); protected: @@ -54,7 +54,8 @@ public: const std::string&, const std::vector<std::string>&, const std::string&, - const std::string&); + const std::string&, + int); ~Gen(); bool operator!() const; // Returns true if there was a constructor error @@ -71,6 +72,7 @@ private: std::string _include; std::vector<std::string> _includePaths; std::string _dllExport; + int _warningLevel; void printHeader(::IceUtilInternal::Output&); @@ -78,7 +80,7 @@ private: { public: - UnitVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&); + UnitVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int); virtual bool visitModuleStart(const ModulePtr&); virtual void visitUnitEnd(const UnitPtr&); @@ -92,7 +94,7 @@ private: { public: - ObjectDeclVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&); + ObjectDeclVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int); virtual void visitClassDecl(const ClassDeclPtr&); }; @@ -101,7 +103,7 @@ private: { public: - ProxyDeclVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&); + ProxyDeclVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int); virtual void visitClassDecl(const ClassDeclPtr&); }; @@ -110,7 +112,7 @@ private: { public: - TypesVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&); + TypesVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int); virtual bool visitModuleStart(const ModulePtr&); virtual void visitModuleEnd(const ModulePtr&); @@ -156,7 +158,7 @@ private: { public: - ProxyVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&); + ProxyVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int); virtual bool visitClassDefStart(const ClassDefPtr&); virtual void visitClassDefEnd(const ClassDefPtr&); @@ -167,7 +169,7 @@ private: { public: - HelperVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&); + HelperVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int); virtual bool visitClassDefStart(const ClassDefPtr&); virtual void visitEnum(const EnumPtr&); @@ -180,7 +182,7 @@ private: { public: - DelegateMVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&); + DelegateMVisitor(::IceUtilInternal::Output&, ::IceUtilInternal::Output&, const std::string&, int); 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 24ac096d92c..7877c072ca0 100644 --- a/cpp/src/slice2objc/Main.cpp +++ b/cpp/src/slice2objc/Main.cpp @@ -80,6 +80,7 @@ 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! } @@ -105,6 +106,7 @@ 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(); @@ -173,6 +175,8 @@ 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; @@ -285,7 +289,8 @@ compile(const vector<string>& argv) { try { - Gen gen(argv[0], icecpp->getBaseName(), include, includePaths, output, dllExport); + Gen gen(argv[0], icecpp->getBaseName(), include, includePaths, output, dllExport, + warningLevel); if(!gen) { u->destroy(); diff --git a/cpp/src/slice2objc/ObjCUtil.cpp b/cpp/src/slice2objc/ObjCUtil.cpp index 1087a9a5bfc..ad2787308bc 100644 --- a/cpp/src/slice2objc/ObjCUtil.cpp +++ b/cpp/src/slice2objc/ObjCUtil.cpp @@ -1043,16 +1043,17 @@ Slice::ObjCGenerator::writeOptParamMarshalUnmarshalCode(Output &out, const TypeP } void -Slice::ObjCGenerator::validateMetaData(const UnitPtr& u) +Slice::ObjCGenerator::validateMetaData(const UnitPtr& u, int warningLevel) { - MetaDataVisitor visitor; + MetaDataVisitor visitor(warningLevel); u->visit(&visitor, true); } const string Slice::ObjCGenerator::MetaDataVisitor::_objcPrefix = "objc:"; const string Slice::ObjCGenerator::MetaDataVisitor::_msg = "ignoring invalid metadata"; -Slice::ObjCGenerator::MetaDataVisitor::MetaDataVisitor() +Slice::ObjCGenerator::MetaDataVisitor::MetaDataVisitor(int warningLevel) : + ParserVisitor(warningLevel) { } @@ -1085,10 +1086,13 @@ Slice::ObjCGenerator::MetaDataVisitor::visitUnitStart(const UnitPtr& p) headerDir++; if(headerDir > 1) { - ostringstream ostr; - ostr << "ignoring invalid global metadata `" << s - << "': directive can appear only once per file"; - emitWarning(file, -1, ostr.str()); + if(warningLevel() > 0) + { + ostringstream ostr; + ostr << "ignoring invalid global metadata `" << s + << "': directive can appear only once per file"; + emitWarning(file, -1, ostr.str()); + } globalMetaData.remove(s); } continue; @@ -1098,17 +1102,23 @@ Slice::ObjCGenerator::MetaDataVisitor::visitUnitStart(const UnitPtr& p) dllExport++; if(dllExport > 1) { - ostringstream ostr; - ostr << "ignoring invalid global metadata `" << s - << "': directive can appear only once per file"; - emitWarning(file, -1, ostr.str()); + if(warningLevel() > 0) + { + ostringstream ostr; + ostr << "ignoring invalid global metadata `" << s + << "': directive can appear only once per file"; + emitWarning(file, -1, ostr.str()); + } globalMetaData.remove(s); } continue; } - ostringstream ostr; - ostr << "ignoring invalid global metadata `" << s << "'"; - emitWarning(file, -1, ostr.str()); + if(warningLevel() > 0) + { + ostringstream ostr; + ostr << "ignoring invalid global metadata `" << s << "'"; + emitWarning(file, -1, ostr.str()); + } globalMetaData.remove(s); } } diff --git a/cpp/src/slice2objc/ObjCUtil.h b/cpp/src/slice2objc/ObjCUtil.h index 83f516f3027..11e4cece024 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&); + static void validateMetaData(const UnitPtr&, int); protected: struct ModulePrefix @@ -81,7 +81,7 @@ private: class MetaDataVisitor : public ParserVisitor { public: - MetaDataVisitor(); + 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 73822f05f9d..205aec133b3 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); + CodeVisitor(IceUtilInternal::Output&, bool, int); virtual void visitClassDecl(const ClassDeclPtr&); virtual bool visitClassDefStart(const ClassDefPtr&); @@ -141,8 +141,10 @@ private: // // CodeVisitor implementation. // -CodeVisitor::CodeVisitor(Output& out, bool ns) : - _out(out), _ns(ns) +CodeVisitor::CodeVisitor(Output& out, bool ns, int warningLevel) : + ParserVisitor(warningLevel), + _out(out), + _ns(ns) { } @@ -961,8 +963,13 @@ CodeVisitor::visitDictionary(const DictionaryPtr& p) case Slice::Builtin::KindFloat: case Slice::Builtin::KindDouble: - emitWarning(p->file(), p->line(), "dictionary key type not supported in PHP"); + { + if(warningLevel() > 0) + { + emitWarning(p->file(), p->line(), "dictionary key type not supported in PHP"); + } break; + } case Slice::Builtin::KindObject: case Slice::Builtin::KindObjectProxy: @@ -973,7 +980,10 @@ CodeVisitor::visitDictionary(const DictionaryPtr& p) } else if(!EnumPtr::dynamicCast(keyType)) { - emitWarning(p->file(), p->line(), "dictionary key type not supported in PHP"); + if(warningLevel() > 0) + { + emitWarning(p->file(), p->line(), "dictionary key type not supported in PHP"); + } } string type = getTypeVar(p); @@ -1463,7 +1473,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) +generate(const UnitPtr& un, bool all, bool checksum, bool ns, const vector<string>& includePaths, Output& out, int warningLevel) { if(!all) { @@ -1494,7 +1504,7 @@ generate(const UnitPtr& un, bool all, bool checksum, bool ns, const vector<strin } } - CodeVisitor codeVisitor(out, ns); + CodeVisitor codeVisitor(out, ns, warningLevel); un->visit(&codeVisitor, false); if(checksum) @@ -1610,6 +1620,7 @@ 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" ; } @@ -1634,6 +1645,7 @@ 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(); @@ -1705,6 +1717,8 @@ 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; @@ -1856,7 +1870,7 @@ compile(const vector<string>& argv) // // Generate the PHP mapping. // - generate(u, all, checksum, ns, includePaths, out); + generate(u, all, checksum, ns, includePaths, out, warningLevel); out << "?>\n"; out.close(); |