CPlusPlus: Differentiate declarations with an initializer

... from those without one, and display the former like write accesses.

Task-number: QTCREATORBUG-24894
Change-Id: I5e2d83b2a3ec4735054441c346687f97eeb039fb
Reviewed-by: André Hartmann <aha_1980@gmx.de>
This commit is contained in:
Christian Kandeler
2020-11-04 13:02:01 +01:00
parent cf6757406d
commit a88266798f
4 changed files with 19 additions and 15 deletions

View File

@@ -383,8 +383,11 @@ Usage::Type FindUsages::getType(int line, int column, int tokenIndex)
continue; continue;
} }
if (const auto declarator = (*it)->asDeclarator()) { if (const auto declarator = (*it)->asDeclarator()) {
if (containsToken(declarator->core_declarator)) if (containsToken(declarator->core_declarator)) {
if (declarator->initializer)
return Usage::Type::Initialization;
return Usage::Type::Declaration; return Usage::Type::Declaration;
}
if (const auto decl = (*(it + 1))->asSimpleDeclaration()) { if (const auto decl = (*(it + 1))->asSimpleDeclaration()) {
if (decl->symbols && decl->symbols->value) { if (decl->symbols && decl->symbols->value) {
return checkPotentialWrite( return checkPotentialWrite(

View File

@@ -39,7 +39,7 @@ namespace CPlusPlus {
class CPLUSPLUS_EXPORT Usage class CPLUSPLUS_EXPORT Usage
{ {
public: public:
enum class Type { Declaration, Read, Write, WritableRef, Other }; enum class Type { Declaration, Initialization, Read, Write, WritableRef, Other };
Usage() = default; Usage() = default;
Usage(const Utils::FilePath &path, const QString &lineText, Type t, int line, int col, int len) Usage(const Utils::FilePath &path, const QString &lineText, Type t, int line, int col, int len)

View File

@@ -555,6 +555,7 @@ static void displayResults(SearchResult *search, QFutureWatcher<CPlusPlus::Usage
switch (type) { switch (type) {
case CPlusPlus::Usage::Type::Read: case CPlusPlus::Usage::Type::Read:
return SearchResultColor::Style::Alt1; return SearchResultColor::Style::Alt1;
case CPlusPlus::Usage::Type::Initialization:
case CPlusPlus::Usage::Type::Write: case CPlusPlus::Usage::Type::Write:
case CPlusPlus::Usage::Type::WritableRef: case CPlusPlus::Usage::Type::WritableRef:
return SearchResultColor::Style::Alt2; return SearchResultColor::Style::Alt2;

View File

@@ -367,7 +367,7 @@ void tst_FindUsages::staticVariables()
findUsages(d); findUsages(d);
QCOMPARE(findUsages.usages().size(), 5); QCOMPARE(findUsages.usages().size(), 5);
QCOMPARE(findUsages.usages().at(0).type, Usage::Type::Declaration); QCOMPARE(findUsages.usages().at(0).type, Usage::Type::Declaration);
QCOMPARE(findUsages.usages().at(1).type, Usage::Type::Declaration); QCOMPARE(findUsages.usages().at(1).type, Usage::Type::Initialization);
QCOMPARE(findUsages.usages().at(2).type, Usage::Type::Write); QCOMPARE(findUsages.usages().at(2).type, Usage::Type::Write);
QCOMPARE(findUsages.usages().at(3).type, Usage::Type::Write); QCOMPARE(findUsages.usages().at(3).type, Usage::Type::Write);
QCOMPARE(findUsages.usages().at(4).type, Usage::Type::Write); QCOMPARE(findUsages.usages().at(4).type, Usage::Type::Write);
@@ -481,7 +481,7 @@ struct Struct{
find(variableFoo); find(variableFoo);
QCOMPARE(find.usages().size(), 2); QCOMPARE(find.usages().size(), 2);
QCOMPARE(find.usages()[0].type, Usage::Type::Declaration); QCOMPARE(find.usages()[0].type, Usage::Type::Initialization);
QCOMPARE(find.usages()[0].line, 5); QCOMPARE(find.usages()[0].line, 5);
QCOMPARE(find.usages()[0].col, 12); QCOMPARE(find.usages()[0].col, 12);
@@ -1652,7 +1652,7 @@ void tst_FindUsages::templateSpecialization_with_IntArgument()
find(sv[1]); find(sv[1]);
QCOMPARE(find.usages().size(), 2); QCOMPARE(find.usages().size(), 2);
QCOMPARE(find.usages()[0].type, Usage::Type::Declaration); QCOMPARE(find.usages()[0].type, Usage::Type::Initialization);
QCOMPARE(find.usages()[0].line, 2); QCOMPARE(find.usages()[0].line, 2);
QCOMPARE(find.usages()[0].col, 15); QCOMPARE(find.usages()[0].col, 15);
QCOMPARE(find.usages()[1].type, Usage::Type::Read); QCOMPARE(find.usages()[1].type, Usage::Type::Read);
@@ -1662,7 +1662,7 @@ void tst_FindUsages::templateSpecialization_with_IntArgument()
find(sv[2]); find(sv[2]);
QCOMPARE(find.usages().size(), 3); QCOMPARE(find.usages().size(), 3);
QCOMPARE(find.usages()[0].type, Usage::Type::Declaration); QCOMPARE(find.usages()[0].type, Usage::Type::Initialization);
QCOMPARE(find.usages()[0].line, 3); QCOMPARE(find.usages()[0].line, 3);
QCOMPARE(find.usages()[0].col, 15); QCOMPARE(find.usages()[0].col, 15);
QCOMPARE(find.usages()[1].type, Usage::Type::Write); QCOMPARE(find.usages()[1].type, Usage::Type::Write);
@@ -1731,7 +1731,7 @@ void tst_FindUsages::templateSpecialization_with_BoolArgument()
find(sv[0]); find(sv[0]);
QCOMPARE(find.usages().size(), 2); QCOMPARE(find.usages().size(), 2);
QCOMPARE(find.usages()[0].type, Usage::Type::Declaration); QCOMPARE(find.usages()[0].type, Usage::Type::Initialization);
QCOMPARE(find.usages()[0].line, 1); QCOMPARE(find.usages()[0].line, 1);
QCOMPARE(find.usages()[0].col, 15); QCOMPARE(find.usages()[0].col, 15);
QCOMPARE(find.usages()[1].type, Usage::Type::Read); QCOMPARE(find.usages()[1].type, Usage::Type::Read);
@@ -1741,7 +1741,7 @@ void tst_FindUsages::templateSpecialization_with_BoolArgument()
find(sv[1]); find(sv[1]);
QCOMPARE(find.usages().size(), 2); QCOMPARE(find.usages().size(), 2);
QCOMPARE(find.usages()[0].type, Usage::Type::Declaration); QCOMPARE(find.usages()[0].type, Usage::Type::Initialization);
QCOMPARE(find.usages()[0].line, 2); QCOMPARE(find.usages()[0].line, 2);
QCOMPARE(find.usages()[0].col, 15); QCOMPARE(find.usages()[0].col, 15);
QCOMPARE(find.usages()[1].type, Usage::Type::Read); QCOMPARE(find.usages()[1].type, Usage::Type::Read);
@@ -1807,7 +1807,7 @@ void tst_FindUsages::templatePartialSpecialization()
find(sv[0]); find(sv[0]);
QCOMPARE(find.usages().size(), 2); QCOMPARE(find.usages().size(), 2);
QCOMPARE(find.usages()[0].type, Usage::Type::Declaration); QCOMPARE(find.usages()[0].type, Usage::Type::Initialization);
QCOMPARE(find.usages()[0].line, 1); QCOMPARE(find.usages()[0].line, 1);
QCOMPARE(find.usages()[0].col, 15); QCOMPARE(find.usages()[0].col, 15);
QCOMPARE(find.usages()[1].type, Usage::Type::Read); QCOMPARE(find.usages()[1].type, Usage::Type::Read);
@@ -1817,7 +1817,7 @@ void tst_FindUsages::templatePartialSpecialization()
find(sv[1]); find(sv[1]);
QCOMPARE(find.usages().size(), 2); QCOMPARE(find.usages().size(), 2);
QCOMPARE(find.usages()[0].type, Usage::Type::Declaration); QCOMPARE(find.usages()[0].type, Usage::Type::Initialization);
QCOMPARE(find.usages()[0].line, 2); QCOMPARE(find.usages()[0].line, 2);
QCOMPARE(find.usages()[0].col, 15); QCOMPARE(find.usages()[0].col, 15);
QCOMPARE(find.usages()[1].type, Usage::Type::Read); QCOMPARE(find.usages()[1].type, Usage::Type::Read);
@@ -1876,17 +1876,17 @@ int main()
find(sv[0]); find(sv[0]);
QCOMPARE(find.usages().size(), 2); QCOMPARE(find.usages().size(), 2);
QCOMPARE(find.usages().at(0).type, Usage::Type::Declaration); QCOMPARE(find.usages().at(0).type, Usage::Type::Initialization);
QCOMPARE(find.usages().at(1).type, Usage::Type::Read); QCOMPARE(find.usages().at(1).type, Usage::Type::Read);
find(sv[1]); find(sv[1]);
QCOMPARE(find.usages().size(), 2); QCOMPARE(find.usages().size(), 2);
QCOMPARE(find.usages().at(0).type, Usage::Type::Declaration); QCOMPARE(find.usages().at(0).type, Usage::Type::Initialization);
QCOMPARE(find.usages().at(1).type, Usage::Type::Read); QCOMPARE(find.usages().at(1).type, Usage::Type::Read);
find(sv[2]); find(sv[2]);
QCOMPARE(find.usages().size(), 2); QCOMPARE(find.usages().size(), 2);
QCOMPARE(find.usages().at(0).type, Usage::Type::Declaration); QCOMPARE(find.usages().at(0).type, Usage::Type::Initialization);
QCOMPARE(find.usages().at(1).type, Usage::Type::Read); QCOMPARE(find.usages().at(1).type, Usage::Type::Read);
} }
@@ -1926,7 +1926,7 @@ int main(){
FindUsages find(src, doc, snapshot); FindUsages find(src, doc, snapshot);
find(sv); find(sv);
QCOMPARE(find.usages().size(), 2); QCOMPARE(find.usages().size(), 2);
QCOMPARE(find.usages().at(0).type, Usage::Type::Declaration); QCOMPARE(find.usages().at(0).type, Usage::Type::Initialization);
QCOMPARE(find.usages().at(1).type, Usage::Type::Read); QCOMPARE(find.usages().at(1).type, Usage::Type::Read);
} }
@@ -2159,7 +2159,7 @@ int main()
QCOMPARE(p->name()->identifier()->chars(), "p"); QCOMPARE(p->name()->identifier()->chars(), "p");
find(p); find(p);
QCOMPARE(find.usages().size(), 10); QCOMPARE(find.usages().size(), 10);
QCOMPARE(find.usages().at(0).type, Usage::Type::Declaration); QCOMPARE(find.usages().at(0).type, Usage::Type::Initialization);
QCOMPARE(find.usages().at(1).type, Usage::Type::Write); QCOMPARE(find.usages().at(1).type, Usage::Type::Write);
QCOMPARE(find.usages().at(2).type, Usage::Type::Write); QCOMPARE(find.usages().at(2).type, Usage::Type::Write);
QCOMPARE(find.usages().at(3).type, Usage::Type::WritableRef); QCOMPARE(find.usages().at(3).type, Usage::Type::WritableRef);