From 6a66d3287172c9275303177aa285595a08d28aa8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Wed, 20 Oct 2010 22:15:35 +0200 Subject: [PATCH] JAVA: better handling of java code --- lib/checkclass.cpp | 7 +++++++ lib/checkobsoletefunctions.cpp | 5 +++++ lib/tokenize.cpp | 20 ++++++++++++++++++++ test/testtokenize.cpp | 27 +++++++++++++++++++++++++++ 4 files changed, 59 insertions(+) diff --git a/lib/checkclass.cpp b/lib/checkclass.cpp index 4d7df2c29..d074b7f06 100644 --- a/lib/checkclass.cpp +++ b/lib/checkclass.cpp @@ -1981,6 +1981,13 @@ void CheckClass::checkConst() if (!_settings->_checkCodingStyle || _settings->ifcfg) 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) + { + return; + } + createSymbolDatabase(); std::multimap::iterator it; diff --git a/lib/checkobsoletefunctions.cpp b/lib/checkobsoletefunctions.cpp index ff0137ef6..48451eae7 100644 --- a/lib/checkobsoletefunctions.cpp +++ b/lib/checkobsoletefunctions.cpp @@ -36,6 +36,11 @@ void CheckObsoleteFunctions::obsoleteFunctions() if (!_settings->_checkCodingStyle) 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) + return; + for (const Token *tok = _tokenizer->tokens(); tok; tok = tok->next()) { std::list< std::pair >::const_iterator it(_obsoleteFunctions.begin()), itend(_obsoleteFunctions.end()); diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index a3f9c505c..e384f1fbb 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -1744,6 +1744,22 @@ bool Tokenizer::tokenize(std::istream &code, } } + // Simplify JAVA code + if (_files[0].find(".java") != std::string::npos) + { + for (Token *tok = _tokens; tok; tok = tok->next()) + { + if (Token::Match(tok, ") throws %var% {")) + Token::eraseTokens(tok, tok->tokAt(3)); + else if (tok->str() == "private") + tok->str("private:"); + else if (tok->str() == "protected") + tok->str("protected:"); + else if (tok->str() == "public") + tok->str("public:"); + } + } + // remove inline SQL (Oracle PRO*C). Ticket: #1959 for (Token *tok = _tokens; tok; tok = tok->next()) { @@ -6612,6 +6628,10 @@ 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) + return; + std::string className; int classLevel = 0; for (Token *tok = _tokens; tok; tok = tok->next()) diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 12ebc0ca2..40a276856 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -268,6 +268,9 @@ private: // Tokenize C# TEST_CASE(cs); + + // Tokenize JAVA + TEST_CASE(java); } @@ -4578,6 +4581,30 @@ private: { ASSERT_EQUALS("; int * i ;", tokenizeAndStringify("; int [] i;")); } + + std::string javatest(const char javacode[]) + { + // tokenize.. + Tokenizer tokenizer(0, this); + std::istringstream istr(javacode); + tokenizer.tokenize(istr, "test.java"); + + std::ostringstream ostr; + for (const Token *tok = tokenizer.tokens(); tok; tok = tok->next()) + { + ostr << tok->str(); + if (tok->next()) + ostr << " "; + } + + return ostr.str(); + } + + + void java() + { + ASSERT_EQUALS("void f ( ) { }", javatest("void f() throws Exception { }")); + } }; REGISTER_TEST(TestTokenizer)