From 42513fe10250d34641be25ecbb2837742753582c Mon Sep 17 00:00:00 2001 From: malte_langkabel Date: Wed, 17 Feb 2016 10:45:35 +0100 Subject: [PATCH] data: revised indexing * increased performance. coati is now 1.55 times as fast as at version 0.4 * integrated sourceweb parsing code * removed astbodyvisitor * NameHierarchy now store signatures in a new format * storage does not allow to re-set the type of a node, once it is marked as "defined". * made onTemplateRecordSpecParsed just create the edge, not the node. * removed distinction between template specialitzations for functions and classes --- bin/gen/Release/Coati_keygen | Bin 2286380 -> 0 bytes bin/gen/Release/license.txt | 13 - bin/gen/Release/private-0.pem | 30 - bin/gen/Release/public-0.pem | 9 - bin/test/data/log/test_log.txt | 884 +++- src/app/data/parser/cxx/TaskParseCxx.cpp | 2 +- src/lib/CMakeLists.txt | 1 + .../component/controller/CodeController.cpp | 4 +- .../controller/UndoRedoController.cpp | 8 +- src/lib/data/Storage.cpp | 326 +- src/lib/data/Storage.h | 64 +- src/lib/data/graph/Node.cpp | 4 +- src/lib/data/name/NameElement.cpp | 71 +- src/lib/data/name/NameElement.h | 30 +- src/lib/data/name/NameHierarchy.cpp | 40 +- src/lib/data/name/NameHierarchy.h | 6 +- src/lib/data/parser/ParseFunction.cpp | 2 +- src/lib/data/parser/ParseVariable.cpp | 2 +- src/lib/data/parser/ParserClient.cpp | 5 +- src/lib/data/parser/ParserClient.h | 65 +- src/lib/data/search/SearchIndex.cpp | 2 +- src/lib/data/search/SearchMatch.cpp | 4 +- src/lib/data/type/NamedDataType.cpp | 2 +- src/lib/utility/ScopedSwitcher.h | 30 + .../messaging/type/MessageActivateEdge.h | 2 +- src/lib/utility/text/Dictionary.cpp | 2 +- src/lib_parser/CMakeLists.txt | 4 - src/lib_parser/data/parser/cxx/ASTAction.cpp | 2 +- .../data/parser/cxx/ASTBodyVisitor.cpp | 177 - .../data/parser/cxx/ASTBodyVisitor.h | 32 - .../data/parser/cxx/ASTBodyVisitorClient.cpp | 9 - .../data/parser/cxx/ASTBodyVisitorClient.h | 35 - .../data/parser/cxx/ASTConsumer.cpp | 6 +- src/lib_parser/data/parser/cxx/ASTConsumer.h | 2 +- src/lib_parser/data/parser/cxx/ASTVisitor.cpp | 2359 +++++---- src/lib_parser/data/parser/cxx/ASTVisitor.h | 372 +- .../cxx/name_resolver/CxxDeclNameResolver.cpp | 79 +- .../cxx/name_resolver/CxxTypeNameResolver.cpp | 9 +- .../cxx/name_resolver/CxxTypeNameResolver.h | 1 + src/test/CxxParserTestSuite.h | 4614 ++++++++--------- src/test/StorageTestSuite.h | 234 +- 41 files changed, 5022 insertions(+), 4521 deletions(-) delete mode 100755 bin/gen/Release/Coati_keygen delete mode 100644 bin/gen/Release/license.txt delete mode 100644 bin/gen/Release/private-0.pem delete mode 100644 bin/gen/Release/public-0.pem create mode 100644 src/lib/utility/ScopedSwitcher.h delete mode 100644 src/lib_parser/data/parser/cxx/ASTBodyVisitor.cpp delete mode 100644 src/lib_parser/data/parser/cxx/ASTBodyVisitor.h delete mode 100644 src/lib_parser/data/parser/cxx/ASTBodyVisitorClient.cpp delete mode 100644 src/lib_parser/data/parser/cxx/ASTBodyVisitorClient.h diff --git a/bin/gen/Release/Coati_keygen b/bin/gen/Release/Coati_keygen deleted file mode 100755 index 1b1e223405f8be6899e529e2600de6ea44990e9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2286380 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ℜwYmNvcM5(C$iA<_lht(@x@vE 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�yU*&GmPE4FzN2aC<8l@0i0n#yz!JW291bp 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μX{yLG*wxqvq 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 z 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 `iAzKhNyM?<>F@k2x_j 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 T@v$O%5{~c>a8SY|p@07ewn>Y9 diff --git a/bin/gen/Release/license.txt b/bin/gen/Release/license.txt deleted file mode 100644 index 586fb54f..00000000 --- a/bin/gen/Release/license.txt +++ /dev/null @@ -1,13 +0,0 @@ ------BEGIN LICENSE----- -asdf;lkjas;ldkfj;alsdkfj;alskdfasdflkjlksjlkdfasdfoiupqwernkljoviopizpoxcuivojqwoenr;soidfooiaupoiay -Single User License -Coati 0 -$9$AQAKZ6/FMxHq850YPk5GfWSYRWZv+x1mgB5B6/OPz7D7mOfCvowH -hctPm+tJfoiFhSamiyBuTe4jbtIvvyZShK1B1OKfG1C+lOboSZh2HJn -6cBdiKE6ZfrymDngPUE23lm/JPIJwlZjvPTcd/N3YusUs0aqiTEXfHu -G/c34NYI5AIbute6xQjY6Q0cLdZcOHqSBfGxZrZTl9q6yVcM6B2mwDE -YsFzrOmXsIyYLX4+lf0eEFl5Dmw437IZN8z5yZFOZ3xp91Mpz6nMU79 -9X6ATP6RRVC58zYYznasbvqgz1xoOIivYZr6WG/+3ia4/A5Zn9r+Mt9 -5AjHqWOZtMqQAHqeHgOzsKHqbu0xduH8HsPXBF8fPD6EnLVz6GbjBET -KuDWka14AHzA== ------END LICENSE----- diff --git a/bin/gen/Release/private-0.pem b/bin/gen/Release/private-0.pem deleted file mode 100644 index 8aa49ba5..00000000 --- a/bin/gen/Release/private-0.pem +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIIFNTBfBgkqhkiG9w0BBQ0wUjAxBgkqhkiG9w0BBQwwJAQMDAB5IuntKywoJmry -AgMDDUACASAwDAYIKoZIhvcNAgkFADAdBglghkgBZQMEASoEEA7JwOuCMu6xUJ+c -0NBKZZsEggTQC82I8AHltLbPCAIkTZoJv68aOV/cVXDcxZ7Mn1hOiob7nO4RuteW -mwTX3JZFd7Jlw5h706xAdRjbSsJXGgTMXECciqrfZ9c21+tYbKV4JpPBQMEhTLpa -IXUTWonQ9wh7vis3bcwBPaRCsfDtYaz872vDpf1X5BVOppoffKCiKFi2y5C+e3HG -CPcg+BTgZg+SRJB9yvSDqdDO5/s9Y6+otePt4Gr+wSOJRwYkdZ67f9uq4BaFcw2z -wIRKA0C1oClu7TAo5onjv1rvw/66migcMHRw1zjIk6oQv44caJvqca1eM9dniZo7 -ccbq11PWpeBdKvEkAWuW1PoI7uuLQNdzs3UDO7LJttWwVNAKtO3o8LOL8x9Q7Jns -tvQqUrf0VNB8eBfmsD2I3zVMu2X4rNEDYlAbrL3f1vNkt949ib4eG7+lo3wrCt6J -6UFA791HGVJUvFI0NHdtT32+LdKyTJ+bIlz663LkNU2+mBs6UL7qe6XIBoXCNcg8 -+VDKDDVSIyckSVxV7WuGeX9n3igRuvt88T2pCVlY+HEBWDgFoXxc5vx8LdD9EVaQ -OAmuXABLNTqUTCGms9KAa3WJ/QW6++NAt4uf+37LKzM9zyUrDZMTs5M2ZJ/otwgK -ZqIbDcVyfsX79ATs0UeJ7bdrMduXuKhFIVsjlJCGXlyKa7h+JmEpPkqnELGiThvi -hvWogpYt6S6/ofw13MAAgkDqgsfhUGH8tmPu8ufYQn2QQTjB7y1X+s+DUPBUYlic -Ds29YvGMp3wesMFppfwygtGtBFxxs7zvuz3aq9Putu1xC9q3dtHOPdxZYyLvz/aJ -F6BfOqk3NP0a6/S9TphgxE9CqYz2RIqRQg91IbPPrEiC8Sm3fLgX0fO1kfVN7x0E -Pg5+3M56UVflcWLsIcjDVYK4EId4XLHBTjFn8xhkEj56UJQsjb9fFbdQQBBI5pWM -G2nxoGdHD/GCOjZi2f393OMIDFbfoIaoz4L4osIFYaIg4sMrIy2oUOEwnqyLEVf2 -tQ58ysC7SDVZza4jai5QXuTCHyMcHYf9BxuzIHEViquI0y19QvlMW17effUctfow -8a0sqCYr0KczggsaOR9BdAgHpSeoCM7SxkQd+j55iX/w7Det8JUvHoCSHRPwM0ar -QiAncEtdKYyU/vz25feTh/crDH1OB4umZIatPVJFr7samb1McocSI5/AxQ5YSkRT -BYyFj6Yi5D0jgmob4+t96Ub0UnWinXk+V6CeTEzgSE6/FYlEb+PqibWAhDfEWG+7 -0oG58ajt2vOzbGytDE9RV48HzLoUoWEaNDoa51viuJhpSmRii4CrBj+ENvber2GR -qOM7bMcmicqUvegN9cB+9ZiIzWVePVvI/1NRvypqjXJVE99AD3GyRd5fuC0Vo4VQ -xdaZuk6ysWBldUcFVUCDzr32FWaxKe6cGZbjRtS/u6rDJ8DEJzvm7FcgcLj80qrd -mGrAMUafAfe+FrHSiMits/pUjzwiZqjsQeVIlULUgxQGeLVoERV7InkooBqxVOpI -R63O9zMjEZgkf7yhD8nOrw1fLO08D/eOud2yL5EhXUMWQmjnmBYDog/M1IRu13ba -L4qeddYh0cgHID8DjhjaY+g8VKiikgRO0d59xAkzHrMk4MS1l27xOz8= ------END ENCRYPTED PRIVATE KEY----- diff --git a/bin/gen/Release/public-0.pem b/bin/gen/Release/public-0.pem deleted file mode 100644 index c22aa858..00000000 --- a/bin/gen/Release/public-0.pem +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN PUBLIC KEY----- -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsop6ceQNJeWYjourIu2Z -QydUFJwm3kwqXvoAiYP+NeLEyR9OET0eBRwowKDbFzdfDyCXcfJAbsRBoQ1he8Bw -dXcGZqs+QNcnoBz0Vl/uaxOXpVSN5RYj6wo0IFQ/nrR+gMTmzHut8ohtXI4n4a0C -7OVMfwoR2uJyLMLTQiHekEsLvraMnRcS5FbqIq2yUuVYCfGvU3Y2xo1jsvIkko7W -uF/Lw7LFCeruZ1hRYDLGa/HnKepdLhGXoh7lDQuagsUg510PVRGru4G50ATqKVTa -IwcvWNeF0BWjC78uBIhk5G65ZI/HRsS4MQvu3UwrTvtp6d9tTNOT9wixpfD1UtBr -qwIDAQAB ------END PUBLIC KEY----- diff --git a/bin/test/data/log/test_log.txt b/bin/test/data/log/test_log.txt index a46055eb..a6241478 100644 --- a/bin/test/data/log/test_log.txt +++ b/bin/test/data/log/test_log.txt @@ -1,177 +1,189 @@ -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml +ConfigManager.cpp WARNING: value path/to/nowhere is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:1:20 +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:4:20 +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:1:20 +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:1:11 +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:4:20 +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:1:13 +CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:7:15 +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:4:20 +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:4:20 +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:4:20 +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:5:20 +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:4:20 +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:4:20 +CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:4:48 +CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:7:20 +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:4:20 +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:3:20 +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:4:20 +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. +ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config. -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml -Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml Token.cpp ERROR: Location Id was not referenced by this Token. Node.cpp WARNING: Cannot change NodeType after it was already set from namespace to class Edge.cpp ERROR: Nodes are not plain copies. @@ -220,10 +232,23 @@ Edge.cpp ERROR: Nodes are not plain copies. NetworkProtocolHelper.cpp ERROR: Failed to parse message, invalid type token NetworkProtocolHelper.cpp ERROR: Failed to parse setActiveToken message, invalid token count Settings.cpp WARNING: File for Settings not found: data/SettingsTestSuite/wrong_settings.xml +ConfigManager.cpp WARNING: value Bool is not present in config. +ConfigManager.cpp WARNING: value Int is not present in config. +ConfigManager.cpp WARNING: value Float is not present in config. +ConfigManager.cpp WARNING: value String is not present in config. Settings.cpp WARNING: File for Settings not found: data/SettingsTestSuite/wrong_settings.xml +ConfigManager.cpp WARNING: value Bool is not present in config. +ConfigManager.cpp WARNING: value Int is not present in config. +ConfigManager.cpp WARNING: value Float is not present in config. +ConfigManager.cpp WARNING: value String is not present in config. +ConfigManager.cpp WARNING: value Bool is not present in config. +ConfigManager.cpp WARNING: value Int is not present in config. +ConfigManager.cpp WARNING: value Float is not present in config. +ConfigManager.cpp WARNING: value String is not present in config. +ConfigManager.cpp WARNING: value NewBool is not present in config. INFO: file: file.cpp < 0:0 0:0> TextAccess.cpp ERROR: Could not open file file.cpp - INFO: typedef: type -> int + INFO: typedef: type INFO: file: file.cpp < 0:0 0:0> TextAccess.cpp ERROR: Could not open file file.cpp INFO: class: Class @@ -234,9 +259,6 @@ TextAccess.cpp ERROR: Could not open file file.cpp TextAccess.cpp ERROR: Could not open file file.cpp INFO: global: Global INFO: file: file.cpp < 0:0 0:0> -TextAccess.cpp ERROR: Could not open file file.cpp - INFO: global: Global - INFO: file: file.cpp < 0:0 0:0> TextAccess.cpp ERROR: Could not open file file.cpp INFO: field: m_field INFO: file: file.cpp < 0:0 0:0> @@ -244,13 +266,13 @@ TextAccess.cpp ERROR: Could not open file file.cpp INFO: field: Struct::m_field INFO: file: file.cpp < 0:0 0:0> TextAccess.cpp ERROR: Could not open file file.cpp - INFO: function: isTrue + INFO: function: bool isTrue(char) INFO: file: file.cpp < 0:0 0:0> TextAccess.cpp ERROR: Could not open file file.cpp - INFO: method: isMethod + INFO: method: void isMethod(bool) INFO: file: file.cpp < 0:0 0:0> TextAccess.cpp ERROR: Could not open file file.cpp - INFO: method: Class::isMethod + INFO: method: void Class::isMethod(bool) INFO: file: file.cpp < 0:0 0:0> TextAccess.cpp ERROR: Could not open file file.cpp INFO: namespace: utility @@ -275,34 +297,34 @@ TextAccess.cpp ERROR: Could not open file file.cpp INFO: inheritance: StructB : StructA INFO: file: file.cpp < 0:0 0:0> TextAccess.cpp ERROR: Could not open file file.cpp - INFO: method: A::isMethod - INFO: method: B::isMethod - INFO: override: A::isMethod -> B::isMethod + INFO: method: void A::isMethod(bool) + INFO: method: void B::isMethod(bool) + INFO: override: void A::isMethod(bool) -> void B::isMethod(bool) INFO: file: file.cpp < 0:0 0:0> TextAccess.cpp ERROR: Could not open file file.cpp - INFO: function: isTrue - INFO: function: func - INFO: call: isTrue -> func + INFO: function: bool isTrue(char) + INFO: function: void func(bool) + INFO: call: bool isTrue(char) -> void func(bool) INFO: file: file.cpp < 0:0 0:0> TextAccess.cpp ERROR: Could not open file file.cpp INFO: global: global - INFO: function: isTrue - INFO: call: global -> isTrue + INFO: function: bool isTrue(char) + INFO: call: global -> bool isTrue(char) INFO: file: file.cpp < 0:0 0:0> TextAccess.cpp ERROR: Could not open file file.cpp - INFO: function: isTrue + INFO: function: bool isTrue(char) INFO: field: Foo::m_field - INFO: field usage: isTrue -> Foo::m_field + INFO: field usage: bool isTrue(char) -> Foo::m_field INFO: file: file.cpp < 0:0 0:0> TextAccess.cpp ERROR: Could not open file file.cpp - INFO: function: isTrue + INFO: function: bool isTrue(char) INFO: global: global - INFO: global usage: isTrue -> global + INFO: global usage: bool isTrue(char) -> global INFO: file: file.cpp < 0:0 0:0> TextAccess.cpp ERROR: Could not open file file.cpp - INFO: function: isTrue + INFO: function: Struct isTrue(char) INFO: struct: Struct - INFO: type usage: isTrue -> Struct + INFO: type usage: Struct isTrue(char) -> Struct INFO: file: file.cpp < 0:0 0:0> TextAccess.cpp ERROR: Could not open file file.cpp INFO: file: file.h < 0:0 0:0> @@ -322,3 +344,477 @@ TextAccess.cpp WARNING: Line numbers start with one, is 0 TextAccess.cpp WARNING: Line numbers start with one, is 0 TokenLocationCollection.cpp ERROR: Can't create TokenLocation with wrong boundaries. TokenLocationCollection.cpp ERROR: Can't create TokenLocation with wrong boundaries. +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Program Files (x86)\Visual Leak Detector\include" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\build" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\build\src\lib_gui" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\app" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\external" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\trial" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "D:\gameDevResources\Qt5.5\5.5\msvc2013\include" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "D:\gameDevResources\Qt5.5\5.5\msvc2013\include\QtCore" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "D:\gameDevResources\Qt5.5\5.5\msvc2013\include\QtGui" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "D:\gameDevResources\Qt5.5\5.5\msvc2013\include\QtNetwork" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "D:\gameDevResources\Qt5.5\5.5\msvc2013\include\QtWidgets" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "D:\gameDevResources\Qt5.5\5.5\msvc2013\mkspecs\win32-msvc2013" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "D:\gameDevResources\boost_1_59_0" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "D:\gameDevResources\clang-11vm\build\include" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "D:\gameDevResources\clang-11vm\build\tools\clang\include" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "D:\gameDevResources\clang-11vm\llvm\include" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "D:\gameDevResources\clang-11vm\llvm\tools\clang\include" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "D:\gameDevResources\cxxtest-4.3" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "D:\gameDevResources\eigen" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "D:\projekte\code\2014_master_project\masterproject\bin\test\data/vsSolutionParserTestSuite/..\src\lib\utility\solution\SolutionParserCMake.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "D:\projekte\code\2014_master_project\masterproject\bin\test\data/vsSolutionParserTestSuite/..\src\lib\utility\solution\SolutionParserCMake.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\build\Coati.rc" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\build\Coati_lib_gui_automoc.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\build\src\lib_gui\version.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\build\test_main.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\app\data\parser\cxx\TaskParseCxx.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\app\isTrial.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\app\main.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\external\sqlite\CppSQLite3.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\external\sqlite\CppSQLite3.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\external\sqlite\sqlite3.c" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\external\sqlite\sqlite3.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\external\tinyxml\tinystr.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\external\tinyxml\tinystr.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\external\tinyxml\tinyxml.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\external\tinyxml\tinyxml.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\external\tinyxml\tinyxmlerror.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\external\tinyxml\tinyxmlparser.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\Application.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\Application.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\Project.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\Project.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\Component.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\Component.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\ComponentFactory.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\ComponentFactory.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\ComponentManager.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\ComponentManager.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\CodeController.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\CodeController.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\Controller.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\Controller.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\FeatureController.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\FeatureController.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\GraphController.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\GraphController.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\IDECommunicationController.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\IDECommunicationController.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\NetworkFactory.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\NetworkFactory.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\RefreshController.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\RefreshController.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\SearchController.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\SearchController.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\StatusBarController.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\StatusBarController.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\UndoRedoController.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\UndoRedoController.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\helper\ActivationTranslator.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\helper\ActivationTranslator.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\helper\BucketGrid.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\helper\BucketGrid.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\helper\DummyEdge.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\helper\DummyNode.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\helper\GraphLayouter.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\helper\GraphLayouter.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\helper\GraphPostprocessor.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\helper\GraphPostprocessor.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\helper\NetworkProtocolHelper.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\helper\NetworkProtocolHelper.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\helper\SnippetMerger.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\controller\helper\SnippetMerger.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\view\CodeView.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\view\CodeView.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\view\CompositeView.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\view\CompositeView.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\view\GraphView.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\view\GraphView.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\view\GraphViewStyle.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\view\GraphViewStyle.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\view\GraphViewStyleImpl.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\view\MainView.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\view\MainView.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\view\RefreshView.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\view\RefreshView.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\view\SearchView.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\view\SearchView.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\view\StatusBarView.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\view\StatusBarView.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\view\UndoRedoView.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\view\UndoRedoView.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\view\View.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\view\View.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\view\ViewFactory.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\view\ViewFactory.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\view\ViewLayout.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\view\ViewLayout.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\view\ViewWidgetWrapper.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\component\view\ViewWidgetWrapper.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\HierarchyCache.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\HierarchyCache.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\SqliteStorage.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\SqliteStorage.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\Storage.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\Storage.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\StorageCache.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\StorageCache.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\StorageTypes.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\TaskCleanStorage.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\TaskCleanStorage.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\access\StorageAccess.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\access\StorageAccess.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\access\StorageAccessProxy.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\access\StorageAccessProxy.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\graph\Edge.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\graph\Edge.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\graph\Graph.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\graph\Graph.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\graph\Node.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\graph\Node.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\graph\Token.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\graph\Token.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\graph\token_component\TokenComponent.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\graph\token_component\TokenComponent.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\graph\token_component\TokenComponentAbstraction.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\graph\token_component\TokenComponentAbstraction.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\graph\token_component\TokenComponentAccess.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\graph\token_component\TokenComponentAccess.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\graph\token_component\TokenComponentAggregation.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\graph\token_component\TokenComponentAggregation.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\graph\token_component\TokenComponentConst.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\graph\token_component\TokenComponentConst.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\graph\token_component\TokenComponentFilePath.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\graph\token_component\TokenComponentFilePath.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\graph\token_component\TokenComponentSignature.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\graph\token_component\TokenComponentSignature.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\graph\token_component\TokenComponentStatic.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\graph\token_component\TokenComponentStatic.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\location\TokenLocation.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\location\TokenLocation.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\location\TokenLocationCollection.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\location\TokenLocationCollection.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\location\TokenLocationFile.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\location\TokenLocationFile.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\location\TokenLocationLine.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\location\TokenLocationLine.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\name\NameElement.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\name\NameElement.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\name\NameHierarchy.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\name\NameHierarchy.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\parser\ParseFunction.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\parser\ParseFunction.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\parser\ParseLocation.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\parser\ParseLocation.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\parser\ParseTypeUsage.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\parser\ParseTypeUsage.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\parser\ParseVariable.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\parser\ParseVariable.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\parser\Parser.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\parser\Parser.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\parser\ParserClient.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\parser\ParserClient.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\parser\cxx\TaskParseCxx.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\search\SearchIndex.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\search\SearchIndex.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\search\SearchMatch.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\search\SearchMatch.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\search\SearchNode.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\search\SearchNode.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\search\SearchResult.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\search\SearchResult.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\type\ArrayModifiedDataType.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\type\ArrayModifiedDataType.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\type\DataType.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\type\DataType.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\type\ModifiedDataType.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\type\ModifiedDataType.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\type\NamedDataType.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\type\NamedDataType.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\type\PointerModifiedDataType.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\type\PointerModifiedDataType.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\type\ReferenceModifiedDataType.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\data\type\ReferenceModifiedDataType.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\isTrial.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\settings\ApplicationSettings.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\settings\ApplicationSettings.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\settings\ColorScheme.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\settings\ColorScheme.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\settings\ProjectSettings.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\settings\ProjectSettings.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\settings\Settings.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\settings\Settings.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\ConfigManager.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\ConfigManager.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\Property.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\TimePoint.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\TimePoint.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\Version.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\Version.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\file\FileInfo.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\file\FileInfo.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\file\FileManager.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\file\FileManager.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\file\FilePath.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\file\FilePath.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\file\FileRegister.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\file\FileRegister.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\file\FileSystem.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\file\FileSystem.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\logging\ConsoleLogger.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\logging\ConsoleLogger.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\logging\FileLogger.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\logging\FileLogger.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\logging\LogManager.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\logging\LogManager.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\logging\LogManagerImplementation.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\logging\LogManagerImplementation.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\logging\LogMessage.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\logging\Logger.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\logging\Logger.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\logging\PlainFileLogger.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\logging\PlainFileLogger.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\logging\logging.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\math\Color.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\math\MatrixBase.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\math\MatrixDynamicBase.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\math\Vector2.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\math\Vector4.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\math\VectorBase.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\Message.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\MessageBase.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\MessageListener.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\MessageListenerBase.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\MessageListenerBase.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\MessageQueue.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\MessageQueue.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageActivateEdge.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageActivateFile.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageActivateNodes.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageActivateTokenLocations.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageActivateTokens.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageActivateWindow.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageAutoRefreshChanged.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageDeactivateEdge.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageFind.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageFinishedParsing.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageFlushUpdates.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageFocusIn.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageFocusOut.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageGraphNodeBundleSplit.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageGraphNodeExpand.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageGraphNodeMove.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageInterruptTasks.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageLoadProject.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageMoveIDECursor.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageRedo.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageRefresh.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageResetZoom.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageSaveProject.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageSearch.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageSearchAutocomplete.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageShowErrors.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageShowFile.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageShowScope.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageShowSnippets.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageStatus.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageSwitchColorScheme.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageUndo.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageWindowFocus.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\messaging\type\MessageZoom.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\scheduling\LambdaTask.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\scheduling\LambdaTask.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\scheduling\SimpleTask.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\scheduling\SimpleTask.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\scheduling\Task.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\scheduling\Task.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\scheduling\TaskGroup.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\scheduling\TaskGroup.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\scheduling\TaskGroupSequential.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\scheduling\TaskGroupSequential.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\scheduling\TaskScheduler.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\scheduling\TaskScheduler.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\solution\ISolutionParser.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\solution\ISolutionParser.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\solution\SolutionParserVisualStudio.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\solution\SolutionParserVisualStudio.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\text\Dictionary.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\text\Dictionary.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\text\TextAccess.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\text\TextAccess.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\types.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\utility.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\utility.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\utilityString.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib\utility\utilityString.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\platform_includes\includesDefault.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\platform_includes\includesMac.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\platform_includes\includesWindows.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\element\QtAutocompletionList.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\element\QtAutocompletionList.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\element\QtCodeArea.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\element\QtCodeArea.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\element\QtCodeFile.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\element\QtCodeFile.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\element\QtCodeFileList.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\element\QtCodeFileList.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\element\QtCodeSnippet.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\element\QtCodeSnippet.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\element\QtDirectoryListBox.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\element\QtDirectoryListBox.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\element\QtLineEdit.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\element\QtLineEdit.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\element\QtRefreshBar.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\element\QtRefreshBar.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\element\QtSearchBar.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\element\QtSearchBar.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\element\QtSmartSearchBox.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\element\QtSmartSearchBox.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\element\QtStatusBar.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\element\QtStatusBar.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\element\QtUndoRedo.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\element\QtUndoRedo.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\graphics\QtAngledLineItem.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\graphics\QtAngledLineItem.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\graphics\QtCountCircleItem.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\graphics\QtCountCircleItem.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\graphics\QtRoundedRectItem.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\graphics\QtRoundedRectItem.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\graphics\QtStraightLineItem.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\graphics\QtStraightLineItem.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\network\QtIDECommunicationController.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\network\QtIDECommunicationController.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\network\QtNetworkFactory.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\network\QtNetworkFactory.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\network\QtTcpWrapper.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\network\QtTcpWrapper.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\utility\QtDeviceScaledPixmap.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\utility\QtDeviceScaledPixmap.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\utility\QtHighlighter.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\utility\QtHighlighter.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\utility\QtThreadedFunctor.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\utility\utilityQt.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\utility\utilityQt.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\QtCodeView.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\QtCodeView.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\QtCompositeView.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\QtCompositeView.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\QtGraphView.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\QtGraphView.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\QtGraphViewStyleImpl.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\QtGraphViewStyleImpl.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\QtMainView.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\QtMainView.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\QtRefreshView.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\QtRefreshView.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\QtSearchView.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\QtSearchView.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\QtStatusBarView.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\QtStatusBarView.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\QtUndoRedoView.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\QtUndoRedoView.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\QtViewFactory.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\QtViewFactory.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\QtViewWidgetWrapper.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\QtViewWidgetWrapper.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\graphElements\QtGraphEdge.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\graphElements\QtGraphEdge.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\graphElements\QtGraphNode.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\graphElements\QtGraphNode.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\graphElements\QtGraphNodeAccess.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\graphElements\QtGraphNodeAccess.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\graphElements\QtGraphNodeBundle.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\graphElements\QtGraphNodeBundle.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\graphElements\QtGraphNodeData.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\graphElements\QtGraphNodeData.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\graphElements\QtGraphNodeExpandToggle.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\graphElements\QtGraphNodeExpandToggle.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\graphElements\nodeComponents\QtGraphNodeComponent.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\graphElements\nodeComponents\QtGraphNodeComponent.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\graphElements\nodeComponents\QtGraphNodeComponentClickable.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\graphElements\nodeComponents\QtGraphNodeComponentClickable.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\graphElements\nodeComponents\QtGraphNodeComponentMoveable.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\view\graphElements\nodeComponents\QtGraphNodeComponentMoveable.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\window\QtAbout.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\window\QtAbout.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\window\QtAboutLicense.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\window\QtAboutLicense.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\window\QtApplicationSettingsScreen.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\window\QtApplicationSettingsScreen.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\window\QtMainWindow.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\window\QtMainWindow.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\window\QtProjectSetupScreen.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\window\QtProjectSetupScreen.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\window\QtSettingsWindow.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\window\QtSettingsWindow.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\window\QtSplashScreen.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\window\QtSplashScreen.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\window\QtStartScreen.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_gui\qt\window\QtStartScreen.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\ASTAction.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\ASTAction.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\ASTActionFactory.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\ASTActionFactory.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\ASTBodyVisitor.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\ASTBodyVisitor.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\ASTBodyVisitorClient.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\ASTBodyVisitorClient.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\ASTConsumer.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\ASTConsumer.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\ASTVisitor.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\ASTVisitor.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\CommentHandler.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\CommentHandler.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\CxxDiagnosticConsumer.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\CxxDiagnosticConsumer.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\CxxParser.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\CxxParser.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\PreprocessorCallbacks.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\PreprocessorCallbacks.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\name_resolver\CxxDeclNameResolver.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\name_resolver\CxxDeclNameResolver.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\name_resolver\CxxNameResolver.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\name_resolver\CxxNameResolver.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\name_resolver\CxxTemplateArgumentNameResolver.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\name_resolver\CxxTemplateArgumentNameResolver.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\name_resolver\CxxTypeNameResolver.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\name_resolver\CxxTypeNameResolver.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\utilityCxx.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\lib_parser\data\parser\cxx\utilityCxx.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\test\ConfigManagerTestSuite.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\test\CxxParserTestSuite.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\test\DataTypeTestSuite.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\test\DictionaryTestSuite.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\test\FileManagerTestSuite.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\test\FilePathTestSuite.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\test\FileSystemTestSuite.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\test\GraphTestSuite.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\test\LogManagerTestSuite.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\test\MatrixBaseTestSuite.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\test\MessageQueueTestSuite.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\test\NetworkProtocolHelperTestSuite.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\test\SearchIndexTestSuite.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\test\SettingsTestSuite.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\test\SqliteStorageTestSuite.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\test\StorageTestSuite.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\test\TaskSchedulerTestSuite.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\test\TestSuiteFixture.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\test\TestSuiteFixture.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\test\TextAccessTestSuite.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\test\TokenLocationCollectionTestSuite.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\test\UtilityStringTestSuite.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\test\Vector2TestSuite.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\test\VsSolutionParserTestSuite.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\test\helper\TestFileManager.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\test\helper\TestFileManager.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\test\helper\TestStorage.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\test\helper\TestStorage.h" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\trial\data\parser\cxx\TaskParseCxx.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\trial\isTrial.cpp" +SolutionParserVisualStudio.cpp WARNING: boost::filesystem::canonical: No such file or directory: "C:\Users\Manuel\FH\MSc\Masterproject\Project\src\trial\main.cpp" diff --git a/src/app/data/parser/cxx/TaskParseCxx.cpp b/src/app/data/parser/cxx/TaskParseCxx.cpp index d06a868e..c266085d 100644 --- a/src/app/data/parser/cxx/TaskParseCxx.cpp +++ b/src/app/data/parser/cxx/TaskParseCxx.cpp @@ -70,7 +70,7 @@ Task::TaskState TaskParseCxx::update() MessageStatus(ss.str(), false, true).dispatch(); - m_client->prepareParsingFile(sourcePath); + m_client->startParsingFile(sourcePath); m_parser->runTool(std::vector(1, sourcePath.str())); diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt index b8bcb3ff..90b6e32e 100644 --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -291,6 +291,7 @@ add_files( utility/Property.h utility/ResourcePaths.cpp utility/ResourcePaths.h + utility/ScopedSwitcher.h utility/TimePoint.cpp utility/TimePoint.h utility/types.h diff --git a/src/lib/component/controller/CodeController.cpp b/src/lib/component/controller/CodeController.cpp index 61f0348f..ad3abf0d 100644 --- a/src/lib/component/controller/CodeController.cpp +++ b/src/lib/component/controller/CodeController.cpp @@ -405,7 +405,7 @@ std::vector CodeController::getSnippetsForFile(std::shared_pt )->forEachStartTokenLocation( // this TokenLocationFile only contains a single StartTokenLocation. [&](TokenLocation* location) { - params.title = m_storageAccess->getNameHierarchyForNodeWithId(location->getTokenId()).getFullName(); + params.title = m_storageAccess->getNameHierarchyForNodeWithId(location->getTokenId()).getQualifiedName(); params.titleId = location->getId(); } ); @@ -430,7 +430,7 @@ std::vector CodeController::getSnippetsForFile(std::shared_pt )->forEachStartTokenLocation( // this TokenLocationFile only contains a single StartTokenLocation. [&](TokenLocation* location) { - params.footer = m_storageAccess->getNameHierarchyForNodeWithId(location->getTokenId()).getFullName(); + params.footer = m_storageAccess->getNameHierarchyForNodeWithId(location->getTokenId()).getQualifiedName(); params.footerId = location->getId(); } ); diff --git a/src/lib/component/controller/UndoRedoController.cpp b/src/lib/component/controller/UndoRedoController.cpp index 70717bf1..b13edeff 100644 --- a/src/lib/component/controller/UndoRedoController.cpp +++ b/src/lib/component/controller/UndoRedoController.cpp @@ -55,10 +55,12 @@ void UndoRedoController::handleMessage(MessageActivateFile* message) void UndoRedoController::handleMessage(MessageActivateNodes* message) { - if (m_lastCommand.message && m_lastCommand.message->getType() == message->getType() && message->nodes.size() && + if (m_lastCommand.message && + m_lastCommand.message->getType() == message->getType() && + message->nodes.size() && static_cast(m_lastCommand.message.get())->nodes.size() == message->nodes.size() && - static_cast(m_lastCommand.message.get())->nodes[0].nameHierarchy.getFullName() == - message->nodes[0].nameHierarchy.getFullName()) + static_cast(m_lastCommand.message.get())->nodes[0].nameHierarchy.getQualifiedNameWithSignature() == + message->nodes[0].nameHierarchy.getQualifiedNameWithSignature()) { return; } diff --git a/src/lib/data/Storage.cpp b/src/lib/data/Storage.cpp index 4e86df6b..bee65c26 100644 --- a/src/lib/data/Storage.cpp +++ b/src/lib/data/Storage.cpp @@ -177,7 +177,7 @@ void Storage::finishParsing() buildHierarchyCache(); } -void Storage::prepareParsingFile(const FilePath& filePath) +void Storage::startParsingFile(const FilePath& filePath) { m_sqliteStorage.beginTransaction(); } @@ -214,32 +214,26 @@ size_t Storage::getErrorCount() const } Id Storage::onTypedefParsed( - const ParseLocation& location, const NameHierarchy& nameHierarchy, const ParseTypeUsage& underlyingType, - AccessType access + const ParseLocation& location, const NameHierarchy& typedefName, AccessType access ){ - log("typedef", nameHierarchy.getFullName() + " -> " + underlyingType.dataType->getFullTypeName(), location); + log("typedef", typedefName.getQualifiedName(), location); - Id typedefNodeId = addNodeHierarchy(Node::NODE_TYPEDEF, nameHierarchy, true); - addSourceLocation(typedefNodeId, location); - addAccess(typedefNodeId, access); + Id nodeId = addNodeHierarchy(Node::NODE_TYPEDEF, typedefName, true); + addSourceLocation(nodeId, location); + addAccess(nodeId, access); - Id underlyingTypeNodeId = addNodeHierarchy(Node::NODE_TYPE, underlyingType.dataType->getTypeNameHierarchy(), false); - addEdge(typedefNodeId, underlyingTypeNodeId, Edge::EDGE_TYPEDEF_OF, location); - - return typedefNodeId; + return nodeId; } Id Storage::onClassParsed( const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access, const ParseLocation& scopeLocation ){ - log("class", nameHierarchy.getFullName(), location); + log("class", nameHierarchy.getQualifiedName(), location); Id nodeId = addNodeHierarchy(Node::NODE_CLASS, nameHierarchy, scopeLocation.isValid()); - addSourceLocation(nodeId, location); addSourceLocation(nodeId, scopeLocation, true); - addAccess(nodeId, access); return nodeId; @@ -249,63 +243,43 @@ Id Storage::onStructParsed( const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access, const ParseLocation& scopeLocation ){ - log("struct", nameHierarchy.getFullName(), location); + log("struct", nameHierarchy.getQualifiedName(), location); Id nodeId = addNodeHierarchy(Node::NODE_STRUCT, nameHierarchy, scopeLocation.isValid()); - addSourceLocation(nodeId, location); addSourceLocation(nodeId, scopeLocation, true); - addAccess(nodeId, access); return nodeId; } -Id Storage::onGlobalVariableParsed(const ParseLocation& location, const ParseVariable& variable) +Id Storage::onGlobalVariableParsed(const ParseLocation& location, const NameHierarchy& variable) { - log("global", variable.getFullName(), location); + log("global", variable.getQualifiedName(), location); - Id nodeId = addNodeHierarchy(Node::NODE_GLOBAL_VARIABLE, variable.nameHierarchy, true); + Id nodeId = addNodeHierarchy(Node::NODE_GLOBAL_VARIABLE, variable, true); addSourceLocation(nodeId, location); - Id typeNodeId = addNodeHierarchy(Node::NODE_TYPE, variable.type.dataType->getTypeNameHierarchy(), false); - addEdge(nodeId, typeNodeId, Edge::EDGE_TYPE_OF, location); - return nodeId; } -Id Storage::onFieldParsed(const ParseLocation& location, const ParseVariable& variable, AccessType access) +Id Storage::onFieldParsed(const ParseLocation& location, const NameHierarchy& field, AccessType access) { - log("field", variable.getFullName(), location); + log("field", field.getQualifiedName(), location); - Id nodeId = addNodeHierarchy(Node::NODE_FIELD, variable.nameHierarchy, true); + Id nodeId = addNodeHierarchy(Node::NODE_FIELD, field, true); addSourceLocation(nodeId, location); addAccess(nodeId, access); - Id typeNodeId = addNodeHierarchy(Node::NODE_TYPE, variable.type.dataType->getTypeNameHierarchy(), false); - addEdge(nodeId, typeNodeId, Edge::EDGE_TYPE_OF, variable.type.location); - return nodeId; } Id Storage::onFunctionParsed( - const ParseLocation& location, const ParseFunction& function, const ParseLocation& scopeLocation + const ParseLocation& location, const NameHierarchy& function, const ParseLocation& scopeLocation ){ - log("function", function.getFullName(), location); + log("function", function.getQualifiedNameWithSignature(), location); Id nodeId = addNodeHierarchy(Node::NODE_FUNCTION, function, true); - - Id returnTypeNodeId = addNodeHierarchy(Node::NODE_TYPE, function.returnType.dataType->getTypeNameHierarchy(), false); - addEdge(nodeId, returnTypeNodeId, Edge::EDGE_TYPE_USAGE, function.returnType.location); - // addEdge(nodeId, returnTypeNodeId, Edge::EDGE_RETURN_TYPE_OF, function.returnType.location); - - for (size_t i = 0; i < function.parameters.size(); i++) - { - Id parameternTypeNodeId = addNodeHierarchy(Node::NODE_TYPE, function.parameters[i].dataType->getTypeNameHierarchy(), false); - addEdge(nodeId, parameternTypeNodeId, Edge::EDGE_TYPE_USAGE, function.parameters[i].location); - // addEdge(nodeId, parameternTypeNodeId, Edge::EDGE_PARAMETER_TYPE_OF, function.parameters[i].location); - } - addSourceLocation(nodeId, location); addSourceLocation(nodeId, scopeLocation, true); @@ -313,40 +287,25 @@ Id Storage::onFunctionParsed( } Id Storage::onMethodParsed( - const ParseLocation& location, const ParseFunction& method, AccessType access, AbstractionType abstraction, + const ParseLocation& location, const NameHierarchy& method, AccessType access, AbstractionType abstraction, const ParseLocation& scopeLocation ){ - log("method", method.getFullName(), location); + log("method", method.getQualifiedNameWithSignature(), location); Id nodeId = addNodeHierarchy(Node::NODE_METHOD, method, location.isValid() && scopeLocation.isValid()); addSourceLocation(nodeId, location); addSourceLocation(nodeId, scopeLocation, true); addAccess(nodeId, access); - if (method.returnType.location.isValid()) - { - Id returnTypeNodeId = addNodeHierarchy(Node::NODE_TYPE, method.returnType.dataType->getTypeNameHierarchy(), false); - addEdge(nodeId, returnTypeNodeId, Edge::EDGE_TYPE_USAGE, method.returnType.location); - // addEdge(nodeId, returnTypeNodeId, Edge::EDGE_RETURN_TYPE_OF, method.returnType.location); - } - - for (size_t i = 0; i < method.parameters.size(); i++) - { - Id parameternTypeNodeId = addNodeHierarchy(Node::NODE_TYPE, method.parameters[i].dataType->getTypeNameHierarchy(), false); - addEdge(nodeId, parameternTypeNodeId, Edge::EDGE_TYPE_USAGE, method.parameters[i].location); - // addEdge(nodeId, parameternTypeNodeId, Edge::EDGE_PARAMETER_TYPE_OF, method.parameters[i].location); - } - return nodeId; } Id Storage::onNamespaceParsed( const ParseLocation& location, const NameHierarchy& nameHierarchy, const ParseLocation& scopeLocation ){ - log("namespace", nameHierarchy.getFullName(), location); + log("namespace", nameHierarchy.getQualifiedName(), location); Id nodeId = addNodeHierarchy(Node::NODE_NAMESPACE, nameHierarchy, true); - addSourceLocation(nodeId, location); addSourceLocation(nodeId, scopeLocation, true); @@ -357,7 +316,7 @@ Id Storage::onEnumParsed( const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access, const ParseLocation& scopeLocation ){ - log("enum", nameHierarchy.getFullName(), location); + log("enum", nameHierarchy.getQualifiedName(), location); Id nodeId = addNodeHierarchy(Node::NODE_ENUM, nameHierarchy, true); @@ -370,7 +329,7 @@ Id Storage::onEnumParsed( Id Storage::onEnumConstantParsed(const ParseLocation& location, const NameHierarchy& nameHierarchy) { - log("enum constant", nameHierarchy.getFullName(), location); + log("enum constant", nameHierarchy.getQualifiedName(), location); Id nodeId = addNodeHierarchy(Node::NODE_ENUM_CONSTANT, nameHierarchy, true); @@ -383,7 +342,7 @@ Id Storage::onInheritanceParsed( const ParseLocation& location, const NameHierarchy& childNameHierarchy, const NameHierarchy& parentNameHierarchy, AccessType access ){ - log("inheritance", childNameHierarchy.getFullName() + " : " + parentNameHierarchy.getFullName(), location); + log("inheritance", childNameHierarchy.getQualifiedName() + " : " + parentNameHierarchy.getQualifiedName(), location); Id childNodeId = addNodeHierarchy(Node::NODE_TYPE, childNameHierarchy, false); Id parentNodeId = addNodeHierarchy(Node::NODE_TYPE, parentNameHierarchy, false); @@ -394,11 +353,11 @@ Id Storage::onInheritanceParsed( } Id Storage::onMethodOverrideParsed( - const ParseLocation& location, const ParseFunction& base, const ParseFunction& overrider) + const ParseLocation& location, const NameHierarchy& overridden, const NameHierarchy& overrider) { - log("override", base.getFullName() + " -> " + overrider.getFullName(), location); + log("override", overridden.getQualifiedNameWithSignature() + " -> " + overrider.getQualifiedNameWithSignature(), location); - Id baseNodeId = addNodeHierarchy(Node::NODE_FUNCTION, base, false); // TODO: call this overridden + Id baseNodeId = addNodeHierarchy(Node::NODE_FUNCTION, overridden, false); Id overriderNodeId = addNodeHierarchy(Node::NODE_FUNCTION, overrider, false); Id edgeId = addEdge(overriderNodeId, baseNodeId, Edge::EDGE_OVERRIDE, location); @@ -406,9 +365,9 @@ Id Storage::onMethodOverrideParsed( return edgeId; } -Id Storage::onCallParsed(const ParseLocation& location, const ParseFunction& caller, const ParseFunction& callee) +Id Storage::onCallParsed(const ParseLocation& location, const NameHierarchy& caller, const NameHierarchy& callee) { - log("call", caller.getFullName() + " -> " + callee.getFullName(), location); + log("call", caller.getQualifiedNameWithSignature() + " -> " + callee.getQualifiedNameWithSignature(), location); Id callerNodeId = addNodeHierarchy(Node::NODE_FUNCTION, caller, false); Id calleeNodeId = addNodeHierarchy(Node::NODE_FUNCTION, callee, false); @@ -418,37 +377,12 @@ Id Storage::onCallParsed(const ParseLocation& location, const ParseFunction& cal return edgeId; } -Id Storage::onCallParsed(const ParseLocation& location, const ParseVariable& caller, const ParseFunction& callee) -{ - log("call", caller.getFullName() + " -> " + callee.getFullName(), location); - - Id callerNodeId = addNodeHierarchy(Node::NODE_UNDEFINED, caller.nameHierarchy, false); - Id calleeNodeId = addNodeHierarchy(Node::NODE_FUNCTION, callee, false); - - Id edgeId = addEdge(callerNodeId, calleeNodeId, Edge::EDGE_CALL, location); - - return edgeId; -} - Id Storage::onFieldUsageParsed( - const ParseLocation& location, const ParseFunction& user, const NameHierarchy& usedNameHierarchy + const ParseLocation& location, const NameHierarchy& userNameHierarchy, const NameHierarchy& usedNameHierarchy ){ - log("field usage", user.getFullName() + " -> " + usedNameHierarchy.getFullName(), location); + log("field usage", userNameHierarchy.getQualifiedNameWithSignature() + " -> " + usedNameHierarchy.getQualifiedName(), location); - Id userNodeId = addNodeHierarchy(Node::NODE_FUNCTION, user, false); - Id usedNodeId = addNodeHierarchy(Node::NODE_FIELD, usedNameHierarchy, false); - - Id edgeId = addEdge(userNodeId, usedNodeId, Edge::EDGE_USAGE, location); - - return edgeId; -} - -Id Storage::onFieldUsageParsed( - const ParseLocation& location, const ParseVariable& user, const NameHierarchy& usedNameHierarchy -){ - log("global usage", user.getFullName() + " -> " + usedNameHierarchy.getFullName(), location); - - Id userNodeId = addNodeHierarchy(Node::NODE_FUNCTION, user.nameHierarchy, false); + Id userNodeId = addNodeHierarchy(Node::NODE_FUNCTION, userNameHierarchy, false); Id usedNodeId = addNodeHierarchy(Node::NODE_FIELD, usedNameHierarchy, false); Id edgeId = addEdge(userNodeId, usedNodeId, Edge::EDGE_USAGE, location); @@ -457,24 +391,11 @@ Id Storage::onFieldUsageParsed( } Id Storage::onGlobalVariableUsageParsed( // or static variable used - const ParseLocation& location, const ParseFunction& user, const NameHierarchy& usedNameHierarchy + const ParseLocation& location, const NameHierarchy& userNameHierarchy, const NameHierarchy& usedNameHierarchy ){ - log("global usage", user.getFullName() + " -> " + usedNameHierarchy.getFullName(), location); + log("global usage", userNameHierarchy.getQualifiedNameWithSignature() + " -> " + usedNameHierarchy.getQualifiedNameWithSignature(), location); - Id userNodeId = addNodeHierarchy(Node::NODE_FUNCTION, user, false); - Id usedNodeId = addNodeHierarchy(Node::NODE_GLOBAL_VARIABLE, usedNameHierarchy, false); - - Id edgeId = addEdge(userNodeId, usedNodeId, Edge::EDGE_USAGE, location); - - return edgeId; -} - -Id Storage::onGlobalVariableUsageParsed( - const ParseLocation& location, const ParseVariable& user, const NameHierarchy& usedNameHierarchy) -{ - log("global usage", user.getFullName() + " -> " + usedNameHierarchy.getFullName(), location); - - Id userNodeId = addNodeHierarchy(Node::NODE_GLOBAL_VARIABLE, user.nameHierarchy, false); + Id userNodeId = addNodeHierarchy(Node::NODE_FUNCTION, userNameHierarchy, false); Id usedNodeId = addNodeHierarchy(Node::NODE_GLOBAL_VARIABLE, usedNameHierarchy, false); Id edgeId = addEdge(userNodeId, usedNodeId, Edge::EDGE_USAGE, location); @@ -483,99 +404,47 @@ Id Storage::onGlobalVariableUsageParsed( } Id Storage::onEnumConstantUsageParsed( - const ParseLocation& location, const ParseFunction& user, const NameHierarchy& usedNameHierarchy + const ParseLocation& location, const NameHierarchy& userNameHierarchy, const NameHierarchy& usedNameHierarchy ){ - log("enum constant usage", user.getFullName() + " -> " + usedNameHierarchy.getFullName(), location); + log("enum constant usage", userNameHierarchy.getQualifiedNameWithSignature() + " -> " + usedNameHierarchy.getQualifiedNameWithSignature(), location); - Id userNodeId = addNodeHierarchy(Node::NODE_FUNCTION, user, false); - Id usedNodeId = addNodeHierarchy(Node::NODE_GLOBAL_VARIABLE, usedNameHierarchy, false); + Id userNodeId = addNodeHierarchy(Node::NODE_UNDEFINED, userNameHierarchy, false); + Id usedNodeId = addNodeHierarchy(Node::NODE_ENUM_CONSTANT, usedNameHierarchy, false); Id edgeId = addEdge(userNodeId, usedNodeId, Edge::EDGE_USAGE, location); return edgeId; } -Id Storage::onEnumConstantUsageParsed( - const ParseLocation& location, const ParseVariable& user, const NameHierarchy& usedNameHierarchy -){ - log("enum constant usage", user.getFullName() + " -> " + usedNameHierarchy.getFullName(), location); - - Id userNodeId = addNodeHierarchy(Node::NODE_FUNCTION, user.nameHierarchy, false); - Id usedNodeId = addNodeHierarchy(Node::NODE_GLOBAL_VARIABLE, usedNameHierarchy, false); - - Id edgeId = addEdge(userNodeId, usedNodeId, Edge::EDGE_USAGE, location); - - return edgeId; -} - -Id Storage::onTypeUsageParsed(const ParseTypeUsage& typeUsage, const ParseFunction& function) // check if type has valid location +Id Storage::onTypeUsageParsed(const ParseLocation& location, const NameHierarchy& user, const NameHierarchy& used) { - log("type usage", function.getFullName() + " -> " + typeUsage.dataType->getRawTypeName(), typeUsage.location); + log("type usage", user.getQualifiedNameWithSignature() + " -> " + used.getQualifiedName(), location); - if (!typeUsage.location.isValid()) + if (!location.isValid()) { return 0; } - Id functionNodeId = addNodeHierarchy(Node::NODE_FUNCTION, function, false); - Id typeNodeId = addNodeHierarchy(Node::NODE_TYPE, typeUsage.dataType->getTypeNameHierarchy(), false); + Id functionNodeId = addNodeHierarchy(Node::NODE_UNDEFINED, user, false); + Id typeNodeId = addNodeHierarchy(Node::NODE_TYPE, used, false); - Id edgeId = addEdge(functionNodeId, typeNodeId, Edge::EDGE_TYPE_USAGE, typeUsage.location); + Id edgeId = addEdge(functionNodeId, typeNodeId, Edge::EDGE_TYPE_USAGE, location); return edgeId; } -Id Storage::onTypeUsageParsed(const ParseTypeUsage& typeUsage, const ParseVariable& variable) -{ - log("type usage", variable.getFullName() + " -> " + typeUsage.dataType->getRawTypeName(), typeUsage.location); - - if (!typeUsage.location.isValid()) - { - return 0; - } - - Id functionNodeId = addNodeHierarchy(Node::NODE_UNDEFINED, variable.nameHierarchy, false); - Id typeNodeId = addNodeHierarchy(Node::NODE_TYPE, typeUsage.dataType->getTypeNameHierarchy(), false); - - Id edgeId = addEdge(functionNodeId, typeNodeId, Edge::EDGE_TYPE_USAGE, typeUsage.location); - - return edgeId; -} - -Id Storage::onTemplateArgumentTypeOfTemplateRecordParsed( +Id Storage::onTemplateArgumentTypeParsed( const ParseLocation& location, const NameHierarchy& argumentTypeNameHierarchy, const NameHierarchy& templateNameHierarchy) { log( "template argument type", - argumentTypeNameHierarchy.getFullName() + " -> " + templateNameHierarchy.getFullName(), + argumentTypeNameHierarchy.getQualifiedName() + " -> " + templateNameHierarchy.getQualifiedName(), location ); Id argumentNodeId = addNodeHierarchy(Node::NODE_TYPE, argumentTypeNameHierarchy, false); - // does not need a source location because this type that is already defined (and therefore has a location). - - Id templateNodeId = addNodeHierarchy(Node::NODE_TYPE, templateNameHierarchy, false); - - addEdge(templateNodeId, argumentNodeId, Edge::EDGE_TEMPLATE_ARGUMENT, location); - - return argumentNodeId; -} - -Id Storage::onTemplateArgumentTypeOfTemplateFunctionParsed( - const ParseLocation& location, const NameHierarchy& argumentTypeNameHierarchy, - const ParseFunction& templateFunction) -{ - log( - "template argument type", - argumentTypeNameHierarchy.getFullName() + " -> " + templateFunction.getFullName(), - location - ); - - Id argumentNodeId = addNodeHierarchy(Node::NODE_TYPE, argumentTypeNameHierarchy, false); - // does not need a source location because this type that is already defined (and therefore has a location). - - Id templateNodeId = addNodeHierarchy(Node::NODE_FUNCTION, templateFunction, false); + Id templateNodeId = addNodeHierarchy(Node::NODE_UNDEFINED, templateNameHierarchy, false); addEdge(templateNodeId, argumentNodeId, Edge::EDGE_TEMPLATE_ARGUMENT, location); @@ -583,78 +452,62 @@ Id Storage::onTemplateArgumentTypeOfTemplateFunctionParsed( } Id Storage::onTemplateDefaultArgumentTypeParsed( - const ParseTypeUsage& defaultArgumentTypeUsage, - const NameHierarchy& templateParameterNameHierarchy // actually this is the template parameter??? + const ParseLocation& location, const NameHierarchy& defaultArgumentTypeNameHierarchy, + const NameHierarchy& templateParameterNameHierarchy ){ log( "template default argument", - defaultArgumentTypeUsage.dataType->getTypeNameHierarchy().getFullName() + " -> " + templateParameterNameHierarchy.getFullName(), - defaultArgumentTypeUsage.location + defaultArgumentTypeNameHierarchy.getQualifiedNameWithSignature() + " -> " + templateParameterNameHierarchy.getQualifiedName(), + location ); - Id defaultArgumentNodeId = addNodeHierarchy(Node::NODE_TYPE, defaultArgumentTypeUsage.dataType->getTypeNameHierarchy(), false); - // does not need a source location because this type that is already defined (and therefore has a location). + Id defaultArgumentNodeId = addNodeHierarchy(Node::NODE_TYPE, defaultArgumentTypeNameHierarchy, false); + Id parameterNodeId = addNodeHierarchy(Node::NODE_TYPE, templateParameterNameHierarchy, false); - Id argumentNodeId = addNodeHierarchy(Node::NODE_TYPE, templateParameterNameHierarchy, false); - - addEdge(argumentNodeId, defaultArgumentNodeId, Edge::EDGE_TEMPLATE_DEFAULT_ARGUMENT, defaultArgumentTypeUsage.location); + addEdge(parameterNodeId, defaultArgumentNodeId, Edge::EDGE_TEMPLATE_DEFAULT_ARGUMENT, location); return defaultArgumentNodeId; } -Id Storage::onTemplateRecordParameterTypeParsed( - const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy, - const NameHierarchy& templateRecordNameHierarchy +Id Storage::onTemplateParameterTypeParsed( + const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy ){ - log("template record type parameter", templateParameterTypeNameHierarchy.getFullName(), location); + log("template parameter type", templateParameterTypeNameHierarchy.getQualifiedName(), location); Id parameterNodeId = addNodeHierarchy(Node::NODE_TEMPLATE_PARAMETER_TYPE, templateParameterTypeNameHierarchy, true); addSourceLocation(parameterNodeId, location, false); addAccess(parameterNodeId, TokenComponentAccess::ACCESS_TEMPLATE); - addNodeHierarchy(Node::NODE_TYPE, templateRecordNameHierarchy, false); - return parameterNodeId; } -Id Storage::onTemplateRecordSpecializationParsed( - const ParseLocation& location, const NameHierarchy& specializedRecordNameHierarchy, - const RecordType specializedRecordType, const NameHierarchy& specializedFromNameHierarchy +Id Storage::onTemplateSpecializationParsed( + const ParseLocation& location, const NameHierarchy& specializedNameHierarchy, + const NameHierarchy& specializedFromNameHierarchy ){ log( "template record specialization", - specializedRecordNameHierarchy.getFullName() + " -> " + specializedFromNameHierarchy.getFullName(), + specializedNameHierarchy.getQualifiedName() + " -> " + specializedFromNameHierarchy.getQualifiedName(), location ); - Node::NodeType specializedRecordNodeType = Node::NODE_CLASS; - if (specializedRecordType == ParserClient::RECORD_STRUCT) - { - specializedRecordNodeType = Node::NODE_STRUCT; - } - - Id specializedNodeId = addNodeHierarchy(specializedRecordNodeType, specializedRecordNameHierarchy, true); - addSourceLocation(specializedNodeId, location, false); - + Id specializedId = addNodeHierarchy(Node::NODE_TYPE, specializedNameHierarchy, false); Id recordNodeId = addNodeHierarchy(Node::NODE_TYPE, specializedFromNameHierarchy, false); - addAccess(specializedNodeId, getAccess(recordNodeId)); + Id edgeId = addEdge(specializedId, recordNodeId, Edge::EDGE_TEMPLATE_SPECIALIZATION_OF, location); - addEdge(specializedNodeId, recordNodeId, Edge::EDGE_TEMPLATE_SPECIALIZATION_OF, location); - - return specializedNodeId; + return edgeId; } Id Storage::onTemplateMemberFunctionSpecializationParsed( - const ParseLocation& location, const ParseFunction& instantiatedFunction, const ParseFunction& specializedFunction + const ParseLocation& location, const NameHierarchy& instantiatedFunction, const NameHierarchy& specializedFunction ){ log( "template member function specialization", - instantiatedFunction.getFullName() + " -> " + specializedFunction.getFullName(), + instantiatedFunction.getQualifiedNameWithSignature() + " -> " + specializedFunction.getQualifiedNameWithSignature(), location ); Id instantiatedFunctionNodeId = addNodeHierarchy(Node::NODE_FUNCTION, instantiatedFunction, false); - Id specializedFunctionNodeId = addNodeHierarchy(Node::NODE_FUNCTION, specializedFunction, false); Id edgeId = addEdge(instantiatedFunctionNodeId, specializedFunctionNodeId, Edge::EDGE_TEMPLATE_MEMBER_SPECIALIZATION_OF, location); @@ -662,34 +515,16 @@ Id Storage::onTemplateMemberFunctionSpecializationParsed( return edgeId; } -Id Storage::onTemplateFunctionParameterTypeParsed( - const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy, const ParseFunction function -){ - log("template function type parameter", templateParameterTypeNameHierarchy.getFullName(), location); - - Id parameterNodeId = addNodeHierarchy(Node::NODE_TEMPLATE_PARAMETER_TYPE, templateParameterTypeNameHierarchy, true); - addSourceLocation(parameterNodeId, location, false); - addAccess(parameterNodeId, TokenComponentAccess::ACCESS_TEMPLATE); - - addNodeHierarchy(Node::NODE_FUNCTION, function, false); - - return parameterNodeId; -} - Id Storage::onTemplateFunctionSpecializationParsed( - const ParseLocation& location, const ParseFunction specializedFunction, const ParseFunction templateFunction + const ParseLocation& location, const NameHierarchy specializedFunction, const NameHierarchy templateFunction ){ - log("function template specialization", specializedFunction.getFullName(), location); + log("function template specialization", specializedFunction.getQualifiedNameWithSignature(), location); - Id specializedNodeId = addNodeHierarchy(Node::NODE_FUNCTION, specializedFunction, true); - addSourceLocation(specializedNodeId, location, false); + Id specializedNodeId = addNodeHierarchy(Node::NODE_TYPE, specializedFunction, true); + Id functionNodeId = addNodeHierarchy(Node::NODE_TYPE, templateFunction, false); + Id edgeId = addEdge(specializedNodeId, functionNodeId, Edge::EDGE_TEMPLATE_SPECIALIZATION_OF, location); - Id functionNodeId = addNodeHierarchy(Node::NODE_FUNCTION, templateFunction, false); - addAccess(specializedNodeId, getAccess(functionNodeId)); - - addEdge(specializedNodeId, functionNodeId, Edge::EDGE_TEMPLATE_SPECIALIZATION_OF, location); - - return specializedNodeId; + return edgeId; } Id Storage::onFileParsed(const FileInfo& fileInfo) @@ -727,7 +562,7 @@ Id Storage::onFileIncludeParsed(const ParseLocation& location, const FileInfo& f Id Storage::onMacroDefineParsed( const ParseLocation& location, const NameHierarchy& macroNameHierarchy, const ParseLocation& scopeLocation ){ - log("macro", macroNameHierarchy.getFullName(), location); + log("macro", macroNameHierarchy.getQualifiedName(), location); Id macroId = addNodeHierarchy(Node::NODE_MACRO, macroNameHierarchy, true); addSourceLocation(macroId, location); @@ -741,7 +576,7 @@ Id Storage::onMacroDefineParsed( Id Storage::onMacroExpandParsed(const ParseLocation &location, const NameHierarchy& macroNameHierarchy) { - log("macro use", macroNameHierarchy.getFullName(), location); + log("macro use", macroNameHierarchy.getQualifiedName(), location); Id macroExpandId = addNodeHierarchy(Node::NODE_MACRO, macroNameHierarchy, false); Id fileNodeId = getFileNodeId(location.filePath); @@ -1399,7 +1234,7 @@ Id Storage::addNodeHierarchy(Node::NodeType nodeType, NameHierarchy nameHierarch else if (isLastElement) // Update the type of the last node if the new type is more specific. { Node::NodeType storedType = Node::intToType(node.type); - if (type > storedType) + if (!node.defined && type > storedType) { m_sqliteStorage.setNodeType(Node::typeToInt(type), nodeId); } @@ -1411,11 +1246,6 @@ Id Storage::addNodeHierarchy(Node::NodeType nodeType, NameHierarchy nameHierarch return parentNodeId; } -Id Storage::addNodeHierarchy(Node::NodeType type, const ParseFunction& function, bool defined) -{ - return addNodeHierarchy(type, function.nameHierarchy, defined); -} - Id Storage::addSourceLocation(Id elementNodeId, const ParseLocation &location, bool isScope) { if (!location.isValid()) @@ -1671,11 +1501,11 @@ void Storage::addNodesToGraph(const std::vector nodeIds, Graph* graph) const if (type == Node::NODE_FUNCTION || type == Node::NODE_METHOD) { - std::shared_ptr lastElement = nameHierarchy.back(); - if (lastElement) + std::string signatureString = nameHierarchy.getRawNameWithSignature(); + if (signatureString.size() > 0) // this should always be the case since functions and methods must have sigs. { node->addComponentSignature( - std::make_shared(lastElement->getFullSignature()) + std::make_shared(signatureString) ); } } diff --git a/src/lib/data/Storage.h b/src/lib/data/Storage.h index 7aa8a570..1a279723 100644 --- a/src/lib/data/Storage.h +++ b/src/lib/data/Storage.h @@ -43,34 +43,29 @@ public: virtual void startParsing(); virtual void finishParsing(); - virtual void prepareParsingFile(const FilePath& filePath); + virtual void startParsingFile(const FilePath& filePath); virtual void finishParsingFile(const FilePath& filePath); virtual void onError(const ParseLocation& location, const std::string& message); virtual size_t getErrorCount() const; virtual Id onTypedefParsed( - const ParseLocation& location, const NameHierarchy& nameHierarchy, - const ParseTypeUsage& underlyingType, AccessType access); + const ParseLocation& location, const NameHierarchy& typedefName, AccessType access); virtual Id onClassParsed( const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access, const ParseLocation& scopeLocation); virtual Id onStructParsed( const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access, const ParseLocation& scopeLocation); - - virtual Id onGlobalVariableParsed(const ParseLocation& location, const ParseVariable& variable); - virtual Id onFieldParsed(const ParseLocation& location, const ParseVariable& variable, AccessType access); - + virtual Id onGlobalVariableParsed(const ParseLocation& location, const NameHierarchy& variable); + virtual Id onFieldParsed(const ParseLocation& location, const NameHierarchy& field, AccessType access); virtual Id onFunctionParsed( - const ParseLocation& location, const ParseFunction& function, const ParseLocation& scopeLocation); + const ParseLocation& location, const NameHierarchy& function, const ParseLocation& scopeLocation); virtual Id onMethodParsed( - const ParseLocation& location, const ParseFunction& method, AccessType access, AbstractionType abstraction, + const ParseLocation& location, const NameHierarchy& method, AccessType access, AbstractionType abstraction, const ParseLocation& scopeLocation); - virtual Id onNamespaceParsed( const ParseLocation& location, const NameHierarchy& nameHierarchy, const ParseLocation& scopeLocation); - virtual Id onEnumParsed( const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access, const ParseLocation& scopeLocation); @@ -80,47 +75,33 @@ public: const ParseLocation& location, const NameHierarchy& childNameHierarchy, const NameHierarchy& parentNameHierarchy, AccessType access); virtual Id onMethodOverrideParsed( - const ParseLocation& location, const ParseFunction& base, const ParseFunction& overrider); + const ParseLocation& location, const NameHierarchy& overridden, const NameHierarchy& overrider); virtual Id onCallParsed( - const ParseLocation& location, const ParseFunction& caller, const ParseFunction& callee); - virtual Id onCallParsed( - const ParseLocation& location, const ParseVariable& caller, const ParseFunction& callee); + const ParseLocation& location, const NameHierarchy& caller, const NameHierarchy& callee); virtual Id onFieldUsageParsed( - const ParseLocation& location, const ParseFunction& user, const NameHierarchy& usedNameHierarchy); - virtual Id onFieldUsageParsed( - const ParseLocation& location, const ParseVariable& user, const NameHierarchy& usedNameHierarchy); + const ParseLocation& location, const NameHierarchy& userNameHierarchy, const NameHierarchy& usedNameHierarchy); virtual Id onGlobalVariableUsageParsed( - const ParseLocation& location, const ParseFunction& user, const NameHierarchy& usedNameHierarchy); - virtual Id onGlobalVariableUsageParsed( - const ParseLocation& location, const ParseVariable& user, const NameHierarchy& usedNameHierarchy); + const ParseLocation& location, const NameHierarchy& userNameHierarchy, const NameHierarchy& usedNameHierarchy); virtual Id onEnumConstantUsageParsed( - const ParseLocation& location, const ParseFunction& user, const NameHierarchy& usedNameHierarchy); - virtual Id onEnumConstantUsageParsed( - const ParseLocation& location, const ParseVariable& user, const NameHierarchy& usedNameHierarchy); - virtual Id onTypeUsageParsed(const ParseTypeUsage& typeUsage, const ParseFunction& function); - virtual Id onTypeUsageParsed(const ParseTypeUsage& typeUsage, const ParseVariable& variable); + const ParseLocation& location, const NameHierarchy& userNameHierarchy, const NameHierarchy& usedNameHierarchy); + virtual Id onTypeUsageParsed(const ParseLocation& location, const NameHierarchy& user, const NameHierarchy& used); - virtual Id onTemplateArgumentTypeOfTemplateRecordParsed( + virtual Id onTemplateArgumentTypeParsed( const ParseLocation& location, const NameHierarchy& argumentTypeNameHierarchy, const NameHierarchy& templateNameHierarchy); - virtual Id onTemplateArgumentTypeOfTemplateFunctionParsed( - const ParseLocation& location, const NameHierarchy& argumentTypeNameHierarchy, - const ParseFunction& templateFunction); virtual Id onTemplateDefaultArgumentTypeParsed( - const ParseTypeUsage& defaultArgumentTypeUsage, const NameHierarchy& templateParameterNameHierarchy); - virtual Id onTemplateRecordParameterTypeParsed( - const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy, - const NameHierarchy& templateRecordNameHierarchy); - virtual Id onTemplateRecordSpecializationParsed( - const ParseLocation& location, const NameHierarchy& specializedRecordNameHierarchy, - const RecordType specializedRecordType, const NameHierarchy& specializedFromNameHierarchy); + const ParseLocation& location, const NameHierarchy& defaultArgumentTypeNameHierarchy, + const NameHierarchy& templateParameterNameHierarchy); + virtual Id onTemplateParameterTypeParsed( + const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy); + virtual Id onTemplateSpecializationParsed( + const ParseLocation& location, const NameHierarchy& specializedNameHierarchy, + const NameHierarchy& specializedFromNameHierarchy); virtual Id onTemplateMemberFunctionSpecializationParsed( - const ParseLocation& location, const ParseFunction& instantiatedFunction, const ParseFunction& specializedFunction); + const ParseLocation& location, const NameHierarchy& instantiatedFunction, const NameHierarchy& specializedFunction); - virtual Id onTemplateFunctionParameterTypeParsed( - const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy, const ParseFunction function); virtual Id onTemplateFunctionSpecializationParsed( - const ParseLocation& location, const ParseFunction specializedFunction, const ParseFunction templateFunction); + const ParseLocation& location, const NameHierarchy specializedFunction, const NameHierarchy templateFunction); virtual Id onFileParsed(const FileInfo& fileInfo); virtual Id onFileIncludeParsed( @@ -176,7 +157,6 @@ public: private: Id addNodeHierarchy(Node::NodeType nodeType, NameHierarchy nameHierarchy, bool defined); - Id addNodeHierarchy(Node::NodeType type, const ParseFunction& function, bool defined); Id addSourceLocation(Id elementNodeId, const ParseLocation &location, bool isScope = false); Id addEdge(Id sourceNodeId, Id targetNodeId, Edge::EdgeType type); diff --git a/src/lib/data/graph/Node.cpp b/src/lib/data/graph/Node.cpp index 9746c6fc..b280614d 100644 --- a/src/lib/data/graph/Node.cpp +++ b/src/lib/data/graph/Node.cpp @@ -129,12 +129,12 @@ bool Node::isType(NodeTypeMask mask) const std::string Node::getName() const { - return m_nameHierarchy.getName(); + return m_nameHierarchy.getRawName(); } std::string Node::getFullName() const { - return m_nameHierarchy.getFullName(); + return m_nameHierarchy.getQualifiedName(); } NameHierarchy Node::getNameHierarchy() const diff --git a/src/lib/data/name/NameElement.cpp b/src/lib/data/name/NameElement.cpp index 3d84b7dd..9bddeac8 100644 --- a/src/lib/data/name/NameElement.cpp +++ b/src/lib/data/name/NameElement.cpp @@ -1,12 +1,61 @@ #include "data/name/NameElement.h" -NameElement::NameElement(const std::string& name) - : m_name(name) - , m_signature("") +#include "utility/logging/logging.h" +#include "utility/utilityString.h" + +std::string NameElement::Signature::serialize(Signature signature) +{ + return signature.m_prefix + "\r" + signature.m_postfix; +} + +NameElement::Signature NameElement::Signature::deserialize(const std::string& serialized) +{ + std::vector serializedElements = utility::splitToVector(serialized, "\r"); + if (serializedElements.size() != 2) + { + LOG_ERROR("unable to deserialize name signature: " + serialized); // todo: obfuscate serialized! + } + return Signature(serializedElements[0], serializedElements[1]); +} + +NameElement::Signature::Signature() { } -NameElement::NameElement(const std::string& name, const std::string& signature) +NameElement::Signature::Signature(std::string prefix, std::string postfix) + : m_prefix(prefix) + , m_postfix(postfix) +{ +} + +std::string NameElement::Signature::qualifyName(const std::string& name) const +{ + if (!isValid()) + { + return name; + } + + std::string qualifiedName = m_prefix; + if (name.size() > 0) + { + qualifiedName += " " + name; + } + qualifiedName += m_postfix; + + return qualifiedName; +} + +bool NameElement::Signature::isValid() const +{ + return ((m_prefix + m_postfix).size() > 0); +} + +NameElement::NameElement(const std::string& name) + : m_name(name) +{ +} + +NameElement::NameElement(const std::string& name, const Signature& signature) : m_name(name) , m_signature(signature) { @@ -16,12 +65,22 @@ NameElement::~NameElement() { } -std::string NameElement::getFullName() const +std::string NameElement::getName() const { return m_name; } -std::string NameElement::getFullSignature() const +std::string NameElement::getNameWithSignature() const +{ + return m_signature.qualifyName(m_name); +} + +bool NameElement::hasSignature() const +{ + return m_signature.isValid(); +} + +NameElement::Signature NameElement::getSignature() { return m_signature; } diff --git a/src/lib/data/name/NameElement.h b/src/lib/data/name/NameElement.h index 2f59664f..565ea039 100644 --- a/src/lib/data/name/NameElement.h +++ b/src/lib/data/name/NameElement.h @@ -1,21 +1,43 @@ #ifndef NAME_ELEMENT_H #define NAME_ELEMENT_H +#include #include +#include + +class DataType; class NameElement { public: + class Signature + { + public: + static std::string serialize(Signature signature); + static Signature deserialize(const std::string& serialized); + + Signature(); + Signature(std::string prefix, std::string postfix); + std::string qualifyName(const std::string& name) const; + bool isValid() const; + + private: + std::string m_prefix; + std::string m_postfix; + }; + NameElement(const std::string& name); - NameElement(const std::string& name, const std::string& signature); + NameElement(const std::string& name, const Signature& signature); ~NameElement(); - std::string getFullName() const; - std::string getFullSignature() const; + std::string getName() const; + std::string getNameWithSignature() const; + bool hasSignature() const; + Signature getSignature(); private: std::string m_name; - std::string m_signature; + Signature m_signature; }; #endif // NAME_ELEMENT_H diff --git a/src/lib/data/name/NameHierarchy.cpp b/src/lib/data/name/NameHierarchy.cpp index ca540954..3102ba4e 100644 --- a/src/lib/data/name/NameHierarchy.cpp +++ b/src/lib/data/name/NameHierarchy.cpp @@ -8,10 +8,12 @@ std::string NameHierarchy::serialize(NameHierarchy nameHierarchy) std::string serializedName = ""; for (size_t i = 0; i < nameHierarchy.size(); i++) { - serializedName += nameHierarchy[i]->getFullName() + "\t"; - serializedName += nameHierarchy[i]->getFullSignature(); - if (i + 1 < nameHierarchy.size()) + if (i > 0) + { serializedName += "\n"; + } + serializedName += nameHierarchy[i]->getName() + "\t"; + serializedName += NameElement::Signature::serialize(nameHierarchy[i]->getSignature()); } return serializedName; } @@ -29,7 +31,7 @@ NameHierarchy NameHierarchy::deserialize(const std::string& serializedName) LOG_ERROR("unable to deserialize name hierarchy: " + serializedName); // todo: obfuscate serializedName! return NameHierarchy(); } - nameHierarchy.push(std::make_shared(nameParts[0], nameParts[1])); + nameHierarchy.push(std::make_shared(nameParts[0], NameElement::Signature::deserialize(nameParts[1]))); } return nameHierarchy; @@ -77,26 +79,44 @@ size_t NameHierarchy::size() const return m_elements.size(); } -std::string NameHierarchy::getFullName() const +std::string NameHierarchy::getQualifiedName() const { std::string name; for (size_t i = 0; i < m_elements.size(); i++) { - name += m_elements[i]->getFullName(); - if (i + 1 < m_elements.size()) + if (i > 0) { name += "::"; } + name += m_elements[i]->getName(); } return name; } -std::string NameHierarchy::getName() const +std::string NameHierarchy::getQualifiedNameWithSignature() const +{ + std::string name = getQualifiedName(); + if (m_elements.size()) + { + name = m_elements.back()->getSignature().qualifyName(name); + } + return name; +} + +std::string NameHierarchy::getRawName() const { if (m_elements.size()) { - return m_elements.back()->getFullName(); + return m_elements.back()->getName(); + } + return ""; +} + +std::string NameHierarchy::getRawNameWithSignature() const +{ + if (m_elements.size()) + { + return m_elements.back()->getNameWithSignature(); } - return ""; } diff --git a/src/lib/data/name/NameHierarchy.h b/src/lib/data/name/NameHierarchy.h index 4a81b12f..c087e458 100644 --- a/src/lib/data/name/NameHierarchy.h +++ b/src/lib/data/name/NameHierarchy.h @@ -23,8 +23,10 @@ public: std::shared_ptr operator[](size_t pos) const; size_t size() const; - std::string getFullName() const; - std::string getName() const; + std::string getQualifiedName() const; + std::string getQualifiedNameWithSignature() const; + std::string getRawName() const; + std::string getRawNameWithSignature() const; private: std::vector> m_elements; diff --git a/src/lib/data/parser/ParseFunction.cpp b/src/lib/data/parser/ParseFunction.cpp index ad3dd9e3..14cbd79a 100644 --- a/src/lib/data/parser/ParseFunction.cpp +++ b/src/lib/data/parser/ParseFunction.cpp @@ -19,5 +19,5 @@ ParseFunction::ParseFunction( std::string ParseFunction::getFullName() const { - return nameHierarchy.getFullName(); + return nameHierarchy.getQualifiedNameWithSignature(); } diff --git a/src/lib/data/parser/ParseVariable.cpp b/src/lib/data/parser/ParseVariable.cpp index 2ba5b03e..72ebe998 100644 --- a/src/lib/data/parser/ParseVariable.cpp +++ b/src/lib/data/parser/ParseVariable.cpp @@ -11,5 +11,5 @@ ParseVariable::ParseVariable(const ParseTypeUsage& type, const NameHierarchy& na std::string ParseVariable::getFullName() const { - return nameHierarchy.getFullName(); + return nameHierarchy.getQualifiedNameWithSignature(); } diff --git a/src/lib/data/parser/ParserClient.cpp b/src/lib/data/parser/ParserClient.cpp index 3fd0f637..98e75333 100644 --- a/src/lib/data/parser/ParserClient.cpp +++ b/src/lib/data/parser/ParserClient.cpp @@ -107,9 +107,10 @@ std::string ParserClient::parameterStr(const std::vector paramet std::string ParserClient::functionStr(const ParseFunction& function) { - std::string str = + /*std::string str = function.returnType.dataType->getFullTypeName() + " " + function.getFullName() + parameterStr(function.parameters); - return addConstPrefix(addStaticPrefix(str, function.isStatic), function.isConst, false); + return addConstPrefix(addStaticPrefix(str, function.isStatic), function.isConst, false);*/ + return function.nameHierarchy.getQualifiedNameWithSignature(); } ParserClient::ParserClient() diff --git a/src/lib/data/parser/ParserClient.h b/src/lib/data/parser/ParserClient.h index b2a391d8..bdee54c0 100644 --- a/src/lib/data/parser/ParserClient.h +++ b/src/lib/data/parser/ParserClient.h @@ -58,35 +58,30 @@ public: virtual void startParsing() = 0; virtual void finishParsing() = 0; - virtual void prepareParsingFile(const FilePath& filePath) = 0; + virtual void startParsingFile(const FilePath& filePath) = 0; virtual void finishParsingFile(const FilePath& filePath) = 0; virtual void onError(const ParseLocation& location, const std::string& message) = 0; virtual size_t getErrorCount() const = 0; virtual Id onTypedefParsed( - const ParseLocation& location, const NameHierarchy& nameHierarchy, - const ParseTypeUsage& underlyingType, AccessType access) = 0; + const ParseLocation& location, const NameHierarchy& typedefName, AccessType access) = 0; virtual Id onClassParsed( const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access, const ParseLocation& scopeLocation) = 0; virtual Id onStructParsed( const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access, const ParseLocation& scopeLocation) = 0; - - virtual Id onGlobalVariableParsed(const ParseLocation& location, const ParseVariable& variable) = 0; - virtual Id onFieldParsed(const ParseLocation& location, const ParseVariable& variable, AccessType access) = 0; - + virtual Id onGlobalVariableParsed(const ParseLocation& location, const NameHierarchy& variable) = 0; + virtual Id onFieldParsed(const ParseLocation& location, const NameHierarchy& field, AccessType access) = 0; virtual Id onFunctionParsed( - const ParseLocation& location, const ParseFunction& function, const ParseLocation& scopeLocation) = 0; + const ParseLocation& location, const NameHierarchy& function, const ParseLocation& scopeLocation) = 0; virtual Id onMethodParsed( - const ParseLocation& location, const ParseFunction& method, AccessType access, AbstractionType abstraction, + const ParseLocation& location, const NameHierarchy& method, AccessType access, AbstractionType abstraction, const ParseLocation& scopeLocation) = 0; - virtual Id onNamespaceParsed( const ParseLocation& location, const NameHierarchy& nameHierarchy, const ParseLocation& scopeLocation) = 0; - virtual Id onEnumParsed( const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access, const ParseLocation& scopeLocation) = 0; @@ -96,48 +91,30 @@ public: const ParseLocation& location, const NameHierarchy& nameHierarchy, const NameHierarchy& baseNameHierarchy, AccessType access) = 0; virtual Id onMethodOverrideParsed( - const ParseLocation& location, const ParseFunction& base, const ParseFunction& overrider) = 0; + const ParseLocation& location, const NameHierarchy& overridden, const NameHierarchy& overrider) = 0; virtual Id onCallParsed( - const ParseLocation& location, const ParseFunction& caller, const ParseFunction& callee) = 0; - virtual Id onCallParsed( - const ParseLocation& location, const ParseVariable& caller, const ParseFunction& callee) = 0; + const ParseLocation& location, const NameHierarchy& caller, const NameHierarchy& callee) = 0; virtual Id onFieldUsageParsed( - const ParseLocation& location, const ParseFunction& user, const NameHierarchy& usedNameHierarchy) = 0; - virtual Id onFieldUsageParsed( - const ParseLocation& location, const ParseVariable& user, const NameHierarchy& usedNameHierarchy) = 0; + const ParseLocation& location, const NameHierarchy& userNameHierarchy, const NameHierarchy& usedNameHierarchy) = 0; virtual Id onGlobalVariableUsageParsed( - const ParseLocation& location, const ParseFunction& user, const NameHierarchy& usedNameHierarchy) = 0; - virtual Id onGlobalVariableUsageParsed( - const ParseLocation& location, const ParseVariable& user, const NameHierarchy& usedNameHierarchy) = 0; + const ParseLocation& location, const NameHierarchy& userNameHierarchy, const NameHierarchy& usedNameHierarchy) = 0; virtual Id onEnumConstantUsageParsed( - const ParseLocation& location, const ParseFunction& user, const NameHierarchy& usedNameHierarchy) = 0; - virtual Id onEnumConstantUsageParsed( - const ParseLocation& location, const ParseVariable& user, const NameHierarchy& usedNameHierarchy) = 0; - virtual Id onTypeUsageParsed(const ParseTypeUsage& type, const ParseFunction& function) = 0; - virtual Id onTypeUsageParsed(const ParseTypeUsage& type, const ParseVariable& variable) = 0; + const ParseLocation& location, const NameHierarchy& userNameHierarchy, const NameHierarchy& usedNameHierarchy) = 0; + virtual Id onTypeUsageParsed(const ParseLocation& location, const NameHierarchy& user, const NameHierarchy& used) = 0; - virtual Id onTemplateArgumentTypeOfTemplateRecordParsed( + virtual Id onTemplateArgumentTypeParsed( const ParseLocation& location, const NameHierarchy& argumentTypeNameHierarchy, const NameHierarchy& templateNameHierarchy) = 0; - virtual Id onTemplateArgumentTypeOfTemplateFunctionParsed( - const ParseLocation& location, const NameHierarchy& argumentTypeNameHierarchy, - const ParseFunction& templateFunction) = 0; virtual Id onTemplateDefaultArgumentTypeParsed( - const ParseTypeUsage& type, const NameHierarchy& templateArgumentTypeNameHierarchy) = 0; - virtual Id onTemplateRecordParameterTypeParsed( - const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy, - const NameHierarchy& templateRecordNameHierarchy) = 0; - virtual Id onTemplateRecordSpecializationParsed( - const ParseLocation& location, const NameHierarchy& specializedRecordNameHierarchy, - const RecordType specializedRecordType, const NameHierarchy& specializedFromNameHierarchy) = 0; + const ParseLocation& location, const NameHierarchy& defaultArgumentTypeNameHierarchy, + const NameHierarchy& templateArgumentTypeNameHierarchy) = 0; + virtual Id onTemplateParameterTypeParsed( + const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy) = 0; + virtual Id onTemplateSpecializationParsed( + const ParseLocation& location, const NameHierarchy& specializedNameHierarchy, + const NameHierarchy& specializedFromNameHierarchy) = 0; virtual Id onTemplateMemberFunctionSpecializationParsed( - const ParseLocation& location, const ParseFunction& instantiatedFunction, const ParseFunction& specializedFunction) = 0; - - virtual Id onTemplateFunctionParameterTypeParsed( - const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy, - const ParseFunction function) = 0; - virtual Id onTemplateFunctionSpecializationParsed( - const ParseLocation& location, const ParseFunction specializedFunction, const ParseFunction templateFunction) = 0; + const ParseLocation& location, const NameHierarchy& instantiatedFunction, const NameHierarchy& specializedFunction) = 0; virtual Id onFileParsed(const FileInfo& fileInfo) = 0; virtual Id onFileIncludeParsed( diff --git a/src/lib/data/search/SearchIndex.cpp b/src/lib/data/search/SearchIndex.cpp index 39b865f2..2d3c6e48 100644 --- a/src/lib/data/search/SearchIndex.cpp +++ b/src/lib/data/search/SearchIndex.cpp @@ -68,7 +68,7 @@ SearchNode* SearchIndex::addNode(NameHierarchy nameHierarchy) std::deque nameIds; for (size_t i = 0; i < nameHierarchy.size(); i++) { - nameIds.push_back(m_dictionary.getWordId(nameHierarchy[i]->getFullName())); + nameIds.push_back(m_dictionary.getWordId(nameHierarchy[i]->getName())); } if (nameIds.size()) diff --git a/src/lib/data/search/SearchMatch.cpp b/src/lib/data/search/SearchMatch.cpp index d30d80a3..9869391d 100644 --- a/src/lib/data/search/SearchMatch.cpp +++ b/src/lib/data/search/SearchMatch.cpp @@ -87,7 +87,7 @@ bool SearchMatch::isValid() const void SearchMatch::print(std::ostream& ostream) const { - ostream << weight << '\t' << nameHierarchy.getFullName() << std::endl << '\t'; + ostream << weight << '\t' << nameHierarchy.getQualifiedName() << std::endl << '\t'; size_t i = 0; for (size_t index : indices) { @@ -104,7 +104,7 @@ void SearchMatch::print(std::ostream& ostream) const std::string SearchMatch::getFullName() const { - return nameHierarchy.getFullName(); + return nameHierarchy.getQualifiedName(); } std::string SearchMatch::getNodeTypeAsString() const diff --git a/src/lib/data/type/NamedDataType.cpp b/src/lib/data/type/NamedDataType.cpp index ae869ec9..82f92b8f 100644 --- a/src/lib/data/type/NamedDataType.cpp +++ b/src/lib/data/type/NamedDataType.cpp @@ -20,7 +20,7 @@ std::string NamedDataType::getFullTypeName() const std::string NamedDataType::getRawTypeName() const { - return m_nameHierarchy.getFullName(); + return m_nameHierarchy.getQualifiedNameWithSignature(); } const NameHierarchy& NamedDataType::getTypeNameHierarchy() const diff --git a/src/lib/utility/ScopedSwitcher.h b/src/lib/utility/ScopedSwitcher.h new file mode 100644 index 00000000..defed386 --- /dev/null +++ b/src/lib/utility/ScopedSwitcher.h @@ -0,0 +1,30 @@ +#ifndef SCOPED_SWITCHER_H +#define SCOPED_SWITCHER_H + +template +class ScopedSwitcher +{ +public: + ScopedSwitcher(T &var) + : m_var(&var) + , m_origVal(var) + {} + + ScopedSwitcher(T &var, T tempVal) + : m_var(&var) + , m_origVal(var) + { + var = tempVal; + } + + ~ScopedSwitcher() + { + *m_var = m_origVal; + } + +private: + T *m_var; + T m_origVal; +}; + +#endif // SCOPED_SWITCHER_H diff --git a/src/lib/utility/messaging/type/MessageActivateEdge.h b/src/lib/utility/messaging/type/MessageActivateEdge.h index 1482b724..a22ddec9 100644 --- a/src/lib/utility/messaging/type/MessageActivateEdge.h +++ b/src/lib/utility/messaging/type/MessageActivateEdge.h @@ -32,7 +32,7 @@ public: std::string getFullName() const { - return Edge::getTypeString(type) + ":" + fromNameHierarchy.getFullName() + "->" + toNameHierarchy.getFullName(); + return Edge::getTypeString(type) + ":" + fromNameHierarchy.getQualifiedNameWithSignature() + "->" + toNameHierarchy.getQualifiedNameWithSignature(); } virtual void print(std::ostream& os) const diff --git a/src/lib/utility/text/Dictionary.cpp b/src/lib/utility/text/Dictionary.cpp index 6de3b7c0..5eff15ba 100644 --- a/src/lib/utility/text/Dictionary.cpp +++ b/src/lib/utility/text/Dictionary.cpp @@ -91,7 +91,7 @@ std::deque Dictionary::getWordIdsConst(const NameHierarchy& nameHierarchy) c for (size_t i = 0; i < nameHierarchy.size(); i++) { - ids.push_back(getWordIdConst(nameHierarchy[i]->getFullName())); + ids.push_back(getWordIdConst(nameHierarchy[i]->getName())); } return ids; diff --git a/src/lib_parser/CMakeLists.txt b/src/lib_parser/CMakeLists.txt index 0dfa29c1..d82a617b 100644 --- a/src/lib_parser/CMakeLists.txt +++ b/src/lib_parser/CMakeLists.txt @@ -15,10 +15,6 @@ add_files( data/parser/cxx/ASTAction.h data/parser/cxx/ASTActionFactory.cpp data/parser/cxx/ASTActionFactory.h - data/parser/cxx/ASTBodyVisitor.cpp - data/parser/cxx/ASTBodyVisitor.h - data/parser/cxx/ASTBodyVisitorClient.cpp - data/parser/cxx/ASTBodyVisitorClient.h data/parser/cxx/ASTConsumer.cpp data/parser/cxx/ASTConsumer.h data/parser/cxx/ASTVisitor.cpp diff --git a/src/lib_parser/data/parser/cxx/ASTAction.cpp b/src/lib_parser/data/parser/cxx/ASTAction.cpp index 0ae2509d..e927b9fe 100644 --- a/src/lib_parser/data/parser/cxx/ASTAction.cpp +++ b/src/lib_parser/data/parser/cxx/ASTAction.cpp @@ -18,7 +18,7 @@ ASTAction::~ASTAction() std::unique_ptr ASTAction::CreateASTConsumer(clang::CompilerInstance& compiler, llvm::StringRef inFile) { - return std::unique_ptr(new ASTConsumer(&compiler.getASTContext(), m_client, m_fileRegister)); + return std::unique_ptr(new ASTConsumer(&compiler.getASTContext(), &compiler.getPreprocessor(), m_client, m_fileRegister)); } bool ASTAction::BeginSourceFileAction(clang::CompilerInstance& compiler, llvm::StringRef filePath) diff --git a/src/lib_parser/data/parser/cxx/ASTBodyVisitor.cpp b/src/lib_parser/data/parser/cxx/ASTBodyVisitor.cpp deleted file mode 100644 index bf665c4a..00000000 --- a/src/lib_parser/data/parser/cxx/ASTBodyVisitor.cpp +++ /dev/null @@ -1,177 +0,0 @@ -#include "data/parser/cxx/ASTBodyVisitor.h" - -#include "clang/AST/DeclCXX.h" - -ASTBodyVisitor::ASTBodyVisitor(ASTBodyVisitorClient* client, clang::FunctionDecl* functionDecl) - : m_client(client) - , m_functionDecl(functionDecl) - , m_varDecl(nullptr) -{ -} - -ASTBodyVisitor::ASTBodyVisitor(ASTBodyVisitorClient* client, clang::DeclaratorDecl* varDecl) - : m_client(client) - , m_functionDecl(nullptr) - , m_varDecl(varDecl) -{ -} - -ASTBodyVisitor::~ASTBodyVisitor() -{ -} - -void ASTBodyVisitor::VisitStmt(clang::Stmt* stmt) -{ - VisitChildren(stmt); -} - -void ASTBodyVisitor::VisitChildren(clang::Stmt* stmt) -{ - for (clang::Stmt::child_iterator it = stmt->child_begin(); it != stmt->child_end(); it++) - { - if (*it) - { - static_cast(this)->Visit(*it); - } - } -} - -void ASTBodyVisitor::VisitCallExpr(clang::CallExpr* expr) -{ - if (m_functionDecl) - { - m_client->VisitCallExprInDeclBody(m_functionDecl, expr); - } - else - { - m_client->VisitCallExprInDeclBody(m_varDecl, expr); - } - - VisitStmt(expr); -} - -void ASTBodyVisitor::VisitCXXConstructExpr(clang::CXXConstructExpr* expr) -{ - if (m_functionDecl) - { - m_client->VisitCXXConstructExprInDeclBody(m_functionDecl, expr); - } - else - { - m_client->VisitCXXConstructExprInDeclBody(m_varDecl, expr); - } - - VisitStmt(expr); -} - -void ASTBodyVisitor::VisitExplicitCastExpr(clang::ExplicitCastExpr* expr) -{ - if (m_functionDecl) - { - m_client->VisitExplicitCastExprInDeclBody(m_functionDecl, expr); - } - else - { - m_client->VisitExplicitCastExprInDeclBody(m_varDecl, expr); - } - - VisitStmt(expr); -} - -void ASTBodyVisitor::VisitCXXTemporaryObjectExpr(clang::CXXTemporaryObjectExpr* expr) -{ - if (m_functionDecl) - { - m_client->VisitCXXTemporaryObjectExprInDeclBody(m_functionDecl, expr); - } - else - { - m_client->VisitCXXTemporaryObjectExprInDeclBody(m_varDecl, expr); - } - - VisitStmt(expr); -} - -void ASTBodyVisitor::VisitCXXNewExpr(clang::CXXNewExpr* expr) -{ - if (m_functionDecl) - { - m_client->VisitCXXNewExprInDeclBody(m_functionDecl, expr); - } - else - { - m_client->VisitCXXNewExprInDeclBody(m_varDecl, expr); - } - - VisitStmt(expr); -} - -void ASTBodyVisitor::VisitMemberExpr(clang::make_ptr::type expr) -{ - if (expr->getMemberDecl()->getKind() == clang::Decl::Kind::Field) - { - if(m_functionDecl) - { - m_client->VisitMemberExprInDeclBody(m_functionDecl, expr); - } - else - { - m_client->VisitMemberExprInDeclBody(m_varDecl, expr); - } - } - VisitStmt(expr); -} - -void ASTBodyVisitor::VisitDeclRefExpr(clang::DeclRefExpr* expr) -{ - if (m_functionDecl) - { - m_client->VisitDeclRefExprInDeclBody(m_functionDecl, expr); - } - else - { - m_client->VisitDeclRefExprInDeclBody(m_varDecl, expr); - } - - if (expr->getDecl()->getKind() == clang::Decl::Var && expr->getDecl()->isDefinedOutsideFunctionOrMethod()) - { - if (m_functionDecl) - { - m_client->VisitGlobalVariableExprInDeclBody(m_functionDecl, expr); - } - else - { - m_client->VisitGlobalVariableExprInDeclBody(m_varDecl, expr); - } - } - else if (expr->getDecl()->getKind() == clang::Decl::EnumConstant) - { - if (m_functionDecl) - { - m_client->VisitEnumExprInDeclBody(m_functionDecl, expr); - } - else - { - m_client->VisitEnumExprInDeclBody(m_varDecl, expr); - } - } - - VisitStmt(expr); -} - -void ASTBodyVisitor::VisitLambdaExpr(clang::LambdaExpr* expr) -{ - // Don't visit the lambda's children. The ASTVisitor creates a new ASTBodyVisitor for these. -} - -void ASTBodyVisitor::VisitDeclStmt(clang::DeclStmt* stmt) -{ - for (clang::Decl* decl : stmt->decls()) - { - if (clang::isa(decl)) - { - m_client->VisitVarDeclInDeclBody(m_functionDecl, clang::dyn_cast(decl)); - } - } - VisitStmt(stmt); -} diff --git a/src/lib_parser/data/parser/cxx/ASTBodyVisitor.h b/src/lib_parser/data/parser/cxx/ASTBodyVisitor.h deleted file mode 100644 index 2e97c49d..00000000 --- a/src/lib_parser/data/parser/cxx/ASTBodyVisitor.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef AST_BODY_VISITOR -#define AST_BODY_VISITOR - -#include "clang/AST/StmtVisitor.h" -#include "data/parser/cxx/ASTBodyVisitorClient.h" - -class ASTBodyVisitor: public clang::StmtVisitor -{ -public: - ASTBodyVisitor(ASTBodyVisitorClient* client, clang::FunctionDecl* functionDecl); - ASTBodyVisitor(ASTBodyVisitorClient* client, clang::DeclaratorDecl* varDecl); - virtual ~ASTBodyVisitor(); - - void VisitStmt(clang::Stmt* stmt); - void VisitChildren(clang::Stmt* stmt); - void VisitCallExpr(clang::CallExpr* expr); - void VisitCXXConstructExpr(clang::CXXConstructExpr* expr); - void VisitExplicitCastExpr(clang::ExplicitCastExpr* expr); - void VisitCXXTemporaryObjectExpr(clang::CXXTemporaryObjectExpr* expr); - void VisitCXXNewExpr(clang::CXXNewExpr* expr); - void VisitMemberExpr(clang::make_ptr::type expr); - void VisitDeclRefExpr(clang::make_ptr::type expr); - void VisitLambdaExpr(clang::LambdaExpr* expr); - void VisitDeclStmt(clang::DeclStmt* stmt); - -private: - ASTBodyVisitorClient* m_client; - clang::FunctionDecl* m_functionDecl; - clang::DeclaratorDecl* m_varDecl; -}; - -#endif // AST_BODY_VISITOR diff --git a/src/lib_parser/data/parser/cxx/ASTBodyVisitorClient.cpp b/src/lib_parser/data/parser/cxx/ASTBodyVisitorClient.cpp deleted file mode 100644 index cc51496e..00000000 --- a/src/lib_parser/data/parser/cxx/ASTBodyVisitorClient.cpp +++ /dev/null @@ -1,9 +0,0 @@ -#include "data/parser/cxx/ASTBodyVisitorClient.h" - -ASTBodyVisitorClient::ASTBodyVisitorClient() -{ -} - -ASTBodyVisitorClient::~ASTBodyVisitorClient() -{ -} diff --git a/src/lib_parser/data/parser/cxx/ASTBodyVisitorClient.h b/src/lib_parser/data/parser/cxx/ASTBodyVisitorClient.h deleted file mode 100644 index 21dd6d90..00000000 --- a/src/lib_parser/data/parser/cxx/ASTBodyVisitorClient.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef AST_BODY_VISITOR_CLIENT_H -#define AST_BODY_VISITOR_CLIENT_H - -#include "clang/AST/Decl.h" -#include "clang/AST/Expr.h" -#include "clang/AST/ExprCXX.h" - -class ASTBodyVisitorClient -{ -public: - ASTBodyVisitorClient(); - virtual ~ASTBodyVisitorClient(); - - virtual void VisitCallExprInDeclBody(clang::FunctionDecl* decl, clang::CallExpr* expr) = 0; - virtual void VisitCallExprInDeclBody(clang::DeclaratorDecl* decl, clang::CallExpr* expr) = 0; - virtual void VisitDeclRefExprInDeclBody(clang::FunctionDecl* decl, clang::DeclRefExpr* expr) = 0; - virtual void VisitDeclRefExprInDeclBody(clang::DeclaratorDecl* decl, clang::DeclRefExpr* expr) = 0; - virtual void VisitCXXConstructExprInDeclBody(clang::FunctionDecl* decl, clang::CXXConstructExpr* expr) = 0; - virtual void VisitCXXConstructExprInDeclBody(clang::DeclaratorDecl* decl, clang::CXXConstructExpr* expr) = 0; - virtual void VisitExplicitCastExprInDeclBody(clang::FunctionDecl* decl, clang::ExplicitCastExpr* expr) = 0; - virtual void VisitExplicitCastExprInDeclBody(clang::DeclaratorDecl* decl, clang::ExplicitCastExpr* expr) = 0; - virtual void VisitCXXTemporaryObjectExprInDeclBody(clang::FunctionDecl* decl, clang::CXXTemporaryObjectExpr* expr) = 0; - virtual void VisitCXXTemporaryObjectExprInDeclBody(clang::DeclaratorDecl* decl, clang::CXXTemporaryObjectExpr* expr) = 0; - virtual void VisitCXXNewExprInDeclBody(clang::FunctionDecl* decl, clang::CXXNewExpr* expr) = 0; - virtual void VisitCXXNewExprInDeclBody(clang::DeclaratorDecl* decl, clang::CXXNewExpr* expr) = 0; - virtual void VisitMemberExprInDeclBody(clang::FunctionDecl* decl, clang::MemberExpr* expr) = 0; - virtual void VisitMemberExprInDeclBody(clang::DeclaratorDecl* decl, clang::MemberExpr* expr) = 0; - virtual void VisitGlobalVariableExprInDeclBody(clang::FunctionDecl* decl, clang::DeclRefExpr* expr) = 0; - virtual void VisitGlobalVariableExprInDeclBody(clang::DeclaratorDecl* decl, clang::DeclRefExpr* expr) = 0; - virtual void VisitEnumExprInDeclBody(clang::FunctionDecl* decl, clang::DeclRefExpr* expr) = 0; - virtual void VisitEnumExprInDeclBody(clang::DeclaratorDecl* decl, clang::DeclRefExpr* expr) = 0; - virtual void VisitVarDeclInDeclBody(clang::FunctionDecl* decl, clang::VarDecl* varDecl) = 0; -}; - -#endif // AST_BODY_VISITOR_CLIENT_H diff --git a/src/lib_parser/data/parser/cxx/ASTConsumer.cpp b/src/lib_parser/data/parser/cxx/ASTConsumer.cpp index cea87be9..0c99ab53 100644 --- a/src/lib_parser/data/parser/cxx/ASTConsumer.cpp +++ b/src/lib_parser/data/parser/cxx/ASTConsumer.cpp @@ -2,8 +2,8 @@ #include "data/parser/ParserClient.h" -ASTConsumer::ASTConsumer(clang::ASTContext* context, ParserClient* client, FileRegister* fileRegister) - : m_visitor(context, client, fileRegister) +ASTConsumer::ASTConsumer(clang::ASTContext* context, clang::Preprocessor* preprocessor, ParserClient* client, FileRegister* fileRegister) + : m_visitor(context, preprocessor, client, fileRegister) { } @@ -13,5 +13,5 @@ ASTConsumer::~ASTConsumer() void ASTConsumer::HandleTranslationUnit(clang::ASTContext& context) { - m_visitor.TraverseDecl(context.getTranslationUnitDecl()); + m_visitor.indexDecl(context.getTranslationUnitDecl()); } diff --git a/src/lib_parser/data/parser/cxx/ASTConsumer.h b/src/lib_parser/data/parser/cxx/ASTConsumer.h index 593420e8..ea9e05fc 100644 --- a/src/lib_parser/data/parser/cxx/ASTConsumer.h +++ b/src/lib_parser/data/parser/cxx/ASTConsumer.h @@ -12,7 +12,7 @@ class ASTConsumer : public clang::ASTConsumer { public: - explicit ASTConsumer(clang::ASTContext* context, ParserClient* client, FileRegister* fileRegister); + explicit ASTConsumer(clang::ASTContext* context, clang::Preprocessor* preprocessor, ParserClient* client, FileRegister* fileRegister); virtual ~ASTConsumer(); virtual void HandleTranslationUnit(clang::ASTContext& context); diff --git a/src/lib_parser/data/parser/cxx/ASTVisitor.cpp b/src/lib_parser/data/parser/cxx/ASTVisitor.cpp index b352e370..71bd9a75 100644 --- a/src/lib_parser/data/parser/cxx/ASTVisitor.cpp +++ b/src/lib_parser/data/parser/cxx/ASTVisitor.cpp @@ -1,893 +1,1454 @@ #include "data/parser/cxx/ASTVisitor.h" -#include -#include +#include +#include +#include +#include +#include +#include "data/parser/cxx/utilityCxx.h" #include "utility/file/FileManager.h" #include "utility/file/FileSystem.h" -#include "utility/logging/logging.h" -#include "utility/utilityString.h" +#include "utility/ScopedSwitcher.h" -#include "data/parser/cxx/ASTBodyVisitor.h" -#include "data/parser/cxx/name_resolver/CxxDeclNameResolver.h" -#include "data/parser/cxx/name_resolver/CxxTemplateArgumentNameResolver.h" -#include "data/parser/cxx/utilityCxx.h" -#include "data/parser/ParseFunction.h" -#include "data/parser/ParseLocation.h" -#include "data/parser/ParseTypeUsage.h" -#include "data/parser/ParseVariable.h" -#include "data/type/DataType.h" -#include "data/type/NamedDataType.h" -ASTVisitor::ASTVisitor(clang::ASTContext* context, ParserClient* client, FileRegister* fileRegister) +// TODO: For an array access, X[I], skip over the array-to-pointer decay. We +// currently record that X's address is taken, which is technically true, but +// the address does not generally escape. + +// TODO: A struct assignment in C++ turns into an operator= call, even if the +// user did not define an operator= function. Consider handling operator= +// calls the same way that normal assignment operations are handled. Consider +// doing the same for the other overloadable operators. + +// TODO: Unary ++ and -- +// TODO: Fix local extern variables. e.g. void func() { extern int var; } +// Consider extern "C", functions nested within classes or namespaces. + +/////////////////////////////////////////////////////////////////////////////// +// Misc routines + +ASTVisitor::ASTVisitor(clang::ASTContext* context, clang::Preprocessor* preprocessor, ParserClient* client, FileRegister* fileRegister) : m_context(context) + , m_preprocessor(preprocessor) , m_client(client) , m_fileRegister(fileRegister) + , m_thisContext(0) + , m_childContext(0) + , m_typeContext(RT_Reference) + , m_contextAccess(ParserClient::ACCESS_NONE) { + m_declNameCache = std::make_shared(); + m_typeNameCache = std::make_shared(); + m_contextNameGenerator = std::make_shared(nullptr, m_declNameCache); + m_childContextNameGenerator = std::make_shared(nullptr, m_declNameCache); } -ASTVisitor::~ASTVisitor() -{ -} - -bool ASTVisitor::VisitStmt(const clang::Stmt* statement) +bool ASTVisitor::VisitTranslationUnitDecl(clang::TranslationUnitDecl* decl) { + //decl->dump(); return true; } -bool ASTVisitor::VisitTypedefDecl(clang::TypedefDecl* declaration) +bool ASTVisitor::shouldUseDataRecursionFor(clang::Stmt *s) const { - if (isLocatedInUnparsedProjectFile(declaration)) + if (s == NULL || !base::shouldUseDataRecursionFor(s)) + return false; + if (clang::UnaryOperator *e = llvm::dyn_cast(s)) { + return e->getOpcode() >= clang::UO_Plus && + e->getOpcode() <= clang::UO_Imag; + } + if (clang::BinaryOperator *e = llvm::dyn_cast(s)) { + return e->getOpcode() >= clang::BO_Mul && + e->getOpcode() <= clang::BO_LOr; + } + return false; +} + + +/////////////////////////////////////////////////////////////////////////////// +// Dispatcher routines + +// Set the "this" context to the "child" context and reset the child context +// to default. + +bool ASTVisitor::TraverseStmt(clang::Stmt *stmt) +{ + if (stmt == NULL) + return true; + + ScopedSwitcher sw1(m_thisContext, m_childContext); + + if (clang::Expr *e = llvm::dyn_cast(stmt)) { + if (e->isRValue()) + m_thisContext &= ~(CF_AddressTaken | CF_Assigned | CF_Modified); + } else { + m_thisContext = 0; + } + + ScopedSwitcher sw2(m_childContext, m_thisContext); + + return base::TraverseStmt(stmt); +} + +bool ASTVisitor::TraverseType(clang::QualType t) +{ + ScopedSwitcher sw1(m_thisContext, 0); + ScopedSwitcher sw2(m_childContext, 0); + return base::TraverseType(t); +} + +bool ASTVisitor::TraverseTypeLoc(clang::TypeLoc tl) +{ + ScopedSwitcher sw1(m_thisContext, 0); + ScopedSwitcher sw2(m_childContext, 0); + return base::TraverseTypeLoc(tl); +} + +bool ASTVisitor::TraverseDecl(clang::Decl *d) +{ + ScopedSwitcher sw1(m_thisContext, 0); + ScopedSwitcher sw2(m_childContext, 0); + + std::shared_ptr>> sw3; + if (d && clang::isa(d) && clang::isa(d) && !clang::isa(d)) { - m_client->onTypedefParsed( - getParseLocationForNamedDecl(declaration), - getDeclNameHierarchy(declaration), - getParseTypeUsage(declaration->getTypeSourceInfo()->getTypeLoc(), declaration->getUnderlyingType()), - convertAccessType(declaration->getAccess()) - ); + clang::NamedDecl* nd = clang::dyn_cast(d); + sw3 = std::make_shared>>(m_contextNameGenerator, std::make_shared(nd, m_declNameCache)); } + return base::TraverseDecl(d); +} + +bool ASTVisitor::TraverseLambdaExpr(clang::LambdaExpr* e) +{ + ScopedSwitcher> switcher(m_contextNameGenerator, std::make_shared(e->getCallOperator(), m_declNameCache)); + return base::TraverseLambdaExpr(e); +} + +bool ASTVisitor::TraverseFunctionDecl(clang::FunctionDecl* d) +{ + ScopedSwitcher> switcher(m_childContextNameGenerator, std::make_shared(d, m_declNameCache)); // store context for template arguments of function specialitzation + return base::TraverseFunctionDecl(d); +} + +bool ASTVisitor::TraverseTypedefDecl(clang::TypedefDecl *d) +{ + ScopedSwitcher> switcher(m_contextNameGenerator, std::make_shared(d, m_declNameCache)); + return base::TraverseTypedefDecl(d); +} + +bool ASTVisitor::TraverseFieldDecl(clang::FieldDecl *d) +{ + ScopedSwitcher> switcher(m_contextNameGenerator, std::make_shared(d, m_declNameCache)); + return base::TraverseFieldDecl(d); +} + +bool ASTVisitor::TraverseVarDecl(clang::VarDecl *d) +{ + std::shared_ptr>> switcher; + + NameHierarchy contextNameHierarchy = m_contextNameGenerator->getName(); + if (!(contextNameHierarchy.size() > 0 && contextNameHierarchy.back()->hasSignature())) // TODO: optimize this: remove requirement to get the name here! + { + switcher = std::make_shared>>(m_contextNameGenerator, std::make_shared(d, m_declNameCache)); + } + return base::TraverseVarDecl(d); +} + +bool ASTVisitor::TraverseClassTemplateDecl(clang::ClassTemplateDecl* d) +{ + ScopedSwitcher> switcher(m_contextNameGenerator, std::make_shared(d, m_declNameCache)); + return base::TraverseClassTemplateDecl(d); +} + +bool ASTVisitor::TraverseTemplateTypeParmDecl(clang::TemplateTypeParmDecl* d) +{ + // same as base::TraverseTemplateTypeParmDecl(..) but we need to integrate the setter for the context info. + WalkUpFromTemplateTypeParmDecl(d); + + if (d->hasDefaultArgument() && !d->defaultArgumentWasInherited()) + { + ScopedSwitcher sw1(m_typeContext, RT_TemplateDefaultArgument); + ScopedSwitcher> sw2(m_contextNameGenerator, std::make_shared(d, m_declNameCache)); + TraverseTypeLoc(d->getDefaultArgumentInfo()->getTypeLoc()); + } + + traverseDeclContextHelper(clang::dyn_cast(d)); return true; } -bool ASTVisitor::VisitRecordDecl(clang::RecordDecl* declaration) +bool ASTVisitor::TraverseTemplateTemplateParmDecl(clang::TemplateTemplateParmDecl* d) { - if (isLocatedInUnparsedProjectFile(declaration)) + // same as base::TraverseTemplateTemplateParmDecl(..) but we need to integrate the setter for the context info. + WalkUpFromTemplateTemplateParmDecl(d); + + TraverseDecl(d->getTemplatedDecl()); + + if (d->hasDefaultArgument() && !d->defaultArgumentWasInherited()) { - if (declaration->isClass()) - { - m_client->onClassParsed( - getParseLocationForNamedDecl(declaration), - getDeclNameHierarchy(declaration), - convertAccessType(declaration->getAccess()), - getParseLocationOfRecordBody(declaration) - ); - } - else if (declaration->isStruct()) - { - m_client->onStructParsed( - getParseLocationForNamedDecl(declaration), - getDeclNameHierarchy(declaration), - convertAccessType(declaration->getAccess()), - getParseLocationOfRecordBody(declaration) - ); - } + ScopedSwitcher sw1(m_typeContext, RT_TemplateDefaultArgument); + ScopedSwitcher> sw2(m_contextNameGenerator, std::make_shared(d, m_declNameCache)); - if ((declaration->isClass() || declaration->isStruct()) && - declaration->isThisDeclarationADefinition()) - { - if (clang::CXXRecordDecl* cxxDecl = clang::dyn_cast_or_null(declaration)) - { - for (const clang::CXXBaseSpecifier& it : cxxDecl->bases()) - { - m_client->onInheritanceParsed( - getParseLocation(it.getSourceRange()), - getDeclNameHierarchy(declaration), - utility::qualTypeToDataType(it.getType())->getTypeNameHierarchy(), - convertAccessType(it.getAccessSpecifier()) - ); + //d->getDefaultArgument + TraverseTemplateArgumentLoc(d->getDefaultArgument()); + } - // TODO: check for template class and add arguments! - } - } + clang::TemplateParameterList* TPL = d->getTemplateParameters(); + if (TPL) + { + for (clang::TemplateParameterList::iterator I = TPL->begin(), E = TPL->end(); I != E; ++I) + { + TraverseDecl(*I); } } + traverseDeclContextHelper(clang::dyn_cast(d)); return true; } -bool ASTVisitor::VisitVarDecl(clang::VarDecl* declaration) +bool ASTVisitor::TraverseClassTemplatePartialSpecializationDecl(clang::ClassTemplatePartialSpecializationDecl* d) { - // Abort on local variables and parameters. - if (declaration->isFunctionOrMethodVarDecl() || clang::isa(declaration)) + ScopedSwitcher> switcher(m_childContextNameGenerator, std::make_shared(d, m_declNameCache)); + return base::TraverseClassTemplatePartialSpecializationDecl(d); +} + +bool ASTVisitor::TraverseDeclRefExpr(clang::DeclRefExpr* e) +{ + ScopedSwitcher> switcher(m_childContextNameGenerator, std::make_shared(e->getDecl(), m_declNameCache)); + return base::TraverseDeclRefExpr(e); +} + +bool ASTVisitor::TraverseTemplateSpecializationTypeLoc(clang::TemplateSpecializationTypeLoc loc) +{ + const clang::Type* t = loc.getTypePtr(); + ScopedSwitcher> switcher(m_childContextNameGenerator, std::make_shared(t, m_typeNameCache)); + return base::TraverseTemplateSpecializationTypeLoc(loc); +} + +bool ASTVisitor::TraverseTemplateArgumentLoc(const clang::TemplateArgumentLoc& loc) +{ + std::shared_ptr> sw1; + std::shared_ptr>> sw2; + + if (m_typeContext != RT_TemplateDefaultArgument) { - return true; + sw1 = std::make_shared>(m_typeContext, RT_TemplateArgument); + sw2 = std::make_shared>>(m_contextNameGenerator, m_childContextNameGenerator); } - if (isLocatedInUnparsedProjectFile(declaration)) + clang::TemplateArgument::ArgKind kk = loc.getArgument().getKind(); + if (kk == clang::TemplateArgument::Template) { - clang::AccessSpecifier access = declaration->getAccess(); + RecordDeclRef(loc.getArgument().getAsTemplate().getAsTemplateDecl(), loc.getLocation(), m_typeContext); + } + + return base::TraverseTemplateArgumentLoc(loc); +} - if (access == clang::AS_none) +//bool ASTVisitor::TraverseFunctionTemplateDecl(clang::FunctionTemplateDecl* d) +//{ +// ScopedSwitcher switcher(m_contextDecl, d); +// return base::TraverseFunctionTemplateDecl(d); +//} + +/////////////////////////////////////////////////////////////////////////////// +// Expression context propagation + +bool ASTVisitor::TraverseCallCommon(clang::CallExpr *call) +{ + { + m_childContext = CF_Called; + TraverseStmt(call->getCallee()); + } + for (unsigned int i = 0; i < call->getNumArgs(); ++i) { + clang::Expr *arg = call->getArg(i); + // If the child is really an lvalue, then this call is passing a + // reference. If the child is not an lvalue, then this address-taken + // flag will be masked out, and the rvalue will be assumed to be read. + m_childContext = CF_AddressTaken; + TraverseStmt(arg); + } + return true; +} + +bool ASTVisitor::TraverseBinComma(clang::BinaryOperator *s) +{ + { + m_childContext = 0; + TraverseStmt(s->getLHS()); + } + { + m_childContext = m_thisContext; + TraverseStmt(s->getRHS()); + } + return true; +} + +bool ASTVisitor::TraverseAssignCommon( + clang::BinaryOperator *e, + ContextFlags lhsFlag) +{ + { + m_childContext = m_thisContext | lhsFlag; + if (m_childContext & CF_Called) { + m_childContext ^= CF_Called; + m_childContext |= CF_Read; + } + TraverseStmt(e->getLHS()); + } + { + m_childContext = 0; + TraverseStmt(e->getRHS()); + } + return true; +} + +bool ASTVisitor::VisitCastExpr(clang::CastExpr *e) +{ + if (e->getCastKind() == clang::CK_ArrayToPointerDecay) { + // Note that e->getSubExpr() can be an rvalue array, in which case the + // CF_AddressTaken context will be masked away to 0. + m_childContext = CF_AddressTaken; + } else if (e->getCastKind() == clang::CK_ToVoid) { + m_childContext = 0; + } else if (e->getCastKind() == clang::CK_LValueToRValue) { + m_childContext = CF_Read; + } + return true; +} + +bool ASTVisitor::VisitUnaryAddrOf(clang::UnaryOperator *e) +{ + m_childContext = CF_AddressTaken; + return true; +} + +bool ASTVisitor::VisitUnaryDeref(clang::UnaryOperator *e) +{ + m_childContext = 0; + return true; +} + +bool ASTVisitor::VisitDeclStmt(clang::DeclStmt *s) +{ + // If a declaration is a reference to an lvalue initializer, then we + // record that that the initializer's address was taken. If it is + // an rvalue instead, then we'll see something else in the tree indicating + // what kind of reference to record (e.g. lval-to-rval cast, assignment, + // call, & operator) or assume the rvalue is being read. + m_childContext = CF_AddressTaken; + return true; +} + +bool ASTVisitor::VisitReturnStmt(clang::ReturnStmt *s) +{ + // See comment for VisitDeclStmt. + m_childContext = CF_AddressTaken; + return true; +} + +bool ASTVisitor::VisitVarDecl(clang::VarDecl *d) +{ + // See comment for VisitDeclStmt. Set the context for the variable's + // initializer. Also handle default arguments on parameter declarations. + m_childContext = CF_AddressTaken; + return true; +} + +bool ASTVisitor::VisitInitListExpr(clang::InitListExpr *e) +{ + // See comment for VisitDeclStmt. An initializer list can also bind + // references. + m_childContext = CF_AddressTaken; + return true; +} + +bool ASTVisitor::TraverseConstructorInitializer(clang::CXXCtorInitializer *init) +{ + if (init->getMember() != NULL) { + RecordDeclRef(init->getMember(), + init->getMemberLocation(), + RT_Initialized, + ST_Field); + } + + // See comment for VisitDeclStmt. + m_childContext = CF_AddressTaken; + return base::TraverseConstructorInitializer(init); +} + + +/////////////////////////////////////////////////////////////////////////////// +// Expression reference recording + +bool ASTVisitor::VisitLambdaExpr(clang::LambdaExpr* e) +{ + RecordDeclRef(e->getCallOperator(), e->getLocStart(), RT_Definition, ST_Function); + return true; +} + +bool ASTVisitor::VisitMemberExpr(clang::MemberExpr *e) +{ + RecordDeclRefExpr( + e->getMemberDecl(), + e->getMemberLoc(), + e, + m_thisContext); + + // Update the child context for the base sub-expression. + if (e->isArrow()) { + m_childContext = CF_Read; + } else { + m_childContext = 0; + if (m_thisContext & CF_AddressTaken) + m_childContext |= CF_AddressTaken; + if (m_thisContext & (CF_Assigned | CF_Modified)) + m_childContext |= CF_Modified; + if (m_thisContext & CF_Read) + m_childContext |= CF_Read; + if (m_thisContext & CF_Called) { + // I'm not sure what the best behavior here is. + m_childContext |= CF_Read; + } + } + + return true; +} + +bool ASTVisitor::VisitDeclRefExpr(clang::DeclRefExpr *e) +{ + RecordDeclRefExpr( + e->getDecl(), + e->getLocation(), + e, + m_thisContext); + return true; +} + +bool ASTVisitor::VisitCXXConstructExpr(clang::CXXConstructExpr *e) +{ + //if (e->getParenOrBraceRange().isValid()) { + // // XXX: This code is a kludge. Recording calls to constructors is + // // troublesome because there isn't an obvious location to associate the + // // call with. Consider: + // // A::A() : field(1, 2, 3) {} + // // new A(1, 2, 3) + // // struct A { A(B); }; A f() { B b; return b; } + // // Implicit calls to conversion operator methods pose a similar + // // problem. + // // + // // Recording constructor calls is very useful, though, so, as a + // // temporary measure, when there are constructor arguments surrounded + // // by parentheses, associate the call with the right parenthesis. + // // + // // Perhaps the right fix is to associate the call with the line itself + // // or with a larger span which may have other references nested within + // // it. The fix may have implications for the navigator GUI. + // RecordDeclRefExpr( + // e->getConstructor(), + // e->getParenOrBraceRange().getEnd(), + // e, + // CF_Called); + //} + clang::SourceLocation loc; + clang::SourceLocation braceBeginLoc = e->getParenOrBraceRange().getBegin(); + clang::SourceLocation nameBeginLoc = e->getSourceRange().getBegin(); + if (braceBeginLoc.isValid()) + { + if (braceBeginLoc == nameBeginLoc) { - m_client->onGlobalVariableParsed( - getParseLocationForNamedDecl(declaration), - getParseVariable(declaration) - ); - - if (declaration->getInit()) - { - ASTBodyVisitor bodyVisitor(this, declaration); - bodyVisitor.Visit(declaration->getInit()); - } + loc = nameBeginLoc; } else { - m_client->onFieldParsed( - getParseLocationForNamedDecl(declaration), - getParseVariable(declaration), - convertAccessType(declaration->getAccess()) - ); + loc = braceBeginLoc.getLocWithOffset(-1); + } + } + else + { + loc = e->getSourceRange().getEnd(); + } + loc = clang::Lexer::GetBeginningOfToken(loc, m_context->getSourceManager(), m_context->getLangOpts()); + RecordDeclRefExpr( + e->getConstructor(), + loc, + e, + CF_Called); + return true; +} + +void ASTVisitor::RecordDeclRefExpr(clang::NamedDecl *d, clang::SourceLocation loc, clang::Expr *e, Context context) +{ + SymbolType symbolType = ST_Max; + + if (clang::isa(d)) + { + if (llvm::isa(d)) + { + symbolType = ST_Parameter; + } + else if (d->getParentFunctionOrMethod() == NULL) + { + symbolType = ST_GlobalVariable; + } + else + { + symbolType = ST_LocalVariable; + } + } + if (clang::isa(d)) + { + symbolType = ST_Enumerator; + } + else if (clang::isa(d)) + { + symbolType = ST_Field; + } + + if (m_typeContext == RT_TemplateArgument) + { + RecordDeclRef(d, loc, m_typeContext, symbolType); + } + else + { + + if (llvm::isa(*d)) + { + // XXX: This code seems sloppy, but I suspect it will work well enough. + if (context & CF_Called) + RecordDeclRef(d, loc, RT_Called, symbolType); + if (!(context & CF_Called) || (context & (CF_Read | CF_AddressTaken))) + RecordDeclRef(d, loc, RT_AddressTaken, symbolType); + } + else + { + if (context & CF_Called) + RecordDeclRef(d, loc, RT_Called, symbolType); + if (context & CF_Read) + RecordDeclRef(d, loc, RT_Read, symbolType); + if (context & CF_AddressTaken) + RecordDeclRef(d, loc, RT_AddressTaken, symbolType); + if (context & CF_Assigned) + RecordDeclRef(d, loc, RT_Assigned, symbolType); + if (context & CF_Modified) + RecordDeclRef(d, loc, RT_Modified, symbolType); + if (context == 0) + RecordDeclRef(d, loc, e->isRValue() ? RT_Read : RT_Other, symbolType); + } + } +} + + +/////////////////////////////////////////////////////////////////////////////// +// NestedNameSpecifier handling + +bool ASTVisitor::TraverseNestedNameSpecifierLoc( + clang::NestedNameSpecifierLoc qualifier) +{ + for (; qualifier; qualifier = qualifier.getPrefix()) { + clang::NestedNameSpecifier *nns = qualifier.getNestedNameSpecifier(); + switch (nns->getKind()) { + case clang::NestedNameSpecifier::Namespace: + RecordDeclRef(nns->getAsNamespace(), + qualifier.getLocalBeginLoc(), + RT_Qualifier); + break; + case clang::NestedNameSpecifier::NamespaceAlias: + RecordDeclRef(nns->getAsNamespaceAlias(), + qualifier.getLocalBeginLoc(), + RT_Qualifier); + break; + case clang::NestedNameSpecifier::TypeSpec: + case clang::NestedNameSpecifier::TypeSpecWithTemplate: + if (const clang::TypedefType *tt = nns->getAsType()->getAs()) { + RecordDeclRef(tt->getDecl(), + qualifier.getLocalBeginLoc(), + RT_Qualifier); + } else if (const clang::RecordType *rt = nns->getAsType()->getAs()) { + RecordDeclRef(rt->getDecl(), + qualifier.getLocalBeginLoc(), + RT_Qualifier); + } else if (const clang::TemplateSpecializationType *tst = + nns->getAsType()->getAs()) { + + if (clang::TemplateDecl *decl = tst->getTemplateName().getAsTemplateDecl()) { + if (clang::NamedDecl *templatedDecl = decl->getTemplatedDecl()) { + RecordDeclRef(templatedDecl, + qualifier.getLocalBeginLoc(), + RT_Qualifier); + + } + } + } + break; + default: + // TODO: Do these cases matter? + break; + } + } + return true; +} + + +/////////////////////////////////////////////////////////////////////////////// +// Declaration and TypeLoc handling + +void ASTVisitor::traverseDeclContextHelper(clang::DeclContext *d) +{ + if (!d) + return; + + // Traverse children. + for (clang::DeclContext::decl_iterator it = d->decls_begin(), + itEnd = d->decls_end(); it != itEnd; ++it) { + // BlockDecls are traversed through BlockExprs. + if (!llvm::isa(*it)) + TraverseDecl(*it); + } +} + +// Overriding TraverseCXXRecordDecl lets us mark the base-class references +// with the "Base-Class" kind. +bool ASTVisitor::TraverseCXXRecordDecl(clang::CXXRecordDecl *d) +{ + // Traverse qualifiers on the record decl. + TraverseNestedNameSpecifierLoc(d->getQualifierLoc()); + + // Visit the TagDecl to record its ref. + WalkUpFromCXXRecordDecl(d); + + // Traverse base classes. + if (d->isThisDeclarationADefinition()) { + for (clang::CXXRecordDecl::base_class_iterator it = d->bases_begin(); + it != d->bases_end(); + ++it) { + clang::CXXBaseSpecifier *baseSpecifier = it; + ScopedSwitcher sw1(m_typeContext, RT_BaseClass); + ScopedSwitcher sw2(m_contextAccess, convertAccessType(baseSpecifier->getAccessSpecifier())); + ScopedSwitcher> sw3(m_contextNameGenerator, std::make_shared(d, m_declNameCache)); + TraverseTypeLoc(baseSpecifier->getTypeSourceInfo()->getTypeLoc()); + } + } + + traverseDeclContextHelper(d); + return true; +} + +bool ASTVisitor::TraverseClassTemplateSpecializationDecl( + clang::ClassTemplateSpecializationDecl *d) +{ + // base::TraverseClassTemplateSpecializationDecl calls TraverseTypeLoc, + // which then visits a clang::TemplateSpecializationTypeLoc. We want + // to mark the template specialization as Declaration or Definition, + // not Reference, so skip the TraverseTypeLoc call. + // + // The problem happens with code like this: + // template <> + // struct Vector {}; + + WalkUpFromClassTemplateSpecializationDecl(d); + + if (clang::TypeSourceInfo* tsi = d->getTypeAsWritten()) + { + ScopedSwitcher> switcher(m_childContextNameGenerator, std::make_shared(d, m_declNameCache)); + clang::TypeLoc tl = tsi->getTypeLoc(); + clang::TemplateSpecializationTypeLoc tstl = tl.castAs(); + for (unsigned I = 0, E = tstl.getNumArgs(); I != E; ++I) + { + TraverseTemplateArgumentLoc(tstl.getArgLoc(I)); } } - return true; + traverseDeclContextHelper(d); + + + + return true; + //base::TraverseClassTemplateSpecializationDecl(d); } -bool ASTVisitor::VisitFieldDecl(clang::FieldDecl* declaration) +bool ASTVisitor::TraverseNamespaceAliasDecl(clang::NamespaceAliasDecl *d) { - if (isLocatedInUnparsedProjectFile(declaration)) - { - if (declaration->hasInClassInitializer()) - { - ASTBodyVisitor bodyVisitor(this, declaration); - bodyVisitor.Visit(declaration->getInClassInitializer()); - } - m_client->onFieldParsed( - getParseLocationForNamedDecl(declaration), - getParseVariable(declaration), - convertAccessType(declaration->getAccess()) - ); - } + // The base::TraverseNamespaceAliasDecl function avoids traversing the + // namespace decl itself because (I think) that would traverse the + // complete contents of the namespace. However, it fails to traverse + // the qualifiers on the target namespace, so we do that here. + TraverseNestedNameSpecifierLoc(d->getQualifierLoc()); - return true; + return base::TraverseNamespaceAliasDecl(d); } -bool ASTVisitor::VisitFunctionDecl(clang::FunctionDecl* declaration) +void ASTVisitor::templateParameterListsHelper(clang::DeclaratorDecl *d) { - // Abort for CXXMethodDecls to avoid duplicate call. - if (clang::isa(declaration)) - { - return true; - } - - if (isLocatedInUnparsedProjectFile(declaration)) - { - processFunctionDecl(declaration); - } - - return true; + for (unsigned i = 0, iEnd = d->getNumTemplateParameterLists(); + i != iEnd; ++i) { + clang::TemplateParameterList *parmList = + d->getTemplateParameterList(i); + for (clang::NamedDecl *parm : *parmList) + TraverseDecl(parm); + } } -bool ASTVisitor::VisitLambdaExpr(clang::LambdaExpr* expr) +bool ASTVisitor::VisitDecl(clang::Decl *d) { - if (isLocatedInUnparsedProjectFile(expr->getCallOperator())) - { - processFunctionDecl(expr->getCallOperator()); - } - return true; -} - -bool ASTVisitor::VisitParmVarDecl(clang::ParmVarDecl* declaration) -{ - // todo: handle parameters here! - // maybe handle template args in visitvardecl to account for local variables and stuff... - processTemplateArguments(declaration->getTypeSourceInfo()->getTypeLoc()); - - return true; -} - -bool ASTVisitor::VisitCXXMethodDecl(clang::CXXMethodDecl* declaration) -{ - if (isLocatedInUnparsedProjectFile(declaration)) - { - ParseFunction parseFunction = getParseFunction(declaration); - ParseLocation location = getParseLocationForNamedDecl(declaration); - - m_client->onMethodParsed( - location, - parseFunction, - convertAccessType(declaration->getAccess()), - getAbstractionType(declaration), - getParseLocationOfFunctionBody(declaration) - ); - - for (clang::CXXMethodDecl::method_iterator it = declaration->begin_overridden_methods(); - it != declaration->end_overridden_methods(); it++) - { - m_client->onMethodOverrideParsed(location, getParseFunction(*it), parseFunction); - } - - if (declaration->hasBody() && declaration->getBody() != NULL && declaration->isThisDeclarationADefinition() && - !declaration->isDependentContext()) - { - ASTBodyVisitor bodyVisitor(this, declaration); - bodyVisitor.Visit(declaration->getBody()); - } - } - - return true; -} - -bool ASTVisitor::VisitCXXConstructorDecl(clang::CXXConstructorDecl* declaration) -{ - if (isLocatedInUnparsedProjectFile(declaration)) - { - for (clang::CXXConstructorDecl::init_const_iterator it = declaration->init_begin(); it != declaration->init_end(); it++) - { - if ((*it)->getInit()) - { - clang::CXXCtorInitializer* init = *it; - - if (init->isMemberInitializer()) + if (clang::NamedDecl *nd = llvm::dyn_cast(d)) { + clang::SourceLocation loc = nd->getLocation(); + if (clang::FunctionDecl *fd = llvm::dyn_cast(d)) { + //if (fd->getTemplateInstantiationPattern() != NULL) { + // // When Clang instantiates a function template, it seems to + // // create a FunctionDecl for the instantiation that returns + // // false for fd->isThisDeclarationADefinition(). The result + // // is that the template function definition's location is + // // marked as both a Declaration and a Definition. Fix this by + // // omitting the ref on the instantiation. + //} else { +#if 0 + // This code recorded refs without appropriate qualifiers. For + // example, with the code + // template void Vector::clear() {} + // it would record the first A as "A", but it needs to record + // Vector::A. + templateParameterListsHelper(fd); +#endif + RefType refType; + refType = fd->isThisDeclarationADefinition() ? + RT_Definition : RT_Declaration; + SymbolType symbolType; + if (llvm::isa(fd)) { - m_client->onFieldUsageParsed( - getParseLocationForTokenAtLocation(init->getMemberLocation()), - getParseFunction(declaration), - getDeclNameHierarchy(init->getMember()) - ); + if (llvm::isa(fd)) + symbolType = ST_Constructor; + else if (llvm::isa(fd)) + symbolType = ST_Destructor; + else + symbolType = ST_Method; + } else + { + symbolType = ST_Function; + } + RecordDeclRef(nd, loc, refType, symbolType); + if (fd->isFunctionTemplateSpecialization()) + { + RecordDeclRef(nd, loc, refType, ST_FunctionTemplateSpecialization); // TODO: functiontemplatespec is more reftype than symboltype } - else if (init->isBaseInitializer()) + //} + } else if (clang::VarDecl *vd = llvm::dyn_cast(d)) { + // Don't record the parameter definitions in a function declaration + // (unless the function declaration is also a definition). A + // definition will be recorded at the function's definition, and + // recording two definitions is unhelpful. This code could record + // a different kind of reference, but recording the position of + // parameter names in declarations doesn't seem useful. + bool omitParamVar = false; + const bool isParam = llvm::isa(vd); + if (isParam) { + clang::FunctionDecl *fd = + llvm::dyn_cast_or_null( + vd->getDeclContext()); + if (fd && !fd->isThisDeclarationADefinition()) + omitParamVar = true; + } + if (!omitParamVar) { + RefType refType; + if (vd->isThisDeclarationADefinition() == clang::VarDecl::DeclarationOnly) + refType = RT_Declaration; + else + refType = RT_Definition; + // TODO: Review for correctness. What about local extern? + SymbolType symbolType; + if (isParam) { - m_client->onTypeUsageParsed( - getParseTypeUsage(init->getTypeSourceInfo()->getTypeLoc(), init->getTypeSourceInfo()->getType()), // TODO: rewrite this to old! - getParseFunction(declaration) - ); + symbolType = ST_Parameter; } - - ASTBodyVisitor bodyVisitor(this, declaration); - bodyVisitor.Visit(init->getInit()); - } - } - } - return true; -} - -bool ASTVisitor::VisitNamespaceDecl(clang::NamespaceDecl* declaration) -{ - if (isLocatedInUnparsedProjectFile(declaration)) - { - m_client->onNamespaceParsed( - declaration->isAnonymousNamespace() ? ParseLocation() : getParseLocationForNamedDecl(declaration), // TODO: why no real parse loc for anonymous namespace? - getDeclNameHierarchy(declaration), - getParseLocation(declaration->getSourceRange()) - ); - } - return true; -} - -bool ASTVisitor::VisitEnumDecl(clang::EnumDecl* declaration) -{ - if (isLocatedInUnparsedProjectFile(declaration)) - { - m_client->onEnumParsed( - getParseLocationForNamedDecl(declaration), - getDeclNameHierarchy(declaration), - convertAccessType(declaration->getAccess()), - getParseLocation(declaration->getSourceRange()) - ); - } - return true; -} - -bool ASTVisitor::VisitEnumConstantDecl(clang::EnumConstantDecl* declaration) -{ - if (isLocatedInUnparsedProjectFile(declaration)) - { - m_client->onEnumConstantParsed( - getParseLocation(declaration->getSourceRange()), - getDeclNameHierarchy(declaration) - ); - } - return true; -} - -bool ASTVisitor::VisitTemplateTypeParmDecl(clang::TemplateTypeParmDecl *declaration) -{ - if (isLocatedInUnparsedProjectFile(declaration) && declaration->hasDefaultArgument()) - { - m_client->onTemplateDefaultArgumentTypeParsed( - getParseTypeUsage(declaration->getDefaultArgumentInfo()->getTypeLoc(), declaration->getDefaultArgument()), - getDeclNameHierarchy(declaration) - ); - } - return true; -} - -bool ASTVisitor::VisitTemplateTemplateParmDecl(clang::TemplateTemplateParmDecl *declaration) -{ - if (isLocatedInUnparsedProjectFile(declaration) && declaration->hasDefaultArgument()) - { - const clang::TemplateArgumentLoc& defaultArgumentLoc = declaration->getDefaultArgument(); - clang::SourceRange sr = defaultArgumentLoc.getSourceRange(); - std::shared_ptr defaultArgumentDataType = std::make_shared( - getDeclNameHierarchy(defaultArgumentLoc.getArgument().getAsTemplate().getAsTemplateDecl()) - ); - m_client->onTemplateDefaultArgumentTypeParsed( - getParseTypeUsage(sr, defaultArgumentDataType), - getDeclNameHierarchy(declaration) - ); - } - return true; -} - -bool ASTVisitor::VisitClassTemplateDecl(clang::ClassTemplateDecl* declaration) -{ - if (isLocatedInUnparsedProjectFile(declaration)) - { - NameHierarchy templateRecordNameHierarchy = getDeclNameHierarchy(declaration); - clang::TemplateParameterList* parameterList = declaration->getTemplateParameters(); - for (size_t i = 0; i < parameterList->size(); i++) - { - clang::NamedDecl* namedDecl = parameterList->getParam(i); - if (!namedDecl->getName().empty()) // do not create node for template param if the param has no name - { - m_client->onTemplateRecordParameterTypeParsed( - getParseLocationForNamedDecl(namedDecl), - getDeclNameHierarchy(namedDecl), - templateRecordNameHierarchy - ); - } - } - } - - // handles explicit specializations and implicit specializations but no explicit partial specializations - for (clang::ClassTemplateDecl::spec_iterator it = declaration->specializations().begin(); - it != declaration->specializations().end(); it++ - ) - { - clang::ClassTemplateSpecializationDecl* specializationDecl = *it; - NameHierarchy specializationNameHierarchy = getDeclNameHierarchy(specializationDecl); - - ParseLocation specializationLocation = getParseLocationForNamedDecl(specializationDecl); - if (specializationDecl->getSpecializationKind() == clang::TSK_ImplicitInstantiation) - { - specializationLocation = getParseLocation(specializationDecl->getPointOfInstantiation()); - } - - // handling template arguments - if (isLocatedInUnparsedProjectFile(specializationDecl) && specializationDecl->isExplicitSpecialization()) - { - processTemplateArgumentsOfExplicitSpecialization(specializationDecl); - } - - if (isLocatedInProjectFile(declaration)) - { - m_client->onTemplateRecordSpecializationParsed( - specializationLocation, - specializationNameHierarchy, - specializationDecl->isStruct() ? ParserClient::RECORD_STRUCT : ParserClient::RECORD_CLASS, - utility::getTemplateSpecializationParentNameHierarchy(specializationDecl) - ); - - // template member specializations - if (specializationDecl->getSpecializationKind() == clang::TSK_ImplicitInstantiation) - { - for (clang::CXXRecordDecl::method_iterator methodIt = specializationDecl->method_begin(); methodIt != specializationDecl->method_end(); methodIt++) + else if (vd->getParentFunctionOrMethod() == NULL) { - clang::CXXMethodDecl* methodDecl = (*methodIt); - if (methodDecl->getTemplatedKind() == clang::FunctionDecl::TK_MemberSpecialization) + if (vd->getAccess() == clang::AS_none) { - m_client->onMethodParsed( - getParseLocation(methodDecl->getMemberSpecializationInfo()->getPointOfInstantiation()), - getParseFunction(methodDecl), - convertAccessType(methodDecl->getAccess()), - getAbstractionType(methodDecl), - ParseLocation() - ); + symbolType = ST_GlobalVariable; + } + else + { + symbolType = ST_Field; + } + } + else + { + symbolType = ST_LocalVariable; + } + RecordDeclRef(nd, loc, refType, symbolType); + } + } else if (clang::TagDecl *td = llvm::dyn_cast(d)) { + RefType refType; + refType = td->isThisDeclarationADefinition() ? RT_Definition : RT_Declaration; + // Mark an extern template declaration as a Declaration rather than + // a Definition. For example: + // template class Foo {}; // Definition of Foo + // extern template class Foo; // Declaration of Foo + if (clang::ClassTemplateSpecializationDecl *spec = + llvm::dyn_cast(td)) { + if (spec->getTemplateSpecializationKind() != + clang::TSK_ExplicitSpecialization) + refType = RT_Declaration; + } - clang::NamedDecl* specializedNamedDecel = methodDecl->getMemberSpecializationInfo()->getInstantiatedFrom(); - if (clang::isa(specializedNamedDecel)) - { - m_client->onTemplateMemberFunctionSpecializationParsed( - getParseLocation(methodDecl->getMemberSpecializationInfo()->getPointOfInstantiation()), - getParseFunction(methodDecl), - getParseFunction(clang::dyn_cast(specializedNamedDecel)) - ); + SymbolType symbolType = ST_Max; + // TODO: Handle the C++11 fixed underlying type of enumeration + // declarations. + switch (td->getTagKind()) + { + case clang::TTK_Struct: symbolType = ST_Struct; break; + case clang::TTK_Union: symbolType = ST_Union; break; + case clang::TTK_Class: symbolType = ST_Class; break; + case clang::TTK_Enum: symbolType = ST_Enum; break; + default: assert(false); + } + RecordDeclRef(nd, loc, refType, symbolType); + + if (clang::isa(td)) + { + RecordDeclRef(nd, loc, refType, ST_ClassTemplateSpecialization); // TODO: classtemplatespec is more reftype than symboltype + } + } else if (clang::UsingDirectiveDecl *ud = llvm::dyn_cast(d)) { + RecordDeclRef( + ud->getNominatedNamespaceAsWritten(), + loc, RT_UsingDirective); + } else if (clang::UsingDecl *usd = llvm::dyn_cast(d)) { + for (auto it = usd->shadow_begin(), itEnd = usd->shadow_end(); + it != itEnd; ++it) { + clang::UsingShadowDecl *shadow = *it; + RecordDeclRef(shadow->getTargetDecl(), loc, RT_Using); + } + } else if (clang::NamespaceAliasDecl *nad = llvm::dyn_cast(d)) { + RecordDeclRef(nad, loc, RT_Declaration, ST_Namespace); +// not needed right now! +// RecordDeclRef(nad, loc, RT_Declaration, ST_Namespace); +// RecordDeclRef(nad->getAliasedNamespace(), +// nad->getTargetNameLoc(), +// RT_NamespaceAlias); + } else if (llvm::isa(d)) { + // TODO: use these cases for creating the connection between two undefined template things + // Do nothing. The function will be recorded when it appears as a + // FunctionDecl. + } else if (llvm::isa(d)) { + // Do nothing. The class will be recorded when it appears as a + // RecordDecl. + } else if (llvm::isa(d)) { + RecordDeclRef(nd, loc, RT_Declaration, ST_Field); + } else if (llvm::isa(d)) { + RecordDeclRef(nd, loc, RT_Declaration, ST_Typedef); + } else if (llvm::isa(d)) { + RecordDeclRef(nd, loc, RT_Declaration, ST_Namespace); + } else if (llvm::isa(d)) { + RecordDeclRef(nd, loc, RT_Declaration, ST_Enumerator); + } else if ( + llvm::isa(d) || + llvm::isa(d) || + llvm::isa(d)) { + RecordDeclRef(nd, loc, RT_Declaration, ST_TemplateParameter); + } else { + RecordDeclRef(nd, loc, RT_Declaration); + } + } + + return true; +} + +//#include "data/parser/ParseFunction.h" +//#include "data/parser/cxx/name_resolver/CxxTypeNameResolver.h" +//#include "data/type/NamedDataType.h" + +bool ASTVisitor::VisitTypeLoc(clang::TypeLoc tl) +{ + clang::TypeLoc::TypeLocClass tlc = tl.getTypeLocClass(); + + if (!tl.getAs().isNull()) + { + const clang::TagTypeLoc &ttl = tl.castAs(); + RecordDeclRef(ttl.getDecl(), + tl.getBeginLoc(), + m_typeContext); + } + else if (!tl.getAs().isNull()) + { + const clang::TypedefTypeLoc &ttl = tl.castAs(); + RecordDeclRef(ttl.getTypedefNameDecl(), + tl.getBeginLoc(), + m_typeContext); + } + else if (!tl.getAs().isNull()) + { + const clang::TemplateTypeParmTypeLoc &ttptl = + tl.castAs(); + RecordDeclRef(ttptl.getDecl(), + tl.getBeginLoc(), + m_typeContext); + } + else if (!tl.getAs().isNull()) + { + const clang::TemplateSpecializationTypeLoc &tstl = + tl.castAs(); + const clang::TemplateSpecializationType &tst = + *tstl.getTypePtr()->getAs(); + if (tst.getAsCXXRecordDecl()) + { + RecordDeclRef(tst.getAsCXXRecordDecl(), + tl.getBeginLoc(), + m_typeContext); + } + else // if template specialization cannot be resolved to a concrete declaration. + { // this is the case when using a specialization of a template template parameter. + RecordTypeRef(tstl.getTypePtr(), + tl.getBeginLoc(), + m_typeContext); + } + } + else if (!tl.getAs().isNull()) + { + const clang::DependentNameTypeLoc& dntl = + tl.castAs(); + RecordTypeRef(dntl.getTypePtr(), + dntl.getNameLoc(), + m_typeContext); + } + else if (!tl.getAs().isNull()) + { + const clang::BuiltinTypeLoc &btl = + tl.castAs(); + RecordTypeRef(btl.getTypePtr(), + tl.getBeginLoc(), + m_typeContext); + } + + return true; +} + + +/////////////////////////////////////////////////////////////////////////////// +// Reference recording + +static inline bool isNamedDeclUnnamed(clang::NamedDecl *d) +{ + return d->getDeclName().isIdentifier() && d->getIdentifier() == NULL; +} + +ParseLocation ASTVisitor::getDeclRefRange(clang::NamedDecl *decl, clang::SourceLocation loc) +{ + ParseLocation parseLocation; + clang::SourceManager& sourceManager = m_context->getSourceManager(); + clang::SourceLocation sloc = sourceManager.getSpellingLoc(loc); + { + clang::FileID fileId = sourceManager.getFileID(sloc); + + if (!fileId.isInvalid()) + { + const clang::FileEntry* fileEntry = sourceManager.getFileEntryForID(fileId); + if (fileEntry != NULL) + { + std::string fielName = fileEntry->getName(); + std::string filePath = FileSystem::absoluteFilePath(fielName); + parseLocation.filePath = FilePath(filePath); + } + } + + unsigned int offset = sourceManager.getFileOffset(sloc); + parseLocation.startLineNumber = sourceManager.getLineNumber(fileId, offset); + parseLocation.startColumnNumber = sourceManager.getColumnNumber(fileId, offset); + } + if (decl) + { + clang::DeclarationName name = decl->getDeclName(); + clang::DeclarationName::NameKind nameKind = name.getNameKind(); + + // A C++ destructor name consists of two tokens, '~' and an identifier. + // Try to include both of them in the ref. + if (nameKind == clang::DeclarationName::CXXDestructorName) { + // Start by getting the destructor name, sans template arguments. + const clang::Type *nameType = name.getCXXNameType().getTypePtr(); + assert(nameType != NULL); + llvm::StringRef className; + if (const clang::InjectedClassNameType *injectedNameType = + nameType->getAs()) { + className = injectedNameType->getDecl()->getName(); + } + else if (const clang::RecordType *recordType = + nameType->getAs()) { + className = recordType->getDecl()->getName(); + } + if (!className.empty()) { // TODO: maybe its better to use tokens here. + // Scan the characters. + const char *const buffer = sourceManager.getCharacterData(sloc); + const char *p = buffer; + if (p != NULL && *p == '~') { + p++; + // Permit whitespace between the ~ and the class name. + // Technically there could be preprocessor tokens, comments, + // etc.. + while (*p == ' ' || *p == '\t') + p++; + // Match the class name against the text in the source. + if (!strncmp(p, className.data(), className.size())) { + p += className.size(); + if (!isalnum(*p) && *p != '_') { + parseLocation.endLineNumber = parseLocation.startLineNumber; + parseLocation.endColumnNumber = parseLocation.startColumnNumber; + parseLocation.endColumnNumber += p - buffer - 1; + return parseLocation; } } } } } - } - return true; -} -bool ASTVisitor::VisitClassTemplatePartialSpecializationDecl(clang::ClassTemplatePartialSpecializationDecl* declaration) -{ - if (isLocatedInUnparsedProjectFile(declaration)) - { - NameHierarchy specializedRecordNameHierarchy = getDeclNameHierarchy(declaration); - NameHierarchy specializationParentNameHierarchy = utility::getTemplateSpecializationParentNameHierarchy(declaration); - - ParserClient::RecordType specializedRecordType = declaration->isStruct() ? ParserClient::RECORD_STRUCT : ParserClient::RECORD_CLASS; - m_client->onTemplateRecordSpecializationParsed( - getParseLocationForNamedDecl(declaration), specializedRecordNameHierarchy, specializedRecordType, specializationParentNameHierarchy - ); - - clang::TemplateParameterList* parameterList = declaration->getTemplateParameters(); - for (size_t i = 0; i < parameterList->size(); i++) - { - clang::NamedDecl* namedDecl = parameterList->getParam(i); - if (!namedDecl->getName().empty()) // do not create node for template param if the param has no name - { - m_client->onTemplateRecordParameterTypeParsed( - getParseLocationForNamedDecl(namedDecl), - getDeclNameHierarchy(namedDecl), - specializedRecordNameHierarchy - ); - } - } - - processTemplateArgumentsOfExplicitSpecialization(declaration); - } - return true; -} - -bool ASTVisitor::VisitFunctionTemplateDecl(clang::FunctionTemplateDecl *declaration) -{ - const ParseFunction templateFunction = getParseFunction(declaration); - if (isLocatedInUnparsedProjectFile(declaration)) - { - clang::TemplateParameterList* parameterList = declaration->getTemplateParameters(); - for (size_t i = 0; i < parameterList->size(); i++) - { - clang::NamedDecl* namedDecl = parameterList->getParam(i); - if (!namedDecl->getName().empty()) // do not create node for template param if the param has no name - { - m_client->onTemplateFunctionParameterTypeParsed( - getParseLocationForNamedDecl(namedDecl), - getDeclNameHierarchy(namedDecl), - templateFunction - ); + // For references to C++ overloaded operators, try to include both the + // operator keyword and the operator name in the ref. + if (nameKind == clang::DeclarationName::CXXOperatorName) { + const char *spelling = clang::getOperatorSpelling( + name.getCXXOverloadedOperator()); + if (spelling != NULL) { + const char *const buffer = sourceManager.getCharacterData(sloc); + const char *p = buffer; + if (p != NULL && !strncmp(p, "operator", 8)) { + p += 8; + // Skip whitespace between "operator" and the operator itself. + while (*p == ' ' || *p == '\t') + p++; + // Look for the operator name. This may be too restrictive for + // recognizing multi-token operators like operator[], operator + // delete[], or operator ->*. + if (!strncmp(p, spelling, strlen(spelling))) { + p += strlen(spelling); + parseLocation.endLineNumber = parseLocation.startLineNumber; + parseLocation.endColumnNumber = parseLocation.startColumnNumber; + parseLocation.endColumnNumber += p - buffer - 1; + return parseLocation; + } + } } } } - - for (clang::FunctionTemplateDecl::spec_iterator it = declaration->specializations().begin(); it != declaration->specializations().end(); it++) + // General case -- find the end of the token starting at loc. + { - clang::FunctionDecl* specializationDecl = *it; - bool needsToProcessSpecialization = false; - - if (specializationDecl->getTemplateSpecializationKind() == clang::TSK_ExplicitSpecialization) - { - if (isLocatedInUnparsedProjectFile(declaration)) - { - processTemplateArgumentsOfExplicitSpecialization(specializationDecl); - needsToProcessSpecialization = true; - } - } - else if (isLocatedInProjectFile(declaration)) - { - needsToProcessSpecialization = true; - } - - if (needsToProcessSpecialization) - { - processFunctionDecl(specializationDecl); - - m_client->onTemplateFunctionSpecializationParsed( - getParseLocationForNamedDecl(specializationDecl), - getParseFunction(specializationDecl), - templateFunction - ); - } + clang::SourceLocation endSloc = + m_preprocessor->getLocForEndOfToken(sloc); + unsigned int offset = sourceManager.getFileOffset(endSloc); + clang::FileID fileId = sourceManager.getFileID(endSloc); + parseLocation.endLineNumber = sourceManager.getLineNumber(fileId, offset); + parseLocation.endColumnNumber = sourceManager.getColumnNumber(fileId, offset) - 1; } - return true; + return parseLocation; } -void ASTVisitor::VisitCallExprInDeclBody(clang::FunctionDecl* decl, clang::CallExpr* expr) +void ASTVisitor::RecordTypeRef( + const clang::Type* type, + clang::SourceLocation beginLoc, + RefType refType, + SymbolType symbolType) { - clang::FunctionDecl* calleeFunctionDecl = expr->getDirectCallee(); - if (!calleeFunctionDecl) + if (isLocatedInProjectFile(beginLoc)) + { + ParseLocation parseLocation = getDeclRefRange(0, beginLoc); + NameHierarchy typeNameHierarchy = m_typeNameCache->getName(type); + NameHierarchy contextNameHierarchy = m_contextNameGenerator->getName(); + + if (refType == RT_TemplateArgument) + { + m_client->onTemplateArgumentTypeParsed( + parseLocation, typeNameHierarchy, contextNameHierarchy); + } + else if (refType == RT_BaseClass) + { + m_client->onInheritanceParsed( + parseLocation, contextNameHierarchy, typeNameHierarchy, m_contextAccess); + } + else if (refType == RT_TemplateDefaultArgument) + { + m_client->onTemplateDefaultArgumentTypeParsed( // TODO: rename second parameter to "parameter" + parseLocation, typeNameHierarchy, contextNameHierarchy); + } + else + { + m_client->onTypeUsageParsed( + parseLocation, contextNameHierarchy, typeNameHierarchy); + } + } +} + +void ASTVisitor::RecordDeclRef( + clang::NamedDecl *d, + clang::SourceLocation beginLoc, + RefType refType, + SymbolType symbolType) +{ + if ((!d) || + (d->isImplicit() && !isLocatedInProjectFile(beginLoc)) || + (!d->isImplicit() && !isLocatedInUnparsedProjectFile(beginLoc))) { - // TODO: Save error at location. return; } - m_client->onCallParsed( - getParseLocation(expr->getSourceRange()), - getParseFunction(decl), - getParseFunction(calleeFunctionDecl) - ); -} + ParseLocation parseLocation = getDeclRefRange(d, beginLoc); + NameHierarchy declNameHierarchy = m_declNameCache->getName(d); + + bool fallback = false; -void ASTVisitor::VisitCallExprInDeclBody(clang::DeclaratorDecl* decl, clang::CallExpr* expr) -{ - if (!expr->getDirectCallee()) - { - // TODO: Save error at location. - return; - } - - m_client->onCallParsed( - getParseLocation(expr->getSourceRange()), - getParseVariable(decl), - getParseFunction(expr->getDirectCallee()) - ); -} - -void ASTVisitor::VisitDeclRefExprInDeclBody(clang::FunctionDecl* decl, clang::DeclRefExpr* expr) -{ - processTemplateArguments(expr); -} - -void ASTVisitor::VisitDeclRefExprInDeclBody(clang::DeclaratorDecl* decl, clang::DeclRefExpr* expr) -{ - processTemplateArguments(expr); -} - -void ASTVisitor::VisitCXXConstructExprInDeclBody(clang::FunctionDecl* decl, clang::CXXConstructExpr* expr) -{ - m_client->onCallParsed( - getParseLocationForTokensInRange(expr->getSourceRange()), - getParseFunction(decl), - getParseFunction(expr->getConstructor()) - ); -} - -void ASTVisitor::VisitCXXConstructExprInDeclBody(clang::DeclaratorDecl* decl, clang::CXXConstructExpr* expr) -{ - m_client->onCallParsed( - getParseLocationForTokensInRange(expr->getSourceRange()), - getParseVariable(decl), - getParseFunction(expr->getConstructor()) - ); -} - -void ASTVisitor::VisitExplicitCastExprInDeclBody(clang::FunctionDecl* decl, clang::ExplicitCastExpr* expr) -{ - processTemplateArguments(expr->getTypeInfoAsWritten()->getTypeLoc()); -} - -void ASTVisitor::VisitExplicitCastExprInDeclBody(clang::DeclaratorDecl* decl, clang::ExplicitCastExpr* expr) -{ - processTemplateArguments(expr->getTypeInfoAsWritten()->getTypeLoc()); -} - -void ASTVisitor::VisitCXXTemporaryObjectExprInDeclBody(clang::FunctionDecl* decl, clang::CXXTemporaryObjectExpr* expr) -{ - processTemplateArguments(expr->getTypeSourceInfo()->getTypeLoc()); -} - -void ASTVisitor::VisitCXXTemporaryObjectExprInDeclBody(clang::DeclaratorDecl* decl, clang::CXXTemporaryObjectExpr* expr) -{ - processTemplateArguments(expr->getTypeSourceInfo()->getTypeLoc()); -} - -void ASTVisitor::VisitCXXNewExprInDeclBody(clang::FunctionDecl* decl, clang::CXXNewExpr* expr) -{ - m_client->onTypeUsageParsed( - getParseTypeUsage(expr->getAllocatedTypeSourceInfo()->getTypeLoc(), expr->getAllocatedType()), - getParseFunction(decl) - ); - - processTemplateArguments(expr->getAllocatedTypeSourceInfo()->getTypeLoc()); -} - -void ASTVisitor::VisitCXXNewExprInDeclBody(clang::DeclaratorDecl* decl, clang::CXXNewExpr* expr) -{ - m_client->onTypeUsageParsed( - getParseTypeUsage(expr->getAllocatedTypeSourceInfo()->getTypeLoc(), expr->getAllocatedType()), - getParseVariable(decl) - ); - - processTemplateArguments(expr->getAllocatedTypeSourceInfo()->getTypeLoc()); -} - -void ASTVisitor::VisitMemberExprInDeclBody(clang::FunctionDecl* decl, clang::MemberExpr* expr) -{ - ParseLocation parseLocation = getParseLocation(expr->getSourceRange()); - - const std::string exprName = expr->getMemberNameInfo().getAsString(); - parseLocation.endColumnNumber += exprName.size() - 1; - - m_client->onFieldUsageParsed( - parseLocation, - getParseFunction(decl), - getDeclNameHierarchy(expr->getMemberDecl()) - ); -} - -void ASTVisitor::VisitMemberExprInDeclBody(clang::DeclaratorDecl* decl, clang::MemberExpr* expr) -{ - ParseLocation parseLocation = getParseLocation(expr->getSourceRange()); - - const std::string exprName = expr->getMemberNameInfo().getAsString(); - parseLocation.endColumnNumber += exprName.size() - 1; - - m_client->onFieldUsageParsed( - parseLocation, - getParseVariable(decl), - getDeclNameHierarchy(expr->getMemberDecl()) - ); -} - -void ASTVisitor::VisitGlobalVariableExprInDeclBody(clang::FunctionDecl* decl, clang::DeclRefExpr* expr) -{ - ParseLocation parseLocation = getParseLocation(expr->getSourceRange()); - - const std::string exprName = expr->getNameInfo().getAsString(); - parseLocation.endColumnNumber += exprName.size() - 1; - - m_client->onGlobalVariableUsageParsed( - parseLocation, - getParseFunction(decl), - getDeclNameHierarchy(expr->getDecl()) - ); -} - -void ASTVisitor::VisitGlobalVariableExprInDeclBody(clang::DeclaratorDecl* decl, clang::DeclRefExpr* expr) -{ - ParseLocation parseLocation = getParseLocation(expr->getSourceRange()); - - const std::string exprName = expr->getNameInfo().getAsString(); - parseLocation.endColumnNumber += exprName.size() - 1; - - m_client->onGlobalVariableUsageParsed( - parseLocation, - getParseVariable(decl), - getDeclNameHierarchy(expr->getDecl()) - ); -} - -void ASTVisitor::VisitEnumExprInDeclBody(clang::FunctionDecl* decl, clang::DeclRefExpr* expr) -{ - ParseLocation parseLocation = getParseLocation(expr->getSourceRange()); - - const std::string exprName = expr->getNameInfo().getAsString(); - parseLocation.endColumnNumber += exprName.size() - 1; - - m_client->onEnumConstantUsageParsed( - parseLocation, - getParseFunction(decl), - getDeclNameHierarchy(expr->getDecl()) - ); -} - -void ASTVisitor::VisitEnumExprInDeclBody(clang::DeclaratorDecl* decl, clang::DeclRefExpr* expr) -{ - ParseLocation parseLocation = getParseLocation(expr->getSourceRange()); - - const std::string exprName = expr->getNameInfo().getAsString(); - parseLocation.endColumnNumber += exprName.size() - 1; - - m_client->onEnumConstantUsageParsed( - parseLocation, - getParseVariable(decl), - getDeclNameHierarchy(expr->getDecl()) - ); -} - -void ASTVisitor::VisitVarDeclInDeclBody(clang::FunctionDecl* decl, clang::VarDecl* varDecl) -{ - m_client->onTypeUsageParsed( - getParseTypeUsage(varDecl->getTypeSourceInfo()->getTypeLoc(), varDecl->getType()), - getParseFunction(decl) - ); - - processTemplateArguments(varDecl->getTypeSourceInfo()->getTypeLoc()); -} - -void ASTVisitor::processFunctionDecl(clang::FunctionDecl* declaration) -{ - m_client->onFunctionParsed( - getParseLocationForNamedDecl(declaration), - getParseFunction(declaration), - getParseLocationOfFunctionBody(declaration) - ); - - // handle template arguments of return type. - clang::TypeLoc functionLoc = declaration->getTypeSourceInfo()->getTypeLoc(); - if (functionLoc.getTypeLocClass() == clang::TypeLoc::TypeLocClass::FunctionProto) - { - processTemplateArguments(functionLoc.getAs().getReturnLoc()); - } - - - if (declaration->hasBody() && - declaration->isThisDeclarationADefinition() && - !declaration->isDependentContext() + if ( + refType == RT_Declaration || + refType == RT_Definition ) { - ASTBodyVisitor bodyVisitor(this, declaration); - bodyVisitor.Visit(declaration->getBody()); - } -} - -void ASTVisitor::processTemplateArgumentsOfExplicitSpecialization(clang::FunctionDecl* specializationDecl) -{ - ParseFunction specializationFunction = getParseFunction(specializationDecl); - - if (specializationDecl->getTemplateSpecializationArgsAsWritten()) - { - const clang::ASTTemplateArgumentListInfo* argumentInfoList = specializationDecl->getTemplateSpecializationArgsAsWritten(); - for (size_t i = 0; i < argumentInfoList->NumTemplateArgs; i++) + switch (symbolType) { - const clang::TemplateArgumentLoc& argumentLoc = argumentInfoList->operator[](i); - - const clang::TemplateArgument& argument = argumentLoc.getArgument(); - NameHierarchy argumentNameHierarchy = utility::templateArgumentToDataType(argument)->getTypeNameHierarchy(); - if (argumentNameHierarchy.size()) // FIXME: Some TemplateArgument kinds are not handled yet. + case ST_Typedef: + if (clang::TypedefDecl* typedefDecl = clang::dyn_cast(d)) { - m_client->onTemplateArgumentTypeOfTemplateFunctionParsed( - getParseLocation(argumentLoc.getSourceRange()), - argumentNameHierarchy, - specializationFunction - ); + m_client->onTypedefParsed( + parseLocation, + declNameHierarchy, + convertAccessType(typedefDecl->getAccess())); } + break; + case ST_Class: + if (clang::RecordDecl* recordDecl = clang::dyn_cast(d)) + { + m_client->onClassParsed( + parseLocation, + declNameHierarchy, + convertAccessType(recordDecl->getAccess()), + (refType == RT_Definition ? getParseLocationOfRecordBody(recordDecl) : ParseLocation())); + } + break; + case ST_Struct: + if (clang::RecordDecl* recordDecl = clang::dyn_cast(d)) + { + m_client->onStructParsed( + parseLocation, + declNameHierarchy, + convertAccessType(recordDecl->getAccess()), + (refType == RT_Definition ? getParseLocationOfRecordBody(recordDecl) : ParseLocation())); + } + break; + case ST_GlobalVariable: + m_client->onGlobalVariableParsed( + parseLocation, + declNameHierarchy); + break; + case ST_Field: + //if (clang::VarDecl* varDecl = clang::dyn_cast(d)) + { + m_client->onFieldParsed( + parseLocation, + declNameHierarchy, + convertAccessType(d->getAccess())); } - } -} - -void ASTVisitor::processTemplateArgumentsOfExplicitSpecialization(clang::ClassTemplateSpecializationDecl* specializationDecl) -{ - NameHierarchy specializedRecordNameHierarchy = getDeclNameHierarchy(specializationDecl); - if (clang::ClassTemplatePartialSpecializationDecl* partialSpecializationDecl = - clang::dyn_cast_or_null(specializationDecl)) - { - const clang::ASTTemplateArgumentListInfo* argumentInfoList = partialSpecializationDecl->getTemplateArgsAsWritten(); - for (size_t i = 0; i < argumentInfoList->NumTemplateArgs; i++) - { - const clang::TemplateArgumentLoc& argumentLoc = argumentInfoList->operator[](i); - const clang::TemplateArgument& argument = argumentLoc.getArgument(); - - NameHierarchy argumentNameHierarchy = utility::templateArgumentToDataType(argument)->getTypeNameHierarchy(); - if (argumentNameHierarchy.size()) // FIXME: Some TemplateArgument kinds are not handled yet. + break; + case ST_Function: + if (clang::FunctionDecl* functionDecl = clang::dyn_cast(d)) { - m_client->onTemplateArgumentTypeOfTemplateRecordParsed( - getParseLocationForTokensInRange(argumentLoc.getSourceRange()), - argumentNameHierarchy, - specializedRecordNameHierarchy - ); + m_client->onFunctionParsed( + parseLocation, + declNameHierarchy, + (refType == RT_Definition ? getParseLocationOfFunctionBody(functionDecl) : ParseLocation())); } + break; + case ST_Constructor: + case ST_Destructor: + case ST_Method: + if (clang::CXXMethodDecl* methodDecl = clang::dyn_cast(d)) + { + m_client->onMethodParsed( + parseLocation, + declNameHierarchy, + convertAccessType(methodDecl->getAccess()), + getAbstractionType(methodDecl), + (refType == RT_Definition ? getParseLocationOfFunctionBody(methodDecl) : ParseLocation())); + + for (clang::CXXMethodDecl::method_iterator it = methodDecl->begin_overridden_methods(); // iterate in traversal and use RT_Overridden or so.. + it != methodDecl->end_overridden_methods(); it++) + { + m_client->onMethodOverrideParsed( + parseLocation, + m_declNameCache->getName(*it), + declNameHierarchy); + } + + clang::MemberSpecializationInfo* memberSpecializationInfo = methodDecl->getMemberSpecializationInfo(); + if (memberSpecializationInfo) + { + clang::NamedDecl* specializedNamedDecl = memberSpecializationInfo->getInstantiatedFrom(); + if (clang::isa(specializedNamedDecl)) + { + m_client->onTemplateMemberFunctionSpecializationParsed( + parseLocation, + declNameHierarchy, + m_declNameCache->getName(specializedNamedDecl)); + } + } + } + break; + case ST_Namespace: + if (clang::NamespaceDecl* namespaceDecl = clang::dyn_cast(d)) + { + m_client->onNamespaceParsed( + namespaceDecl->isAnonymousNamespace() ? ParseLocation() : parseLocation, + declNameHierarchy, + getParseLocation(namespaceDecl->getSourceRange())); + } + else if (clang::NamespaceAliasDecl* namespaceAliasDecl = clang::dyn_cast(d)) + { + m_client->onNamespaceParsed( + parseLocation, + declNameHierarchy, + getParseLocation(namespaceAliasDecl->getAliasedNamespace()->getSourceRange())); + } + break; + case ST_Enum: + if (clang::EnumDecl* enumDecl = clang::dyn_cast(d)) + { + m_client->onEnumParsed( + parseLocation, + declNameHierarchy, + convertAccessType(enumDecl->getAccess()), + getParseLocation(enumDecl->getSourceRange())); + } + break; + case ST_Enumerator: + m_client->onEnumConstantParsed( + parseLocation, + declNameHierarchy); + break; + case ST_TemplateParameter: + if (!d->getName().empty()) // We don't create symbols for unnamed template parameters. + { + m_client->onTemplateParameterTypeParsed( + parseLocation, + declNameHierarchy); + } + break; + case ST_ClassTemplateSpecialization: + if (clang::ClassTemplateSpecializationDecl* classTemplateSpecializationDecl = clang::dyn_cast(d)) // TODO: we need a different reftype here! and st_max? mabe rewrite TraverseClassTemplateSpecializationDecl() + { + clang::NamedDecl* specializedFromDecl; + llvm::PointerUnion pu = classTemplateSpecializationDecl->getSpecializedTemplateOrPartial(); + if (pu.is()) + { + specializedFromDecl = pu.get(); + } + else if (pu.is()) + { + specializedFromDecl = pu.get(); + } + + m_client->onTemplateSpecializationParsed( + parseLocation, + declNameHierarchy, + m_declNameCache->getName(specializedFromDecl)); // use context and childcontext!! + } + break; + case ST_FunctionTemplateSpecialization: + if (clang::FunctionDecl* functionDecl = clang::dyn_cast(d)) + { + m_client->onTemplateSpecializationParsed( + parseLocation, + declNameHierarchy, + m_declNameCache->getName(functionDecl->getPrimaryTemplate()->getTemplatedDecl())); // TODO: use contect and childcontext!! + } + break; + case ST_LocalVariable: + case ST_Parameter: + // Do nothing. + break; + default: + fallback = true; + break; } } else { - if (clang::TypeSourceInfo* typeSourceInfo = specializationDecl->getTypeAsWritten()) + const NameHierarchy contextNameHierarchy = m_contextNameGenerator->getName(); + switch (symbolType) { - processTemplateArguments(typeSourceInfo->getTypeLoc()); + case ST_Field: + m_client->onFieldUsageParsed( + parseLocation, + contextNameHierarchy, + declNameHierarchy + ); + break; + case ST_GlobalVariable: + if (refType == RT_TemplateArgument) + { + m_client->onTemplateArgumentTypeParsed( + parseLocation, declNameHierarchy, contextNameHierarchy); + } + else + { + m_client->onGlobalVariableUsageParsed( + parseLocation, + contextNameHierarchy, + declNameHierarchy); + } + break; + case ST_Enumerator: + m_client->onEnumConstantUsageParsed( + parseLocation, + contextNameHierarchy, + declNameHierarchy); + break; + case ST_Max: + switch (refType) + { + case RT_Called: + m_client->onCallParsed( + parseLocation, contextNameHierarchy, declNameHierarchy); + break; + case RT_Reference: + m_client->onTypeUsageParsed( + parseLocation, contextNameHierarchy, declNameHierarchy); + break; + case RT_TemplateArgument: + m_client->onTemplateArgumentTypeParsed( + parseLocation, declNameHierarchy, contextNameHierarchy); + break; + case RT_TemplateDefaultArgument: + m_client->onTemplateDefaultArgumentTypeParsed( + parseLocation, declNameHierarchy, contextNameHierarchy); + break; + case RT_BaseClass: + m_client->onInheritanceParsed( + parseLocation, contextNameHierarchy, declNameHierarchy, m_contextAccess); + break; + case RT_Assigned: + case RT_AddressTaken: + case RT_Read: + case RT_Qualifier: + // Do nothing. + break; + default: + fallback = true; + break; + } + break; + case ST_LocalVariable: + case ST_Parameter: + // Do nothing. + break; + default: + fallback = true; + break; + } + } + + if (fallback) + { + std::string name = declNameHierarchy.back()->getName(); + declNameHierarchy.pop(); + declNameHierarchy.push(std::make_shared(name, NameElement::Signature("", "[" + std::to_string(symbolType) + "|" + std::to_string(refType) + "]"))); + + m_client->onFunctionParsed( + parseLocation, + declNameHierarchy, + parseLocation + ); + } + + + + + + //beginLoc = m_indexerContext.sourceManager().getSpellingLoc(beginLoc); + //clang::FileID fileID; + //if (beginLoc.isValid()) + // fileID = m_indexerContext.sourceManager().getFileID(beginLoc); + //IndexerFileContext &fileContext = m_indexerContext.fileContext(fileID); + //indexdb::ID symbolID = fileContext.getDeclSymbolID(d); + + //// Pass the prepared data to the IndexBuilder to record. + //fileContext.builder().recordRef( + // symbolID, + // range.first, + // range.second, + // fileContext.getRefTypeID(refType)); + //if (symbolType != ST_Max) { + // fileContext.builder().recordSymbol( + // symbolID, + // fileContext.getSymbolTypeID(symbolType)); + // if (symbolType != ST_LocalVariable && symbolType != ST_Parameter) { + // fileContext.builder().recordGlobalSymbol(symbolID); + // } + //} +} +bool ASTVisitor::isLocatedInUnparsedProjectFile(clang::SourceLocation loc) +{ + clang::SourceManager& sourceManager = m_context->getSourceManager(); + clang::SourceLocation spellingLoc = sourceManager.getSpellingLoc(loc); + + clang::FileID fileId; + + if (spellingLoc.isValid()) + { + fileId = sourceManager.getFileID(spellingLoc); + } + if (!fileId.isInvalid()) + { + auto it = m_inUnparsedProjectFileMap.find(fileId); + if (it != m_inUnparsedProjectFileMap.end()) + { + return it->second; + } + + bool ret = false; + if (m_context->getSourceManager().isWrittenInMainFile(spellingLoc)) + { + ret = true; } else { - LOG_WARNING("Could not locate template arguments of explicit template specialization: " + specializedRecordNameHierarchy.getFullName()); - } - } -} - -void ASTVisitor::processTemplateArguments(clang::DeclRefExpr* expr) -{ - if (!isLocatedInProjectFile(getParseLocation(expr->getSourceRange()))) - { - return; - } - clang::FunctionDecl* specializationDecl = clang::dyn_cast_or_null(expr->getDecl()); - if (!specializationDecl) - { - return; - } - clang::FunctionTemplateDecl* specializedDecl = specializationDecl->getPrimaryTemplate(); // just to check if it is really a template.. can be done differently - if (!specializedDecl) - { - return; - } - - ParseFunction specializationFunction = getParseFunction(specializationDecl); - - if (expr->hasExplicitTemplateArgs()) // handle explicit template args - { - const clang::TemplateArgumentLoc* arguments = expr->getTemplateArgs(); - - for (unsigned int i = 0; i < expr->getNumTemplateArgs(); i++) - { - clang::TemplateArgument argument = arguments[i].getArgument(); - NameHierarchy argumentNameHierarchy = utility::templateArgumentToDataType(argument)->getTypeNameHierarchy(); - if (argumentNameHierarchy.size()) // FIXME: Some TemplateArgument kinds are not handled yet. + const clang::FileEntry* fileEntry = sourceManager.getFileEntryForID(fileId); + if (fileEntry != NULL) { - m_client->onTemplateArgumentTypeOfTemplateFunctionParsed( - getParseLocation(arguments[i].getSourceRange()), - argumentNameHierarchy, - specializationFunction - ); + std::string fielName = fileEntry->getName(); + std::string filePath = FileSystem::absoluteFilePath(fielName); + ret = m_fileRegister->includeFileIsParsing(filePath); } } - } - else // handle implicit template args - { - const clang::TemplateArgumentList* argumentList = specializationDecl->getTemplateSpecializationArgs(); - for (size_t i = 0; i < argumentList->size(); ++i) - { - const clang::TemplateArgument& argument = argumentList->get(i); - NameHierarchy argumentNameHierarchy = utility::templateArgumentToDataType(argument)->getTypeNameHierarchy(); - if (argumentNameHierarchy.size()) // FIXME: Some TemplateArgument kinds are not handled yet. - { - const clang::SourceLocation argumentSourceLoc = clang::Lexer::getLocForEndOfToken( - expr->getLocEnd(), 1, m_context->getSourceManager(), clang::LangOptions() - ); - m_client->onTemplateArgumentTypeOfTemplateFunctionParsed( - getParseLocation(clang::SourceRange(argumentSourceLoc, argumentSourceLoc)), - argumentNameHierarchy, - specializationFunction - ); - } - } - } -} - -void ASTVisitor::processTemplateArguments(clang::TypeLoc typeLoc) -{ - clang::TemplateSpecializationTypeLoc specializationLoc = utility::getNextTypeLoc(typeLoc); - if (!specializationLoc.isNull()) - { - NameHierarchy specializationNameHierarchy = utility::qualTypeToDataType(specializationLoc.getType())->getTypeNameHierarchy(); - - if (!isLocatedInProjectFile(getParseLocation(specializationLoc.getSourceRange()))) - { - return; - } - - for (unsigned int i = 0; i < specializationLoc.getNumArgs(); i++) - { - const clang::TemplateArgument& argument = specializationLoc.getArgLoc(i).getArgument(); - NameHierarchy argumentNameHierarchy = utility::templateArgumentToDataType(argument)->getTypeNameHierarchy(); - if (argumentNameHierarchy.size()) // FIXME: Some TemplateArgument kinds are not handled yet. - { - m_client->onTemplateArgumentTypeOfTemplateRecordParsed( - getParseLocationForTokensInRange(specializationLoc.getArgLoc(i).getSourceRange()), - argumentNameHierarchy, - specializationNameHierarchy - ); - } - } - } -} - -bool ASTVisitor::isLocatedInUnparsedProjectFile(const clang::Decl* declaration) const -{ - const clang::SourceLocation& location = declaration->getLocStart(); - - if (!location.isValid()) - { - return false; - } - - if (m_context->getSourceManager().isWrittenInMainFile(location)) - { - return true; - } - - return m_fileRegister->includeFileIsParsing(FilePath(m_context->getSourceManager().getFilename(location))); -} - -bool ASTVisitor::isLocatedInProjectFile(const ParseLocation& location) const -{ - if (location.isValid()) - { - return m_fileRegister->getFileManager()->hasFilePath(location.filePath); + m_inUnparsedProjectFileMap[fileId] = ret; + return ret; } return false; } -bool ASTVisitor::isLocatedInProjectFile(const clang::Decl* declaration) const +bool ASTVisitor::isLocatedInProjectFile(clang::SourceLocation loc) { - const clang::SourceLocation& location = declaration->getLocStart(); - if (location.isValid()) + clang::SourceManager& sourceManager = m_context->getSourceManager(); + clang::SourceLocation spellingLoc = sourceManager.getSpellingLoc(loc); + + clang::FileID fileId; + + if (spellingLoc.isValid()) { - const clang::SourceManager& sourceManager = m_context->getSourceManager(); - std::string filePath = FileSystem::absoluteFilePath(sourceManager.getFilename(location)); - return m_fileRegister->getFileManager()->hasFilePath(filePath); + fileId = sourceManager.getFileID(spellingLoc); + } + if (!fileId.isInvalid()) + { + + auto it = m_inProjectFileMap.find(fileId); + if (it != m_inProjectFileMap.end()) + { + return it->second; + } + + const clang::FileEntry* fileEntry = sourceManager.getFileEntryForID(fileId); + if (fileEntry != NULL) + { + std::string fielName = fileEntry->getName(); + std::string filePath = FileSystem::absoluteFilePath(fielName); + bool ret = m_fileRegister->getFileManager()->hasFilePath(filePath); + m_inProjectFileMap[fileId] = ret; + return ret; + } } return false; } @@ -921,92 +1482,6 @@ ParserClient::AbstractionType ASTVisitor::getAbstractionType(const clang::CXXMet return abstraction; } -ParseLocation ASTVisitor::getParseLocation(const clang::SourceRange& sourceRange) const -{ - if (sourceRange.isInvalid()) - { - return ParseLocation(); - } - - const clang::SourceManager& sourceManager = m_context->getSourceManager(); - const clang::PresumedLoc& presumedBegin = sourceManager.getPresumedLoc(sourceRange.getBegin(), false); - const clang::PresumedLoc& presumedEnd = sourceManager.getPresumedLoc(sourceRange.getEnd(), false); - - return ParseLocation( - presumedBegin.getFilename(), - presumedBegin.getLine(), - presumedBegin.getColumn(), - presumedEnd.getLine(), - presumedEnd.getColumn() - ); -} - -ParseLocation ASTVisitor::getParseLocationForTokenAtLocation(const clang::SourceLocation& loc) const -{ - return getParseLocationForTokensInRange(clang::SourceRange(loc, loc)); -} - -ParseLocation ASTVisitor::getParseLocationForTokensInRange(const clang::SourceRange& range) const -{ - if (range.isInvalid()) - { - return ParseLocation(); - } - - const clang::SourceManager& sourceManager = m_context->getSourceManager(); - - clang::SourceLocation startLoc = clang::Lexer::GetBeginningOfToken(range.getBegin(), sourceManager, clang::LangOptions()); - clang::SourceLocation endLoc = clang::Lexer::getLocForEndOfToken(range.getEnd(), 1, sourceManager, clang::LangOptions()); - - const clang::PresumedLoc& presumedBegin = sourceManager.getPresumedLoc(startLoc); - if (endLoc.isValid()) - { - const clang::PresumedLoc& presumedEnd = sourceManager.getPresumedLoc(endLoc); - return ParseLocation( - presumedBegin.getFilename(), - presumedBegin.getLine(), - presumedBegin.getColumn(), - presumedEnd.getLine(), - presumedEnd.getColumn() - ); - } - - uint tokenLength = clang::Lexer::MeasureTokenLength(range.getEnd(), sourceManager, clang::LangOptions()); - return ParseLocation( - presumedBegin.getFilename(), - presumedBegin.getLine(), - presumedBegin.getColumn(), - presumedBegin.getLine(), - presumedBegin.getColumn() + tokenLength - 1 - ); -} - -ParseLocation ASTVisitor::getParseLocationForNamedDecl(const clang::NamedDecl* decl) const -{ - return getParseLocationForTokenAtLocation(decl->getLocation()); -} - -ParseLocation ASTVisitor::getParseLocationOfFunctionBody(const clang::FunctionDecl* decl) const -{ - if (decl->hasBody() && decl->isThisDeclarationADefinition()) - { - clang::SourceRange range; - clang::FunctionTemplateDecl* templateDecl = decl->getDescribedFunctionTemplate(); - if (templateDecl) - { - range = templateDecl->getSourceRange(); - } - else - { - range = decl->getSourceRange(); - } - - return getParseLocation(range); - } - - return ParseLocation(); -} - ParseLocation ASTVisitor::getParseLocationOfRecordBody(clang::RecordDecl* decl) const { @@ -1032,144 +1507,44 @@ ParseLocation ASTVisitor::getParseLocationOfRecordBody(clang::RecordDecl* decl) return ParseLocation(); } -ParseTypeUsage ASTVisitor::getParseTypeUsage(const clang::TypeLoc& typeLoc, const clang::QualType& type) const +ParseLocation ASTVisitor::getParseLocationOfFunctionBody(const clang::FunctionDecl* decl) const { - std::shared_ptr dataType = utility::qualTypeToDataType(type); - return getParseTypeUsage(typeLoc, dataType); -} - -ParseTypeUsage ASTVisitor::getParseTypeUsage(const clang::TypeLoc& typeLoc, const std::shared_ptr type) const -{ - ParseLocation parseLocation; - - if (!typeLoc.isNull()) + if (decl->hasBody() && decl->isThisDeclarationADefinition()) { - clang::SourceRange sr( - typeLoc.getLocStart(), - clang::Lexer::getLocForEndOfToken(typeLoc.getLocEnd(), 0, m_context->getSourceManager(), clang::LangOptions()) - ); - - parseLocation = getParseLocation(sr); - parseLocation.endColumnNumber -= 1; - } - - return ParseTypeUsage(parseLocation, type); -} - -ParseTypeUsage ASTVisitor::getParseTypeUsage(const clang::SourceRange& sourceRange, const std::shared_ptr type) const -{ - ParseLocation parseLocation; - - if (sourceRange.isValid()) - { - clang::SourceRange sr( - sourceRange.getBegin(), - clang::Lexer::getLocForEndOfToken(sourceRange.getEnd(), 0, m_context->getSourceManager(), clang::LangOptions()) - ); - - parseLocation = getParseLocation(sr); - parseLocation.endColumnNumber -= 1; - } - - return ParseTypeUsage(parseLocation, type); -} - -ParseTypeUsage ASTVisitor::getParseTypeUsageOfReturnType(const clang::FunctionDecl* declaration) const -{ - clang::TypeLoc typeLoc; - - const clang::TypeSourceInfo *TSI = declaration->getTypeSourceInfo(); - if (TSI) - { - const clang::FunctionTypeLoc FTL = TSI->getTypeLoc().IgnoreParens().getAs(); - if (FTL) + clang::SourceRange range; + clang::FunctionTemplateDecl* templateDecl = decl->getDescribedFunctionTemplate(); + if (templateDecl) { - typeLoc = FTL.getReturnLoc(); + range = templateDecl->getSourceRange(); } - } - - return getParseTypeUsage(typeLoc, declaration->getReturnType()); -} - -std::vector ASTVisitor::getParameters(const clang::FunctionDecl* declaration) const -{ - std::vector parameters; - - for (unsigned i = 0; i < declaration->getNumParams(); i++) - { - const clang::ParmVarDecl* paramDecl = declaration->getParamDecl(i); - if (paramDecl->getTypeSourceInfo()) + else { - parameters.push_back(getParseTypeUsage(paramDecl->getTypeSourceInfo()->getTypeLoc(), paramDecl->getType())); + range = decl->getSourceRange(); } + + return getParseLocation(range); } - return parameters; + return ParseLocation(); } -ParseVariable ASTVisitor::getParseVariable(const clang::DeclaratorDecl* declaration) +ParseLocation ASTVisitor::getParseLocation(const clang::SourceRange& sourceRange) const { - bool isStatic = false; - NameHierarchy hameHierarchy = getDeclNameHierarchy(declaration); - if (clang::isa(declaration)) + if (sourceRange.isInvalid()) { - const clang::VarDecl* varDecl = clang::dyn_cast(declaration); - isStatic = varDecl->isStaticDataMember() || varDecl->getStorageClass() == clang::SC_Static; - } - else if (clang::isa(declaration)) - { - isStatic = false; // fieldDecls cannot be static. If they are, they are treated as VarDecls + return ParseLocation(); } - return ParseVariable( - getParseTypeUsage(declaration->getTypeSourceInfo()->getTypeLoc(), declaration->getType()), - hameHierarchy, - isStatic + const clang::SourceManager& sourceManager = m_context->getSourceManager(); + + const clang::PresumedLoc& presumedBegin = sourceManager.getPresumedLoc(sourceRange.getBegin(), false); + const clang::PresumedLoc& presumedEnd = sourceManager.getPresumedLoc(sourceRange.getEnd(), false); + + return ParseLocation( + presumedBegin.getFilename(), + presumedBegin.getLine(), + presumedBegin.getColumn(), + presumedEnd.getLine(), + presumedEnd.getColumn() ); } - -ParseFunction ASTVisitor::getParseFunction(const clang::FunctionDecl* declaration) -{ - bool isStatic = false; - bool isConst = false; - - if (clang::isa(declaration)) - { - const clang::CXXMethodDecl* methodDecl = clang::dyn_cast(declaration); - isStatic = methodDecl->isStatic(); - isConst = methodDecl->isConst(); - } - else - { - isStatic = declaration->getStorageClass() == clang::SC_Static; - } - - return ParseFunction( - getParseTypeUsageOfReturnType(declaration), - getDeclNameHierarchy(declaration), - getParameters(declaration), - isStatic, - isConst - ); -} - -ParseFunction ASTVisitor::getParseFunction(const clang::FunctionTemplateDecl* declaration) -{ - return getParseFunction(declaration->getTemplatedDecl()); -} - -NameHierarchy ASTVisitor::getDeclNameHierarchy(const clang::Decl* decl) -{ - NameHierarchy nameHierarchy; - std::unordered_map::const_iterator it = m_nameCache.find(decl); - if (it != m_nameCache.end()) - { - nameHierarchy = it->second; - } - else - { - nameHierarchy = utility::getDeclNameHierarchy(decl); - m_nameCache[decl] = nameHierarchy; - } - return nameHierarchy; -} diff --git a/src/lib_parser/data/parser/cxx/ASTVisitor.h b/src/lib_parser/data/parser/cxx/ASTVisitor.h index 89610a59..3a055f51 100644 --- a/src/lib_parser/data/parser/cxx/ASTVisitor.h +++ b/src/lib_parser/data/parser/cxx/ASTVisitor.h @@ -4,108 +4,320 @@ #include #include "clang/AST/ASTContext.h" -#include "clang/AST/RecursiveASTVisitor.h" +#include +#include +#include +#include "data/parser/ParserClient.h" #include "utility/file/FileRegister.h" -#include "data/parser/cxx/ASTBodyVisitorClient.h" -#include "data/parser/ParserClient.h" -class ASTVisitor - : public clang::RecursiveASTVisitor - , public ASTBodyVisitorClient + +#include "data/parser/cxx/name_resolver/CxxTypeNameResolver.h" +#include "data/parser/cxx/utilityCxx.h" + +class ASTVisitor: clang::RecursiveASTVisitor { public: - ASTVisitor(clang::ASTContext* context, ParserClient* client, FileRegister* fileRegister); - virtual ~ASTVisitor(); + + class TypeNameCache + { + public: + NameHierarchy getName(const clang::Type* type) + { + if (type) + { + NameHierarchy nameHierarchy; + std::unordered_map::const_iterator it = m_typeNameMap.find(type); + if (it != m_typeNameMap.end()) + { + nameHierarchy = it->second; + } + else + { + CxxTypeNameResolver resolver; + nameHierarchy = resolver.getTypeNameHierarchy(type); + m_typeNameMap[type] = nameHierarchy; + } + return nameHierarchy; + } + return NameHierarchy("global"); + } + + private: + std::unordered_map m_typeNameMap; + }; + + class DeclNameCache + { + public: + NameHierarchy getName(const clang::NamedDecl* decl) + { + if (decl) + { + NameHierarchy nameHierarchy; + std::unordered_map::const_iterator it = m_declNameCache.find(decl); + if (it != m_declNameCache.end()) + { + nameHierarchy = it->second; + } + else + { + nameHierarchy = utility::getDeclNameHierarchy(decl); + m_declNameCache[decl] = nameHierarchy; + } + return nameHierarchy; + } + return NameHierarchy("global"); + } + + private: + std::unordered_map m_declNameCache; + }; + + class ContextNameGenerator + { + public: + virtual ~ContextNameGenerator() {} + virtual NameHierarchy getName() const = 0; + }; + + class ContextDeclNameGenerator: public ContextNameGenerator + { + public: + ContextDeclNameGenerator(const clang::NamedDecl* decl, std::shared_ptr nameCache) + : m_decl(decl) + , m_nameCache(nameCache) + {} + + virtual ~ContextDeclNameGenerator() {} + + virtual NameHierarchy getName() const + { + return m_nameCache->getName(m_decl); + } + private: + const clang::NamedDecl* m_decl; + std::shared_ptr m_nameCache; + }; + + class ContextTypeNameGenerator: public ContextNameGenerator + { + public: + ContextTypeNameGenerator(const clang::Type* type, std::shared_ptr nameCache) + : m_type(type) + , m_nameCache(nameCache) + {} + + virtual ~ContextTypeNameGenerator() {} + + virtual NameHierarchy getName() const + { + return m_nameCache->getName(m_type); + } + private: + const clang::Type* m_type; + std::shared_ptr m_nameCache; + }; + + + + + ASTVisitor(clang::ASTContext* context, clang::Preprocessor* preprocessor, ParserClient* client, FileRegister* fileRegister); // Left for debugging purposes. Uncomment to see a colored ast-dump of the parsed file. - // virtual bool VisitTranslationUnitDecl(clang::TranslationUnitDecl* decl) - // { - // decl->dump(); - // return true; - // } + virtual bool VisitTranslationUnitDecl(clang::TranslationUnitDecl* decl); - // RecursiveASTVisitor implementation - virtual bool VisitStmt(const clang::Stmt* statement); // avoid visiting - virtual bool VisitTypedefDecl(clang::TypedefDecl* declaration); // typedefs - virtual bool VisitRecordDecl(clang::RecordDecl* declaration); - virtual bool VisitVarDecl(clang::VarDecl* declaration); // global variables and static fields - virtual bool VisitFieldDecl(clang::FieldDecl* declaration); // fields - virtual bool VisitFunctionDecl(clang::FunctionDecl* declaration); // functions - virtual bool VisitLambdaExpr(clang::LambdaExpr* expr); // lambdas - virtual bool VisitParmVarDecl(clang::ParmVarDecl* declaration); - virtual bool VisitCXXMethodDecl(clang::CXXMethodDecl* declaration); // methods - virtual bool VisitCXXConstructorDecl(clang::CXXConstructorDecl* declaration); // initialization list - virtual bool VisitNamespaceDecl(clang::NamespaceDecl* declaration); // namespaces - virtual bool VisitEnumDecl(clang::EnumDecl* declaration); // enums - virtual bool VisitEnumConstantDecl(clang::EnumConstantDecl* declaration); // enum fields - - virtual bool VisitTemplateTypeParmDecl(clang::TemplateTypeParmDecl *declaration); - virtual bool VisitTemplateTemplateParmDecl(clang::TemplateTemplateParmDecl *declaration); - virtual bool VisitClassTemplateDecl(clang::ClassTemplateDecl* declaration); - virtual bool VisitClassTemplatePartialSpecializationDecl(clang::ClassTemplatePartialSpecializationDecl* declaration); - virtual bool VisitFunctionTemplateDecl(clang::FunctionTemplateDecl *declaration); - - // ASTBodyVisitorClient implementation - virtual void VisitCallExprInDeclBody(clang::FunctionDecl* decl, clang::CallExpr* expr); // calls - virtual void VisitCallExprInDeclBody(clang::DeclaratorDecl* decl, clang::CallExpr* expr); // calls in initialization of global variables - virtual void VisitDeclRefExprInDeclBody(clang::FunctionDecl* decl, clang::DeclRefExpr* expr); - virtual void VisitDeclRefExprInDeclBody(clang::DeclaratorDecl* decl, clang::DeclRefExpr* expr); - virtual void VisitCXXConstructExprInDeclBody(clang::FunctionDecl* decl, clang::CXXConstructExpr* expr); // constructor calls - virtual void VisitCXXConstructExprInDeclBody(clang::DeclaratorDecl* decl, clang::CXXConstructExpr* expr); // constructor calls of global variables - virtual void VisitExplicitCastExprInDeclBody(clang::FunctionDecl* decl, clang::ExplicitCastExpr* expr); - virtual void VisitExplicitCastExprInDeclBody(clang::DeclaratorDecl* decl, clang::ExplicitCastExpr* expr); - virtual void VisitCXXTemporaryObjectExprInDeclBody(clang::FunctionDecl* decl, clang::CXXTemporaryObjectExpr* expr); - virtual void VisitCXXTemporaryObjectExprInDeclBody(clang::DeclaratorDecl* decl, clang::CXXTemporaryObjectExpr* expr); - virtual void VisitCXXNewExprInDeclBody(clang::FunctionDecl* decl, clang::CXXNewExpr* expr); // type use of new operator - virtual void VisitCXXNewExprInDeclBody(clang::DeclaratorDecl* decl, clang::CXXNewExpr* expr); // type use of new operator in global space - virtual void VisitMemberExprInDeclBody(clang::FunctionDecl* decl, clang::MemberExpr* expr); // field usages - virtual void VisitMemberExprInDeclBody(clang::DeclaratorDecl* decl, clang::MemberExpr* expr); // field usages - virtual void VisitGlobalVariableExprInDeclBody(clang::FunctionDecl* decl, clang::DeclRefExpr* expr); // global variable usage - virtual void VisitGlobalVariableExprInDeclBody(clang::DeclaratorDecl* decl, clang::DeclRefExpr* expr); // global variable usage - virtual void VisitEnumExprInDeclBody(clang::FunctionDecl* decl, clang::DeclRefExpr* expr); // enum field usage - virtual void VisitEnumExprInDeclBody(clang::DeclaratorDecl* decl, clang::DeclRefExpr* expr); // enum field usage in global variable - virtual void VisitVarDeclInDeclBody(clang::FunctionDecl* decl, clang::VarDecl* varDecl); // type usages + void indexDecl(clang::Decl *d) { TraverseDecl(d); } private: - void processFunctionDecl(clang::FunctionDecl* declaration); - void processTemplateArgumentsOfExplicitSpecialization(clang::FunctionDecl* declaration); - void processTemplateArgumentsOfExplicitSpecialization(clang::ClassTemplateSpecializationDecl* specializationDecl); - void processTemplateArguments(clang::DeclRefExpr* expr); - void processTemplateArguments(clang::TypeLoc loc); + typedef clang::RecursiveASTVisitor base; + friend class clang::RecursiveASTVisitor; - bool isLocatedInUnparsedProjectFile(const clang::Decl* declaration) const; - bool isLocatedInProjectFile(const ParseLocation& location) const; - bool isLocatedInProjectFile(const clang::Decl* declaration) const; + // XXX: The CF_Read flag is useful mostly for lvalues -- for rvalues, we + // don't set the CF_Read flag, but the rvalue is assumed to be read anyway. - ParserClient::AccessType convertAccessType(clang::AccessSpecifier) const; - ParserClient::AbstractionType getAbstractionType(const clang::CXXMethodDecl* methodDecl) const; + enum ContextFlags { + CF_Called = 0x1, // the value is read only to be called + CF_Read = 0x2, // the value is read for any other use + CF_AddressTaken = 0x4, // the gl-value's address escapes + CF_Assigned = 0x8, // the gl-value is assigned to + CF_Modified = 0x10 // the gl-value is updated (i.e. compound assignment) + }; - ParseLocation getParseLocation(const clang::SourceRange& sourceRange) const; - ParseLocation getParseLocationForTokenAtLocation(const clang::SourceLocation& loc) const; - ParseLocation getParseLocationForTokensInRange(const clang::SourceRange& range) const; - ParseLocation getParseLocationForNamedDecl(const clang::NamedDecl* decl) const; - ParseLocation getParseLocationOfFunctionBody(const clang::FunctionDecl* decl) const; - ParseLocation getParseLocationOfRecordBody(clang::RecordDecl* decl) const; + enum RefType : int { + RT_AddressTaken, + RT_Assigned, + RT_BaseClass, + RT_Called, + RT_Declaration, + RT_DefinedTest, + RT_Definition, + RT_Expansion, + RT_Included, + RT_Initialized, + RT_Modified, + RT_NamespaceAlias, + RT_Other, + RT_Qualifier, + RT_Read, + RT_Reference, + RT_TemplateArgument, + RT_TemplateDefaultArgument, + RT_Undefinition, + RT_Using, + RT_UsingDirective, + RT_Max + }; - ParseTypeUsage getParseTypeUsage(const clang::TypeLoc& typeLoc, const clang::QualType& type) const; - ParseTypeUsage getParseTypeUsage(const clang::TypeLoc& typeLoc, const std::shared_ptr type) const; - ParseTypeUsage getParseTypeUsage(const clang::SourceRange& sourceRange, const std::shared_ptr type) const; - ParseTypeUsage getParseTypeUsageOfReturnType(const clang::FunctionDecl* declaration) const; - std::vector getParameters(const clang::FunctionDecl* declaration) const; + enum SymbolType : int { // we dont need this. decl already knows it! + ST_Class, + ST_ClassTemplateSpecialization, + ST_Constructor, + ST_Destructor, + ST_Enum, + ST_Enumerator, + ST_Field, + ST_Function, + ST_FunctionTemplateSpecialization, + ST_GlobalVariable, + ST_LocalVariable, + ST_Macro, + ST_Method, + ST_Namespace, + ST_Parameter, + ST_Path, + ST_Struct, + ST_Typedef, + ST_TemplateParameter, + ST_Union, + ST_Max + }; - ParseVariable getParseVariable(const clang::DeclaratorDecl* declaration); - ParseFunction getParseFunction(const clang::FunctionDecl* declaration); - ParseFunction getParseFunction(const clang::FunctionTemplateDecl* declaration); + struct Location { + unsigned int fileID; + unsigned int line; // 1-based + int column; // 1-based + }; - NameHierarchy getDeclNameHierarchy(const clang::Decl* decl); + typedef unsigned int Context; clang::ASTContext* m_context; + clang::Preprocessor* m_preprocessor; ParserClient* m_client; FileRegister* m_fileRegister; - std::unordered_map m_nameCache; + + Context m_thisContext; + Context m_childContext; + RefType m_typeContext; + + // Misc routines + bool shouldVisitTemplateInstantiations() const { return true; } + bool shouldUseDataRecursionFor(clang::Stmt *s) const; + + // Dispatcher routines + bool TraverseStmt(clang::Stmt *stmt); + bool TraverseType(clang::QualType t); + bool TraverseTypeLoc(clang::TypeLoc tl); + bool TraverseDecl(clang::Decl *d); + bool TraverseLambdaExpr(clang::LambdaExpr* e); + bool TraverseFunctionDecl(clang::FunctionDecl* d); + bool TraverseTypedefDecl(clang::TypedefDecl *d); + bool TraverseFieldDecl(clang::FieldDecl *d); + bool TraverseVarDecl(clang::VarDecl *d); + bool TraverseClassTemplateDecl(clang::ClassTemplateDecl* d); + bool TraverseTemplateTypeParmDecl(clang::TemplateTypeParmDecl* d); + bool TraverseTemplateTemplateParmDecl(clang::TemplateTemplateParmDecl* d); + bool TraverseClassTemplatePartialSpecializationDecl(clang::ClassTemplatePartialSpecializationDecl* d); + bool TraverseDeclRefExpr(clang::DeclRefExpr* expr); + bool TraverseTemplateSpecializationTypeLoc(clang::TemplateSpecializationTypeLoc loc); + bool TraverseTemplateArgumentLoc(const clang::TemplateArgumentLoc& loc); + + // Expression context propagation + bool TraverseCallExpr(clang::CallExpr *e) { return TraverseCallCommon(e); } + bool TraverseCXXMemberCallExpr(clang::CXXMemberCallExpr *e) { return TraverseCallCommon(e); } + bool TraverseCXXOperatorCallExpr(clang::CXXOperatorCallExpr *e) { return TraverseCallCommon(e); } + bool TraverseBinComma(clang::BinaryOperator *s); + bool TraverseBinAssign(clang::BinaryOperator *e) { return TraverseAssignCommon(e, CF_Assigned); } +#define OPERATOR(NAME) bool TraverseBin##NAME##Assign(clang::CompoundAssignOperator *e) { return TraverseAssignCommon(e, CF_Modified); } + OPERATOR(Mul) OPERATOR(Div) OPERATOR(Rem) OPERATOR(Add) OPERATOR(Sub) + OPERATOR(Shl) OPERATOR(Shr) OPERATOR(And) OPERATOR(Or) OPERATOR(Xor) +#undef OPERATOR + bool VisitParenExpr(clang::ParenExpr *e) { m_childContext = m_thisContext; return true; } + bool VisitCastExpr(clang::CastExpr *e); + bool VisitUnaryAddrOf(clang::UnaryOperator *e); + bool VisitUnaryDeref(clang::UnaryOperator *e); + bool VisitDeclStmt(clang::DeclStmt *s); + bool VisitReturnStmt(clang::ReturnStmt *s); + bool VisitVarDecl(clang::VarDecl *d); + bool VisitInitListExpr(clang::InitListExpr *e); + bool TraverseConstructorInitializer(clang::CXXCtorInitializer *init); + bool TraverseCallCommon(clang::CallExpr *call); + bool TraverseAssignCommon(clang::BinaryOperator *e, ContextFlags lhsFlag); + + // Expression reference recording + bool VisitLambdaExpr(clang::LambdaExpr* e); + bool VisitMemberExpr(clang::MemberExpr *e); + bool VisitDeclRefExpr(clang::DeclRefExpr *e); + bool VisitCXXConstructExpr(clang::CXXConstructExpr *e); + void RecordDeclRefExpr(clang::NamedDecl *d, clang::SourceLocation loc, clang::Expr *e, Context context); + + // NestedNameSpecifier handling + bool TraverseNestedNameSpecifierLoc(clang::NestedNameSpecifierLoc qualifier); + + // Declaration and TypeLoc handling + void traverseDeclContextHelper(clang::DeclContext *d); + bool TraverseCXXRecordDecl(clang::CXXRecordDecl *d); + bool TraverseNamespaceAliasDecl(clang::NamespaceAliasDecl *d); + bool TraverseClassTemplateSpecializationDecl( + clang::ClassTemplateSpecializationDecl *d); + void templateParameterListsHelper(clang::DeclaratorDecl *d); + bool VisitDecl(clang::Decl *d); + bool VisitTypeLoc(clang::TypeLoc tl); + + // Reference recording + ParseLocation getDeclRefRange( + clang::NamedDecl *decl, + clang::SourceLocation loc); + + void RecordTypeRef( + const clang::Type* type, + clang::SourceLocation beginLoc, + RefType refType, + SymbolType symbolType = ST_Max); + + void RecordDeclRef( + clang::NamedDecl *d, + clang::SourceLocation beginLoc, + RefType refType, + SymbolType symbolType = ST_Max); + + bool isLocatedInUnparsedProjectFile(clang::SourceLocation loc); + bool isLocatedInProjectFile(clang::SourceLocation loc); + + ParserClient::AccessType convertAccessType(clang::AccessSpecifier access) const; + ParserClient::AbstractionType getAbstractionType(const clang::CXXMethodDecl* methodDecl) const; + ParseLocation getParseLocationOfRecordBody(clang::RecordDecl* decl) const; + ParseLocation getParseLocationOfFunctionBody(const clang::FunctionDecl* decl) const; + ParseLocation getParseLocation(const clang::SourceRange& sourceRange) const; + + struct FileIdHash { + size_t operator()(clang::FileID fileID) const { + return fileID.getHashValue(); + } + }; + + std::unordered_map m_inUnparsedProjectFileMap; + std::unordered_map m_inProjectFileMap; + + std::shared_ptr m_contextNameGenerator; + std::shared_ptr m_childContextNameGenerator; + + std::shared_ptr m_declNameCache; + std::shared_ptr m_typeNameCache; + + ParserClient::AccessType m_contextAccess; }; #endif // AST_VISITOR_H diff --git a/src/lib_parser/data/parser/cxx/name_resolver/CxxDeclNameResolver.cpp b/src/lib_parser/data/parser/cxx/name_resolver/CxxDeclNameResolver.cpp index 64f6e691..2b29e2e9 100644 --- a/src/lib_parser/data/parser/cxx/name_resolver/CxxDeclNameResolver.cpp +++ b/src/lib_parser/data/parser/cxx/name_resolver/CxxDeclNameResolver.cpp @@ -54,7 +54,7 @@ NameHierarchy CxxDeclNameResolver::getContextNameHierarchy(const clang::DeclCont { NameHierarchy contextNameHierarchy; - if (!ignoresContext(declContext)) + if (declContext && !ignoresContext(declContext)) { const clang::DeclContext* parentContext = declContext->getParent(); if (parentContext) @@ -139,7 +139,7 @@ std::shared_ptr CxxDeclNameResolver::getDeclName() const clang::SourceManager& sourceManager = declaration->getASTContext().getSourceManager(); const clang::PresumedLoc& presumedBegin = sourceManager.getPresumedLoc(recordDecl->getLocStart()); std::string lambdaName = "lambda at " + std::to_string(presumedBegin.getLine()) + ":" + std::to_string(presumedBegin.getColumn()); - return std::make_shared(lambdaName, lambdaName); + return std::make_shared(lambdaName, NameElement::Signature("void", "()")); } else if (declNameString.size() == 0) { @@ -160,15 +160,16 @@ std::shared_ptr CxxDeclNameResolver::getDeclName() } } - const clang::FunctionDecl* functionDecl = clang::dyn_cast(declaration); + std::string functionName; + const clang::FunctionDecl* functionDecl = clang::dyn_cast(declaration); if (clang::FunctionTemplateDecl* templateFunctionDeclaration = functionDecl->getDescribedFunctionTemplate()) { - return getDeclName(templateFunctionDeclaration); + functionName = getDeclName(templateFunctionDeclaration)->getName(); } - else + else { - std::string functionName = declNameString; + functionName = declNameString; if (functionDecl->isFunctionTemplateSpecialization()) { std::string templateArgumentNamePart = "<"; @@ -182,40 +183,40 @@ std::shared_ptr CxxDeclNameResolver::getDeclName() templateArgumentNamePart += ">"; functionName += templateArgumentNamePart; } - - bool isStatic = false; - bool isConst = false; - - if (clang::isa(declaration)) - { - const clang::CXXMethodDecl* methodDecl = clang::dyn_cast(declaration); - isStatic = methodDecl->isStatic(); - isConst = methodDecl->isConst(); - } - else - { - isStatic = functionDecl->getStorageClass() == clang::SC_Static; - } - - CxxTypeNameResolver typenNameResolver(getIgnoredContextDecls()); - typenNameResolver.ignoreContextDecl(functionDecl); - std::string returnTypeString = typenNameResolver.qualTypeToDataType(functionDecl->getReturnType())->getFullTypeName(); - - std::string parameterString = "("; - for (unsigned int i = 0; i < functionDecl->param_size(); i++) - { - parameterString += typenNameResolver.qualTypeToDataType(functionDecl->parameters()[i]->getType())->getFullTypeName(); - if (i < functionDecl->param_size() - 1) - { - parameterString += ", "; - } - } - parameterString += ")"; - - return std::make_shared( - functionName, - (isStatic ? "static " : "") + returnTypeString + " " + functionName + parameterString + (isConst ? " const" : "")); } + + bool isStatic = false; + bool isConst = false; + + if (clang::isa(declaration)) + { + const clang::CXXMethodDecl* methodDecl = clang::dyn_cast(declaration); + isStatic = methodDecl->isStatic(); + isConst = methodDecl->isConst(); + } + else + { + isStatic = functionDecl->getStorageClass() == clang::SC_Static; + } + + CxxTypeNameResolver typenNameResolver(getIgnoredContextDecls()); + typenNameResolver.ignoreContextDecl(functionDecl); + std::string returnTypeString = typenNameResolver.qualTypeToDataType(functionDecl->getReturnType())->getFullTypeName(); + + std::string parameterString = "("; + for (unsigned int i = 0; i < functionDecl->param_size(); i++) + { + if (i > 0) + { + parameterString += ", "; + } + parameterString += typenNameResolver.qualTypeToDataType(functionDecl->parameters()[i]->getType())->getFullTypeName(); + } + parameterString += ")"; + + return std::make_shared( + functionName, + NameElement::Signature((isStatic ? "static " : "") + returnTypeString, parameterString + (isConst ? " const" : ""))); } else if (clang::isa(declaration)) // also triggers on TemplateTemplateParmDecl diff --git a/src/lib_parser/data/parser/cxx/name_resolver/CxxTypeNameResolver.cpp b/src/lib_parser/data/parser/cxx/name_resolver/CxxTypeNameResolver.cpp index 2a14aeed..e1e5b27d 100644 --- a/src/lib_parser/data/parser/cxx/name_resolver/CxxTypeNameResolver.cpp +++ b/src/lib_parser/data/parser/cxx/name_resolver/CxxTypeNameResolver.cpp @@ -134,11 +134,11 @@ std::shared_ptr CxxTypeNameResolver::typeToDataType(const clang::Type* } templateArgumentNamePart += ">"; - std::string declName = typeNameHerarchy.back()->getFullName(); + std::string declName = typeNameHerarchy.back()->getName(); declName = declName.substr(0, declName.rfind("<")); // remove template parameters declName += templateArgumentNamePart; // add template arguments typeNameHerarchy.pop(); - typeNameHerarchy.push(std::make_shared(declName)); + typeNameHerarchy.push(std::make_shared(declName)); // templateSpecialization has no signature. } } dataType = std::make_shared(typeNameHerarchy); @@ -219,6 +219,11 @@ std::shared_ptr CxxTypeNameResolver::typeToDataType(const clang::Type* return dataType; } +NameHierarchy CxxTypeNameResolver::getTypeNameHierarchy(const clang::Type* type) +{ + return typeToDataType(type)->getTypeNameHierarchy(); +} + NameHierarchy CxxTypeNameResolver::getNameHierarchy(const clang::NestedNameSpecifier* nestedNameSpecifier) { clang::NestedNameSpecifier::SpecifierKind nnsKind = nestedNameSpecifier->getKind(); diff --git a/src/lib_parser/data/parser/cxx/name_resolver/CxxTypeNameResolver.h b/src/lib_parser/data/parser/cxx/name_resolver/CxxTypeNameResolver.h index 6f32e49e..0c94e9c1 100644 --- a/src/lib_parser/data/parser/cxx/name_resolver/CxxTypeNameResolver.h +++ b/src/lib_parser/data/parser/cxx/name_resolver/CxxTypeNameResolver.h @@ -12,6 +12,7 @@ public: virtual ~CxxTypeNameResolver(); std::shared_ptr qualTypeToDataType(clang::QualType qualType); + NameHierarchy getTypeNameHierarchy(const clang::Type* type); private: std::shared_ptr typeToDataType(const clang::Type* type); diff --git a/src/test/CxxParserTestSuite.h b/src/test/CxxParserTestSuite.h index ee307027..2684b9af 100644 --- a/src/test/CxxParserTestSuite.h +++ b/src/test/CxxParserTestSuite.h @@ -18,6 +18,9 @@ class CxxParserTestSuite: public CxxTest::TestSuite { public: +/////////////////////////////////////////////////////////////////////////////// +// test finding symbol definitions and declarations + void test_cxx_parser_finds_global_class_definition() { std::shared_ptr client = parseCode( @@ -30,7 +33,7 @@ public: TS_ASSERT_EQUALS(client->classes[0], "A <1:1 <1:7 1:7> 3:1>"); } - void test_cxx_parser_finds_global_class_forward_declaration() + void test_cxx_parser_finds_global_class_declaration() { std::shared_ptr client = parseCode( "class A;\n" @@ -40,7 +43,695 @@ public: TS_ASSERT_EQUALS(client->classes[0], "A <1:7 1:7>"); } - void test_cxx_parser_finds_nested_class_definition() + void test_cxx_parser_finds_global_struct_definition() + { + std::shared_ptr client = parseCode( + "struct A\n" + "{\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->structs.size(), 1); + TS_ASSERT_EQUALS(client->structs[0], "A <1:1 <1:8 1:8> 3:1>"); + } + + void test_cxx_parser_finds_global_struct_declaration() + { + std::shared_ptr client = parseCode( + "struct A;\n" + ); + + TS_ASSERT_EQUALS(client->structs.size(), 1); + TS_ASSERT_EQUALS(client->structs[0], "A <1:8 1:8>"); + } + + void test_cxx_parser_finds_variable_definitions_in_global_scope() + { + std::shared_ptr client = parseCode( + "int x;\n" + ); + + TS_ASSERT_EQUALS(client->globalVariables.size(), 1); + TS_ASSERT_EQUALS(client->globalVariables[0], "x <1:5 1:5>"); + } + + void test_cxx_parser_finds_fields_in_class_with_access_type() + { + std::shared_ptr client = parseCode( + "class A\n" + "{\n" + " int a;" + "public:\n" + " A() : d(0) {};\n" + " int b;" + "protected:\n" + " static int c;\n" + "private:\n" + " const int d;\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->fields.size(), 4); + TS_ASSERT_EQUALS(client->fields[0], "private A::a <3:6 3:6>"); + TS_ASSERT_EQUALS(client->fields[1], "public A::b <5:6 5:6>"); + TS_ASSERT_EQUALS(client->fields[2], "protected A::c <6:13 6:13>"); + TS_ASSERT_EQUALS(client->fields[3], "private A::d <8:12 8:12>"); + } + + void test_cxx_parser_finds_function_declaration() + { + std::shared_ptr client = parseCode( + "int ceil(float a)\n" + "{\n" + " return 1;\n" + "}\n" + ); + + TS_ASSERT_EQUALS(client->functions.size(), 1); + TS_ASSERT_EQUALS(client->functions[0], "int ceil(float) <1:1 <1:5 1:8> 4:1>"); + } + + void test_cxx_parser_finds_static_function_declaration() + { + std::shared_ptr client = parseCode( + "static int ceil(float a)\n" + "{\n" + " return static_cast(a) + 1;\n" + "}\n" + ); + + TS_ASSERT_EQUALS(client->functions.size(), 1); + TS_ASSERT_EQUALS(client->functions[0], "static int ceil(float) <1:1 <1:12 1:15> 4:1>"); + } + + void test_cxx_parser_finds_method_declaration() + { + std::shared_ptr client = parseCode( + "class B\n" + "{\n" + "public:\n" + " B();\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->methods.size(), 1); + TS_ASSERT_EQUALS(client->methods[0], "public void B::B() <4:2 4:2>"); + } + + void test_cxx_parser_finds_method_declaration_and_definition() + { + std::shared_ptr client = parseCode( + "class B\n" + "{\n" + "public:\n" + " B();\n" + "};\n" + "B::B()\n" + "{\n" + "}\n" + ); + + TS_ASSERT_EQUALS(client->methods.size(), 2); + TS_ASSERT_EQUALS(client->methods[0], "public void B::B() <4:2 4:2>"); + TS_ASSERT_EQUALS(client->methods[1], "public void B::B() <6:1 <6:4 6:4> 8:1>"); + } + + void test_cxx_parser_finds_virtual_method_declaration() + { + std::shared_ptr client = parseCode( + "class B\n" + "{\n" + "public:\n" + " virtual void process();\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->methods.size(), 1); + TS_ASSERT_EQUALS(client->methods[0], "public virtual void B::process() <4:15 4:21>"); + } + + void test_cxx_parser_finds_pure_virtual_method_declaration() + { + std::shared_ptr client = parseCode( + "class B\n" + "{\n" + "protected:\n" + " virtual void process() = 0;\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->methods.size(), 1); + TS_ASSERT_EQUALS(client->methods[0], "protected pure virtual void B::process() <4:15 4:21>"); + } + + void test_cxx_parser_finds_named_namespace_declaration() + { + std::shared_ptr client = parseCode( + "namespace A\n" + "{\n" + "}\n" + ); + + TS_ASSERT_EQUALS(client->namespaces.size(), 1); + TS_ASSERT_EQUALS(client->namespaces[0], "A <1:1 <1:11 1:11> 3:1>"); + } + + void test_cxx_parser_finds_anonymous_namespace_declaration() + { + std::shared_ptr client = parseCode( + "namespace\n" + "{\n" + "}\n" + ); + + TS_ASSERT_EQUALS(client->namespaces.size(), 1); + TS_ASSERT_EQUALS(client->namespaces[0], "anonymous namespace (input.cc) <1:1 3:1>"); + } + + void test_cxx_parser_finds_enum_defined_in_global_namespace() + { + std::shared_ptr client = parseCode( + "enum E\n" + "{\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->enums.size(), 1); + TS_ASSERT_EQUALS(client->enums[0], "E <1:1 <1:6 1:6> 3:1>"); + } + + void test_cxx_parser_finds_enum_constant_in_global_enum() + { + std::shared_ptr client = parseCode( + "enum E\n" + "{\n" + " P\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->enumConstants.size(), 1); + TS_ASSERT_EQUALS(client->enumConstants[0], "E::P <3:2 3:2>"); + } + + void test_cxx_parser_finds_typedef_in_global_namespace() + { + std::shared_ptr client = parseCode( + "typedef unsigned int uint;\n" + ); + + TS_ASSERT_EQUALS(client->typedefs.size(), 1); + TS_ASSERT_EQUALS(client->typedefs[0], "uint <1:22 1:25>"); + } + + void test_cxx_parser_finds_typedef_in_named_namespace() + { + std::shared_ptr client = parseCode( + "namespace test\n" + "{\n" + " typedef unsigned int uint;\n" + "}\n" + ); + + TS_ASSERT_EQUALS(client->typedefs.size(), 1); + TS_ASSERT_EQUALS(client->typedefs[0], "test::uint <3:23 3:26>"); + } + + void test_cxx_parser_finds_typedef_in_anonymous_namespace() + { + std::shared_ptr client = parseCode( + "namespace\n" + "{\n" + " typedef unsigned int uint;\n" + "}\n" + ); + + TS_ASSERT_EQUALS(client->typedefs.size(), 1); + TS_ASSERT_EQUALS(client->typedefs[0], "anonymous namespace (input.cc)::uint <3:23 3:26>"); + } + + void test_cxx_parser_finds_macro_define() + { + std::shared_ptr client = parseCode( + "#define PI\n" + "void test()\n" + "{\n" + "};\n" + ); + TS_ASSERT_EQUALS(client->macros.size(), 1); + TS_ASSERT_EQUALS(client->macros[0], "PI <1:9 <1:9 1:10> 1:8>"); + } + + void test_cxx_parser_finds_type_template_parameter_type_of_template_class() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); + TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A::T <1:20 1:20>"); + } + + void test_cxx_parser_finds_type_template_parameter_defined_with_class_keyword() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); + TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A::T <1:17 1:17>"); + } + + void test_cxx_parser_finds_non_type_int_template_parameter_of_template_class() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); + TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A::T <1:15 1:15>"); + } + + void test_cxx_parser_finds_non_type_bool_template_parameter_of_template_class() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); + TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A::T <1:16 1:16>"); + } + + void test_cxx_parser_finds_non_type_custom_pointer_template_parameter_of_template_class() + { + std::shared_ptr client = parseCode( + "class P\n" + "{};\n" + "template \n" + "class A\n" + "{};\n" + ); + + TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); + TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A

::p <3:14 3:14>"); + } + + void test_cxx_parser_finds_non_type_custom_reference_template_parameter_of_template_class() + { + std::shared_ptr client = parseCode( + "class P\n" + "{};\n" + "template \n" + "class A\n" + "{};\n" + ); + + TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); + TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A

::p <3:14 3:14>"); + } + + void test_cxx_parser_finds_non_type_template_parameter_that_depends_on_type_template_parameter_of_template_class() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{};\n" + ); + + TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 2); + TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A::T1 <1:20 1:21>"); + TS_ASSERT_EQUALS(client->templateParameterTypes[1], "A::T2 <1:28 1:29>"); + } + + void test_cxx_parser_finds_non_type_template_parameter_that_depends_on_template_template_parameter_of_template_class() + { + std::shared_ptr client = parseCode( + "template class T1, T1& T2>\n" + "class A\n" + "{};\n" + ); + + TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 2); + TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A typename T1, T1 & T2>::T1 <1:36 1:37>"); + TS_ASSERT_EQUALS(client->templateParameterTypes[1], "A typename T1, T1 & T2>::T2 <1:49 1:50>"); + } + + //void _test_cxx_parser_finds_template_argument_of_dependent_non_type_template_parameter() + //{ + // std::shared_ptr client = parseCode( + // "template class T1, T1& T2>\n" // test that t1 uses int + // "class A\n" + // "{};\n" + // ); + //} + + void test_cxx_parser_finds_template_template_parameter_of_template_class() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{};\n" + "template class T>\n" + "class B\n" + "{};\n" + "int main()\n" + "{\n" + " B ba;\n" + "}\n" + ); + + TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 2); + TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A::T <1:20 1:20>"); + TS_ASSERT_EQUALS(client->templateParameterTypes[1], "B typename T>::T <4:36 4:36>"); + } + + void test_cxx_parser_finds_type_template_parameter_pack_type_of_template_class() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); + TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A::T <1:23 1:23>"); + } + + + + void test_cxx_parser_finds_non_type_int_template_parameter_pack_type_of_template_class() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); + TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A::T <1:18 1:18>"); + } + + void test_cxx_parser_finds_template_template_parameter_pack_type_of_template_class() + { + std::shared_ptr client = parseCode( + "template typename... T>\n" + "class A\n" + "{\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); + TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A typename... T>::T <1:42 1:42>"); + } + + void test_cxx_parser_finds_type_template_parameters_of_template_class_with_multiple_parameters() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 2); + TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A::T <1:20 1:20>"); + TS_ASSERT_EQUALS(client->templateParameterTypes[1], "A::U <1:32 1:32>"); + } + + void test_cxx_parser_skips_creating_node_for_template_parameter_without_a_name() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->classes.size(), 1); + TS_ASSERT_EQUALS(client->classes[0], "A <1:1 <2:7 2:7> 4:1>"); + } + + void test_cxx_parser_finds_type_template_parameter_of_template_method_definition_outside_template_class() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + " template \n" + " U foo();\n" + "};\n" + "template \n" + "template \n" + "U A::foo()\n" + "{}\n" + ); + TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 3); + TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A::foo::U <4:21 4:21>"); + TS_ASSERT_EQUALS(client->templateParameterTypes[1], "A::T <1:20 1:20>"); + TS_ASSERT_EQUALS(client->templateParameterTypes[2], "A::foo::U <8:20 8:20>"); + } + + void test_cxx_parser_finds_class_of_explicit_template_specialization() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + "};\n" + "template <>\n" + "class A\n" + "{\n" + "};\n" + ); + TS_ASSERT_EQUALS(client->classes.size(), 2); + TS_ASSERT_EQUALS(client->classes[0], "A <1:1 <2:7 2:7> 4:1>"); + TS_ASSERT_EQUALS(client->classes[1], "A <5:1 <6:7 6:7> 8:1>"); + } + + void test_cxx_parser_finds_class_of_explicit_partial_template_specialization() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + "};\n" + "template \n" + "class A\n" + "{\n" + "};\n" + ); + TS_ASSERT_EQUALS(client->classes.size(), 2); + TS_ASSERT_EQUALS(client->classes[0], "A <1:1 <2:7 2:7> 4:1>"); + TS_ASSERT_EQUALS(client->classes[1], "A <5:1 <6:7 6:7> 8:1>"); + } + + void test_cxx_parser_finds_correct_name_of_explicit_template_specialization() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + "};\n" + "template \n" + "class A\n" + "{\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->classes.size(), 2); + TS_ASSERT_EQUALS(client->classes[0], "A <1:1 <2:7 2:7> 4:1>"); + TS_ASSERT_EQUALS(client->classes[1], "A <5:1 <6:7 6:7> 8:1>"); + } + + void test_cxx_parser_finds_correct_field_member_name_of_template_class_in_declaration() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + " int foo;\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->fields.size(), 1); + TS_ASSERT_EQUALS(client->fields[0], "private A::foo <4:6 4:8>"); + } + + void test_cxx_parser_finds_correct_type_of_field_member_of_template_class_in_declaration() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + " T foo;\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->fields.size(), 1); + TS_ASSERT_EQUALS(client->fields[0], "private A::foo <4:4 4:6>"); + } + + void test_cxx_parser_finds_correct_method_member_name_of_template_class_in_declaration() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + " int foo();\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->methods.size(), 1); + TS_ASSERT_EQUALS(client->methods[0], "private int A::foo() <4:6 4:8>"); + } + + void test_cxx_parser_finds_type_template_parameter_of_template_function() + { + std::shared_ptr client = parseCode( + "template \n" + "T test(T a)\n" + "{\n" + " return a;\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); + TS_ASSERT_EQUALS(client->templateParameterTypes[0], "test::T <1:20 1:20>"); + } + + void test_cxx_parser_finds_non_type_int_template_parameter_of_template_function() + { + std::shared_ptr client = parseCode( + "template \n" + "int test(int a)\n" + "{\n" + " return a + T;\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); + TS_ASSERT_EQUALS(client->templateParameterTypes[0], "test::T <1:15 1:15>"); + } + + void test_cxx_parser_finds_non_type_bool_template_parameter_of_template_function() + { + std::shared_ptr client = parseCode( + "template \n" + "int test(int a)\n" + "{\n" + " return T ? a : 0;\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); + TS_ASSERT_EQUALS(client->templateParameterTypes[0], "test::T <1:16 1:16>"); + } + + void test_cxx_parser_finds_non_type_custom_pointer_template_parameter_of_template_function() + { + std::shared_ptr client = parseCode( + "class P\n" + "{};\n" + "template \n" + "int test(int a)\n" + "{\n" + " return a;\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); + TS_ASSERT_EQUALS(client->templateParameterTypes[0], "test

::p <3:14 3:14>"); + } + + void test_cxx_parser_finds_non_type_custom_reference_template_parameter_of_template_function() + { + std::shared_ptr client = parseCode( + "class P\n" + "{};\n" + "template \n" + "int test(int a)\n" + "{\n" + " return a;\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); + TS_ASSERT_EQUALS(client->templateParameterTypes[0], "test

::p <3:14 3:14>"); + } + + void test_cxx_parser_finds_template_template_parameter_of_template_function() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{};\n" + "template class T>\n" + "int test(int a)\n" + "{\n" + " return a;\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 2); + TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A::T <1:20 1:20>"); + TS_ASSERT_EQUALS(client->templateParameterTypes[1], "test typename T>::T <4:36 4:36>"); + } + + void test_cxx_parser_finds_function_for_implicit_instantiation_of_template_function() + { + std::shared_ptr client = parseCode( + "template \n" + "T test(T a)\n" + "{\n" + " return a;\n" + "};\n" + "\n" + "int main()\n" + "{\n" + " return test(1);\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->functions.size(), 3); + TS_ASSERT_EQUALS(client->functions[0], "T test(T) <1:1 <2:3 2:6> 5:1>"); + TS_ASSERT_EQUALS(client->functions[1], "int test(int) <2:1 <2:3 2:6> 5:1>"); + TS_ASSERT_EQUALS(client->functions[2], "int main() <7:1 <7:5 7:8> 10:1>"); + } + + void test_cxx_parser_finds_lambda_in_function() + { + std::shared_ptr client = parseCode( + "void lambdaCaller()\n" + "{\n" + " [](){}();\n" + "}\n" + ); + + TS_ASSERT_EQUALS(client->functions.size(), 2); + TS_ASSERT_EQUALS(client->functions[0], "void lambdaCaller() <1:1 <1:6 1:17> 4:1>"); + TS_ASSERT_EQUALS(client->functions[1], "void lambdaCaller::lambda at 3:2() <3:5 <3:2 3:2> 3:7>"); + TS_ASSERT_EQUALS(client->calls.size(), 1); + TS_ASSERT_EQUALS(client->calls[0], "void lambdaCaller() -> void lambdaCaller::lambda at 3:2() <3:8 3:8>"); + } + + +/////////////////////////////////////////////////////////////////////////////// +// test finding nested symbol definitions and declarations + + void test_cxx_parser_finds_class_definition_in_class() { std::shared_ptr client = parseCode( "class A\n" @@ -68,28 +759,6 @@ public: TS_ASSERT_EQUALS(client->classes[0], "a::B <3:8 3:8>"); } - void test_cxx_parser_finds_global_struct_definition() - { - std::shared_ptr client = parseCode( - "struct A\n" - "{\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->structs.size(), 1); - TS_ASSERT_EQUALS(client->structs[0], "A <1:1 <1:8 1:8> 3:1>"); - } - - void test_cxx_parser_finds_global_struct_forward_declaration() - { - std::shared_ptr client = parseCode( - "struct A;\n" - ); - - TS_ASSERT_EQUALS(client->structs.size(), 1); - TS_ASSERT_EQUALS(client->structs[0], "A <1:8 1:8>"); - } - void test_cxx_parser_finds_struct_definition_in_class() { std::shared_ptr client = parseCode( @@ -104,7 +773,7 @@ public: TS_ASSERT_EQUALS(client->structs.size(), 1); TS_ASSERT_EQUALS(client->structs[0], "private A::B <3:2 <3:9 3:9> 5:2>"); } - + void test_cxx_parser_finds_struct_definition_in_namespace() { std::shared_ptr client = parseCode( @@ -142,39 +811,19 @@ public: TS_ASSERT_EQUALS(client->structs[1], "foo::B <9:2 <9:9 9:9> 11:2>"); } - void test_cxx_parser_finds_variable_definitions_in_global_scope() - { - std::shared_ptr client = parseCode( - "int x;\n" - "const int y = 0;\n" - "static int z;\n" - "class A;\n" - "A* b;" - ); - - TS_ASSERT_EQUALS(client->globalVariables.size(), 4); - TS_ASSERT_EQUALS(client->globalVariables[0], "int x <1:5 1:5>"); - TS_ASSERT_EQUALS(client->globalVariables[1], "int const y <2:11 2:11>"); - TS_ASSERT_EQUALS(client->globalVariables[2], "static int z <3:12 3:12>"); - TS_ASSERT_EQUALS(client->globalVariables[3], "A * b <5:4 5:4>"); - } - void test_cxx_parser_finds_variable_definitions_in_namespace_scope() { std::shared_ptr client = parseCode( "namespace n" "{\n" " int x;\n" - " class A;\n" - " A* b;\n" "}\n" - ); + ); - TS_ASSERT_EQUALS(client->globalVariables.size(), 2); - TS_ASSERT_EQUALS(client->globalVariables[0], "int n::x <2:6 2:6>"); - TS_ASSERT_EQUALS(client->globalVariables[1], "n::A * n::b <4:5 4:5>"); + TS_ASSERT_EQUALS(client->globalVariables.size(), 1); + TS_ASSERT_EQUALS(client->globalVariables[0], "n::x <2:6 2:6>"); } - + void test_cxx_parser_finds_field_in_nested_class() { std::shared_ptr client = parseCode( @@ -187,46 +836,10 @@ public: " static const int amount;\n" " };\n" "};\n" - ); + ); TS_ASSERT_EQUALS(client->fields.size(), 1); - TS_ASSERT_EQUALS(client->fields[0], "private static int const B::C::amount <7:20 7:25>"); - } - - void test_cxx_parser_finds_fields_in_class_with_access_type() - { - std::shared_ptr client = parseCode( - "class A\n" - "{\n" - " int a;" - "public:\n" - " A() : d(0) {};\n" - " int b;" - "protected:\n" - " static int c;\n" - "private:\n" - " const int d;\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->fields.size(), 4); - TS_ASSERT_EQUALS(client->fields[0], "private int A::a <3:6 3:6>"); - TS_ASSERT_EQUALS(client->fields[1], "public int A::b <5:6 5:6>"); - TS_ASSERT_EQUALS(client->fields[2], "protected static int A::c <6:13 6:13>"); - TS_ASSERT_EQUALS(client->fields[3], "private int const A::d <8:12 8:12>"); - } - - void test_cxx_parser_finds_function_in_global_namespace() - { - std::shared_ptr client = parseCode( - "int ceil(float a)\n" - "{\n" - " return 1;\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->functions.size(), 1); - TS_ASSERT_EQUALS(client->functions[0], "int ceil(float) <1:1 <1:5 1:8> 4:1>"); + TS_ASSERT_EQUALS(client->fields[0], "private B::C::amount <7:20 7:25>"); } void test_cxx_parser_finds_function_in_anonymous_namespace() @@ -236,85 +849,12 @@ public: "{\n" " int sum(int a, int b);\n" "}\n" - ); + ); TS_ASSERT_EQUALS(client->functions.size(), 1); TS_ASSERT_EQUALS(client->functions[0], "int anonymous namespace (input.cc)::sum(int, int) <3:6 3:8>"); } - void test_cxx_parser_finds_static_function_in_global_namespace() - { - std::shared_ptr client = parseCode( - "static int ceil(float a)\n" - "{\n" - " return static_cast(a) + 1;\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->functions.size(), 1); - TS_ASSERT_EQUALS(client->functions[0], "static int ceil(float) <1:1 <1:12 1:15> 4:1>"); - } - - void test_cxx_parser_finds_method_declaration() - { - std::shared_ptr client = parseCode( - "class B\n" - "{\n" - "public:\n" - " B();\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->methods.size(), 1); - TS_ASSERT_EQUALS(client->methods[0], "public void B::B() <4:2 4:2>"); - } - - void test_cxx_parser_finds_method_declaration_and_definition() - { - std::shared_ptr client = parseCode( - "class B\n" - "{\n" - "public:\n" - " B();\n" - "};\n" - "B::B()\n" - "{\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->methods.size(), 2); - TS_ASSERT_EQUALS(client->methods[0], "public void B::B() <4:2 4:2>"); - TS_ASSERT_EQUALS(client->methods[1], "public void B::B() <6:1 <6:4 6:4> 8:1>"); - } - - void test_cxx_parser_finds_virtual_method() - { - std::shared_ptr client = parseCode( - "class B\n" - "{\n" - "public:\n" - " virtual void process();\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->methods.size(), 1); - TS_ASSERT_EQUALS(client->methods[0], "public virtual void B::process() <4:15 4:21>"); - } - - void test_cxx_parser_finds_pure_virtual_method() - { - std::shared_ptr client = parseCode( - "class B\n" - "{\n" - "protected:\n" - " virtual void process() = 0;\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->methods.size(), 1); - TS_ASSERT_EQUALS(client->methods[0], "protected pure virtual void B::process() <4:15 4:21>"); - } - void test_cxx_parser_finds_method_declared_in_nested_class() { std::shared_ptr client = parseCode( @@ -325,36 +865,12 @@ public: " bool isGreat() const;\n" " };\n" "};\n" - ); + ); TS_ASSERT_EQUALS(client->methods.size(), 1); TS_ASSERT_EQUALS(client->methods[0], "private bool B::C::isGreat() const <5:8 5:14>"); } - void test_cxx_parser_finds_named_namespace() - { - std::shared_ptr client = parseCode( - "namespace A\n" - "{\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->namespaces.size(), 1); - TS_ASSERT_EQUALS(client->namespaces[0], "A <1:1 <1:11 1:11> 3:1>"); - } - - void test_cxx_parser_finds_anonymous_namespace() - { - std::shared_ptr client = parseCode( - "namespace\n" - "{\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->namespaces.size(), 1); - TS_ASSERT_EQUALS(client->namespaces[0], "anonymous namespace (input.cc) <1:1 3:1>"); - } - void test_cxx_parser_finds_nested_named_namespace() { std::shared_ptr client = parseCode( @@ -364,25 +880,13 @@ public: " {\n" " }\n" "}\n" - ); + ); TS_ASSERT_EQUALS(client->namespaces.size(), 2); TS_ASSERT_EQUALS(client->namespaces[0], "A <1:1 <1:11 1:11> 6:1>"); TS_ASSERT_EQUALS(client->namespaces[1], "A::B <3:2 <3:12 3:12> 5:2>"); } - void test_cxx_parser_finds_enum_defined_in_global_namespace() - { - std::shared_ptr client = parseCode( - "enum E\n" - "{\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->enums.size(), 1); - TS_ASSERT_EQUALS(client->enums[0], "E <1:1 <1:6 1:6> 3:1>"); - } - void test_cxx_parser_finds_enum_defined_in_class() { std::shared_ptr client = parseCode( @@ -393,7 +897,7 @@ public: " {\n" " };\n" "};\n" - ); + ); TS_ASSERT_EQUALS(client->enums.size(), 1); TS_ASSERT_EQUALS(client->enums[0], "public B::Z <4:2 <4:7 4:7> 6:2>"); @@ -408,1847 +912,12 @@ public: " {\n" " };\n" "}\n" - ); + ); TS_ASSERT_EQUALS(client->enums.size(), 1); TS_ASSERT_EQUALS(client->enums[0], "n::Z <3:2 <3:7 3:7> 5:2>"); } - void test_cxx_parser_finds_enum_constant_in_global_enum() - { - std::shared_ptr client = parseCode( - "enum E\n" - "{\n" - " P\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->enumConstants.size(), 1); - TS_ASSERT_EQUALS(client->enumConstants[0], "E::P <3:2 3:2>"); - } - - void test_cxx_parser_finds_typedef_in_global_namespace() - { - std::shared_ptr client = parseCode( - "typedef unsigned int uint;\n" - ); - - TS_ASSERT_EQUALS(client->typedefs.size(), 1); - TS_ASSERT_EQUALS(client->typedefs[0], "unsigned int -> uint <1:22 1:25>"); - } - - void test_cxx_parser_finds_typedef_in_named_namespace() - { - std::shared_ptr client = parseCode( - "namespace test\n" - "{\n" - " typedef unsigned int uint;\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->typedefs.size(), 1); - TS_ASSERT_EQUALS(client->typedefs[0], "unsigned int -> test::uint <3:23 3:26>"); - } - - void test_cxx_parser_finds_typedef_in_anonymous_namespace() - { - std::shared_ptr client = parseCode( - "namespace\n" - "{\n" - " typedef unsigned int uint;\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->typedefs.size(), 1); - TS_ASSERT_EQUALS(client->typedefs[0], "unsigned int -> anonymous namespace (input.cc)::uint <3:23 3:26>"); - } - - void test_cxx_parser_finds_typedef_that_uses_type_defined_in_named_namespace() - { - std::shared_ptr client = parseCode( - "namespace test\n" - "{\n" - " struct TestStruct{};\n" - "}\n" - "typedef test::TestStruct globalTestStruct;\n" - ); - - TS_ASSERT_EQUALS(client->typedefs.size(), 1); - TS_ASSERT_EQUALS(client->typedefs[0], "test::TestStruct -> globalTestStruct <5:26 5:41>"); - } - - void test_cxx_parser_finds_global_variable_with_typedef_type() - { - std::shared_ptr client = parseCode( - "typedef unsigned int uint;\n" - "uint number;\n" - ); - - TS_ASSERT_EQUALS(client->typedefs.size(), 1); - TS_ASSERT_EQUALS(client->typedefs[0], "unsigned int -> uint <1:22 1:25>"); - - TS_ASSERT_EQUALS(client->globalVariables.size(), 1); - TS_ASSERT_EQUALS(client->globalVariables[0], "uint number <2:6 2:11>"); - } - - void test_cxx_parser_finds_global_variable_with_qualified_typedef_type() - { - std::shared_ptr client = parseCode( - "typedef unsigned int* uint;\n" - "const uint* number;\n" - ); - - TS_ASSERT_EQUALS(client->typedefs.size(), 1); - TS_ASSERT_EQUALS(client->typedefs[0], "unsigned int * -> uint <1:23 1:26>"); - - TS_ASSERT_EQUALS(client->globalVariables.size(), 1); - TS_ASSERT_EQUALS(client->globalVariables[0], "uint const * number <2:13 2:18>"); - } - - void test_cxx_parser_finds_class_default_private_inheritance() - { - std::shared_ptr client = parseCode( - "class A {};\n" - "class B : A {};\n" - ); - - TS_ASSERT_EQUALS(client->inheritances.size(), 1); - TS_ASSERT_EQUALS(client->inheritances[0], "B : private A <2:11 2:11>"); - } - - void test_cxx_parser_finds_class_public_inheritance() - { - std::shared_ptr client = parseCode( - "class A {};\n" - "class B : public A {};\n" - ); - - TS_ASSERT_EQUALS(client->inheritances.size(), 1); - TS_ASSERT_EQUALS(client->inheritances[0], "B : public A <2:11 2:18>"); - } - - void test_cxx_parser_finds_class_protected_inheritance() - { - std::shared_ptr client = parseCode( - "class A {};\n" - "class B : protected A {};\n" - ); - - TS_ASSERT_EQUALS(client->inheritances.size(), 1); - TS_ASSERT_EQUALS(client->inheritances[0], "B : protected A <2:11 2:21>"); - } - - void test_cxx_parser_finds_class_private_inheritance() - { - std::shared_ptr client = parseCode( - "class A {};\n" - "class B : private A {};\n" - ); - - TS_ASSERT_EQUALS(client->inheritances.size(), 1); - TS_ASSERT_EQUALS(client->inheritances[0], "B : private A <2:11 2:19>"); - } - - void test_cxx_parser_finds_class_multiple_inheritance() - { - std::shared_ptr client = parseCode( - "class A {};\n" - "class B {};\n" - "class C\n" - " : public A\n" - " , private B\n" - "{};\n" - ); - - TS_ASSERT_EQUALS(client->inheritances.size(), 2); - TS_ASSERT_EQUALS(client->inheritances[0], "C : public A <4:4 4:11>"); - TS_ASSERT_EQUALS(client->inheritances[1], "C : private B <5:4 5:12>"); - } - - void test_cxx_parser_finds_struct_default_public_inheritance() - { - std::shared_ptr client = parseCode( - "struct A {};\n" - "struct B : A {};\n" - ); - - TS_ASSERT_EQUALS(client->inheritances.size(), 1); - TS_ASSERT_EQUALS(client->inheritances[0], "B : public A <2:12 2:12>"); - } - - void test_cxx_parser_finds_struct_public_inheritance() - { - std::shared_ptr client = parseCode( - "struct A {};\n" - "struct B : public A {};\n" - ); - - TS_ASSERT_EQUALS(client->inheritances.size(), 1); - TS_ASSERT_EQUALS(client->inheritances[0], "B : public A <2:12 2:19>"); - } - - void test_cxx_parser_finds_struct_protected_inheritance() - { - std::shared_ptr client = parseCode( - "struct A {};\n" - "struct B : protected A {};\n" - ); - - TS_ASSERT_EQUALS(client->inheritances.size(), 1); - TS_ASSERT_EQUALS(client->inheritances[0], "B : protected A <2:12 2:22>"); - } - - void test_cxx_parser_finds_struct_private_inheritance() - { - std::shared_ptr client = parseCode( - "struct A {};\n" - "struct B : private A {};\n" - ); - - TS_ASSERT_EQUALS(client->inheritances.size(), 1); - TS_ASSERT_EQUALS(client->inheritances[0], "B : private A <2:12 2:20>"); - } - - void test_cxx_parser_finds_struct_multiple_inheritance() - { - std::shared_ptr client = parseCode( - "struct A {};\n" - "struct B {};\n" - "struct C\n" - " : public A\n" - " , private B\n" - "{};\n" - ); - - TS_ASSERT_EQUALS(client->inheritances.size(), 2); - TS_ASSERT_EQUALS(client->inheritances[0], "C : public A <4:4 4:11>"); - TS_ASSERT_EQUALS(client->inheritances[1], "C : private B <5:4 5:12>"); - } - - void test_cxx_parser_finds_method_override_when_virtual() - { - std::shared_ptr client = parseCode( - "class A {\n" - " virtual void foo();\n" - "};\n" - "class B : public A {\n" - " void foo();\n" - "};" - ); - - TS_ASSERT_EQUALS(client->overrides.size(), 1); - TS_ASSERT_EQUALS(client->overrides[0], "void A::foo() -> void B::foo() <5:7 5:9>"); - } - - void test_cxx_parser_finds_no_method_override_when_not_virtual() - { - std::shared_ptr client = parseCode( - "class A {\n" - " void foo();\n" - "};\n" - "class B : public A {\n" - " void foo();\n" - "};" - ); - - TS_ASSERT_EQUALS(client->overrides.size(), 0); - } - - void test_cxx_parser_finds_all_method_overrides() - { - std::shared_ptr client = parseCode( - "class A {\n" - " virtual void foo();\n" - "};\n" - "class B : public A {\n" - " void foo();\n" - "};\n" - "class C : public B {\n" - " void foo();\n" - "};" - ); - - TS_ASSERT_EQUALS(client->overrides.size(), 2); - TS_ASSERT_EQUALS(client->overrides[0], "void A::foo() -> void B::foo() <5:7 5:9>"); - TS_ASSERT_EQUALS(client->overrides[1], "void B::foo() -> void C::foo() <8:7 8:9>"); - } - - void test_cxx_parser_finds_no_method_overrides_on_different_signatures() - { - std::shared_ptr client = parseCode( - "class A {\n" - " virtual void foo(int a);\n" - "};\n" - "class B : public A {\n" - " int foo(int a, int b);\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->overrides.size(), 0); - } - - void test_cxx_parser_finds_method_overrides_on_different_return_types() - { - std::shared_ptr client = parseCode( - "class A {\n" - " virtual void foo();\n" - "};\n" - "class B : public A {\n" - " int foo();\n" - "};\n", - false - ); - - TS_ASSERT_EQUALS(client->overrides.size(), 1); - TS_ASSERT_EQUALS(client->overrides[0], "void A::foo() -> int B::foo() <5:6 5:8>"); - TS_ASSERT_EQUALS(client->errors.size(), 1); - } - - void test_cxx_parser_finds_call_in_function() - { - std::shared_ptr client = parseCode( - "int sum(int a, int b)\n" - "{\n" - " return a + b;\n" - "}\n" - "int main()\n" - "{\n" - " sum(1, 2);\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->calls.size(), 1); - TS_ASSERT_EQUALS(client->calls[0], "int main() -> int sum(int, int) <7:2 7:10>"); - } - - void test_cxx_parser_finds_call_in_function_with_right_signature() - { - std::shared_ptr client = parseCode( - "int sum(int a, int b)\n" - "{\n" - " return a + b;\n" - "}\n" - "void func()\n" - "{\n" - "}\n" - "void func(bool right)\n" - "{\n" - " sum(1, 2);\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->calls.size(), 1); - TS_ASSERT_EQUALS(client->calls[0], "void func(bool) -> int sum(int, int) <10:2 10:10>"); - } - - void test_cxx_parser_finds_call_to_function_with_right_signature() - { - std::shared_ptr client = parseCode( - "int sum(int a, int b)\n" - "{\n" - " return a + b;\n" - "}\n" - "float sum(float a, float b)\n" - "{\n" - " return a + b;\n" - "}\n" - "int main()\n" - "{\n" - " sum(1, 2);\n" - " sum(1.0f, 0.5f);\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->calls.size(), 2); - TS_ASSERT_EQUALS(client->calls[0], "int main() -> int sum(int, int) <11:2 11:10>"); - TS_ASSERT_EQUALS(client->calls[1], "int main() -> float sum(float, float) <12:2 12:16>"); - } - - void test_cxx_parser_finds_call_within_call_in_function() - { - std::shared_ptr client = parseCode( - "int sum(int a, int b)\n" - "{\n" - " return a + b;\n" - "}\n" - "int main()\n" - "{\n" - " return sum(1, sum(2, 3));\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->calls.size(), 2); - TS_ASSERT_EQUALS(client->calls[0], "int main() -> int sum(int, int) <7:9 7:25>"); - TS_ASSERT_EQUALS(client->calls[1], "int main() -> int sum(int, int) <7:16 7:24>"); - } - - void test_cxx_parser_finds_call_in_method() - { - std::shared_ptr client = parseCode( - "int sum(int a, int b)\n" - "{\n" - " return a + b;\n" - "}\n" - "class App\n" - "{\n" - " int main()\n" - " {\n" - " return sum(1, 2);\n" - " }\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->calls.size(), 1); - TS_ASSERT_EQUALS(client->calls[0], "int App::main() -> int sum(int, int) <9:10 9:18>"); - } - - void test_cxx_parser_finds_constructor_call() - { - std::shared_ptr client = parseCode( - "class App\n" - "{\n" - "public:\n" - " App() {}\n" - "};\n" - "int main()\n" - "{\n" - " App app;\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->calls.size(), 1); - TS_ASSERT_EQUALS(client->calls[0], "int main() -> void App::App() <8:6 8:8>"); - } - - void test_cxx_parser_finds_constructor_without_definition_call() - { - std::shared_ptr client = parseCode( - "class App\n" - "{\n" - "};\n" - "int main()\n" - "{\n" - " App app;\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->calls.size(), 1); - TS_ASSERT_EQUALS(client->calls[0], "int main() -> void App::App() <6:6 6:8>"); - } - - void test_cxx_parser_finds_constructor_call_of_field() - { - std::shared_ptr client = parseCode( - "class Item\n" - "{\n" - "};\n" - "class App\n" - "{\n" - "public:\n" - " App() {}\n" - " Item item;\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->calls.size(), 1); - TS_ASSERT_EQUALS(client->calls[0], "void App::App() -> void Item::Item() <7:2 7:4>"); - } - - void test_cxx_parser_finds_constructor_call_of_field_in_initialization_list() - { - std::shared_ptr client = parseCode( - "class Item\n" - "{\n" - "public:\n" - " Item(int n) {}\n" - "};\n" - "class App\n" - "{\n" - " App()\n" - " : item(1)" - " {}\n" - " Item item;\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->calls.size(), 1); - TS_ASSERT_EQUALS(client->calls[0], "void App::App() -> void Item::Item(int) <9:5 9:11>"); - } - - void test_cxx_parser_finds_function_call_as_parameter_of_constructor_call_of_field_in_initialization_list() - { - std::shared_ptr client = parseCode( - "int one() { return 1; }\n" - "class Item\n" - "{\n" - "public:\n" - " Item(int n) {}\n" - "};\n" - "class App\n" - "{\n" - " App()\n" - " : item(one())" - " {}\n" - " Item item;\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->calls.size(), 2); - TS_ASSERT_EQUALS(client->calls[0], "void App::App() -> void Item::Item(int) <10:5 10:15>"); - TS_ASSERT_EQUALS(client->calls[1], "void App::App() -> int one() <10:10 10:14>"); - } - - void test_cxx_parser_finds_copy_constructor_call() - { - std::shared_ptr client = parseCode( - "class App\n" - "{\n" - "public:\n" - " App() {}\n" - " App(const App& other) {}\n" - "};\n" - "int main()\n" - "{\n" - " App app;\n" - " App app2(app);\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->calls.size(), 2); - TS_ASSERT_EQUALS(client->calls[0], "int main() -> void App::App() <9:6 9:8>"); - TS_ASSERT_EQUALS(client->calls[1], "int main() -> void App::App(App const &) <10:6 10:14>"); - } - - void test_cxx_parser_finds_global_constructor_call() - { - std::shared_ptr client = parseCode( - "class App\n" - "{\n" - "public:\n" - " App() {}\n" - "};\n" - "App app;\n" - ); - - TS_ASSERT_EQUALS(client->calls.size(), 1); - TS_ASSERT_EQUALS(client->calls[0], "app -> void App::App() <6:5 6:7>"); - } - - void test_cxx_parser_finds_global_function_call() - { - std::shared_ptr client = parseCode( - "int one() { return 1; }\n" - "int a = one();\n" - ); - - TS_ASSERT_EQUALS(client->calls.size(), 1); - TS_ASSERT_EQUALS(client->calls[0], "a -> int one() <2:9 2:13>"); - } - - void test_cxx_parser_finds_operator_call() - { - std::shared_ptr client = parseCode( - "class App\n" - "{\n" - "public:\n" - " void operator+(int a)\n" - " {\n" - " }\n" - "};\n" - "int main()\n" - "{\n" - " App app;\n" - " app + 2;\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->calls.size(), 2); - TS_ASSERT_EQUALS(client->calls[0], "int main() -> void App::App() <10:6 10:8>"); - TS_ASSERT_EQUALS(client->calls[1], "int main() -> void App::operator+(int) <11:2 11:8>"); - } - - void test_cxx_parser_finds_usage_of_global_variable_in_function() - { - std::shared_ptr client = parseCode( - "int bar;\n" - "\n" - "int main()\n" - "{\n" - " bar = 1;\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->usages.size(), 1); - TS_ASSERT_EQUALS(client->usages[0], "int main() -> bar <5:2 5:4>"); - } - - void test_cxx_parser_finds_usage_of_global_variable_in_global_variable_initialization() - { - std::shared_ptr client = parseCode( - "int a = 0;\n" - "int b[] = {a};\n" - ); - - TS_ASSERT_EQUALS(client->usages.size(), 1); - TS_ASSERT_EQUALS(client->usages[0], "int [] b -> a <2:12 2:12>"); - } - - void test_cxx_parser_finds_usage_of_global_variable_in_method() - { - std::shared_ptr client = parseCode( - "int bar;\n" - "\n" - "class App\n" - "{\n" - " void foo()\n" - " {\n" - " bar = 1;\n" - " }\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->usages.size(), 1); - TS_ASSERT_EQUALS(client->usages[0], "void App::foo() -> bar <7:3 7:5>"); - } - - void test_cxx_parser_finds_usage_of_field_in_method() - { - std::shared_ptr client = parseCode( - "class App\n" - "{\n" - " void foo()\n" - " {\n" - " bar = 1;\n" - " this->bar = 2;\n" - " }\n" - " int bar;\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->usages.size(), 2); - TS_ASSERT_EQUALS(client->usages[0], "void App::foo() -> App::bar <5:3 5:5>"); - TS_ASSERT_EQUALS(client->usages[1], "void App::foo() -> App::bar <6:3 6:11>"); - } - - void test_cxx_parser_finds_usage_of_field_in_initialization_list() - { - std::shared_ptr client = parseCode( - "class App\n" - "{\n" - " App()\n" - " : bar(42)\n" - " {}\n" - " int bar;\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->usages.size(), 1); - TS_ASSERT_EQUALS(client->usages[0], "void App::App() -> App::bar <4:5 4:7>"); - } - - void test_cxx_parser_finds_return_type_use_in_function() - { - std::shared_ptr client = parseCode( - "double PI()\n" - "{\n" - " return 3.14159265359;\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->typeUses.size(), 1); - TS_ASSERT_EQUALS(client->typeUses[0], "double <1:1 1:6>"); - } - - void test_cxx_parser_finds_return_and_parameter_type_uses_in_function() - { - std::shared_ptr client = parseCode( - "int ceil(float a)\n" - "{\n" - " return static_cast(a) + 1;\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->typeUses.size(), 2); - TS_ASSERT_EQUALS(client->typeUses[0], "int <1:1 1:3>"); - TS_ASSERT_EQUALS(client->typeUses[1], "float <1:10 1:14>"); - } - - void test_cxx_parser_finds_parameter_type_uses_in_constructor() - { - std::shared_ptr client = parseCode( - "class A\n" - "{\n" - " A(int a, bool b, float c, int d);\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->typeUses.size(), 4); - TS_ASSERT_EQUALS(client->typeUses[0], "int <3:4 3:6>"); - TS_ASSERT_EQUALS(client->typeUses[1], "bool <3:11 3:14>"); - TS_ASSERT_EQUALS(client->typeUses[2], "float <3:19 3:23>"); - TS_ASSERT_EQUALS(client->typeUses[3], "int <3:28 3:30>"); - } - - void test_cxx_parser_finds_type_uses_in_function_body() - { - std::shared_ptr client = parseCode( - "int main()\n" - "{\n" - " int a = 42;\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->typeUses.size(), 2); - TS_ASSERT_EQUALS(client->typeUses[0], "int <1:1 1:3>"); - TS_ASSERT_EQUALS(client->typeUses[1], "int main() -> int <3:2 3:4>"); - } - - void test_cxx_parser_finds_type_uses_in_method_body() - { - std::shared_ptr client = parseCode( - "class A\n" - "{\n" - " int main()\n" - " {\n" - " int a = 42;\n" - " return a;\n" - " }\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->typeUses.size(), 2); - TS_ASSERT_EQUALS(client->typeUses[0], "int <3:2 3:4>"); - TS_ASSERT_EQUALS(client->typeUses[1], "int A::main() -> int <5:3 5:5>"); - } - - void test_cxx_parser_finds_type_uses_in_loops_and_conditions() - { - std::shared_ptr client = parseCode( - "int main()\n" - "{\n" - " if (true)\n" - " {\n" - " int a = 42;\n" - " }\n" - " for (int i = 0; i < 10; i++)\n" - " {\n" - " int b = i * 2;\n" - " }\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->typeUses.size(), 4); - TS_ASSERT_EQUALS(client->typeUses[0], "int <1:1 1:3>"); - TS_ASSERT_EQUALS(client->typeUses[1], "int main() -> int <5:3 5:5>"); - TS_ASSERT_EQUALS(client->typeUses[2], "int main() -> int <7:7 7:9>"); - TS_ASSERT_EQUALS(client->typeUses[3], "int main() -> int <9:3 9:5>"); - } - - void test_cxx_parser_finds_type_uses_of_classes_in_functions() - { - std::shared_ptr client = parseCode( - "class A {};\n" - "int main()\n" - "{\n" - " A a;\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->typeUses.size(), 2); - TS_ASSERT_EQUALS(client->typeUses[0], "int <2:1 2:3>"); - TS_ASSERT_EQUALS(client->typeUses[1], "int main() -> A <4:2 4:2>"); - } - - void test_cxx_parser_finds_type_uses_of_base_class_in_derived_constructor() - { - std::shared_ptr client = parseCode( - "class A\n" - "{\n" - "public:\n" - " A(int n) {}" - "};\n" - "class B : public A\n" - "{\n" - "public:\n" - " B() : A(42) {}\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->typeUses.size(), 2); - TS_ASSERT_EQUALS(client->typeUses[0], "int <4:4 4:6>"); - TS_ASSERT_EQUALS(client->typeUses[1], "void B::B() -> A <8:8 8:8>"); - } - - void test_cxx_parser_finds_enum_uses_in_global_space() - { - std::shared_ptr client = parseCode( - "enum A\n" - "{\n" - " B,\n" - " C\n" - "};\n" - "A a = B;\n" - "A* aPtr = new A;\n" - ); - - TS_ASSERT_EQUALS(client->usages.size(), 1); - TS_ASSERT_EQUALS(client->usages[0], "A a -> A::B <6:7 6:7>"); - TS_ASSERT_EQUALS(client->typeUses.size(), 1); - TS_ASSERT_EQUALS(client->typeUses[0], "A <7:15 7:15>"); - TS_ASSERT_EQUALS(client->globalVariables.size(), 2); - TS_ASSERT_EQUALS(client->globalVariables[0], "A a <6:3 6:3>"); - TS_ASSERT_EQUALS(client->globalVariables[1], "A * aPtr <7:4 7:7>"); - } - - void test_cxx_parser_finds_enum_uses_in_function_body() - { - std::shared_ptr client = parseCode( - "enum A\n" - "{\n" - " B,\n" - " C\n" - "};\n" - "int main()\n" - "{\n" - " A a = B;\n" - " A* aPtr = new A;\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->usages.size(), 1); - TS_ASSERT_EQUALS(client->usages[0], "int main() -> A::B <8:8 8:8>"); - TS_ASSERT_EQUALS(client->typeUses.size(), 4); - TS_ASSERT_EQUALS(client->typeUses[0], "int <6:1 6:3>"); - TS_ASSERT_EQUALS(client->typeUses[1], "int main() -> A <8:2 8:2>"); - TS_ASSERT_EQUALS(client->typeUses[2], "int main() -> A * <9:2 9:3>"); - TS_ASSERT_EQUALS(client->typeUses[3], "int main() -> A <9:16 9:16>"); - } - - void test_cxx_parser_finds_macro_define() - { - std::shared_ptr client = parseCode( - "#define PI\n" - "void test()\n" - "{\n" - "};\n" - ); - TS_ASSERT_EQUALS(client->macros.size(),1); - TS_ASSERT_EQUALS(client->macros[0], "PI <1:9 <1:9 1:10> 1:8>"); - } - - void test_cxx_parser_finds_macro_define_scope() - { - std::shared_ptr client = parseCode( - "#define MAX(a,b) \\\n" - " ((a)>(b)?(a):(b))" - ); - TS_ASSERT_EQUALS(client->macros.size(),1); - TS_ASSERT_EQUALS(client->macros[0], "MAX <1:9 <1:9 1:11> 2:17>"); - } - - void test_cxx_parser_finds_macro_expand() - { - std::shared_ptr client = parseCode( - "#define PI 3.14159265359\n" - "void test()\n" - "{\n" - "double i = PI;" - "};\n" - ); - TS_ASSERT_EQUALS(client->macroUses.size(),1); - TS_ASSERT_EQUALS(client->macroUses[0], "PI <4:12 4:13>"); - } - - void test_cxx_parser_finds_type_template_parameter_type_of_template_class() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A::T <1:20 1:20>"); - } - - void test_cxx_parser_finds_type_template_parameter_defined_with_class_keyword() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A::T <1:17 1:17>"); - } - - void test_cxx_parser_finds_type_template_parameter_pack_type_of_template_class() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A::T <1:23 1:23>"); - } - - void test_cxx_parser_finds_non_type_int_template_parameter_of_template_class() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A::T <1:15 1:15>"); - } - - void test_cxx_parser_finds_non_type_bool_template_parameter_of_template_class() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A::T <1:16 1:16>"); - } - - void test_cxx_parser_finds_non_type_custom_pointer_template_parameter_of_template_class() - { - std::shared_ptr client = parseCode( - "class P\n" - "{};\n" - "template \n" - "class A\n" - "{};\n" - ); - - TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A

::p <3:14 3:14>"); - } - - void test_cxx_parser_finds_non_type_custom_reference_template_parameter_of_template_class() - { - std::shared_ptr client = parseCode( - "class P\n" - "{};\n" - "template \n" - "class A\n" - "{};\n" - ); - - TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A

::p <3:14 3:14>"); - } - - void test_cxx_parser_finds_non_type_nullptr_template_parameter_of_template_class() - { - std::shared_ptr client = parseCode( - "#include \n" - "template \n" - "class A\n" - "{};\n" - ); - - TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A::T <2:26 2:26>"); - } - - void test_cxx_parser_finds_non_type_template_parameter_that_depends_on_type_template_parameter_of_template_class() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{};\n" - ); - - TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 2); - TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A::T1 <1:20 1:21>"); - TS_ASSERT_EQUALS(client->templateParameterTypes[1], "A::T2 <1:28 1:29>"); - } - - void test_cxx_parser_finds_non_type_template_parameter_that_depends_on_template_template_parameter_of_template_class() - { - std::shared_ptr client = parseCode( - "template class T1, T1& T2>\n" - "class A\n" - "{};\n" - ); - - TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 2); - TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A typename T1, T1 & T2>::T1 <1:36 1:37>"); - TS_ASSERT_EQUALS(client->templateParameterTypes[1], "A typename T1, T1 & T2>::T2 <1:49 1:50>"); - } - - void test_cxx_parser_finds_non_type_int_template_parameter_pack_type_of_template_class() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A::T <1:18 1:18>"); - } - - void test_cxx_parser_finds_template_template_parameter_of_template_class() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{};\n" - "template class T>\n" - "class B\n" - "{};\n" - "int main()\n" - "{\n" - " B ba;\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 2); - TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A::T <1:20 1:20>"); - TS_ASSERT_EQUALS(client->templateParameterTypes[1], "B typename T>::T <4:36 4:36>"); - } - - void test_cxx_parser_finds_template_template_parameter_pack_type_of_template_class() - { - std::shared_ptr client = parseCode( - "template typename... T>\n" - "class A\n" - "{\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A typename... T>::T <1:42 1:42>"); - } - - void test_cxx_parser_finds_usage_of_template_template_parameter_of_template_class_specialized_with_concrete_type() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{};\n" - "template class T>\n" - "class B\n" - "{\n" - " void foo(T parameter)\n" - " {}\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->typeUses.size(), 2); - TS_ASSERT_EQUALS(client->typeUses[0], "void <7:2 7:5>"); - TS_ASSERT_EQUALS(client->typeUses[1], "B typename T>::T <7:11 7:16>"); - } - - void test_cxx_parser_finds_usage_of_template_template_parameter_of_template_class_specialized_with_template_type() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{};\n" - "template class T>\n" - "class B\n" - "{\n" - " template \n" - " void foo(T parameter)\n" - " {}\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->typeUses.size(), 2); - TS_ASSERT_EQUALS(client->typeUses[0], "void <8:2 8:5>"); - TS_ASSERT_EQUALS(client->typeUses[1], "B typename T>::T typename T>::foo::U> <8:11 8:14>"); - } - - void test_cxx_parser_finds_typedef_in_other_class_that_depends_on_own_template_parameter() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - "public:" - " typedef T type;\n" - "};\n" - "template \n" - "class B\n" - "{\n" - "public:" - " typedef typename A::type type;\n" - "};\n" - - "B::type f = 0;\n" - - ); - TS_ASSERT_EQUALS(client->typedefs.size(), 2); - TS_ASSERT_EQUALS(client->typedefs[0], "public A::T -> A::type <4:19 4:22>"); - TS_ASSERT_EQUALS(client->typedefs[1], "public A::U>::type -> B::type <9:37 9:40>"); - } - - void test_cxx_parser_finds_type_template_parameters_of_template_class_with_multiple_parameters() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 2); - TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A::T <1:20 1:20>"); - TS_ASSERT_EQUALS(client->templateParameterTypes[1], "A::U <1:32 1:32>"); - } - - void test_cxx_parser_skips_creating_node_for_template_parameter_without_a_name() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->classes.size(), 1); - TS_ASSERT_EQUALS(client->classes[0], "A <1:1 <2:7 2:7> 4:1>"); - } - - void test_cxx_parser_finds_type_template_parameter_of_template_method_definition_outside_template_class() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - " template \n" - " U foo();\n" - "};\n" - "template \n" - "template \n" - "U A::foo()\n" - "{}\n" - ); - TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 3); - TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A::T <1:20 1:20>"); - TS_ASSERT_EQUALS(client->templateParameterTypes[1], "A::foo::U <4:21 4:21>"); - TS_ASSERT_EQUALS(client->templateParameterTypes[2], "A::foo::U <8:20 8:20>"); - } - - void test_cxx_parser_finds_type_template_argument_of_implicit_template_specialization() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - "};\n" - "int main()\n" - "{\n" - " A a;\n" - " return 0;\n" - "}\n" - ); - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A->int <7:4 7:6>"); - } - void test_cxx_parser_finds_type_template_argument_for_parameter_pack_of_implicit_template_specialization() // actually this is an explicit template instantiation - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - "};\n" - "int main()\n" - "{\n" - " A();\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 2); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A<>->int <7:6 7:8>"); - TS_ASSERT_EQUALS(client->templateArgumentTypes[1], "A<>->float <7:11 7:15>"); - } - - void test_cxx_parser_finds_type_template_argument_for_parameter_of_implicit_template_s______tion_of_non_default_constructor() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - "public:\n" - " A(int data){}\n" - "};\n" - "int main()\n" - "{\n" - " A(5);\n" - "}\n" - ); - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A->int <9:4 9:6>"); - } - - void test_cxx_parser_finds_type_template_argument_for_parameter_of_implicit_template_s___kk_tion_of_call_to_default_constructor() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - "public:\n" - " A(){}\n" - "};\n" - "int main()\n" - "{\n" - " A();\n" - "}\n" - ); - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A->int <9:4 9:6>"); - } - - void test_cxx_parser_finds_type_template_argument_for_parameter_of_implicit_temple_of_new_expression() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - "public:\n" - " A(){}\n" - "};\n" - "int main()\n" - "{\n" - " new A();\n" - "}\n" - ); - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A->int <9:8 9:10>"); - } - - void test_cxx_parser_finds_non_type_int_template_argument_of_implicit_template_instantiation() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - "};\n" - "int main()\n" - "{\n" - " A<1> a;\n" - " return 0;\n" - "}\n" - ); - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A<1>->int <7:4 7:4>"); - } - - //void _____test_cxx_parser_finds_type_template_argument_of_static_cast_expression() - //{ - // std::shared_ptr client = parseCode( - // "int main()\n" - // "{\n" - // " return static_cast(4.0f);" - // "}\n" - // ); - // TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); - // TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A<1>->int <0:0 0:0>"); - //} - - - - void test_cxx_parser_finds_non_type_bool_template_argument_of_implicit_template_specialization() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - "};\n" - "int main()\n" - "{\n" - " A a;\n" - " return 0;\n" - "}\n" - ); - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A->bool <7:4 7:7>"); - } - - void test_cxx_parser_finds_non_type_custom_pointer_template_argument_of_implicit_template_specialization() - { - std::shared_ptr client = parseCode( - "class P\n" - "{};\n" - "template \n" - "class A\n" - "{};\n" - "P p;\n" - "int main()\n" - "{\n" - " A<&p> a;\n" - "}\n" - ); - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A<&p>->P <9:4 9:5>"); - } - - void test_cxx_parser_finds_non_type_custom_reference_template_argument_of_implicit_template_specialization() - { - std::shared_ptr client = parseCode( - "class P\n" - "{};\n" - "template \n" - "class A\n" - "{};\n" - "P p;\n" - "int main()\n" - "{\n" - " A

a;\n" - "}\n" - ); - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A<&p>->P <9:4 9:4>"); - } - - void test_cxx_parser_finds_non_type_nullptr_template_argument_of_implicit_template_specialization() - { - std::shared_ptr client = parseCode( - "#include \n" - "template \n" - "class A\n" - "{};\n" - "int main()\n" - "{\n" - " A a;\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A->nullptr_t <7:4 7:10>"); - } - - void test_cxx_parser_finds_non_type_int_template_argument_for_parameter_pack_of_implicit_template_specialization() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - "};\n" - "int main()\n" - "{\n" - " A<1, 2, 33>();\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 3); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A<<1, 2, 33>>->int <7:6 7:6>"); - TS_ASSERT_EQUALS(client->templateArgumentTypes[1], "A<<1, 2, 33>>->int <7:9 7:9>"); - TS_ASSERT_EQUALS(client->templateArgumentTypes[2], "A<<1, 2, 33>>->int <7:12 7:13>"); - } - - void test_cxx_parser_finds_template_template_argument_of_implicit_template_specialization() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{};\n" - "template class T>\n" - "class B\n" - "{};\n" - "int main()\n" - "{\n" - " B ba;\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "B->A <9:4 9:4>"); - } - - void test_cxx_parser_finds_template_template_argument_for_parameter_pack_of_implicit_template_specialization() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - "};\n" - "template typename... T>\n" - "class B\n" - "{\n" - "};\n" - "int main()\n" - "{\n" - " B();\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 2); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "B<>->A <11:4 11:4>"); - } - - void test_cxx_parser_finds_template_member_specialization_of_implicit_template_specialization() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - "public:\n" - " T foo() {}\n" - "};\n" - "int main()\n" - "{\n" - " A a;\n" - "}\n" - ); - TS_ASSERT_EQUALS(client->templateMemberSpecializations.size(), 1); - TS_ASSERT_EQUALS(client->templateMemberSpecializations[0], "int A::foo() -> A::T A::foo() <0:0 0:0>"); - } - - void test_cxx_parser_finds_explicit_template_specialization() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - "};\n" - "template <>\n" - "class A\n" - "{\n" - "};\n" - ); - TS_ASSERT_EQUALS(client->templateSpecializations.size(), 1); - TS_ASSERT_EQUALS(client->templateSpecializations[0], "class A -> A <6:7 6:7>"); - } - - void test_cxx_parser_finds_type_template_argument_of_explicit_template_specialization() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - "};\n" - "template <>\n" - "class A\n" - "{\n" - "};\n" - ); - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A->int <6:9 6:11>"); - } - - void test_cxx_parser_finds_non_type_int_template_argument_of_explicit_template_specialization() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - "};\n" - "template <>\n" - "class A<1>\n" - "{\n" - "};\n" - ); - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A<1>->int <6:9 6:9>"); - } - - void test_cxx_parser_finds_non_type_bool_template_argument_of_explicit_template_specialization() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - "};\n" - "template <>\n" - "class A\n" - "{\n" - "};\n" - ); - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A->bool <6:9 6:12>"); - } - - void test_cxx_parser_finds_non_type_custom_pointer_template_argument_of_explicit_template_specialization() - { - std::shared_ptr client = parseCode( - "class P\n" - "{};\n" - "template \n" - "class A\n" - "{};\n" - "P p;\n" - "template <>\n" - "class A<&p>\n" - "{\n" - "};\n" - ); - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A<&p>->P <8:9 8:10>"); - } - - void test_cxx_parser_finds_non_type_custom_reference_template_argument_of_explicit_template_specialization() - { - std::shared_ptr client = parseCode( - "class P\n" - "{};\n" - "template \n" - "class A\n" - "{};\n" - "P p;\n" - "template <>\n" - "class A

\n" - "{\n" - "};\n" - ); - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A<&p>->P <8:9 8:9>"); - } - - void test_cxx_parser_finds_non_type_nullptr_template_argument_of_explicit_template_specialization() - { - std::shared_ptr client = parseCode( - "#include \n" - "template \n" - "class A\n" - "{};\n" - "template <>\n" - "class A\n" - "{\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A->nullptr_t <6:9 6:15>"); - } - - void test_cxx_parser_finds_template_template_argument_of_explicit_template_specialization() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{};\n" - "template class T>\n" - "class B\n" - "{};\n" - "template <>\n" - "class B\n" - "{\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "B->A <8:9 8:9>"); - } - - void test_cxx_parser_finds_explicit_partial_template_specialization() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - "};\n" - "template \n" - "class A\n" - "{\n" - "};\n" - ); - TS_ASSERT_EQUALS(client->templateSpecializations.size(), 1); - TS_ASSERT_EQUALS(client->templateSpecializations[0], "class A -> A <6:7 6:7>"); - } - - void test_cxx_parser_finds_type_template_argument_of_explicit_partial_template_specialization() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - "};\n" - "template \n" - "class A\n" - "{\n" - "};\n" - ); - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 2); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A->A::T <6:9 6:9>"); - TS_ASSERT_EQUALS(client->templateArgumentTypes[1], "A->int <6:12 6:14>"); - } - - void test_cxx_parser_finds_non_type_int_template_argument_of_explicit_partial_template_specialization() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - "};\n" - "template \n" - "class A<3, U>\n" - "{\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 2); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A<3, int U>->int <6:9 6:9>"); - TS_ASSERT_EQUALS(client->templateArgumentTypes[1], "A<3, int U>->int <6:12 6:12>"); - } - - void test_cxx_parser_finds_non_type_bool_template_argument_of_explicit_partial_template_specialization() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - "};\n" - "template \n" - "class A\n" - "{\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 2); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A->bool <6:9 6:12>"); - TS_ASSERT_EQUALS(client->templateArgumentTypes[1], "A->bool <6:15 6:15>"); - } - - void test_cxx_parser_finds_non_type_custom_pointer_template_argument_of_explicit_partial_template_specialization() - { - std::shared_ptr client = parseCode( - "class P\n" - "{};\n" - "template \n" - "class A\n" - "{};\n" - "P p;\n" - "template \n" - "class A<&p, q>\n" - "{\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 2); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A<&p, P * q>->P <8:9 8:10>"); - TS_ASSERT_EQUALS(client->templateArgumentTypes[1], "A<&p, P * q>->P <8:13 8:13>"); - } - - void test_cxx_parser_finds_non_type_custom_reference_template_argument_of_explicit_partial_template_specialization() - { - std::shared_ptr client = parseCode( - "class P\n" - "{};\n" - "template \n" - "class A\n" - "{};\n" - "P p;\n" - "template \n" - "class A\n" - "{\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 2); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A<&p, P & q>->P <8:9 8:9>"); // why reference here? - TS_ASSERT_EQUALS(client->templateArgumentTypes[1], "A<&p, P & q>->P <8:12 8:12>"); - } - - void test_cxx_parser_finds_non_type_nullptr_template_argument_of_explicit_partial_template_specialization() - { - std::shared_ptr client = parseCode( - "#include \n" - "template \n" - "class A\n" - "{};\n" - "template \n" - "class A\n" - "{\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 2); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A->nullptr_t <6:9 6:15>"); - TS_ASSERT_EQUALS(client->templateArgumentTypes[1], "A->std::nullptr_t <6:18 6:18>"); - } - - void test_cxx_parser_finds_template_template_argument_of_explicit_partial_template_specialization() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{};\n" - "template class T, template class U>\n" - "class B\n" - "{};\n" - "template class U>\n" - "class B\n" - "{\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 2); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "B typename U>->A <8:9 8:9>"); - TS_ASSERT_EQUALS(client->templateArgumentTypes[1], "B typename U>->B typename U>::U <8:12 8:12>"); - } - - - void test_cxx_parser_finds_non_type_template_argument_that_depends_on_type_template_parameter_of_explicit_partial_template_specialization() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - "};\n" - "template \n" - "class A<3, T2, T3>\n" - "{\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 3); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A<3, typename T2, T2 T3>->int <6:9 6:9>"); - TS_ASSERT_EQUALS(client->templateArgumentTypes[1], "A<3, typename T2, T2 T3>->A<3, typename T2, T2 T3>::T2 <6:12 6:13>"); - TS_ASSERT_EQUALS(client->templateArgumentTypes[2], "A<3, typename T2, T2 T3>->A<3, typename T2, T2 T3>::T2 <6:16 6:17>"); - } - - void test_cxx_parser_finds_non_type_template_argument_that_depends_on_template_template_parameter_of_explicit_partial_template_specialization() - { - std::shared_ptr client = parseCode( - "template class T2, T2 T3>\n" - "class A\n" - "{\n" - "};\n" - "template class T2, T2 T3>\n" - "class A<3, T2, T3>\n" - "{\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 3); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A<3, template typename T2, T2 T3>->int <6:9 6:9>"); - TS_ASSERT_EQUALS(client->templateArgumentTypes[1], "A<3, template typename T2, T2 T3>->A<3, template typename T2, T2 T3>::T2 <6:12 6:13>"); - TS_ASSERT_EQUALS(client->templateArgumentTypes[2], "A<3, template typename T2, T2 T3>->A<3, template typename T2, T2 T3>::T2 <6:16 6:17>"); - } - - void test_cxx_parser_finds_correct_name_of_explicit_template_specialization() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - "};\n" - "template \n" - "class A\n" - "{\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->classes.size(), 2); - TS_ASSERT_EQUALS(client->classes[0], "A <1:1 <2:7 2:7> 4:1>"); - TS_ASSERT_EQUALS(client->classes[1], "A <5:1 <6:7 6:7> 8:1>"); - } - - void test_cxx_parser_finds_correct_field_member_name_of_template_class_in_declaration() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - " int foo;\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->fields.size(), 1); - TS_ASSERT_EQUALS(client->fields[0], "private int A::foo <4:6 4:8>"); - } - - void test_cxx_parser_finds_correct_type_of_field_member_of_template_class_in_declaration() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - " T foo;\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->fields.size(), 1); - TS_ASSERT_EQUALS(client->fields[0], "private A::T A::foo <4:4 4:6>"); - } - - void test_cxx_parser_finds_implicit_template_class_specialization() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - " T foo;\n" - "};\n" - "\n" - "A a;\n" - ); - - TS_ASSERT_EQUALS(client->templateSpecializations.size(), 1); - TS_ASSERT_EQUALS(client->templateSpecializations[0], "class A -> A <7:8 7:8>"); - } - - void test_cxx_parser_finds_class_inheritance_from_implicit_template_class_specialization() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - " T foo;\n" - "};\n" - "\n" - "class B: public A\n" - "{\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->inheritances.size(), 1); - TS_ASSERT_EQUALS(client->inheritances[0], "B : public A <7:10 7:22>"); - } - - void test_cxx_parser_finds_template_class_specialization_with_template_argument() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - " T foo;\n" - "};\n" - "\n" - "template \n" - "class B: public A\n" - "{\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->inheritances.size(), 1); - TS_ASSERT_EQUALS(client->inheritances[0], "B : public A::U> <8:10 8:20>"); - } - - void test_cxx_parser_finds_template_class_constructor_usage_of_field() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - " A(): foo() {}\n" - " T foo;\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->usages.size(), 1); - TS_ASSERT_EQUALS(client->usages[0], "void A::A() -> A::foo <4:7 4:9>"); - } - void test_cxx_parser_finds_enum_definition_in_template_class() { std::shared_ptr client = parseCode( @@ -2261,7 +930,7 @@ public: " TEST_TWO\n" " };\n" "};\n" - ); + ); TS_ASSERT_EQUALS(client->enums.size(), 1); TS_ASSERT_EQUALS(client->enums[0], "private A::TestType <4:2 <4:7 4:14> 8:2>"); @@ -2280,10 +949,10 @@ public: " };\n" " TestType foo;\n" "};\n" - ); + ); - TS_ASSERT_EQUALS(client->fields.size(), 1); - TS_ASSERT_EQUALS(client->fields[0], "private A::TestType A::foo <9:11 9:13>"); + TS_ASSERT_EQUALS(client->typeUses.size(), 1); + TS_ASSERT_EQUALS(client->typeUses[0], "A::foo -> A::TestType <9:2 9:9>"); } void test_cxx_parser_finds_enum_constants_in_template_class() @@ -2298,25 +967,11 @@ public: " TEST_TWO\n" " };\n" "};\n" - ); + ); TS_ASSERT_EQUALS(client->enumConstants.size(), 2); - TS_ASSERT_EQUALS(client->enumConstants[0], "A::TestType::TEST_ONE <6:3 6:3>"); - TS_ASSERT_EQUALS(client->enumConstants[1], "A::TestType::TEST_TWO <7:3 7:3>"); - } - - void test_cxx_parser_finds_correct_field_member_type_of_nested_template_class_in_declaration_____typedef() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{\n" - " typedef T TempType;" - "};\n" - ); - - TS_ASSERT_EQUALS(client->typedefs.size(), 1); - TS_ASSERT_EQUALS(client->typedefs[0], "private A::T -> A::TempType <4:12 4:19>"); + TS_ASSERT_EQUALS(client->enumConstants[0], "A::TestType::TEST_ONE <6:3 6:10>"); + TS_ASSERT_EQUALS(client->enumConstants[1], "A::TestType::TEST_TWO <7:3 7:10>"); } void test_cxx_parser_finds_correct_field_member_type_of_nested_template_class_in_declaration() @@ -2330,24 +985,1376 @@ public: " T foo;\n" " };\n" "};\n" - ); + ); - TS_ASSERT_EQUALS(client->fields.size(), 1); - TS_ASSERT_EQUALS(client->fields[0], "private A::T A::B::foo <6:5 6:7>"); + TS_ASSERT_EQUALS(client->typeUses.size(), 1); + TS_ASSERT_EQUALS(client->typeUses[0], "A::B::foo -> A::T <6:3 6:3>"); } - void test_cxx_parser_finds_correct_method_member_name_of_template_class_in_declaration() + + + +/////////////////////////////////////////////////////////////////////////////// +// test finding usages of symbols + + void test_cxx_parser_finds_type_usage_of_global_variable() + { + std::shared_ptr client = parseCode( + "int x;\n" + ); + + TS_ASSERT_EQUALS(client->typeUses.size(), 1); + TS_ASSERT_EQUALS(client->typeUses[0], "x -> int <1:1 1:3>"); + } + + void test_cxx_parser_finds_typedefs_type_use() + { + std::shared_ptr client = parseCode( + "typedef unsigned int uint;\n" + ); + + TS_ASSERT_EQUALS(client->typeUses.size(), 1); + TS_ASSERT_EQUALS(client->typeUses[0], "uint -> unsigned int <1:9 1:16>"); + } + + void test_cxx_parser_finds_typedef_that_uses_type_defined_in_named_namespace() + { + std::shared_ptr client = parseCode( + "namespace test\n" + "{\n" + " struct TestStruct{};\n" + "}\n" + "typedef test::TestStruct globalTestStruct;\n" + ); + + TS_ASSERT_EQUALS(client->typeUses.size(), 1); + TS_ASSERT_EQUALS(client->typeUses[0], "globalTestStruct -> test::TestStruct <5:15 5:24>"); + } + + void test_cxx_parser_finds_type_use_of_typedef() + { + std::shared_ptr client = parseCode( + "typedef unsigned int uint;\n" + "uint number;\n" + ); + + TS_ASSERT_EQUALS(client->typeUses.size(), 2); + TS_ASSERT_EQUALS(client->typeUses[1], "number -> uint <2:1 2:4>"); + } + + void test_cxx_parser_finds_class_default_private_inheritance() + { + std::shared_ptr client = parseCode( + "class A {};\n" + "class B : A {};\n" + ); + + TS_ASSERT_EQUALS(client->inheritances.size(), 1); + TS_ASSERT_EQUALS(client->inheritances[0], "B : private A <2:11 2:11>"); + } + + void test_cxx_parser_finds_class_public_inheritance() + { + std::shared_ptr client = parseCode( + "class A {};\n" + "class B : public A {};\n" + ); + + TS_ASSERT_EQUALS(client->inheritances.size(), 1); + TS_ASSERT_EQUALS(client->inheritances[0], "B : public A <2:18 2:18>"); + } + + void test_cxx_parser_finds_class_protected_inheritance() + { + std::shared_ptr client = parseCode( + "class A {};\n" + "class B : protected A {};\n" + ); + + TS_ASSERT_EQUALS(client->inheritances.size(), 1); + TS_ASSERT_EQUALS(client->inheritances[0], "B : protected A <2:21 2:21>"); + } + + void test_cxx_parser_finds_class_private_inheritance() + { + std::shared_ptr client = parseCode( + "class A {};\n" + "class B : private A {};\n" + ); + + TS_ASSERT_EQUALS(client->inheritances.size(), 1); + TS_ASSERT_EQUALS(client->inheritances[0], "B : private A <2:19 2:19>"); + } + + void test_cxx_parser_finds_class_multiple_inheritance() + { + std::shared_ptr client = parseCode( + "class A {};\n" + "class B {};\n" + "class C\n" + " : public A\n" + " , private B\n" + "{};\n" + ); + + TS_ASSERT_EQUALS(client->inheritances.size(), 2); + TS_ASSERT_EQUALS(client->inheritances[0], "C : public A <4:11 4:11>"); + TS_ASSERT_EQUALS(client->inheritances[1], "C : private B <5:12 5:12>"); + } + + void test_cxx_parser_finds_struct_default_public_inheritance() + { + std::shared_ptr client = parseCode( + "struct A {};\n" + "struct B : A {};\n" + ); + + TS_ASSERT_EQUALS(client->inheritances.size(), 1); + TS_ASSERT_EQUALS(client->inheritances[0], "B : public A <2:12 2:12>"); + } + + void test_cxx_parser_finds_struct_public_inheritance() + { + std::shared_ptr client = parseCode( + "struct A {};\n" + "struct B : public A {};\n" + ); + + TS_ASSERT_EQUALS(client->inheritances.size(), 1); + TS_ASSERT_EQUALS(client->inheritances[0], "B : public A <2:19 2:19>"); + } + + void test_cxx_parser_finds_struct_protected_inheritance() + { + std::shared_ptr client = parseCode( + "struct A {};\n" + "struct B : protected A {};\n" + ); + + TS_ASSERT_EQUALS(client->inheritances.size(), 1); + TS_ASSERT_EQUALS(client->inheritances[0], "B : protected A <2:22 2:22>"); + } + + void test_cxx_parser_finds_struct_private_inheritance() + { + std::shared_ptr client = parseCode( + "struct A {};\n" + "struct B : private A {};\n" + ); + + TS_ASSERT_EQUALS(client->inheritances.size(), 1); + TS_ASSERT_EQUALS(client->inheritances[0], "B : private A <2:20 2:20>"); + } + + void test_cxx_parser_finds_struct_multiple_inheritance() + { + std::shared_ptr client = parseCode( + "struct A {};\n" + "struct B {};\n" + "struct C\n" + " : public A\n" + " , private B\n" + "{};\n" + ); + + TS_ASSERT_EQUALS(client->inheritances.size(), 2); + TS_ASSERT_EQUALS(client->inheritances[0], "C : public A <4:11 4:11>"); + TS_ASSERT_EQUALS(client->inheritances[1], "C : private B <5:12 5:12>"); + } + + void test_cxx_parser_finds_method_override_when_virtual() + { + std::shared_ptr client = parseCode( + "class A {\n" + " virtual void foo();\n" + "};\n" + "class B : public A {\n" + " void foo();\n" + "};" + ); + + TS_ASSERT_EQUALS(client->overrides.size(), 1); + TS_ASSERT_EQUALS(client->overrides[0], "void A::foo() -> void B::foo() <5:7 5:9>"); + } + + void test_cxx_parser_finds_multi_layer_method_overrides() + { + std::shared_ptr client = parseCode( + "class A {\n" + " virtual void foo();\n" + "};\n" + "class B : public A {\n" + " void foo();\n" + "};\n" + "class C : public B {\n" + " void foo();\n" + "};" + ); + + TS_ASSERT_EQUALS(client->overrides.size(), 2); + TS_ASSERT_EQUALS(client->overrides[0], "void A::foo() -> void B::foo() <5:7 5:9>"); + TS_ASSERT_EQUALS(client->overrides[1], "void B::foo() -> void C::foo() <8:7 8:9>"); + } + + void test_cxx_parser_finds_method_overrides_on_different_return_types() + { + std::shared_ptr client = parseCode( + "class A {\n" + " virtual void foo();\n" + "};\n" + "class B : public A {\n" + " int foo();\n" + "};\n", + false + ); + + TS_ASSERT_EQUALS(client->overrides.size(), 1); + TS_ASSERT_EQUALS(client->overrides[0], "void A::foo() -> int B::foo() <5:6 5:8>"); + TS_ASSERT_EQUALS(client->errors.size(), 1); + } + + void test_cxx_parser_finds_no_method_override_when_not_virtual() + { + std::shared_ptr client = parseCode( + "class A {\n" + " void foo();\n" + "};\n" + "class B : public A {\n" + " void foo();\n" + "};" + ); + + TS_ASSERT_EQUALS(client->overrides.size(), 0); + } + + void test_cxx_parser_finds_no_method_overrides_on_different_signatures() + { + std::shared_ptr client = parseCode( + "class A {\n" + " virtual void foo(int a);\n" + "};\n" + "class B : public A {\n" + " int foo(int a, int b);\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->overrides.size(), 0); + } + + void test_cxx_parser_finds_call_in_function() + { + std::shared_ptr client = parseCode( + "int sum(int a, int b)\n" + "{\n" + " return a + b;\n" + "}\n" + "int main()\n" + "{\n" + " sum(1, 2);\n" + "}\n" + ); + + TS_ASSERT_EQUALS(client->calls.size(), 1); + TS_ASSERT_EQUALS(client->calls[0], "int main() -> int sum(int, int) <7:2 7:4>"); + } + + void test_cxx_parser_finds_call_in_function_with_right_signature() + { + std::shared_ptr client = parseCode( + "int sum(int a, int b)\n" + "{\n" + " return a + b;\n" + "}\n" + "void func()\n" + "{\n" + "}\n" + "void func(bool right)\n" + "{\n" + " sum(1, 2);\n" + "}\n" + ); + + TS_ASSERT_EQUALS(client->calls.size(), 1); + TS_ASSERT_EQUALS(client->calls[0], "void func(bool) -> int sum(int, int) <10:2 10:4>"); + } + + void test_cxx_parser_finds_call_to_function_with_right_signature() + { + std::shared_ptr client = parseCode( + "int sum(int a, int b)\n" + "{\n" + " return a + b;\n" + "}\n" + "float sum(float a, float b)\n" + "{\n" + " return a + b;\n" + "}\n" + "int main()\n" + "{\n" + " sum(1, 2);\n" + " sum(1.0f, 0.5f);\n" + "}\n" + ); + + TS_ASSERT_EQUALS(client->calls.size(), 2); + TS_ASSERT_EQUALS(client->calls[0], "int main() -> int sum(int, int) <11:2 11:4>"); + TS_ASSERT_EQUALS(client->calls[1], "int main() -> float sum(float, float) <12:2 12:4>"); + } + + void test_cxx_parser_finds_function_call_in_function_parameter_list() + { + std::shared_ptr client = parseCode( + "int sum(int a, int b)\n" + "{\n" + " return a + b;\n" + "}\n" + "int main()\n" + "{\n" + " return sum(1, sum(2, 3));\n" + "}\n" + ); + + TS_ASSERT_EQUALS(client->calls.size(), 2); + TS_ASSERT_EQUALS(client->calls[0], "int main() -> int sum(int, int) <7:9 7:11>"); + TS_ASSERT_EQUALS(client->calls[1], "int main() -> int sum(int, int) <7:16 7:18>"); + } + + void test_cxx_parser_finds_function_call_in_method() + { + std::shared_ptr client = parseCode( + "int sum(int a, int b)\n" + "{\n" + " return a + b;\n" + "}\n" + "class App\n" + "{\n" + " int main()\n" + " {\n" + " return sum(1, 2);\n" + " }\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->calls.size(), 1); + TS_ASSERT_EQUALS(client->calls[0], "int App::main() -> int sum(int, int) <9:10 9:12>"); + } + + void test_cxx_parser_finds_implicit_constructor_without_definition_call() + { + std::shared_ptr client = parseCode( + "class App\n" + "{\n" + "};\n" + "int main()\n" + "{\n" + " App app;\n" + "}\n" + ); + + TS_ASSERT_EQUALS(client->calls.size(), 1); + TS_ASSERT_EQUALS(client->calls[0], "int main() -> void App::App() <6:6 6:8>"); + } + + void test_cxx_parser_finds_explicit_constructor_call() + { + std::shared_ptr client = parseCode( + "class App\n" + "{\n" + "public:\n" + " App() {}\n" + "};\n" + "int main()\n" + "{\n" + " App();\n" + "}\n" + ); + + TS_ASSERT_EQUALS(client->calls.size(), 1); + TS_ASSERT_EQUALS(client->calls[0], "int main() -> void App::App() <8:2 8:4>"); + } + + void test_cxx_parser_finds_explicit_constructor_call_of_field() + { + std::shared_ptr client = parseCode( + "class Item\n" + "{\n" + "};\n" + "class App\n" + "{\n" + "public:\n" + " App() : item() {}\n" + " Item item;\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->calls.size(), 1); + TS_ASSERT_EQUALS(client->calls[0], "void App::App() -> void Item::Item() <7:10 7:13>"); + } + + void test_cxx_parser_finds_function_call_in_member_initialization() + { + std::shared_ptr client = parseCode( + "int one() { return 1; }\n" + "class Item\n" + "{\n" + "public:\n" + " Item(int n) {}\n" + "};\n" + "class App\n" + "{\n" + " App()\n" + " : item(one())" + " {}\n" + " Item item;\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->calls.size(), 2); + TS_ASSERT_EQUALS(client->calls[0], "void App::App() -> void Item::Item(int) <10:5 10:8>"); + TS_ASSERT_EQUALS(client->calls[1], "void App::App() -> int one() <10:10 10:12>"); + } + + void test_cxx_parser_finds_copy_constructor_call() + { + std::shared_ptr client = parseCode( + "class App\n" + "{\n" + "public:\n" + " App() {}\n" + " App(const App& other) {}\n" + "};\n" + "int main()\n" + "{\n" + " App app;\n" + " App app2(app);\n" + "}\n" + ); + + TS_ASSERT_EQUALS(client->calls.size(), 2); + TS_ASSERT_EQUALS(client->calls[0], "int main() -> void App::App() <9:6 9:8>"); + TS_ASSERT_EQUALS(client->calls[1], "int main() -> void App::App(App const &) <10:6 10:9>"); + } + + void test_cxx_parser_finds_global_variable_constructor_call() + { + std::shared_ptr client = parseCode( + "class App\n" + "{\n" + "public:\n" + " App() {}\n" + "};\n" + "App app;\n" + ); + + TS_ASSERT_EQUALS(client->calls.size(), 1); + TS_ASSERT_EQUALS(client->calls[0], "app -> void App::App() <6:5 6:7>"); + } + + void test_cxx_parser_finds_global_variable_function_call() + { + std::shared_ptr client = parseCode( + "int one() { return 1; }\n" + "int a = one();\n" + ); + + TS_ASSERT_EQUALS(client->calls.size(), 1); + TS_ASSERT_EQUALS(client->calls[0], "a -> int one() <2:9 2:11>"); + } + + void test_cxx_parser_finds_operator_call() + { + std::shared_ptr client = parseCode( + "class App\n" + "{\n" + "public:\n" + " void operator+(int a)\n" + " {\n" + " }\n" + "};\n" + "int main()\n" + "{\n" + " App app;\n" + " app + 2;\n" + "}\n" + ); + + TS_ASSERT_EQUALS(client->calls.size(), 2); + TS_ASSERT_EQUALS(client->calls[0], "int main() -> void App::App() <10:6 10:8>"); + TS_ASSERT_EQUALS(client->calls[1], "int main() -> void App::operator+(int) <11:6 11:6>"); + } + + void test_cxx_parser_finds_usage_of_global_variable_in_function() + { + std::shared_ptr client = parseCode( + "int bar;\n" + "\n" + "int main()\n" + "{\n" + " bar = 1;\n" + "}\n" + ); + + TS_ASSERT_EQUALS(client->usages.size(), 1); + TS_ASSERT_EQUALS(client->usages[0], "int main() -> bar <5:2 5:4>"); + } + + void test_cxx_parser_finds_usage_of_global_variable_in_global_variable_initialization() + { + std::shared_ptr client = parseCode( + "int a = 0;\n" + "int b[] = {a};\n" + ); + + TS_ASSERT_EQUALS(client->usages.size(), 2); // FIXME: this usage is recorded twice (by InitList and ImplicitCast) + TS_ASSERT_EQUALS(client->usages[0], "b -> a <2:12 2:12>"); + } + + void test_cxx_parser_finds_usage_of_global_variable_in_method() + { + std::shared_ptr client = parseCode( + "int bar;\n" + "\n" + "class App\n" + "{\n" + " void foo()\n" + " {\n" + " bar = 1;\n" + " }\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->usages.size(), 1); + TS_ASSERT_EQUALS(client->usages[0], "void App::foo() -> bar <7:3 7:5>"); + } + + void test_cxx_parser_finds_usage_of_field_in_method() + { + std::shared_ptr client = parseCode( + "class App\n" + "{\n" + " void foo()\n" + " {\n" + " bar = 1;\n" + " this->bar = 2;\n" + " }\n" + " int bar;\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->usages.size(), 2); + TS_ASSERT_EQUALS(client->usages[0], "void App::foo() -> App::bar <5:3 5:5>"); + TS_ASSERT_EQUALS(client->usages[1], "void App::foo() -> App::bar <6:9 6:11>"); + } + + void test_cxx_parser_finds_usage_of_field_in_initialization_list() + { + std::shared_ptr client = parseCode( + "class App\n" + "{\n" + " App()\n" + " : bar(42)\n" + " {}\n" + " int bar;\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->usages.size(), 1); + TS_ASSERT_EQUALS(client->usages[0], "void App::App() -> App::bar <4:5 4:7>"); + } + + void test_cxx_parser_finds_return_type_use_in_function() + { + std::shared_ptr client = parseCode( + "double PI()\n" + "{\n" + " return 3.14159265359;\n" + "}\n" + ); + + TS_ASSERT_EQUALS(client->typeUses.size(), 1); + TS_ASSERT_EQUALS(client->typeUses[0], "double PI() -> double <1:1 1:6>"); + } + + void test_cxx_parser_finds_parameter_type_uses_in_function() + { + std::shared_ptr client = parseCode( + "void ceil(float a)\n" + "{\n" + "}\n" + ); + + TS_ASSERT_EQUALS(client->typeUses.size(), 2); + TS_ASSERT_EQUALS(client->typeUses[0], "void ceil(float) -> void <1:1 1:4>"); + TS_ASSERT_EQUALS(client->typeUses[1], "void ceil(float) -> float <1:11 1:15>"); + } + + void test_cxx_parser_finds_parameter_type_uses_in_constructor() + { + std::shared_ptr client = parseCode( + "class A\n" + "{\n" + " A(int a);\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->typeUses.size(), 1); + TS_ASSERT_EQUALS(client->typeUses[0], "void A::A(int) -> int <3:4 3:6>"); + } + + void test_cxx_parser_finds_type_uses_in_function_body() + { + std::shared_ptr client = parseCode( + "int main()\n" + "{\n" + " int a = 42;\n" + "}\n" + ); + + TS_ASSERT_EQUALS(client->typeUses.size(), 2); + TS_ASSERT_EQUALS(client->typeUses[0], "int main() -> int <1:1 1:3>"); + TS_ASSERT_EQUALS(client->typeUses[1], "int main() -> int <3:2 3:4>"); + } + + void test_cxx_parser_finds_type_uses_in_method_body() + { + std::shared_ptr client = parseCode( + "class A\n" + "{\n" + " int main()\n" + " {\n" + " int a = 42;\n" + " return a;\n" + " }\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->typeUses.size(), 2); + TS_ASSERT_EQUALS(client->typeUses[0], "int A::main() -> int <3:2 3:4>"); + TS_ASSERT_EQUALS(client->typeUses[1], "int A::main() -> int <5:3 5:5>"); + } + + void test_cxx_parser_finds_type_uses_in_loops_and_conditions() + { + std::shared_ptr client = parseCode( + "int main()\n" + "{\n" + " if (true)\n" + " {\n" + " int a = 42;\n" + " }\n" + " for (int i = 0; i < 10; i++)\n" + " {\n" + " int b = i * 2;\n" + " }\n" + "}\n" + ); + + TS_ASSERT_EQUALS(client->typeUses.size(), 4); + TS_ASSERT_EQUALS(client->typeUses[0], "int main() -> int <1:1 1:3>"); + TS_ASSERT_EQUALS(client->typeUses[1], "int main() -> int <5:3 5:5>"); + TS_ASSERT_EQUALS(client->typeUses[2], "int main() -> int <7:7 7:9>"); + TS_ASSERT_EQUALS(client->typeUses[3], "int main() -> int <9:3 9:5>"); + } + + void test_cxx_parser_finds_type_uses_of_base_class_in_derived_constructor() + { + std::shared_ptr client = parseCode( + "class A\n" + "{\n" + "public:\n" + " A(int n) {}" + "};\n" + "class B : public A\n" + "{\n" + "public:\n" + " B() : A(42) {}\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->typeUses.size(), 2); + TS_ASSERT_EQUALS(client->typeUses[0], "void A::A(int) -> int <4:4 4:6>"); + TS_ASSERT_EQUALS(client->typeUses[1], "void B::B() -> A <8:8 8:8>"); + } + + void test_cxx_parser_finds_enum_uses_in_global_space() + { + std::shared_ptr client = parseCode( + "enum A\n" + "{\n" + " B,\n" + " C\n" + "};\n" + "A a = B;\n" + "A* aPtr = new A;\n" + ); + + TS_ASSERT_EQUALS(client->usages.size(), 1); + TS_ASSERT_EQUALS(client->usages[0], "a -> A::B <6:7 6:7>"); + TS_ASSERT_EQUALS(client->typeUses.size(), 3); + TS_ASSERT_EQUALS(client->typeUses[0], "a -> A <6:1 6:1>"); + TS_ASSERT_EQUALS(client->typeUses[1], "aPtr -> A <7:1 7:1>"); + TS_ASSERT_EQUALS(client->typeUses[2], "aPtr -> A <7:15 7:15>"); + TS_ASSERT_EQUALS(client->globalVariables.size(), 2); + TS_ASSERT_EQUALS(client->globalVariables[0], "a <6:3 6:3>"); + TS_ASSERT_EQUALS(client->globalVariables[1], "aPtr <7:4 7:7>"); + } + + void test_cxx_parser_finds_enum_uses_in_function_body() + { + std::shared_ptr client = parseCode( + "enum A\n" + "{\n" + " B,\n" + " C\n" + "};\n" + "int main()\n" + "{\n" + " A a = B;\n" + " A* aPtr = new A;\n" + "}\n" + ); + + TS_ASSERT_EQUALS(client->usages.size(), 1); + TS_ASSERT_EQUALS(client->usages[0], "int main() -> A::B <8:8 8:8>"); + TS_ASSERT_EQUALS(client->typeUses.size(), 4); + TS_ASSERT_EQUALS(client->typeUses[0], "int main() -> int <6:1 6:3>"); + TS_ASSERT_EQUALS(client->typeUses[1], "int main() -> A <8:2 8:2>"); + TS_ASSERT_EQUALS(client->typeUses[2], "int main() -> A <9:2 9:2>"); + TS_ASSERT_EQUALS(client->typeUses[3], "int main() -> A <9:16 9:16>"); + } + + void test_cxx_parser_finds_macro_expand() + { + std::shared_ptr client = parseCode( + "#define PI 3.14159265359\n" + "void test()\n" + "{\n" + "double i = PI;" + "};\n" + ); + TS_ASSERT_EQUALS(client->macroUses.size(), 1); + TS_ASSERT_EQUALS(client->macroUses[0], "PI <4:12 4:13>"); + } + + void test_cxx_parser_finds_usage_of_template_template_parameter_of_template_class_specialized_with_concrete_type() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{};\n" + "template class T>\n" + "class B\n" + "{\n" + " void foo(T parameter)\n" + " {}\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->typeUses.size(), 2); + TS_ASSERT_EQUALS(client->typeUses[0], "void B typename T>::foo(B typename T>::T) -> void <7:2 7:5>"); + TS_ASSERT_EQUALS(client->typeUses[1], "void B typename T>::foo(B typename T>::T) -> B typename T>::T <7:11 7:11>"); + } + + void test_cxx_parser_finds_usage_of_template_template_parameter_of_template_class_specialized_with_template_type() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{};\n" + "template class T>\n" + "class B\n" + "{\n" + " template \n" + " void foo(T parameter)\n" + " {}\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->typeUses.size(), 2); + TS_ASSERT_EQUALS(client->typeUses[0], "void B typename T>::foo(B typename T>::T) -> void <8:2 8:5>"); + TS_ASSERT_EQUALS(client->typeUses[1], "void B typename T>::foo(B typename T>::T) -> B typename T>::T typename T>::foo::U> <8:11 8:11>"); + } + + void test_cxx_parser_finds_typedef_in_other_class_that_depends_on_own_template_parameter() { std::shared_ptr client = parseCode( "template \n" "class A\n" "{\n" - " int foo();\n" + "public:\n" + " typedef T type;\n" + "};\n" + "template \n" + "class B\n" + "{\n" + "public:\n" + " typedef typename A::type type;\n" "};\n" - ); - TS_ASSERT_EQUALS(client->methods.size(), 1); - TS_ASSERT_EQUALS(client->methods[0], "private int A::foo() <4:6 4:8>"); + "B::type f = 0;\n" + + ); + + TS_ASSERT_EQUALS(client->typedefs.size(), 4); + TS_ASSERT_EQUALS(client->typedefs[0], "public A::type <5:12 5:15>"); + TS_ASSERT_EQUALS(client->typedefs[1], "public A::type <5:12 5:15>"); + TS_ASSERT_EQUALS(client->typedefs[2], "public B::type <11:30 11:33>"); + TS_ASSERT_EQUALS(client->typedefs[3], "public B::type <11:30 11:33>"); + + TS_ASSERT_EQUALS(client->typeUses.size(), 4); + TS_ASSERT_EQUALS(client->typeUses[0], "A::type -> A::T <5:10 5:10>"); + TS_ASSERT_EQUALS(client->typeUses[1], "B::type -> A::U>::type <11:25 11:28>"); + TS_ASSERT_EQUALS(client->typeUses[2], "B::type -> A::type <11:25 11:28>"); + TS_ASSERT_EQUALS(client->typeUses[3], "f -> B::type <13:9 13:12>"); + //TS_ASSERT_EQUALS(client->typeUses[3], "A::type -> int <13:9 13:12>"); TODO: make this work! + } + + void test_cxx_parser_finds_type_template_argument_of_explicit_template_instantiation() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + "};\n" + "int main()\n" + "{\n" + " A a;\n" + " return 0;\n" + "}\n" + ); + TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); + TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A->int <7:4 7:6>"); + } + void test_cxx_parser_finds_type_template_argument_for_parameter_pack_of_explicit_template_instantiation() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + "};\n" + "int main()\n" + "{\n" + " A();\n" + "}\n" + ); + + TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 2); + TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A<>->int <7:6 7:8>"); + TS_ASSERT_EQUALS(client->templateArgumentTypes[1], "A<>->float <7:11 7:15>"); + } + + void test_cxx_parser_finds_type_template_argument_in_non_default_constructor_of_explicit_template_instaitiation() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + "public:\n" + " A(int data){}\n" + "};\n" + "int main()\n" + "{\n" + " A(5);\n" + "}\n" + ); + TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); + TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A->int <9:4 9:6>"); + } + + void test_cxx_parser_finds_type_template_argument_in_default_constructor_of_explicit_template_instaitiation() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + "public:\n" + " A(){}\n" + "};\n" + "int main()\n" + "{\n" + " A();\n" + "}\n" + ); + TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); + TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A->int <9:4 9:6>"); + } + + void test_cxx_parser_finds_type_template_argument_in_new_expression_of_explicit_template_instaitiation() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + "public:\n" + " A(){}\n" + "};\n" + "int main()\n" + "{\n" + " new A();\n" + "}\n" + ); + TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); + TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A->int <9:8 9:10>"); + } + + void test_cxx_parser_finds_no_template_argument_for_builtin_non_type_int_template_parameter_of_explicit_template_instantiation() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + "};\n" + "int main()\n" + "{\n" + " A<1> a;\n" + " return 0;\n" + "}\n" + ); + TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 0); + } + + void test_cxx_parser_finds_no_template_argument_for_builtin_non_type_bool_template_parameter_of_explicit_template_instantiation() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + "};\n" + "int main()\n" + "{\n" + " A a;\n" + " return 0;\n" + "}\n" + ); + TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 0); + } + + void test_cxx_parser_finds_non_type_custom_pointer_template_argument_of_implicit_template_instantiation() + { + std::shared_ptr client = parseCode( + "class P\n" + "{};\n" + "template \n" + "class A\n" + "{};\n" + "P g_p;\n" + "int main()\n" + "{\n" + " A<&g_p> a;\n" + "}\n" + ); + TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); + TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A<&g_p>->g_p <9:5 9:7>"); + } + + void test_cxx_parser_finds_non_type_custom_reference_template_argument_of_implicit_template_instantiation() + { + std::shared_ptr client = parseCode( + "class P\n" + "{};\n" + "template \n" + "class A\n" + "{};\n" + "P g_p;\n" + "int main()\n" + "{\n" + " A a;\n" + "}\n" + ); + TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); + TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A<&g_p>->g_p <9:4 9:6>"); + } + + void test_cxx_parser_finds_no_template_argument_for_builtin_non_type_int_template_parameter_pack_of_explicit_template_instantiation() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + "};\n" + "int main()\n" + "{\n" + " A<1, 2, 33>();\n" + "}\n" + ); + + TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 0); + } + + void test_cxx_parser_finds_template_template_argument_of_explicit_template_instantiation() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{};\n" + "template class T>\n" + "class B\n" + "{};\n" + "int main()\n" + "{\n" + " B ba;\n" + "}\n" + ); + + TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); + TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "B->A <9:4 9:4>"); + } + + void test_cxx_parser_finds_template_template_argument_for_parameter_pack_of_explicit_template_instantiation() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + "};\n" + "template typename... T>\n" + "class B\n" + "{\n" + "};\n" + "int main()\n" + "{\n" + " B();\n" + "}\n" + ); + + TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 2); + TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "B<>->A <11:4 11:4>"); + TS_ASSERT_EQUALS(client->templateArgumentTypes[1], "B<>->A <11:7 11:7>"); + } + + void test_cxx_parser_finds_template_member_specialization_of_implicit_template_specialization() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + "public:\n" + " T foo() {}\n" + "};\n" + "int main()\n" + "{\n" + " A a;\n" + "}\n" + ); + + TS_ASSERT_EQUALS(client->templateMemberSpecializations.size(), 1); + TS_ASSERT_EQUALS(client->templateMemberSpecializations[0], "int A::foo() -> A::T A::foo() <5:4 5:6>"); + } + + void test_cxx_parser_finds_type_template_argument_of_explicit_template_specialization() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + "};\n" + "template <>\n" + "class A\n" + "{\n" + "};\n" + ); + TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); + TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A->int <6:9 6:11>"); + } + + void test_cxx_parser_finds_no_template_argument_for_builtin_non_type_int_template_parameter_of_explicit_template_specialization() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + "};\n" + "template <>\n" + "class A<1>\n" + "{\n" + "};\n" + ); + TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 0); + } + + void test_cxx_parser_finds_no_template_argument_for_builtin_non_type_bool_template_parameter_of_explicit_template_specialization() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + "};\n" + "template <>\n" + "class A\n" + "{\n" + "};\n" + ); + TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 0); + } + + void test_cxx_parser_finds_non_type_custom_pointer_template_argument_of_explicit_template_specialization() + { + std::shared_ptr client = parseCode( + "class P\n" + "{};\n" + "template \n" + "class A\n" + "{};\n" + "P g_p;\n" + "template <>\n" + "class A<&g_p>\n" + "{\n" + "};\n" + ); + TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); + TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A<&g_p>->g_p <8:10 8:12>"); + } + + void test_cxx_parser_finds_non_type_custom_reference_template_argument_of_explicit_template_specialization() + { + std::shared_ptr client = parseCode( + "class P\n" + "{};\n" + "template \n" + "class A\n" + "{};\n" + "P g_p;\n" + "template <>\n" + "class A\n" + "{\n" + "};\n" + ); + TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); + TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A<&g_p>->g_p <8:9 8:11>"); + } + + void test_cxx_parser_finds_template_template_argument_of_explicit_template_specialization() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{};\n" + "template class T>\n" + "class B\n" + "{};\n" + "template <>\n" + "class B\n" + "{\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); + TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "B->A <8:9 8:9>"); + } + + void test_cxx_parser_finds_type_template_argument_of_explicit_partial_template_specialization() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + "};\n" + "template \n" + "class A\n" + "{\n" + "};\n" + ); + TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 2); + TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A->A::T <6:9 6:9>"); + TS_ASSERT_EQUALS(client->templateArgumentTypes[1], "A->int <6:12 6:14>"); + } + + void test_cxx_parser_finds_no_template_argument_for_builtin_non_type_int_template_parameter_of_explicit_partial_template_specialization() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + "};\n" + "template \n" + "class A<3, U>\n" + "{\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); + TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A<3, int U>->A<3, int U>::U <6:12 6:12>"); + } + + void test_cxx_parser_finds_no_template_argument_for_builtin_non_type_bool_template_parameter_of_explicit_partial_template_specialization() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + "};\n" + "template \n" + "class A\n" + "{\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); + TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A->A::U <6:15 6:15>"); + } + + void test_cxx_parser_finds_template_argument_for_non_type_custom_pointer_template_parameter_of_explicit_partial_template_specialization() + { + std::shared_ptr client = parseCode( + "class P\n" + "{};\n" + "template \n" + "class A\n" + "{};\n" + "P g_p;\n" + "template \n" + "class A<&g_p, q>\n" + "{\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 2); + TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A<&g_p, P * q>->g_p <8:10 8:12>"); + TS_ASSERT_EQUALS(client->templateArgumentTypes[1], "A<&g_p, P * q>->A<&g_p, P * q>::q <8:15 8:15>"); + } + + void test_cxx_parser_finds_template_argument_for_non_type_custom_reference_template_parameter_of_explicit_partial_template_specialization() + { + std::shared_ptr client = parseCode( + "class P\n" + "{};\n" + "template \n" + "class A\n" + "{};\n" + "P g_p;\n" + "template \n" + "class A\n" + "{\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 2); + TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A<&g_p, P & q>->g_p <8:9 8:11>"); // why reference here? + TS_ASSERT_EQUALS(client->templateArgumentTypes[1], "A<&g_p, P & q>->A<&g_p, P & q>::q <8:14 8:14>"); + } + + void test_cxx_parser_finds_template_argument_for_template_template_parameter_of_explicit_partial_template_specialization() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{};\n" + "template class T, template class U>\n" + "class B\n" + "{};\n" + "template class U>\n" + "class B\n" + "{\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 2); + TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "B typename U>->A <8:9 8:9>"); + TS_ASSERT_EQUALS(client->templateArgumentTypes[1], "B typename U>->B typename U>::U <8:12 8:12>"); + } + + void test_cxx_parser_finds_non_type_template_argument_that_depends_on_type_template_parameter_of_explicit_partial_template_specialization() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + "};\n" + "template \n" + "class A<3, T2, T3>\n" + "{\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 2); + TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A<3, typename T2, T2 T3>->A<3, typename T2, T2 T3>::T2 <6:12 6:13>"); + TS_ASSERT_EQUALS(client->templateArgumentTypes[1], "A<3, typename T2, T2 T3>->A<3, typename T2, T2 T3>::T3 <6:16 6:17>"); + } + + //void _test_cxx_parser_finds_non_type_template_argument_that_depends_on_template_template_parameter_of_explicit_partial_template_specialization() + //{ + // std::shared_ptr client = parseCode( + // "template class T2, T2 T3>\n" + // "class A\n" + // "{\n" + // "};\n" + // "template class T2, T2 T3>\n" + // "class A<3, T2, T3>\n" + // "{\n" + // "};\n" + // ); + + // TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 2); + // TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A<3, template typename T2, T2 T3>->A<3, template typename T2, T2 T3>::T2 <6:12 6:13>"); + // TS_ASSERT_EQUALS(client->templateArgumentTypes[1], "A<3, template typename T2, T2 T3>->A<3, template typename T2, T2 T3>::T3 <6:16 6:17>"); + //} + + void test_cxx_parser_finds_implicit_template_class_specialization() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + " T foo;\n" + "};\n" + "\n" + "A a;\n" + ); + + TS_ASSERT_EQUALS(client->templateSpecializations.size(), 1); + TS_ASSERT_EQUALS(client->templateSpecializations[0], "A -> A <2:7 2:7>"); + } + + void test_cxx_parser_finds_class_inheritance_from_implicit_template_class_specialization() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + " T foo;\n" + "};\n" + "\n" + "class B: public A\n" + "{\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->inheritances.size(), 1); + TS_ASSERT_EQUALS(client->inheritances[0], "B : public A <7:17 7:17>"); + } + + void test_cxx_parser_finds_template_class_specialization_with_template_argument() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + " T foo;\n" + "};\n" + "\n" + "template \n" + "class B: public A\n" + "{\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); + TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A::U>->B::U <8:19 8:19>"); + } + + void test_cxx_parser_finds_template_class_constructor_usage_of_field() + { + std::shared_ptr client = parseCode( + "template \n" + "class A\n" + "{\n" + " A(): foo() {}\n" + " T foo;\n" + "};\n" + ); + + TS_ASSERT_EQUALS(client->usages.size(), 1); + TS_ASSERT_EQUALS(client->usages[0], "void A::A() -> A::foo <4:7 4:9>"); } void test_cxx_parser_finds_correct_method_return_type_of_template_class_in_declaration() @@ -2358,10 +2365,10 @@ public: "{\n" " T foo();\n" "};\n" - ); + ); - TS_ASSERT_EQUALS(client->methods.size(), 1); - TS_ASSERT_EQUALS(client->methods[0], "private A::T A::foo() <4:4 4:6>"); + TS_ASSERT_EQUALS(client->typeUses.size(), 1); + TS_ASSERT_EQUALS(client->typeUses[0], "A::T A::foo() -> A::T <4:2 4:2>"); } void test_cxx_parser_finds_type_template_default_argument_type_of_template_class() @@ -2371,20 +2378,20 @@ public: "class A\n" "{\n" "};\n" - ); + ); TS_ASSERT_EQUALS(client->templateDefaultArgumentTypes.size(), 1); TS_ASSERT_EQUALS(client->templateDefaultArgumentTypes[0], "int -> A::T <1:24 1:26>"); } - void test_cxx_parser_does_not_find_default_argument_type_for_non_type_bool_template_parameter_of_template_class() + void test_cxx_parser_finds_no_default_argument_type_for_non_type_bool_template_parameter_of_template_class() { std::shared_ptr client = parseCode( "template \n" "class A\n" "{\n" "};\n" - ); + ); TS_ASSERT_EQUALS(client->templateDefaultArgumentTypes.size(), 0); } @@ -2398,122 +2405,13 @@ public: "template class T = A>\n" "class B\n" "{};\n" - ); + ); TS_ASSERT_EQUALS(client->templateDefaultArgumentTypes.size(), 1); TS_ASSERT_EQUALS(client->templateDefaultArgumentTypes[0], "A -> B typename T>::T <4:40 4:40>"); } - - - void test_cxx_parser_finds_type_template_parameter_of_template_function() - { - std::shared_ptr client = parseCode( - "template \n" - "T test(T a)\n" - "{\n" - " return a;\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateParameterTypes[0], "test::T <1:20 1:20>"); - } - - void test_cxx_parser_finds_non_type_int_template_parameter_of_template_function() - { - std::shared_ptr client = parseCode( - "template \n" - "int test(int a)\n" - "{\n" - " return a + T;\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateParameterTypes[0], "test::T <1:15 1:15>"); - } - - void test_cxx_parser_finds_non_type_bool_template_parameter_of_template_function() - { - std::shared_ptr client = parseCode( - "template \n" - "int test(int a)\n" - "{\n" - " return T ? a : 0;\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateParameterTypes[0], "test::T <1:16 1:16>"); - } - - void test_cxx_parser_finds_non_type_custom_pointer_template_parameter_of_template_function() - { - std::shared_ptr client = parseCode( - "class P\n" - "{};\n" - "template \n" - "int test(int a)\n" - "{\n" - " return a;\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateParameterTypes[0], "test

::p <3:14 3:14>"); - } - - void test_cxx_parser_finds_non_type_custom_reference_template_parameter_of_template_function() - { - std::shared_ptr client = parseCode( - "class P\n" - "{};\n" - "template \n" - "int test(int a)\n" - "{\n" - " return a;\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateParameterTypes[0], "test

::p <3:14 3:14>"); - } - - void test_cxx_parser_finds_non_type_nullptr_template_parameter_of_template_function() - { - std::shared_ptr client = parseCode( - "#include \n" - "template \n" - "int test(int a)\n" - "{\n" - " return a;\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateParameterTypes[0], "test::T <2:26 2:26>"); - } - - void test_cxx_parser_finds_template_template_parameter_of_template_function() - { - std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{};\n" - "template class T>\n" - "int test(int a)\n" - "{\n" - " return a;\n" - "};\n" - ); - - TS_ASSERT_EQUALS(client->templateParameterTypes.size(), 2); - TS_ASSERT_EQUALS(client->templateParameterTypes[0], "A::T <1:20 1:20>"); - TS_ASSERT_EQUALS(client->templateParameterTypes[1], "test typename T>::T <4:36 4:36>"); - } - - void test_cxx_parser_finds_implicit_specialization_of_template_function() + void test_cxx_parser_finds_implicit_instantiation_of_template_function() { std::shared_ptr client = parseCode( "template \n" @@ -2526,10 +2424,10 @@ public: "{\n" " return test(1);\n" "};\n" - ); + ); TS_ASSERT_EQUALS(client->templateSpecializations.size(), 1); - TS_ASSERT_EQUALS(client->templateSpecializations[0], "int test(int) -> test::T test(test::T) <2:3 2:6>"); + TS_ASSERT_EQUALS(client->templateSpecializations[0], "int test(int) -> T test(T) <2:3 2:6>"); } void test_cxx_parser_finds_explicit_specialization_of_template_function() @@ -2546,13 +2444,13 @@ public: "{\n" " return a + a;\n" "};\n" - ); + ); TS_ASSERT_EQUALS(client->templateSpecializations.size(), 1); - TS_ASSERT_EQUALS(client->templateSpecializations[0], "int test(int) -> test::T test(test::T) <8:5 8:8>"); + TS_ASSERT_EQUALS(client->templateSpecializations[0], "int test(int) -> T test(T) <8:5 8:8>"); } - void test_cxx_parser_finds_explicit_type_template_argument_of_explicit_specialization_of_template_function() + void test_cxx_parser_finds_explicit_type_template_argument_of_explicit_instantiation_of_template_function() { std::shared_ptr client = parseCode( "template \n" @@ -2564,9 +2462,9 @@ public: "void test()\n" "{\n" "};\n" - ); + ); TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "void test()->int <7:11 7:11>"); + TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "void test()->int <7:11 7:13>"); } void test_cxx_parser_finds_explicit_type_template_argument_of_function_call_in_function() @@ -2582,10 +2480,10 @@ public: "};\n" ); TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "void test()->int <6:7 6:7>"); + TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "void test()->int <6:7 6:9>"); } - void test_cxx_parser_finds_explicit_non_type_template_argument_of_function_call_in_function() + void test_cxx_parser_finds_no_explicit_non_type_int_template_argument_of_function_call_in_function() { std::shared_ptr client = parseCode( "template \n" @@ -2597,8 +2495,7 @@ public: " return 1;\n" "};\n" ); - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "void test<33>()->int <6:7 6:7>"); + TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 0); } void test_cxx_parser_finds_explicit_template_template_argument_of_function_call_in_function() @@ -2618,7 +2515,7 @@ public: TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "void test()->A <7:7 7:7>"); } - void test_cxx_parser_finds_implicit_type_template_argument_of_function_call_in_function() + void test_cxx_parser_finds_no_implicit_type_template_argument_of_function_call_in_function() { std::shared_ptr client = parseCode( "template \n" @@ -2630,8 +2527,7 @@ public: " return 1;\n" "};\n" ); - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "void test(int)->int <6:5 6:5>"); + TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 0); } void test_cxx_parser_finds_explicit_type_template_argument_of_function_call_in_var_decl() @@ -2646,10 +2542,10 @@ public: "};\n" ); TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "int test()->int <6:17 6:17>"); + TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "int test()->int <6:17 6:19>"); } - void test_cxx_parser_finds_implicit_type_template_argument_of_function_call_in_var_decl() + void test_cxx_parser_finds_no_implicit_type_template_argument_of_function_call_in_var_decl() { std::shared_ptr client = parseCode( "template \n" @@ -2660,13 +2556,9 @@ public: " int foo = test(1);\n" "};\n" ); - TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); - TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "int test(int)->int <6:15 6:15>"); + TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 0); } - - - void test_cxx_parser_finds_type_template_default_argument_type_of_template_function() { std::shared_ptr client = parseCode( @@ -2677,10 +2569,10 @@ public: "\n" "int main()\n" "{\n" - " test();\n" + " test();\n" " return 1;\n" "};\n" - ); + ); TS_ASSERT_EQUALS(client->templateDefaultArgumentTypes.size(), 1); TS_ASSERT_EQUALS(client->templateDefaultArgumentTypes[0], "int -> test::T <1:24 1:26>"); } @@ -2692,7 +2584,7 @@ public: "void test()\n" "{\n" "};\n" - ); + ); TS_ASSERT_EQUALS(client->templateDefaultArgumentTypes.size(), 0); } @@ -2700,14 +2592,14 @@ public: void test_cxx_parser_finds_template_template_default_argument_type_of_template_function() { std::shared_ptr client = parseCode( - "template \n" - "class A\n" - "{};\n" - "template class T = A>\n" - "void test()\n" - "{\n" - "};\n" - ); + "template \n" + "class A\n" + "{};\n" + "template class T = A>\n" + "void test()\n" + "{\n" + "};\n" + ); TS_ASSERT_EQUALS(client->templateDefaultArgumentTypes.size(), 1); TS_ASSERT_EQUALS( @@ -2715,23 +2607,7 @@ public: "A -> test typename T>::T <4:40 4:40>"); } - void test_cxx_parser_finds_lambda_in_function() - { - std::shared_ptr client = parseCode( - "void lambdaCaller()\n" - "{\n" - " [](){}();\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->functions.size(), 2); - TS_ASSERT_EQUALS(client->functions[0], "void lambdaCaller() <1:1 <1:6 1:17> 4:1>"); - TS_ASSERT_EQUALS(client->functions[1], "void lambdaCaller::lambda at 3:2() const <3:5 <3:2 3:2> 3:7>"); - TS_ASSERT_EQUALS(client->calls.size(), 1); - TS_ASSERT_EQUALS(client->calls[0], "void lambdaCaller() -> void lambdaCaller::lambda at 3:2() const <3:2 3:9>"); - } - - void test_cxx_parser_ignores_lambda_in_function_but_still_finds_call_within() + void test_cxx_parser_finds_lambda_calling_a_function() { std::shared_ptr client = parseCode( "void func() {}\n" @@ -2742,17 +2618,76 @@ public: " func();\n" " }();\n" "}\n" - ); + ); - TS_ASSERT_EQUALS(client->functions.size(), 3); - TS_ASSERT_EQUALS(client->functions[0], "void func() <1:1 <1:6 1:9> 1:14>"); - TS_ASSERT_EQUALS(client->functions[1], "void lambdaCaller() <2:1 <2:6 2:17> 8:1>"); - TS_ASSERT_EQUALS(client->functions[2], "void lambdaCaller::lambda at 4:2() const <4:5 <4:2 4:2> 7:2>"); TS_ASSERT_EQUALS(client->calls.size(), 2); - TS_ASSERT_EQUALS(client->calls[0], "void lambdaCaller() -> void lambdaCaller::lambda at 4:2() const <4:2 7:4>"); - TS_ASSERT_EQUALS(client->calls[1], "void lambdaCaller::lambda at 4:2() const -> void func() <6:3 6:8>"); + TS_ASSERT_EQUALS(client->calls[0], "void lambdaCaller() -> void lambdaCaller::lambda at 4:2() <7:3 7:3>"); + TS_ASSERT_EQUALS(client->calls[1], "void lambdaCaller::lambda at 4:2() -> void func() <6:3 6:6>"); } + /////////////////////////////////////////////////////////////////////////////// + // test finding symbol locations + + void test_cxx_parser_finds_correct_location_of_explicit_constructor_defined_in_namespace() + { + std::shared_ptr client = parseCode( + "namespace n\n" + "{\n" + " class App\n" + " {\n" + " public:\n" + " App(int i) {}\n" + " };\n" + "}\n" + "int main()\n" + "{\n" + " n::App a = n::App(2);\n" + "}\n" + ); + + TS_ASSERT_EQUALS(client->calls.size(), 2); + TS_ASSERT_EQUALS(client->calls[1], "int main() -> void n::App::App(int) <11:16 11:18>"); + } + + void test_cxx_parser_finds_macro_define_scope() + { + std::shared_ptr client = parseCode( + "#define MAX(a,b) \\\n" + " ((a)>(b)?(a):(b))" + ); + TS_ASSERT_EQUALS(client->macros.size(), 1); + TS_ASSERT_EQUALS(client->macros[0], "MAX <1:9 <1:9 1:11> 2:17>"); + } + + //void __test_cxx_parser_finds_type_template_argument_of_static_cast_expression() + //{ + // std::shared_ptr client = parseCode( + // "int main()\n" + // "{\n" + // " return static_cast(4.0f);" + // "}\n" + // ); + // TS_ASSERT_EQUALS(client->templateArgumentTypes.size(), 1); + // TS_ASSERT_EQUALS(client->templateArgumentTypes[0], "A<1>->int <0:0 0:0>"); + //} + + //void _test_cxx_parser_finds_implicit_constructor_call_in_initialization() + //{ + // std::shared_ptr client = parseCode( + // "class A\n" + // "{\n" + // "};\n" + // "class B\n" + // "{\n" + // " B(){}\n" + // " A m_a;\n" + // "};\n" + // ); + + // TS_ASSERT_EQUALS(client->calls.size(), 1); + // TS_ASSERT_EQUALS(client->calls[0], "void B::B() -> A::A() <6:2 6:2>"); + //} + void test_cxx_parser_parses_multiple_files() { TestFileManager fm; @@ -2783,9 +2718,9 @@ public: TS_ASSERT_EQUALS(client.structs.size(), 1); TS_ASSERT_EQUALS(client.inheritances.size(), 1); - TS_ASSERT_EQUALS(client.calls.size(), 2); + TS_ASSERT_EQUALS(client.calls.size(), 1); TS_ASSERT_EQUALS(client.usages.size(), 3); - TS_ASSERT_EQUALS(client.typeUses.size(), 8); + TS_ASSERT_EQUALS(client.typeUses.size(), 19); TS_ASSERT_EQUALS(client.files.size(), 3); TS_ASSERT_EQUALS(client.includes.size(), 1); @@ -2823,7 +2758,7 @@ public: TS_ASSERT_EQUALS(client->comments[0], "comment <1:1 2:17>"); } - // void ___test_TEST() + // void _test_TEST() // { // std::shared_ptr client = parseCode( // "template class> class T>\n" @@ -2851,7 +2786,7 @@ private: { } - virtual void prepareParsingFile(const FilePath& filePath) + virtual void startParsingFile(const FilePath& filePath) { } @@ -2870,11 +2805,10 @@ private: } virtual Id onTypedefParsed( - const ParseLocation& location, const NameHierarchy& nameHierarchy, const ParseTypeUsage& underlyingType, - AccessType access + const ParseLocation& location, const NameHierarchy& typedefName, AccessType access ) { - std::string str = addAccessPrefix(underlyingType.dataType->getFullTypeName() + " -> " + nameHierarchy.getFullName(), access); + std::string str = addAccessPrefix(typedefName.getQualifiedName(), access); typedefs.push_back(addLocationSuffix(str, location)); return 0; } @@ -2883,7 +2817,7 @@ private: const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access, const ParseLocation& scopeLocation) { - classes.push_back(addLocationSuffix(addAccessPrefix(nameHierarchy.getFullName(), access), location, scopeLocation)); + classes.push_back(addLocationSuffix(addAccessPrefix(nameHierarchy.getQualifiedName(), access), location, scopeLocation)); return 0; } @@ -2891,57 +2825,45 @@ private: const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access, const ParseLocation& scopeLocation) { - structs.push_back(addLocationSuffix(addAccessPrefix(nameHierarchy.getFullName(), access), location, scopeLocation)); + structs.push_back(addLocationSuffix(addAccessPrefix(nameHierarchy.getQualifiedName(), access), location, scopeLocation)); return 0; } - virtual Id onGlobalVariableParsed(const ParseLocation& location, const ParseVariable& variable) + virtual Id onGlobalVariableParsed(const ParseLocation& location, const NameHierarchy& variable) { - globalVariables.push_back(addLocationSuffix(variableStr(variable), location)); + globalVariables.push_back(addLocationSuffix(variable.getQualifiedName(), location)); return 0; } - virtual Id onFieldParsed(const ParseLocation& location, const ParseVariable& variable, AccessType access) + virtual Id onFieldParsed(const ParseLocation& location, const NameHierarchy& field, AccessType access) { - fields.push_back(addLocationSuffix(addAccessPrefix(variableStr(variable), access), location)); + fields.push_back(addLocationSuffix(addAccessPrefix(field.getQualifiedName(), access), location)); return 0; } virtual Id onFunctionParsed( - const ParseLocation& location, const ParseFunction& function, const ParseLocation& scopeLocation - ){ - functions.push_back(addLocationSuffix(functionStr(function), location, scopeLocation)); - - addTypeUse(function.returnType); - for (const ParseTypeUsage& parameter : function.parameters) - { - addTypeUse(parameter); - } + const ParseLocation& location, const NameHierarchy& function, const ParseLocation& scopeLocation) + { + functions.push_back(addLocationSuffix(function.getQualifiedNameWithSignature(), location, scopeLocation)); return 0; } virtual Id onMethodParsed( - const ParseLocation& location, const ParseFunction& method, AccessType access, AbstractionType abstraction, - const ParseLocation& scopeLocation - ){ - std::string str = functionStr(method); + const ParseLocation& location, const NameHierarchy& method, AccessType access, AbstractionType abstraction, + const ParseLocation& scopeLocation) + { + std::string str = method.getQualifiedNameWithSignature(); str = addAbstractionPrefix(str, abstraction); str = addAccessPrefix(str, access); str = addLocationSuffix(str, location, scopeLocation); methods.push_back(str); - - addTypeUse(method.returnType); - for (const ParseTypeUsage& parameter : method.parameters) - { - addTypeUse(parameter); - } return 0; } virtual Id onNamespaceParsed( const ParseLocation& location, const NameHierarchy& nameHierarchy, const ParseLocation& scopeLocation) { - namespaces.push_back(addLocationSuffix(nameHierarchy.getFullName(), location, scopeLocation)); + namespaces.push_back(addLocationSuffix(nameHierarchy.getQualifiedName(), location, scopeLocation)); return 0; } @@ -2949,176 +2871,115 @@ private: const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access, const ParseLocation& scopeLocation) { - enums.push_back(addLocationSuffix(addAccessPrefix(nameHierarchy.getFullName(), access), location, scopeLocation)); + enums.push_back(addLocationSuffix(addAccessPrefix(nameHierarchy.getQualifiedName(), access), location, scopeLocation)); return 0; } virtual Id onEnumConstantParsed(const ParseLocation& location, const NameHierarchy& nameHierarchy) { - enumConstants.push_back(addLocationSuffix(nameHierarchy.getFullName(), location)); + enumConstants.push_back(addLocationSuffix(nameHierarchy.getQualifiedName(), location)); return 0; } virtual Id onInheritanceParsed( - const ParseLocation& location, const NameHierarchy& nameHierarchy, const NameHierarchy& baseNameHierarchy, AccessType access) + const ParseLocation& location, const NameHierarchy& childNameHierarchy, + const NameHierarchy& parentNameHierarchy, AccessType access) { - std::string str = nameHierarchy.getFullName() + " : " + addAccessPrefix(baseNameHierarchy.getFullName(), access); + std::string str = childNameHierarchy.getQualifiedName() + " : " + addAccessPrefix(parentNameHierarchy.getQualifiedName(), access); inheritances.push_back(addLocationSuffix(str, location)); return 0; } - virtual Id onMethodOverrideParsed(const ParseLocation& location, const ParseFunction& base, const ParseFunction& overrider) + virtual Id onMethodOverrideParsed( + const ParseLocation& location, const NameHierarchy& overridden, const NameHierarchy& overrider) { - overrides.push_back(addLocationSuffix(functionStr(base) + " -> " + functionStr(overrider), location)); + overrides.push_back(addLocationSuffix(overridden.getQualifiedNameWithSignature() + " -> " + overrider.getQualifiedNameWithSignature(), location)); return 0; } virtual Id onCallParsed( - const ParseLocation& location, const ParseFunction& caller, const ParseFunction& callee) + const ParseLocation& location, const NameHierarchy& caller, const NameHierarchy& callee) { - calls.push_back(addLocationSuffix(functionStr(caller) + " -> " + functionStr(callee), location)); - return 0; - } - - virtual Id onCallParsed( - const ParseLocation& location, const ParseVariable& caller, const ParseFunction& callee) - { - calls.push_back(addLocationSuffix(caller.getFullName() + " -> " + functionStr(callee), location)); + std::string callerSignature = caller.getQualifiedNameWithSignature(); + calls.push_back(addLocationSuffix(caller.getQualifiedNameWithSignature() + " -> " + callee.getQualifiedNameWithSignature(), location)); return 0; } virtual Id onFieldUsageParsed( - const ParseLocation& location, const ParseFunction& user, const NameHierarchy& usedNameHierarchy) + const ParseLocation& location, const NameHierarchy& userNameHierarchy, const NameHierarchy& usedNameHierarchy) { - usages.push_back(addLocationSuffix(functionStr(user) + " -> " + usedNameHierarchy.getFullName(), location)); - return 0; - } - - virtual Id onFieldUsageParsed( - const ParseLocation& location, const ParseVariable& user, const NameHierarchy& usedNameHierarchy) - { - usages.push_back(addLocationSuffix(variableStr(user) + " -> " + usedNameHierarchy.getFullName(), location)); + usages.push_back(addLocationSuffix(userNameHierarchy.getQualifiedNameWithSignature() + " -> " + usedNameHierarchy.getQualifiedName(), location)); return 0; } virtual Id onGlobalVariableUsageParsed( - const ParseLocation& location, const ParseFunction& user, const NameHierarchy& usedNameHierarchy) + const ParseLocation& location, const NameHierarchy& userNameHierarchy, const NameHierarchy& usedNameHierarchy) { - usages.push_back(addLocationSuffix(functionStr(user) + " -> " + usedNameHierarchy.getFullName(), location)); - return 0; - } - - virtual Id onGlobalVariableUsageParsed( - const ParseLocation& location, const ParseVariable& user, const NameHierarchy& usedNameHierarchy) - { - usages.push_back(addLocationSuffix(variableStr(user) + " -> " + usedNameHierarchy.getFullName(), location)); + usages.push_back(addLocationSuffix(userNameHierarchy.getQualifiedNameWithSignature() + " -> " + usedNameHierarchy.getQualifiedName(), location)); return 0; } virtual Id onEnumConstantUsageParsed( - const ParseLocation& location, const ParseFunction& user, const NameHierarchy& usedNameHierarchy) + const ParseLocation& location, const NameHierarchy& userNameHierarchy, const NameHierarchy& usedNameHierarchy) { - usages.push_back(addLocationSuffix(functionStr(user) + " -> " + usedNameHierarchy.getFullName(), location)); + usages.push_back(addLocationSuffix(userNameHierarchy.getQualifiedNameWithSignature() + " -> " + usedNameHierarchy.getQualifiedName(), location)); return 0; } - virtual Id onEnumConstantUsageParsed( - const ParseLocation& location, const ParseVariable& user, const NameHierarchy& usedNameHierarchy) + virtual Id onTypeUsageParsed(const ParseLocation& location, const NameHierarchy& user, const NameHierarchy& used) { - usages.push_back(addLocationSuffix(variableStr(user) + " -> " + usedNameHierarchy.getFullName(), location)); + typeUses.push_back(addLocationSuffix(user.getQualifiedNameWithSignature() + " -> " + used.getQualifiedNameWithSignature(), location)); return 0; } - virtual Id onTypeUsageParsed(const ParseTypeUsage& type, const ParseFunction& function) - { - addTypeUse(type, function); - return 0; - } - - virtual Id onTypeUsageParsed(const ParseTypeUsage& type, const ParseVariable& variable) - { - addTypeUse(type); - return 0; - } - - virtual Id onTemplateArgumentTypeOfTemplateRecordParsed( + virtual Id onTemplateArgumentTypeParsed( const ParseLocation& location, const NameHierarchy& argumentTypeNameHierarchy, const NameHierarchy& templateNameHierarchy) { templateArgumentTypes.push_back( - addLocationSuffix(templateNameHierarchy.getFullName() + "->" + argumentTypeNameHierarchy.getFullName(), location) - ); - return 0; - } - - virtual Id onTemplateArgumentTypeOfTemplateFunctionParsed( - const ParseLocation& location, const NameHierarchy& argumentTypeNameHierarchy, - const ParseFunction& templateFunction) - { - templateArgumentTypes.push_back( - addLocationSuffix(functionStr(templateFunction) + "->" + argumentTypeNameHierarchy.getFullName(), location) + addLocationSuffix(templateNameHierarchy.getQualifiedNameWithSignature() + "->" + argumentTypeNameHierarchy.getQualifiedName(), location) ); return 0; } virtual Id onTemplateDefaultArgumentTypeParsed( - const ParseTypeUsage& defaultArgumentType, const NameHierarchy& templateArgumentTypeNameHierarchy) + const ParseLocation& location, const NameHierarchy& defaultArgumentTypeNameHierarchy, + const NameHierarchy& templateParameterNameHierarchy) { templateDefaultArgumentTypes.push_back( - addLocationSuffix(defaultArgumentType.dataType->getTypeNameHierarchy().getFullName() + " -> " + templateArgumentTypeNameHierarchy.getFullName(), defaultArgumentType.location) + addLocationSuffix(defaultArgumentTypeNameHierarchy.getQualifiedNameWithSignature() + " -> " + templateParameterNameHierarchy.getQualifiedName(), location) ); return 0; } - virtual Id onTemplateRecordParameterTypeParsed( - const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy, - const NameHierarchy& templateRecordNameHierarchy) + virtual Id onTemplateParameterTypeParsed( + const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy) { templateParameterTypes.push_back( - addLocationSuffix(templateParameterTypeNameHierarchy.getFullName(), location) + addLocationSuffix(templateParameterTypeNameHierarchy.getQualifiedName(), location) ); return 0; } - virtual Id onTemplateRecordSpecializationParsed( - const ParseLocation& location, const NameHierarchy& specializedRecordNameHierarchy, - const RecordType specializedRecordType, const NameHierarchy& specializedFromNameHierarchy) + virtual Id onTemplateSpecializationParsed( + const ParseLocation& location, const NameHierarchy& specializedNameHierarchy, + const NameHierarchy& specializedFromNameHierarchy) { templateSpecializations.push_back(addLocationSuffix( - std::string(specializedRecordType == ParserClient::RECORD_CLASS ? "class" : "struct") + " " + - specializedRecordNameHierarchy.getFullName() + " -> " + specializedFromNameHierarchy.getFullName(), location + specializedNameHierarchy.getQualifiedNameWithSignature() + " -> " + specializedFromNameHierarchy.getQualifiedNameWithSignature(), location )); return 0; } virtual Id onTemplateMemberFunctionSpecializationParsed( - const ParseLocation& location, const ParseFunction& instantiatedFunction, const ParseFunction& specializedFunction) + const ParseLocation& location, const NameHierarchy& instantiatedFunction, const NameHierarchy& specializedFunction) { templateMemberSpecializations.push_back(addLocationSuffix( - functionStr(instantiatedFunction) + " -> " + functionStr(specializedFunction), location + instantiatedFunction.getQualifiedNameWithSignature() + " -> " + specializedFunction.getQualifiedNameWithSignature(), location )); return 0; } - virtual Id onTemplateFunctionParameterTypeParsed( - const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy, - const ParseFunction function) - { - templateParameterTypes.push_back( - addLocationSuffix(templateParameterTypeNameHierarchy.getFullName(), location) // TODO: add template function! - ); - return 0; - } - - virtual Id onTemplateFunctionSpecializationParsed( - const ParseLocation& location, const ParseFunction specializedFunction, const ParseFunction templateFunction) - { - templateSpecializations.push_back( - addLocationSuffix(functionStr(specializedFunction) + " -> " + functionStr(templateFunction), location) - ); - return 0; - } - virtual Id onFileParsed(const FileInfo& fileInfo) { files.push_back(fileInfo.path.str()); @@ -3135,13 +2996,13 @@ private: virtual Id onMacroDefineParsed( const ParseLocation& location, const NameHierarchy& macroNameHierarchy, const ParseLocation& scopeLocation) { - macros.push_back(addLocationSuffix(macroNameHierarchy.getFullName(), location, scopeLocation)); + macros.push_back(addLocationSuffix(macroNameHierarchy.getQualifiedName(), location, scopeLocation)); return 0; } virtual Id onMacroExpandParsed(const ParseLocation& location, const NameHierarchy& macroNameHierarchy) { - macroUses.push_back(addLocationSuffix(macroNameHierarchy.getFullName() ,location)); + macroUses.push_back(addLocationSuffix(macroNameHierarchy.getQualifiedName() ,location)); return 0; } @@ -3182,25 +3043,6 @@ private: std::vector includes; std::vector comments; - - private: - void addTypeUse(const ParseTypeUsage& use) - { - if (use.location.isValid()) - { - typeUses.push_back(addLocationSuffix(use.dataType->getFullTypeName(), use.location)); - } - } - - void addTypeUse(const ParseTypeUsage& use, const ParseFunction& func) - { - if (use.location.isValid()) - { - typeUses.push_back( - addLocationSuffix(functionStr(func) + " -> " + use.dataType->getFullTypeName(), use.location) - ); - } - } }; std::shared_ptr parseCode(std::string code, bool logErrors = true) diff --git a/src/test/StorageTestSuite.h b/src/test/StorageTestSuite.h index 5a7c8026..1f58a14b 100644 --- a/src/test/StorageTestSuite.h +++ b/src/test/StorageTestSuite.h @@ -25,13 +25,11 @@ public: void test_storage_saves_typedef() { TestStorage storage; - Id id = storage.onTypedefParsed(validLocation(1), createNameHierarchy("type"), typeUsage("int"), ParserClient::ACCESS_NONE); + Id id = storage.onTypedefParsed(validLocation(1), createNameHierarchy("type"), ParserClient::ACCESS_NONE); - TS_ASSERT_EQUALS(storage.getNameHierarchyForNodeWithId(id).getFullName(), "type"); + TS_ASSERT_EQUALS(storage.getNameHierarchyForNodeWithId(id).getQualifiedNameWithSignature(), "type"); TS_ASSERT_EQUALS(storage.getNodeTypeForNodeWithId(id), Node::NODE_TYPEDEF); - TS_ASSERT(storage.getEdgeId(Edge::EDGE_TYPEDEF_OF, "type", "int") != 0); - std::shared_ptr tlc = storage.getLocationCollectionForTokenId(id); TS_ASSERT_EQUALS(tlc->getTokenLocationCount(), 1); } @@ -41,7 +39,7 @@ public: TestStorage storage; Id id = storage.onClassParsed(validLocation(1), createNameHierarchy("Class"), ParserClient::ACCESS_NONE, validLocation(2)); - TS_ASSERT_EQUALS(storage.getNameHierarchyForNodeWithId(id).getFullName(), "Class"); + TS_ASSERT_EQUALS(storage.getNameHierarchyForNodeWithId(id).getQualifiedNameWithSignature(), "Class"); TS_ASSERT_EQUALS(storage.getNodeTypeForNodeWithId(id), Node::NODE_CLASS); std::shared_ptr tlc = storage.getLocationCollectionForTokenId(id); @@ -54,7 +52,7 @@ public: TestStorage storage; Id id = storage.onStructParsed(validLocation(1), createNameHierarchy("Struct"), ParserClient::ACCESS_NONE, validLocation(2)); - TS_ASSERT_EQUALS(storage.getNameHierarchyForNodeWithId(id).getFullName(), "Struct"); + TS_ASSERT_EQUALS(storage.getNameHierarchyForNodeWithId(id).getQualifiedNameWithSignature(), "Struct"); TS_ASSERT_EQUALS(storage.getNodeTypeForNodeWithId(id), Node::NODE_STRUCT); std::shared_ptr tlc = storage.getLocationCollectionForTokenId(id); @@ -65,29 +63,11 @@ public: void test_storage_saves_global_variable() { TestStorage storage; - Id id = storage.onGlobalVariableParsed(validLocation(42), ParseVariable(typeUsage("char"), createNameHierarchy("Global"), false)); + Id id = storage.onGlobalVariableParsed(validLocation(42), createNameHierarchy("Global")); - TS_ASSERT_EQUALS(storage.getNameHierarchyForNodeWithId(id).getFullName(), "Global"); + TS_ASSERT_EQUALS(storage.getNameHierarchyForNodeWithId(id).getQualifiedNameWithSignature(), "Global"); TS_ASSERT_EQUALS(storage.getNodeTypeForNodeWithId(id), Node::NODE_GLOBAL_VARIABLE); - //TS_ASSERT(!node->getComponent()); - - TS_ASSERT(storage.getEdgeId(Edge::EDGE_TYPE_OF, "Global", "char") != 0); - - std::shared_ptr tlc = storage.getLocationCollectionForTokenId(id); - TS_ASSERT_EQUALS(tlc->getTokenLocationCount(), 1); - } - - void test_storage_saves_global_variable_static() - { - TestStorage storage; - Id id = storage.onGlobalVariableParsed(validLocation(7), ParseVariable(typeUsage("char"), createNameHierarchy("Global"), true)); - - TS_ASSERT_EQUALS(storage.getNameHierarchyForNodeWithId(id).getFullName(), "Global"); - TS_ASSERT_EQUALS(storage.getNodeTypeForNodeWithId(id), Node::NODE_GLOBAL_VARIABLE); - - //TS_ASSERT(node->getComponent()); - std::shared_ptr tlc = storage.getLocationCollectionForTokenId(id); TS_ASSERT_EQUALS(tlc->getTokenLocationCount(), 1); } @@ -96,36 +76,28 @@ public: { TestStorage storage; Id id = storage.onFieldParsed( - validLocation(3), ParseVariable(typeUsage("bool"), createNameHierarchy("m_field"), false), ParserClient::ACCESS_NONE - ); - - TS_ASSERT_EQUALS(storage.getNameHierarchyForNodeWithId(id).getFullName(), "m_field"); + validLocation(3), createNameHierarchy("m_field"), ParserClient::ACCESS_NONE); + TS_ASSERT_EQUALS(storage.getNameHierarchyForNodeWithId(id).getQualifiedNameWithSignature(), "m_field"); TS_ASSERT_EQUALS(storage.getNodeTypeForNodeWithId(id), Node::NODE_FIELD); - TS_ASSERT(storage.getEdgeId(Edge::EDGE_TYPE_OF, "m_field", "bool") != 0); - std::shared_ptr tlc = storage.getLocationCollectionForTokenId(id); TS_ASSERT_EQUALS(tlc->getTokenLocationCount(), 1); } void test_storage_saves_field_as_member() { + NameHierarchy a = createNameHierarchy("Struct::m_field"); + NameHierarchy b = createNameHierarchy("Struct"); + TestStorage storage; Id id = storage.onFieldParsed( - validLocation(11), ParseVariable(typeUsage("bool"), createNameHierarchy("Struct::m_field"), false), ParserClient::ACCESS_PUBLIC + validLocation(11), a, ParserClient::ACCESS_PUBLIC ); - TS_ASSERT_EQUALS(storage.getNameHierarchyForNodeWithId(id).getFullName(), "Struct::m_field"); + TS_ASSERT_EQUALS(storage.getNameHierarchyForNodeWithId(id).getQualifiedNameWithSignature(), "Struct::m_field"); TS_ASSERT_EQUALS(storage.getNodeTypeForNodeWithId(id), Node::NODE_FIELD); - - TS_ASSERT(storage.getEdgeId(Edge::EDGE_MEMBER, "Struct", "Struct::m_field") != 0); - //TS_ASSERT(memberEdge->getComponent()); - //TS_ASSERT_EQUALS( - // memberEdge->getComponent()->getAccess(), TokenComponentAccess::ACCESS_PUBLIC - //); - - TS_ASSERT(storage.getEdgeId(Edge::EDGE_TYPE_OF, "Struct::m_field", "bool") != 0); + TS_ASSERT(storage.getEdgeId(Edge::EDGE_MEMBER, b, a) != 0); std::shared_ptr tlc = storage.getLocationCollectionForTokenId(id); TS_ASSERT_EQUALS(tlc->getTokenLocationCount(), 1); @@ -135,17 +107,12 @@ public: { TestStorage storage; Id id = storage.onFunctionParsed( - validLocation(14), ParseFunction(typeUsage("bool"), createNameHierarchy("isTrue"), parameters("char")), validLocation(41) + validLocation(14), createFunctionNameHierarchy("bool", "isTrue", "(char)"), validLocation(41) ); - TS_ASSERT_EQUALS(storage.getNameHierarchyForNodeWithId(id).getFullName(), "isTrue"); + TS_ASSERT_EQUALS(storage.getNameHierarchyForNodeWithId(id).getQualifiedNameWithSignature(), "bool isTrue(char)"); TS_ASSERT_EQUALS(storage.getNodeTypeForNodeWithId(id), Node::NODE_FUNCTION); - // TS_ASSERT(storage.getEdgeId(Edge::EDGE_RETURN_TYPE_OF, "isTrue", "bool") != 0); - // TS_ASSERT(storage.getEdgeId(Edge::EDGE_PARAMETER_TYPE_OF, "isTrue", "char") != 0); - TS_ASSERT(storage.getEdgeId(Edge::EDGE_TYPE_USAGE, "isTrue", "bool") != 0); - TS_ASSERT(storage.getEdgeId(Edge::EDGE_TYPE_USAGE, "isTrue", "char") != 0); - std::shared_ptr tlc = storage.getLocationCollectionForTokenId(id); TS_ASSERT_EQUALS(tlc->getTokenLocationCount(), 2); } @@ -155,20 +122,15 @@ public: TestStorage storage; Id id = storage.onMethodParsed( validLocation(9), - ParseFunction(typeUsage("void"), createNameHierarchy("isMethod"), parameters("bool")), + createFunctionNameHierarchy("void", "isMethod", "(bool)"), ParserClient::ACCESS_NONE, ParserClient::ABSTRACTION_NONE, validLocation(4) ); - TS_ASSERT_EQUALS(storage.getNameHierarchyForNodeWithId(id).getFullName(), "isMethod"); + TS_ASSERT_EQUALS(storage.getNameHierarchyForNodeWithId(id).getQualifiedNameWithSignature(), "void isMethod(bool)"); TS_ASSERT_EQUALS(storage.getNodeTypeForNodeWithId(id), Node::NODE_METHOD); - // TS_ASSERT(storage.getEdgeId(Edge::EDGE_RETURN_TYPE_OF, "isMethod", "void") != 0); - // TS_ASSERT(storage.getEdgeId(Edge::EDGE_PARAMETER_TYPE_OF, "isMethod", "bool") != 0); - TS_ASSERT(storage.getEdgeId(Edge::EDGE_TYPE_USAGE, "isMethod", "void") != 0); - TS_ASSERT(storage.getEdgeId(Edge::EDGE_TYPE_USAGE, "isMethod", "bool") != 0); - std::shared_ptr tlc = storage.getLocationCollectionForTokenId(id); TS_ASSERT_EQUALS(tlc->getTokenLocationCount(), 2); } @@ -186,33 +148,24 @@ public: //Node* node = storage.getNodeWithId(id); //TS_ASSERT(node); - //TS_ASSERT_EQUALS(node->getFullName(), "isMethod"); + //TS_ASSERT_EQUALS(node->getQualifiedNameWithSignature(), "isMethod"); //TS_ASSERT_EQUALS(node->getType(), Node::NODE_METHOD); //TS_ASSERT(node->getComponent()); } void test_storage_saves_method_as_member() { + NameHierarchy a = createFunctionNameHierarchy("void", "Class::isMethod", "(bool)"); TestStorage storage; storage.onMethodParsed( validLocation(1), - ParseFunction(typeUsage("void"), createNameHierarchy("Class::isMethod"), parameters("bool")), + a, ParserClient::ACCESS_PROTECTED, ParserClient::ABSTRACTION_VIRTUAL, validLocation(4) ); - //TS_ASSERT(node->getComponent()); - //TS_ASSERT_EQUALS( - // node->getComponent()->getAbstraction(), - // TokenComponentAbstraction::ABSTRACTION_VIRTUAL - //); - - TS_ASSERT(storage.getEdgeId(Edge::EDGE_MEMBER, "Class", "Class::isMethod") != 0); - //TS_ASSERT(memberEdge->getComponent()); - //TS_ASSERT_EQUALS( - // memberEdge->getComponent()->getAccess(), TokenComponentAccess::ACCESS_PROTECTED - //); + TS_ASSERT(storage.getEdgeId(Edge::EDGE_MEMBER, createNameHierarchy("Class"), a) != 0); } void test_storage_saves_namespace() @@ -220,7 +173,7 @@ public: TestStorage storage; Id id = storage.onNamespaceParsed(validLocation(1), createNameHierarchy("utility"), validLocation(2)); - TS_ASSERT_EQUALS(storage.getNameHierarchyForNodeWithId(id).getFullName(), "utility"); + TS_ASSERT_EQUALS(storage.getNameHierarchyForNodeWithId(id).getQualifiedNameWithSignature(), "utility"); TS_ASSERT_EQUALS(storage.getNodeTypeForNodeWithId(id), Node::NODE_NAMESPACE); std::shared_ptr tlc = storage.getLocationCollectionForTokenId(id); @@ -233,7 +186,7 @@ public: TestStorage storage; Id id = storage.onEnumParsed(validLocation(17), createNameHierarchy("Category"), ParserClient::ACCESS_NONE, validLocation(23)); - TS_ASSERT_EQUALS(storage.getNameHierarchyForNodeWithId(id).getFullName(), "Category"); + TS_ASSERT_EQUALS(storage.getNameHierarchyForNodeWithId(id).getQualifiedNameWithSignature(), "Category"); TS_ASSERT_EQUALS(storage.getNodeTypeForNodeWithId(id), Node::NODE_ENUM); std::shared_ptr tlc = storage.getLocationCollectionForTokenId(id); @@ -243,18 +196,14 @@ public: void test_storage_saves_enum_as_member() { + NameHierarchy a = createNameHierarchy("Class::Category"); TestStorage storage; storage.onEnumParsed( - validLocation(1), createNameHierarchy("Class::Category"), + validLocation(1), a, ParserClient::ACCESS_PRIVATE, validLocation(2) ); - TS_ASSERT(storage.getEdgeId(Edge::EDGE_MEMBER, "Class", "Class::Category") != 0); - - //TS_ASSERT(memberEdge->getComponent()); - //TS_ASSERT_EQUALS( - // memberEdge->getComponent()->getAccess(), TokenComponentAccess::ACCESS_PRIVATE - //); + TS_ASSERT(storage.getEdgeId(Edge::EDGE_MEMBER, createNameHierarchy("Class"), a) != 0); } void test_storage_saves_enum_constant() @@ -262,7 +211,7 @@ public: TestStorage storage; Id id = storage.onEnumConstantParsed(validLocation(1), createNameHierarchy("VALUE")); - TS_ASSERT_EQUALS(storage.getNameHierarchyForNodeWithId(id).getFullName(), "VALUE"); + TS_ASSERT_EQUALS(storage.getNameHierarchyForNodeWithId(id).getQualifiedNameWithSignature(), "VALUE"); TS_ASSERT_EQUALS(storage.getNodeTypeForNodeWithId(id), Node::NODE_ENUM_CONSTANT); std::shared_ptr tlc = storage.getLocationCollectionForTokenId(id); @@ -279,7 +228,7 @@ public: createNameHierarchy("ClassA"), ParserClient::ACCESS_PUBLIC ); - TS_ASSERT(storage.getEdgeId(Edge::EDGE_INHERITANCE, "ClassB", "ClassA") != 0); + TS_ASSERT(storage.getEdgeId(Edge::EDGE_INHERITANCE, createNameHierarchy("ClassB"), createNameHierarchy("ClassA")) != 0); //TS_ASSERT(edge->getComponent()); //TS_ASSERT_EQUALS(edge->getComponent()->getAccess(), TokenComponentAccess::ACCESS_PUBLIC); @@ -297,7 +246,7 @@ public: createNameHierarchy("StructA"), ParserClient::ACCESS_PUBLIC ); - TS_ASSERT(storage.getEdgeId(Edge::EDGE_INHERITANCE, "StructB", "StructA") != 0); + TS_ASSERT(storage.getEdgeId(Edge::EDGE_INHERITANCE, createNameHierarchy("StructB"), createNameHierarchy("StructA")) != 0); //TS_ASSERT(edge->getComponent()); //TS_ASSERT_EQUALS(edge->getComponent()->getAccess(), TokenComponentAccess::ACCESS_PUBLIC); @@ -310,33 +259,47 @@ public: { TestStorage storage; - ParseFunction a(typeUsage("void"), createNameHierarchy("A::isMethod"), parameters("bool")); - ParseFunction b(typeUsage("void"), createNameHierarchy("B::isMethod"), parameters("bool")); + NameHierarchy a = createFunctionNameHierarchy("void", "A::isMethod", "(bool)"); + NameHierarchy b = createFunctionNameHierarchy("void", "B::isMethod", "(bool)"); - storage.onMethodParsed(validLocation(9), a, ParserClient::ACCESS_PRIVATE, ParserClient::ABSTRACTION_VIRTUAL, validLocation(4)); - storage.onMethodParsed(validLocation(7), b, ParserClient::ACCESS_PRIVATE, ParserClient::ABSTRACTION_NONE, validLocation(3)); + storage.onMethodParsed( + validLocation(9), + a, + ParserClient::ACCESS_PRIVATE, + ParserClient::ABSTRACTION_VIRTUAL, + validLocation(4)); + storage.onMethodParsed( + validLocation(7), + b, + ParserClient::ACCESS_PRIVATE, + ParserClient::ABSTRACTION_NONE, + validLocation(3)); storage.onMethodOverrideParsed(validLocation(4), a, b); - TS_ASSERT(storage.getEdgeId(Edge::EDGE_OVERRIDE, "B::isMethod", "A::isMethod") != 0); + TS_ASSERT(storage.getEdgeId(Edge::EDGE_OVERRIDE, b, a) != 0); } void test_storage_saves_call() { TestStorage storage; + + NameHierarchy a = createFunctionNameHierarchy("bool", "isTrue", "(char)"); + NameHierarchy b = createFunctionNameHierarchy("void", "func", "(bool)"); + storage.onFunctionParsed( - validLocation(), ParseFunction(typeUsage("bool"), createNameHierarchy("isTrue"), parameters("char")), validLocation() + validLocation(), a, validLocation() ); storage.onFunctionParsed( - validLocation(), ParseFunction(typeUsage("void"), createNameHierarchy("func"), parameters("bool")), validLocation() + validLocation(), b, validLocation() ); Id id = storage.onCallParsed( validLocation(9), - ParseFunction(typeUsage("bool"), createNameHierarchy("isTrue"), parameters("char")), - ParseFunction(typeUsage("void"), createNameHierarchy("func"), parameters("bool")) + a, + b ); - TS_ASSERT(storage.getEdgeId(Edge::EDGE_CALL, "isTrue", "func") != 0); + TS_ASSERT(storage.getEdgeId(Edge::EDGE_CALL, a, b) != 0); std::shared_ptr tlc = storage.getLocationCollectionForTokenId(id); TS_ASSERT_EQUALS(tlc->getTokenLocationCount(), 1); @@ -344,19 +307,22 @@ public: void test_storage_saves_call_in_global_variable_declaration() { + TestStorage storage; - storage.onGlobalVariableParsed(validLocation(), ParseVariable(typeUsage("bool"), createNameHierarchy("global"), false)); + storage.onGlobalVariableParsed(validLocation(), createNameHierarchy("global")); + + NameHierarchy a = createFunctionNameHierarchy("bool", "isTrue", "(char)"); storage.onFunctionParsed( - validLocation(), ParseFunction(typeUsage("bool"), createNameHierarchy("isTrue"), parameters("char")), validLocation() + validLocation(), a, validLocation() ); Id id = storage.onCallParsed( validLocation(7), - ParseVariable(typeUsage("bool"), createNameHierarchy("global"), false), - ParseFunction(typeUsage("bool"), createNameHierarchy("isTrue"), parameters("char")) + createNameHierarchy("global"), + a ); - TS_ASSERT(storage.getEdgeId(Edge::EDGE_CALL, "global", "isTrue") != 0); + TS_ASSERT(storage.getEdgeId(Edge::EDGE_CALL, createNameHierarchy("global"), a) != 0); std::shared_ptr tlc = storage.getLocationCollectionForTokenId(id); TS_ASSERT_EQUALS(tlc->getTokenLocationCount(), 1); @@ -364,21 +330,23 @@ public: void test_storage_saves_field_usage() { + NameHierarchy a = createFunctionNameHierarchy("bool", "isTrue", "(char)"); + TestStorage storage; storage.onFunctionParsed( - validLocation(), ParseFunction(typeUsage("bool"), createNameHierarchy("isTrue"), parameters("char")), validLocation() + validLocation(), a, validLocation() ); storage.onFieldParsed( - validLocation(), ParseVariable(typeUsage("bool"), createNameHierarchy("Foo::m_field"), false), ParserClient::ACCESS_PRIVATE + validLocation(), createNameHierarchy("Foo::m_field"), ParserClient::ACCESS_PRIVATE ); Id id = storage.onFieldUsageParsed( validLocation(7), - ParseFunction(typeUsage("bool"), createNameHierarchy("isTrue"), parameters("char")), + a, createNameHierarchy("Foo::m_field") ); - TS_ASSERT(storage.getEdgeId(Edge::EDGE_USAGE, "isTrue", "Foo::m_field") != 0); + TS_ASSERT(storage.getEdgeId(Edge::EDGE_USAGE, a, createNameHierarchy("Foo::m_field")) != 0); std::shared_ptr tlc = storage.getLocationCollectionForTokenId(id); TS_ASSERT_EQUALS(tlc->getTokenLocationCount(), 1); @@ -386,19 +354,21 @@ public: void test_storage_saves_global_variable_usage() { + NameHierarchy a = createFunctionNameHierarchy("bool", "isTrue", "(char)"); + TestStorage storage; storage.onFunctionParsed( - validLocation(), ParseFunction(typeUsage("bool"), createNameHierarchy("isTrue"), parameters("char")), validLocation() + validLocation(), a, validLocation() ); - storage.onGlobalVariableParsed(validLocation(), ParseVariable(typeUsage("bool"), createNameHierarchy("global"), false)); + storage.onGlobalVariableParsed(validLocation(), createNameHierarchy("global")); Id id = storage.onGlobalVariableUsageParsed( validLocation(7), - ParseFunction(typeUsage("bool"), createNameHierarchy("isTrue"), parameters("char")), + a, createNameHierarchy("global") ); - TS_ASSERT(storage.getEdgeId(Edge::EDGE_USAGE, "isTrue", "global") != 0); + TS_ASSERT(storage.getEdgeId(Edge::EDGE_USAGE, a, createNameHierarchy("global")) != 0); std::shared_ptr tlc = storage.getLocationCollectionForTokenId(id); TS_ASSERT_EQUALS(tlc->getTokenLocationCount(), 1); @@ -406,20 +376,19 @@ public: void test_storage_saves_type_usage() { + NameHierarchy a = createFunctionNameHierarchy("Struct", "isTrue", "(char)"); TestStorage storage; storage.onFunctionParsed( - validLocation(), ParseFunction(typeUsage("bool"), createNameHierarchy("isTrue"), - parameters("char")), validLocation() + validLocation(), a, validLocation() ); storage.onStructParsed( validLocation(), createNameHierarchy("Struct"), ParserClient::ACCESS_NONE, validLocation()); Id id = storage.onTypeUsageParsed( - typeUsage("Struct"), - ParseFunction(typeUsage("bool"), createNameHierarchy("isTrue"), parameters("char")) + validLocation(7), a, createNameHierarchy("Struct") ); - TS_ASSERT(storage.getEdgeId(Edge::EDGE_TYPE_USAGE, "isTrue", "Struct") != 0); + TS_ASSERT(storage.getEdgeId(Edge::EDGE_TYPE_USAGE, a, createNameHierarchy("Struct")) != 0); std::shared_ptr tlc = storage.getLocationCollectionForTokenId(id); TS_ASSERT_EQUALS(tlc->getTokenLocationCount(), 1); @@ -548,7 +517,7 @@ public: Id id = storage.onFileParsed(FileInfo("file.h")); - TS_ASSERT_EQUALS(storage.getNameHierarchyForNodeWithId(id).getFullName(), "file.h"); + TS_ASSERT_EQUALS(storage.getNameHierarchyForNodeWithId(id).getQualifiedNameWithSignature(), "file.h"); TS_ASSERT_EQUALS(storage.getNodeTypeForNodeWithId(id), Node::NODE_FILE); } @@ -560,7 +529,7 @@ public: storage.onFileParsed(FileInfo("file.cpp")); Id id = storage.onFileIncludeParsed(validLocation(7), FileInfo("file.cpp"), FileInfo("file.h")); - TS_ASSERT(storage.getEdgeId(Edge::EDGE_INCLUDE, "file.cpp", "file.h") != 0); + TS_ASSERT(storage.getEdgeId(Edge::EDGE_INCLUDE, createNameHierarchy("file.cpp"), createNameHierarchy("file.h")) != 0); std::shared_ptr tlc = storage.getLocationCollectionForTokenId(id); TS_ASSERT_EQUALS(tlc->getTokenLocationCount(), 1); @@ -576,8 +545,8 @@ public: //Id id4 = storage.onFileIncludeParsed(validLocation(), "file.h", "f.h"); //Id id5 = storage.onFileIncludeParsed(validLocation(), "file.cpp", "file.h"); - //std::string name1 = storage.getNodeWithId(id2)->getFullName(); - //std::string name2 = storage.getNodeWithId(id3)->getFullName(); + //std::string name1 = storage.getNodeWithId(id2)->getQualifiedNameWithSignature(); + //std::string name2 = storage.getNodeWithId(id3)->getQualifiedNameWithSignature(); //std::set filePaths; //filePaths.insert(FilePath(name1)); @@ -632,22 +601,11 @@ private: return getSearchIndex(); } - NameHierarchy nameHierarchyFromString(const std::string& str) const - { - NameHierarchy result; - std::vector names = utility::splitToVector(str, "::"); - for (const std::string& name : names) - { - result.push(std::make_shared(name)); - } - return result; - } - - Id getEdgeId(Edge::EdgeType type, const std::string& fromName, const std::string& toName) const + Id getEdgeId(Edge::EdgeType type, const NameHierarchy& fromName, const NameHierarchy& toName) const { NameHierarchy from; - return getIdForEdge(type, nameHierarchyFromString(fromName), nameHierarchyFromString(toName)); + return getIdForEdge(type, fromName, toName); } }; @@ -664,28 +622,24 @@ private: location->getColumnNumber() == locationId; } + NameHierarchy createFunctionNameHierarchy(std::string ret, std::string name, std::string parameters) const + { + NameHierarchy nameHierarchy = createNameHierarchy(name); + std::string lastName = nameHierarchy.back()->getName(); + nameHierarchy.pop(); + nameHierarchy.push(std::make_shared(lastName, NameElement::Signature(ret, parameters))); + return nameHierarchy; + } + NameHierarchy createNameHierarchy(std::string s) const { NameHierarchy nameHierarchy; for (std::string element: utility::splitToVector(s, "::")) { - std::string signature = (element.find("(") != element.npos ? element : ""); - nameHierarchy.push(std::make_shared(element, signature)); + nameHierarchy.push(std::make_shared(element, NameElement::Signature())); } return nameHierarchy; } - ParseTypeUsage typeUsage(const std::string& typeName) const - { - return ParseTypeUsage(validLocation(), std::make_shared(createNameHierarchy(typeName))); - } - - std::vector parameters(const std::string& param) const - { - std::vector params; - params.push_back(typeUsage(param)); - return params; - } - std::string m_filePath; };