Remove simplifyQtSignalsSlots(), update qt.cfg (#4807)
This commit is contained in:
parent
29b651f264
commit
a0cc35e3fa
|
@ -5165,6 +5165,7 @@
|
||||||
<define name="Q_NULLPTR" value="NULL"/>
|
<define name="Q_NULLPTR" value="NULL"/>
|
||||||
<define name="Q_OBJECT" value=""/>
|
<define name="Q_OBJECT" value=""/>
|
||||||
<define name="Q_PRIVATE_SLOT(d, signature)" value=""/>
|
<define name="Q_PRIVATE_SLOT(d, signature)" value=""/>
|
||||||
|
<define name="Q_SLOTS" value=""/>
|
||||||
<define name="Q_PROPERTY(X)" value=""/>
|
<define name="Q_PROPERTY(X)" value=""/>
|
||||||
<define name="Q_Q(Class)" value="Class * const q = q_func()"/>
|
<define name="Q_Q(Class)" value="Class * const q = q_func()"/>
|
||||||
<define name="Q_RETURN_ARG(type, data)" value="QReturnArgument<type >(#type, data)"/>
|
<define name="Q_RETURN_ARG(type, data)" value="QReturnArgument<type >(#type, data)"/>
|
||||||
|
@ -5197,7 +5198,10 @@
|
||||||
<define name="Q_FOREACH(A,B)" value="for(A:B)"/>
|
<define name="Q_FOREACH(A,B)" value="for(A:B)"/>
|
||||||
<define name="foreach(A,B)" value="for(A:B)"/>
|
<define name="foreach(A,B)" value="for(A:B)"/>
|
||||||
<define name="forever" value="for (;;)"/>
|
<define name="forever" value="for (;;)"/>
|
||||||
<define name="emit(X)" value="(X)"/>
|
<define name="emit" value=""/>
|
||||||
|
<define name="slots" value=""/>
|
||||||
|
<define name="signals" value="protected"/>
|
||||||
|
<define name="Q_SIGNALS" value="protected"/>
|
||||||
<define name="Q_OVERRIDE(x)" value=""/>
|
<define name="Q_OVERRIDE(x)" value=""/>
|
||||||
<define name="Q_PLUGIN_METADATA(x)" value=""/>
|
<define name="Q_PLUGIN_METADATA(x)" value=""/>
|
||||||
<define name="Q_ASSERT(condition)" value="assert(condition)"/>
|
<define name="Q_ASSERT(condition)" value="assert(condition)"/>
|
||||||
|
|
|
@ -4987,9 +4987,6 @@ bool Tokenizer::simplifyTokenList1(const char FileName[])
|
||||||
if (Settings::terminated())
|
if (Settings::terminated())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Remove Qt signals and slots
|
|
||||||
simplifyQtSignalsSlots();
|
|
||||||
|
|
||||||
// remove Borland stuff..
|
// remove Borland stuff..
|
||||||
simplifyBorland();
|
simplifyBorland();
|
||||||
|
|
||||||
|
@ -9136,65 +9133,6 @@ void Tokenizer::simplifyBorland()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove Qt signals and slots
|
|
||||||
void Tokenizer::simplifyQtSignalsSlots()
|
|
||||||
{
|
|
||||||
if (isC())
|
|
||||||
return;
|
|
||||||
if (std::none_of(mSettings->libraries.cbegin(), mSettings->libraries.cend(), [](const std::string& lib) {
|
|
||||||
return lib == "qt";
|
|
||||||
}))
|
|
||||||
return;
|
|
||||||
for (Token *tok = list.front(); tok; tok = tok->next()) {
|
|
||||||
// check for emit which can be outside of class
|
|
||||||
if (Token::Match(tok, "emit|Q_EMIT %name% (") &&
|
|
||||||
Token::simpleMatch(tok->linkAt(2), ") ;")) {
|
|
||||||
tok->deleteThis();
|
|
||||||
} else if (!Token::Match(tok, "class %name% :|::|{"))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (tok->previous() && tok->previous()->str() == "enum") {
|
|
||||||
tok = tok->tokAt(2);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// count { and } for tok2
|
|
||||||
int indentlevel = 0;
|
|
||||||
for (Token *tok2 = tok; tok2; tok2 = tok2->next()) {
|
|
||||||
if (tok2->str() == "{") {
|
|
||||||
++indentlevel;
|
|
||||||
if (indentlevel == 1)
|
|
||||||
tok = tok2;
|
|
||||||
else
|
|
||||||
tok2 = tok2->link();
|
|
||||||
} else if (tok2->str() == "}") {
|
|
||||||
if (indentlevel<2)
|
|
||||||
break;
|
|
||||||
else
|
|
||||||
--indentlevel;
|
|
||||||
} else if (tok2->str() == ";" && indentlevel == 0)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (tok2->strAt(1) == "Q_OBJECT")
|
|
||||||
tok2->deleteNext();
|
|
||||||
|
|
||||||
if (Token::Match(tok2->next(), "public|protected|private slots|Q_SLOTS :")) {
|
|
||||||
tok2 = tok2->next();
|
|
||||||
tok2->str(tok2->str() + ":");
|
|
||||||
tok2->deleteNext(2);
|
|
||||||
tok2 = tok2->previous();
|
|
||||||
} else if (Token::Match(tok2->next(), "signals|Q_SIGNALS :")) {
|
|
||||||
tok2 = tok2->next();
|
|
||||||
tok2->str("protected:");
|
|
||||||
tok2->deleteNext();
|
|
||||||
} else if (Token::Match(tok2->next(), "emit|Q_EMIT %name% (") &&
|
|
||||||
Token::simpleMatch(tok2->linkAt(3), ") ;")) {
|
|
||||||
tok2->deleteNext();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Tokenizer::createSymbolDatabase()
|
void Tokenizer::createSymbolDatabase()
|
||||||
{
|
{
|
||||||
if (!mSymbolDatabase)
|
if (!mSymbolDatabase)
|
||||||
|
|
|
@ -536,11 +536,6 @@ private:
|
||||||
*/
|
*/
|
||||||
void simplifyBorland();
|
void simplifyBorland();
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove Qt signals and slots
|
|
||||||
*/
|
|
||||||
void simplifyQtSignalsSlots();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Collapse operator name tokens into single token
|
* Collapse operator name tokens into single token
|
||||||
* operator = => operator=
|
* operator = => operator=
|
||||||
|
|
|
@ -494,4 +494,73 @@ namespace {
|
||||||
}
|
}
|
||||||
void slot() {};
|
void slot() {};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// findFunction11
|
||||||
|
class Fred : public QObject {
|
||||||
|
Q_OBJECT
|
||||||
|
private slots:
|
||||||
|
void foo();
|
||||||
|
};
|
||||||
|
void Fred::foo() { }
|
||||||
|
|
||||||
|
// bitfields14
|
||||||
|
class X {
|
||||||
|
signals:
|
||||||
|
};
|
||||||
|
|
||||||
|
// simplifyQtSignalsSlots1
|
||||||
|
class Counter1 : public QObject {
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
Counter1() { m_value = 0; }
|
||||||
|
int value() const { return m_value; }
|
||||||
|
public slots:
|
||||||
|
void setValue(int value);
|
||||||
|
signals:
|
||||||
|
void valueChanged(int newValue);
|
||||||
|
private:
|
||||||
|
int m_value;
|
||||||
|
};
|
||||||
|
void Counter1::setValue(int value) {
|
||||||
|
if (value != m_value) {
|
||||||
|
m_value = value;
|
||||||
|
emit valueChanged(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Counter2 : public QObject {
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
Counter2() { m_value = 0; }
|
||||||
|
int value() const { return m_value; }
|
||||||
|
public Q_SLOTS:
|
||||||
|
void setValue(int value);
|
||||||
|
Q_SIGNALS:
|
||||||
|
void valueChanged(int newValue);
|
||||||
|
private:
|
||||||
|
int m_value;
|
||||||
|
};
|
||||||
|
void Counter2::setValue(int value) {
|
||||||
|
if (value != m_value) {
|
||||||
|
m_value = value;
|
||||||
|
emit valueChanged(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class MyObject1 : public QObject {
|
||||||
|
MyObject1() {}
|
||||||
|
~MyObject1() {}
|
||||||
|
public slots:
|
||||||
|
signals:
|
||||||
|
void test() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
class MyObject2 : public QObject {
|
||||||
|
Q_OBJECT
|
||||||
|
public slots:
|
||||||
|
};
|
||||||
|
|
||||||
|
// simplifyQtSignalsSlots2
|
||||||
|
namespace Foo { class Bar; }
|
||||||
|
class Foo::Bar : public QObject { private slots: };
|
||||||
}
|
}
|
||||||
|
|
|
@ -407,7 +407,6 @@ private:
|
||||||
TEST_CASE(findFunction8);
|
TEST_CASE(findFunction8);
|
||||||
TEST_CASE(findFunction9);
|
TEST_CASE(findFunction9);
|
||||||
TEST_CASE(findFunction10); // #7673
|
TEST_CASE(findFunction10); // #7673
|
||||||
TEST_CASE(findFunction11);
|
|
||||||
TEST_CASE(findFunction12);
|
TEST_CASE(findFunction12);
|
||||||
TEST_CASE(findFunction13);
|
TEST_CASE(findFunction13);
|
||||||
TEST_CASE(findFunction14);
|
TEST_CASE(findFunction14);
|
||||||
|
@ -6074,21 +6073,6 @@ private:
|
||||||
ASSERT_EQUALS(true, db && f && f->function() && f->function()->tokenDef->linenr() == 2);
|
ASSERT_EQUALS(true, db && f && f->function() && f->function()->tokenDef->linenr() == 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
void findFunction11() {
|
|
||||||
settings1.libraries.emplace_back("qt");
|
|
||||||
GET_SYMBOL_DB("class Fred : public QObject {\n"
|
|
||||||
" Q_OBJECT\n"
|
|
||||||
"private slots:\n"
|
|
||||||
" void foo();\n"
|
|
||||||
"};\n"
|
|
||||||
"void Fred::foo() { }");
|
|
||||||
settings1.libraries.pop_back();
|
|
||||||
ASSERT_EQUALS("", errout.str());
|
|
||||||
|
|
||||||
const Token *f = Token::findsimplematch(tokenizer.tokens(), "foo ( ) {");
|
|
||||||
ASSERT_EQUALS(true, db && f && f->function() && f->function()->tokenDef->linenr() == 4);
|
|
||||||
}
|
|
||||||
|
|
||||||
void findFunction12() {
|
void findFunction12() {
|
||||||
GET_SYMBOL_DB("void foo(std::string a) { }\n"
|
GET_SYMBOL_DB("void foo(std::string a) { }\n"
|
||||||
"void foo(long long a) { }\n"
|
"void foo(long long a) { }\n"
|
||||||
|
|
|
@ -304,7 +304,6 @@ private:
|
||||||
TEST_CASE(bitfields10);
|
TEST_CASE(bitfields10);
|
||||||
TEST_CASE(bitfields12); // ticket #3485 (segmentation fault)
|
TEST_CASE(bitfields12); // ticket #3485 (segmentation fault)
|
||||||
TEST_CASE(bitfields13); // ticket #3502 (segmentation fault)
|
TEST_CASE(bitfields13); // ticket #3502 (segmentation fault)
|
||||||
TEST_CASE(bitfields14); // ticket #4561 (segfault for 'class a { signals: };')
|
|
||||||
TEST_CASE(bitfields15); // ticket #7747 (enum Foo {A,B}:4;)
|
TEST_CASE(bitfields15); // ticket #7747 (enum Foo {A,B}:4;)
|
||||||
TEST_CASE(bitfields16); // Save bitfield bit count
|
TEST_CASE(bitfields16); // Save bitfield bit count
|
||||||
|
|
||||||
|
@ -314,10 +313,6 @@ private:
|
||||||
TEST_CASE(microsoftString);
|
TEST_CASE(microsoftString);
|
||||||
|
|
||||||
TEST_CASE(borland);
|
TEST_CASE(borland);
|
||||||
|
|
||||||
TEST_CASE(simplifyQtSignalsSlots1);
|
|
||||||
TEST_CASE(simplifyQtSignalsSlots2);
|
|
||||||
|
|
||||||
TEST_CASE(simplifySQL);
|
TEST_CASE(simplifySQL);
|
||||||
|
|
||||||
TEST_CASE(simplifyCAlternativeTokens);
|
TEST_CASE(simplifyCAlternativeTokens);
|
||||||
|
@ -4475,10 +4470,6 @@ private:
|
||||||
ASSERT_EQUALS("x y ;", tokenizeAndStringify("struct{x y:};\n"));
|
ASSERT_EQUALS("x y ;", tokenizeAndStringify("struct{x y:};\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void bitfields14() { // #4561 - crash for 'signals:'
|
|
||||||
ASSERT_EQUALS("class x { protected: } ;", tokenizeAndStringify("class x { signals: };\n"));
|
|
||||||
}
|
|
||||||
|
|
||||||
void bitfields15() { // #7747 - enum Foo {A,B}:4;
|
void bitfields15() { // #7747 - enum Foo {A,B}:4;
|
||||||
ASSERT_EQUALS("struct AB {\n"
|
ASSERT_EQUALS("struct AB {\n"
|
||||||
"enum Foo { A , B } ; enum Foo Anonymous ;\n"
|
"enum Foo { A , B } ; enum Foo Anonymous ;\n"
|
||||||
|
@ -4698,128 +4689,6 @@ private:
|
||||||
tokenizeAndStringify("class Fred { __property int x = { } };", true, Settings::Win32A));
|
tokenizeAndStringify("class Fred { __property int x = { } };", true, Settings::Win32A));
|
||||||
}
|
}
|
||||||
|
|
||||||
void simplifyQtSignalsSlots1() {
|
|
||||||
const char code1[] = "class Counter : public QObject "
|
|
||||||
"{ "
|
|
||||||
" Q_OBJECT "
|
|
||||||
"public: "
|
|
||||||
" Counter() { m_value = 0; } "
|
|
||||||
" int value() const { return m_value; } "
|
|
||||||
"public slots: "
|
|
||||||
" void setValue(int value); "
|
|
||||||
"signals: "
|
|
||||||
" void valueChanged(int newValue); "
|
|
||||||
"private: "
|
|
||||||
" int m_value; "
|
|
||||||
"}; "
|
|
||||||
"void Counter::setValue(int value) "
|
|
||||||
"{ "
|
|
||||||
" if (value != m_value) { "
|
|
||||||
" m_value = value; "
|
|
||||||
" emit valueChanged(value); "
|
|
||||||
" } "
|
|
||||||
"}";
|
|
||||||
|
|
||||||
const char result1[] = "class Counter : public QObject "
|
|
||||||
"{ "
|
|
||||||
"public: "
|
|
||||||
"Counter ( ) { m_value = 0 ; } "
|
|
||||||
"int value ( ) const { return m_value ; } "
|
|
||||||
"public: "
|
|
||||||
"void setValue ( int value ) ; "
|
|
||||||
"protected: "
|
|
||||||
"void valueChanged ( int newValue ) ; "
|
|
||||||
"private: "
|
|
||||||
"int m_value ; "
|
|
||||||
"} ; "
|
|
||||||
"void Counter :: setValue ( int value ) "
|
|
||||||
"{ "
|
|
||||||
"if ( value != m_value ) { "
|
|
||||||
"m_value = value ; "
|
|
||||||
"valueChanged ( value ) ; "
|
|
||||||
"} "
|
|
||||||
"}";
|
|
||||||
|
|
||||||
ASSERT_EQUALS(result1, tokenizeAndStringify(code1));
|
|
||||||
|
|
||||||
const char code2[] = "class Counter : public QObject "
|
|
||||||
"{ "
|
|
||||||
" Q_OBJECT "
|
|
||||||
"public: "
|
|
||||||
" Counter() { m_value = 0; } "
|
|
||||||
" int value() const { return m_value; } "
|
|
||||||
"public Q_SLOTS: "
|
|
||||||
" void setValue(int value); "
|
|
||||||
"Q_SIGNALS: "
|
|
||||||
" void valueChanged(int newValue); "
|
|
||||||
"private: "
|
|
||||||
" int m_value; "
|
|
||||||
"};"
|
|
||||||
"void Counter::setValue(int value) "
|
|
||||||
"{ "
|
|
||||||
" if (value != m_value) { "
|
|
||||||
" m_value = value; "
|
|
||||||
" emit valueChanged(value); "
|
|
||||||
" } "
|
|
||||||
"}";
|
|
||||||
|
|
||||||
const char result2[] = "class Counter : public QObject "
|
|
||||||
"{ "
|
|
||||||
"public: "
|
|
||||||
"Counter ( ) { m_value = 0 ; } "
|
|
||||||
"int value ( ) const { return m_value ; } "
|
|
||||||
"public: "
|
|
||||||
"void setValue ( int value ) ; "
|
|
||||||
"protected: "
|
|
||||||
"void valueChanged ( int newValue ) ; "
|
|
||||||
"private: "
|
|
||||||
"int m_value ; "
|
|
||||||
"} ; "
|
|
||||||
"void Counter :: setValue ( int value ) "
|
|
||||||
"{ "
|
|
||||||
"if ( value != m_value ) { "
|
|
||||||
"m_value = value ; "
|
|
||||||
"valueChanged ( value ) ; "
|
|
||||||
"} "
|
|
||||||
"}";
|
|
||||||
|
|
||||||
ASSERT_EQUALS(result2, tokenizeAndStringify(code2));
|
|
||||||
|
|
||||||
const char code3[] = "class MyObject : public QObject {"
|
|
||||||
" MyObject() {}"
|
|
||||||
" ~MyObject() {}"
|
|
||||||
" public slots:"
|
|
||||||
" signals:"
|
|
||||||
" void test() {}"
|
|
||||||
"};";
|
|
||||||
const char result3[] = "class MyObject : public QObject { "
|
|
||||||
"MyObject ( ) { } "
|
|
||||||
"~ MyObject ( ) { } "
|
|
||||||
"public: "
|
|
||||||
"protected: "
|
|
||||||
"void test ( ) { } "
|
|
||||||
"} ;";
|
|
||||||
|
|
||||||
ASSERT_EQUALS(result3, tokenizeAndStringify(code3));
|
|
||||||
ASSERT_EQUALS("", errout.str());
|
|
||||||
|
|
||||||
const char code4[] = "class MyObject : public QObject {"
|
|
||||||
" Q_OBJECT "
|
|
||||||
"public slots:"
|
|
||||||
"};";
|
|
||||||
const char result4[] = "class MyObject : public QObject { "
|
|
||||||
"public: "
|
|
||||||
"} ;";
|
|
||||||
|
|
||||||
ASSERT_EQUALS(result4, tokenizeAndStringify(code4));
|
|
||||||
}
|
|
||||||
|
|
||||||
void simplifyQtSignalsSlots2() {
|
|
||||||
const char code1[] = "class Foo::Bar: public QObject { private slots: };";
|
|
||||||
const char result1[] = "class Foo :: Bar : public QObject { private: } ;";
|
|
||||||
ASSERT_EQUALS(result1, tokenizeAndStringify(code1));
|
|
||||||
}
|
|
||||||
|
|
||||||
void simplifySQL() {
|
void simplifySQL() {
|
||||||
// Oracle PRO*C extensions for inline SQL. Just replace the SQL with "asm()" to fix wrong error messages
|
// Oracle PRO*C extensions for inline SQL. Just replace the SQL with "asm()" to fix wrong error messages
|
||||||
// ticket: #1959
|
// ticket: #1959
|
||||||
|
|
Loading…
Reference in New Issue