From 9435fde551c91cf1c2a7ebc22e09e9c2c82554e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Thu, 28 Oct 2010 18:51:55 +0200 Subject: [PATCH] Tokenizer: Added function for checking if code is Java/C# --- lib/checkclass.cpp | 3 +-- lib/checkobsoletefunctions.cpp | 3 +-- lib/checkother.cpp | 3 +-- lib/tokenize.cpp | 6 +++--- lib/tokenize.h | 12 ++++++++++++ 5 files changed, 18 insertions(+), 9 deletions(-) diff --git a/lib/checkclass.cpp b/lib/checkclass.cpp index 7dce4fe67..a089e042b 100644 --- a/lib/checkclass.cpp +++ b/lib/checkclass.cpp @@ -1984,8 +1984,7 @@ void CheckClass::checkConst() return; // Don't check C# and JAVA classes - if (_tokenizer->getFiles()->at(0).find(".java") != std::string::npos || - _tokenizer->getFiles()->at(0).find(".cs") != std::string::npos) + if (_tokenizer->isJavaOrCSharp()) { return; } diff --git a/lib/checkobsoletefunctions.cpp b/lib/checkobsoletefunctions.cpp index 48451eae7..f68d5eb78 100644 --- a/lib/checkobsoletefunctions.cpp +++ b/lib/checkobsoletefunctions.cpp @@ -37,8 +37,7 @@ void CheckObsoleteFunctions::obsoleteFunctions() return; // Don't check C# and Java code - if (_tokenizer->getFiles()->at(0).find(".java") != std::string::npos || - _tokenizer->getFiles()->at(0).find(".cs") != std::string::npos) + if (_tokenizer->isJavaOrCSharp()) return; for (const Token *tok = _tokenizer->tokens(); tok; tok = tok->next()) diff --git a/lib/checkother.cpp b/lib/checkother.cpp index b4a9899a4..50c1d3835 100644 --- a/lib/checkother.cpp +++ b/lib/checkother.cpp @@ -2212,8 +2212,7 @@ void CheckOther::checkIncompleteStatement() void CheckOther::strPlusChar() { // Don't use this check for Java and C# programs.. - if (_tokenizer->getFiles()->at(0).find(".java") != std::string::npos || - _tokenizer->getFiles()->at(0).find(".cs") != std::string::npos) + if (_tokenizer->isJavaOrCSharp()) { return; } diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 9eb2dbfd5..1ea17ccc9 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -1744,8 +1744,8 @@ bool Tokenizer::tokenize(std::istream &code, } } - // Simplify JAVA code - if (_files[0].find(".java") != std::string::npos) + // Simplify JAVA/C# code + if (isJavaOrCSharp() && _files[0].find(".java") != std::string::npos) { for (Token *tok = _tokens; tok; tok = tok->next()) { @@ -6649,7 +6649,7 @@ bool Tokenizer::duplicateDefinition(Token ** tokPtr, const Token * name) void Tokenizer::simplifyEnum() { // Don't simplify enums in java files - if (_files[0].find(".java") != std::string::npos) + if (isJavaOrCSharp()) return; std::string className; diff --git a/lib/tokenize.h b/lib/tokenize.h index e676bc9f1..43082d97c 100644 --- a/lib/tokenize.h +++ b/lib/tokenize.h @@ -45,6 +45,18 @@ public: Tokenizer(const Settings * settings, ErrorLogger *errorLogger); virtual ~Tokenizer(); + /** Is the code JAVA/C#. Used for bailouts */ + bool isJavaOrCSharp() const + { + if (_files.size() != 1) + return false; + const std::string::size_type pos = _files[0].rfind("."); + if (pos != std::string::npos) + return (_files[0].substr(pos) == ".java" || + _files[0].substr(pos) == ".cs"); + return false; + } + /** * Tokenize code * @param code input stream for code, e.g.