File indexing completed on 2024-05-05 05:41:37
0001 #include <QtCore/QList> 0002 #include <QtCore/QString> 0003 #include <QtCore/QStringList> 0004 #include <QtCore/QMap> 0005 #include <QtCore/QFile> 0006 #include <QtCore/QHash> 0007 #include <QtCore/QSet> 0008 #include <QtCore/QJsonObject> 0009 0010 QList<int> getList() 0011 { 0012 return QList<int>(); 0013 } 0014 void detach1() 0015 { 0016 getList().first(); // Warning 0017 } 0018 0019 void detach2() 0020 { 0021 getList().at(0); // OK 0022 } 0023 0024 void lvalue() 0025 { 0026 QStringList s; 0027 s.first(); // OK 0028 } 0029 0030 QStringList test_string() { return {}; } 0031 QStringList& test_string_ref() { static QStringList s; return s; } 0032 QStringList * test_string_ptr() { return {}; } 0033 const QStringList test_const_string() { return {}; } 0034 const QStringList & test_const_string_ref() { static QStringList s; return s; } 0035 const QStringList * test_const_string_ptr() { return {}; } 0036 0037 void qstrings() 0038 { 0039 QString s; 0040 s.toLatin1().data(); // OK, list isn't shared 0041 test_string().first(); // Warning 0042 test_const_string().first(); // OK 0043 test_const_string_ref().first(); // OK 0044 test_const_string_ptr()->first(); // OK 0045 0046 test_string().first(); // Warning 0047 test_string_ref().first(); // Warning 0048 test_string_ptr()->first(); // OK 0049 } 0050 0051 void more() 0052 { 0053 QFile::encodeName("foo").data(); 0054 } 0055 0056 void foo(QStringList *list) 0057 { 0058 auto it = list->begin(); 0059 } 0060 0061 typedef QMap<int, QStringList> StringMap; 0062 Q_GLOBAL_STATIC(StringMap, sISOMap) 0063 void test_global_static() 0064 { 0065 sISOMap()->insert(1, QStringList()); 0066 sISOMap->insert(1, QStringList()); 0067 } 0068 0069 struct TestThis : public QList<int> 0070 { 0071 void foo() 0072 { 0073 begin(); 0074 } 0075 }; 0076 0077 class Foo 0078 { 0079 public: 0080 QStringList list; 0081 }; 0082 0083 Foo * getFoo() { return new Foo(); } 0084 Foo getFoo2() { return Foo(); } 0085 0086 void testThroughPointer() 0087 { 0088 Foo *f; 0089 f->list.first(); // OK 0090 getFoo()->list.first(); // OK 0091 getFoo2().list.first(); // OK 0092 } 0093 0094 QMap<int,int> getMap() { return {}; }; 0095 void testWriteMethod() 0096 { 0097 getMap().insert(1,1); // Warning 0098 int a = getMap().take(1); // Warning 0099 } 0100 0101 void testSubscriptOperator() 0102 { 0103 getList()[0]; // Warning 0104 if (test_string()[0].isEmpty()) {} // Warning 0105 getMap()[0]; // Warning 0106 auto m = getMap(); 0107 m[0]; 0108 } 0109 0110 typedef QList<int> IntList; 0111 IntList getIntList() { return {}; } 0112 void testTypedef() 0113 { 0114 getIntList()[0]; // Warning 0115 } 0116 0117 QStringList getStringList() { return {}; } 0118 0119 void testDerivedClass() 0120 { 0121 getStringList().first(); // Warning 0122 getStringList()[0]; // Warning 0123 // 0124 // 0125 } 0126 0127 void testQStringListSpecificMethods() 0128 { 0129 getStringList().removeDuplicates(); 0130 } 0131 0132 QString getString() { return ""; } 0133 void testQString() 0134 { 0135 getString().begin(); // Warning 0136 getString()[1]; // Warning 0137 } 0138 0139 extern QHash<QString, int> &initializers(); 0140 QString getStr() { return QString(); } 0141 0142 static auto bar = [] { 0143 return initializers().insert(getStr(), 1); // OK 0144 }(); 0145 0146 0147 QSet<int> getSet() { return {}; } 0148 0149 void testIntersect() 0150 { 0151 QSet<int> other; 0152 auto s = getSet().intersect(other); // OK 0153 } 0154 0155 QJsonObject getObj(){return {};} 0156 void testJsonDetach() { 0157 getObj()[QLatin1String("bla")]; // Warning 0158 getObj().find(QLatin1String("bla")); // Warning 0159 getObj().value(QLatin1String("bla")); // OK 0160 }