Compare commits

...
55 Commits
Author SHA1 Message Date
malte_langkabel b9c4bd05cd data: showing local symbols
- added local symbols to storage
- added tests for local symbol parsing
- added MessageActivateLocalSymbols to activate local symbols in code view
- TokenLocations now store their LocationType instead of a plain bool "isScope"
- moved LocationType from TokenLocation to separate file, since it is also used in Annotations now.
- added local_symbol in stylesheet to define a style for hovering and activating these elements
- renamed location to token in stylesheet
2016-04-12 13:28:37 +02:00
Andreas Stallinger a448485b35 build: linux package change to qt5.6 2016-04-12 12:58:06 +02:00
Eberhard Graether 9307d6d855 logic: Refactored namespace activation
* show namespace name in search view when activated
* show namespace definitions in code view when activated
* no children in namespace
* no implicit nodes in overview or namespace
* Show a maximum of 10 open snippets
* Fixed bug causing nodes in GraphView to be stacked at 0,0
2016-04-12 11:59:37 +02:00
Eberhard Graether e8e6b909a8 logic: Fixed referencing of nodes in GraphController::bundleNodesByType 2016-04-12 11:05:29 +02:00
Eberhard Graether 78287dd694 logic: increased performance of bundleEdgesByType for overview 2016-04-08 14:31:46 +02:00
Eberhard Graether ae6cd6e02c logic: don't show implicit or undefined child nodes in graph unless connected
* visit implicit declarations in ASTVisitor
* show implicit and undefined child nodes only when connected
* fixed some bundle edges couldn't be split
* add "implicit" to tooltip
* show undefiend and implicit nodes hatched
2016-04-07 14:16:17 +02:00
malte_langkabel 7a0cd0c8d7 src: project load performance
removed unused fields from StorageStats to improve project loading performance.
2016-04-07 13:18:41 +02:00
malte_langkabel 7bc2f2b548 logic: improved fuzzysearch score calculation 2016-04-06 17:07:13 +02:00
Eberhard Graether 73e77a1baa docu: updated edge aggregation 2016-04-06 11:41:29 +02:00
Eberhard Graether 5e6714d95a ui: Added user interface for auto system header search paths detection
* moved detection files to lib_gui
* added ui to global header search and framework search ui in project wizzard and preferences
* detecting the search paths will add them to the list if not added yet
* only detected compilers are shown in the dropdown list
2016-04-06 11:23:20 +02:00
Eberhard Graether 93f21283f6 ui: improved angled edges and new style of aggregation
* added different routing options for horizontal, vertical or any
* added different pivot options to connect in the middle or at thirds
* changed aggregation to angled edge with thickness logarithmic to weight
* aggregation to pivot at middle and route any direction
* aggregation weight displayed in tooltip
* inheritance to route vertical
2016-04-04 21:05:39 +02:00
Andreas Stallinger 2ffec90c19 ui: startscreen display not existing project
* displays moved or deleted recent projects as disabled button
2016-04-04 20:43:56 +02:00
malte_langkabel f3dc12b0ed logic: search ui performance optimization
* replaced the implementation of the search index. the search index now uses a search-trie. edges have gates that can be used to check if a character can be matched when following the edge.
* SearchMatches now have a text and a list of NameHierarchies that share this node (instead of Ids, so that nodes must be found by names (which makes sure that SearchMatches are still valid after refresh).
* when parsing a project's description the CodeController now looks for NameHierarchies instead of SearchNode names to find ids of linked elements.
2016-04-04 15:39:39 +02:00
Andreas Stallinger ffc00829f0 ui: Bug Tracker in Menu 2016-04-04 14:39:09 +02:00
Andreas Stallinger e5bf177241 utility: Standardheadersearch
Standardheadersearch for clang and gcc
TODO: Visual Studio & Windows Kit bzw SDK
2016-04-04 14:13:32 +02:00
Eberhard Graether 31f366ab8f ui: Increased graph edge drawing performance
* only draw lines within the redrawn rectangle
* cache polygon points
2016-04-01 15:26:44 +02:00
Andreas Stallinger 2be3b541a6 fix: vs detector fix for wrong published headersearch stuff 2016-03-30 17:56:20 +02:00
Andreas Stallinger 03901e8173 logic: Test License is valid on day 0
* License was invalid on expire date
* build script does not start app after failing build
* symlink on linux
2016-03-30 15:49:08 +02:00
Manuel Dobusch fe74dfb7cc logic: vs plugin upgrade
Upgraded plugin project to vs 2015. Can now serve all targets (vs 2012 to 2015) with one binary.
2016-03-30 14:04:47 +02:00
Manuel Dobusch b75dd2abe1 logic: vs compiler flags
Added compiler flags from VS solution and vs compatibility flags.
2016-03-30 13:37:37 +02:00
Eberhard Graether cec370cfff data: Improved graph retrieval to use fixed number of requests 2016-03-30 12:26:19 +02:00
Andreas Stallinger a662424e2b logic: Test License
Test license for x days
License_generator flag -e <days>
2016-03-29 15:37:58 +02:00
Eberhard Graether ac506622b4 src: Fixed template function specialization defined within class definition caused clang error 2016-03-29 12:13:42 +02:00
malte_langkabel 880a199540 ui: changed the display format of the parse duration to "hh:mm:ss" 2016-03-24 10:44:09 +01:00
Manuel Dobusch 82db193c78 logic: solution parsing refactor
Refactored solution parser handling to make it more generic
Also includes new parser (wip)
2016-03-23 17:06:40 +01:00
malte_langkabel bac394381c ui: codeview show fully qualified scope names 2016-03-23 15:44:27 +01:00
malte_langkabel fee1d97604 ui: moved recent projects submenu
* moved the menu entry for "recent projects" to be placed close to "open project"
* replaced enum for MaxRecentProjectsCount in AppSettings by a getter function.
2016-03-23 14:15:30 +01:00
malte_langkabel d1a4bc7b08 src: small code cleanup 2016-03-22 10:14:59 +01:00
malte_langkabel 6743336f03 data: tweaked refresh for performance 2016-03-21 15:29:19 +01:00
malte_langkabel eab703cb0d data: implicit in database
* storing the information if a node is defined implicitly in the database
* the analysis however does not visit implicit nodes directly. Currently they are just recorded when used somewhere in the code. This should be changed once implicit nodes are hidde in the UI.
* removed error logs for unnamed template parameters and function parameters since it is ok when they are anonymous.
2016-03-18 13:33:34 +01:00
Andreas Stallinger f6de07ecf1 build: update botan paths
botan has new paths on linux build, debug - release fix on linux
2016-03-17 13:58:47 +01:00
Eberhard Graether a78e7b85d1 ui: Use update loop in graph panning and zooming for smooth interaction 2016-03-16 15:03:57 +01:00
Eberhard Graether 2d0700cd06 resource: changelog for 0.5.1.21 2016-03-16 14:44:14 +01:00
Eberhard Graether d18b6fb873 build: Fixed compile_commands.json not exportet 2016-03-16 14:42:28 +01:00
Eberhard Graether 3140b6dbb8 src: Fixed command execution for real
<description>
2016-03-15 18:03:42 +01:00
Eberhard Graether 2008d1401a src: Fixed command order at startup 2016-03-15 17:12:04 +01:00
Andreas Stallinger 23f05c003b build: Linux package update
create database with via commandline in packaging
symlink fix in setup
2016-03-15 16:13:43 +01:00
Eberhard Graether 09e3ff6897 ui: Fixed window size to use biggest dimensions of content and preferred 2016-03-15 15:23:19 +01:00
malte_langkabel 0db6f5fb36 build: installer fixes
* changed the windows installer projects to include the new gui resources
2016-03-15 14:04:30 +01:00
malte_langkabel c398302e4d logic: fixed relative project settings paths
* when specifying relative paths in project settings these stay relative when saving and loading them now.
2016-03-15 12:54:44 +01:00
Eberhard Graether ba523111af ui: Tuned graph zooming 2016-03-14 23:42:45 +01:00
Andreas Stallinger 0cc777a892 script: pre push hook - ignore delete remote branch 2016-03-14 17:02:27 +01:00
Eberhard Graether 1032b83a09 Revert "src: removed use of clang::tooling::CompileCommand::Filename"
This reverts commit 5d845961ac.
2016-03-14 15:21:46 +01:00
Manuel Dobusch 52aeae2f6d logic: plugin binary update
Updated all vs plugin binaries to latest version
2016-03-14 15:13:55 +01:00
Eberhard Graether 0dbdf9081e logic: Reparse project of newer version 2016-03-14 14:52:40 +01:00
Eberhard Graether cefaeae1ab resource: Updated documentation and smaller fixes
* updated documentation of: cdb loading, advanced settings, graph view
* removed stats of search index
* added global search paths to cdb summary
2016-03-14 14:45:42 +01:00
malte_langkabel f82da323b3 data: increased project load and codeview performance
* rewrote searchnode to use map
* added local cache for parent node ids when creating the Hierarchy Cache.
* added indices to SqliteStorage to increase code view performance.
2016-03-14 12:32:01 +01:00
Eberhard Graether 53d5fe6a06 ui: Added more movement controls to the graph
* SHIFT + mouse wheel for zooming
* WASD for moving up, right, left, down
* SHIFT + WS for zooming
* zoom anchor is under the mouse

bug id = 54
2016-03-12 00:55:31 +01:00
Eberhard Graether bcb43eccd0 ui: moved contentbased sizing to QtWindow 2016-03-11 22:22:57 +01:00
Eberhard Graether 813cde4d26 ui: adapt window size to contents if bigger than preferred size 2016-03-11 21:50:07 +01:00
Eberhard Graether f6e2821430 utility: turned of logging for scroll and focus messages
These messages added up to about 80% of all logs during use of the UI.
2016-03-11 15:29:13 +01:00
Eberhard Graether 47bf9bb7fa ui: Show loader when loading project and building search index 2016-03-11 15:18:59 +01:00
Eberhard Graether 8c9b9355d5 ui: Fixed expanding file with errors showed all locations as errors 2016-03-11 13:52:24 +01:00
Eberhard Graether a8aaf6950f data: save nodes and edges to Storage in order of parsing 2016-03-11 13:01:59 +01:00
Eberhard Graether f85d5a6024 ui: Fixed crash when opening preferences 2016-03-10 18:48:58 +01:00
211 changed files with 5981 additions and 4047 deletions
+2
View File
@@ -41,6 +41,8 @@
.ycm_extra_conf.py
.ycm_extra_conf.pyc
compile_commands.json
Makefile
/__pycache__/
/deployment/windows/CoatiAppSetup/CoatiSetup/Debug
/deployment/windows/CoatiAppSetup/CoatiSetup/Release
+37 -32
View File
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 2.8.9)
# to get CMP0043 warnings, upgrade to version 3 and change the line above to VERSION 3.0 and remove the line below
if(POLICY CMP0043)
cmake_policy(SET CMP0043 OLD)
cmake_policy(SET CMP0043 OLD)
endif()
include(cmake/add_files.cmake)
@@ -13,7 +13,6 @@ include(cmake/licenses.cmake)
# set Standerd build type to Release
set(CMAKE_BUILD_TYPE_INIT "Release")
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# Variables --------------------------------------------------------------------
@@ -44,16 +43,20 @@ if (UNIX)
endif ()
# Project ----------------------------------------------------------------------
project(${PROJECT_NAME})
#RPATH
if(UNIX AND NOT APPLE)
set(CMAKE_SKIP_BUILD_RPATH FALSE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
set(CMAKE_INSTALL_RPATH "$ORIGIN/lib/:$$ORIGIN/lib/")
include(cmake/external.cmake)
include(cmake/external.cmake)
endif()
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# Clang ------------------------------------------------------------------------
if (UNIX AND APPLE)
@@ -63,7 +66,7 @@ if (UNIX AND APPLE)
find_package(LLVM REQUIRED PATHS "$ENV{CLANG_DIR}/build_debug/share/llvm/cmake" NO_DEFAULT_PATH)
endif()
elseif(UNIX)
find_package(LLVM REQUIRED PATHS "${EXTERNAL_BUILD}/llvm/share/llvm/cmake" NO_DEFAULT_PATH)
find_package(LLVM REQUIRED PATHS "${EXTERNAL_BUILD}/llvm/share/llvm/cmake" NO_DEFAULT_PATH)
else()
find_package(LLVM REQUIRED PATHS "$ENV{CLANG_DIR}/build/share/llvm/cmake")
endif()
@@ -75,9 +78,9 @@ add_definitions(${CLANG_DEFINITIONS})
# Boost ------------------------------------------------------------------------
if(UNIX AND NOT APPLE)
set(BOOST_ROOT ${EXTERNAL_BUILD}/boost)
set(BOOST_ROOT ${EXTERNAL_BUILD}/boost)
else()
set(BOOST_ROOT $ENV{BOOST_159_DIR})
set(BOOST_ROOT $ENV{BOOST_159_DIR})
endif()
set(Boost_USE_MULTITHREAD ON)
set(Boost_USE_STATIC_LIBS ON)
@@ -91,31 +94,33 @@ find_package(Boost 1.59 COMPONENTS system program_options filesystem date_time R
add_definitions(-DEIGEN_MPL2_ONLY)
if(UNIX AND NOT APPLE)
set(EIGEN_ROOT ${EXTERNAL_SRC}/eigen)
set(EIGEN_ROOT ${EXTERNAL_SRC}/eigen)
else()
set(EIGEN_ROOT $ENV{EIGEN_DIR})
set(EIGEN_ROOT $ENV{EIGEN_DIR})
endif()
# Botan -------------------------------------------------------------------------
set(BOTAN_VERSION "botan-1.11")
if(UNIX AND APPLE)
find_library(BOTAN botan-1.11 $ENV{BOTAN_DIR}/release NO_DEFAULT_PATH)
find_library(BOTAN_D botan-1.11 $ENV{BOTAN_DIR}/debug NO_DEFAULT_PATH)
find_library(BOTAN ${BOTAN_VERSION} $ENV{BOTAN_DIR}/release NO_DEFAULT_PATH)
find_library(BOTAN_D ${BOTAN_VERSION} $ENV{BOTAN_DIR}/debug NO_DEFAULT_PATH)
elseif(UNIX)
find_library(BOTAN botan-1.11 "${EXTERNAL_BUILD}/botan/lib" NO_DEFAULT_PATH)
find_library(BOTAN ${BOTAN_VERSION} "${EXTERNAL_BUILD}/botan" NO_DEFAULT_PATH)
else()
find_library(BOTAN botan "$ENV{BOTAN_DIR}/release")
find_library(BOTAN botan "$ENV{BOTAN_DIR}/release")
find_library(BOTAN_D botan "$ENV{BOTAN_DIR}/debug")
endif()
if(${BOTAN} STREQUAL "BOTAN-NOTFOUND")
message(FATAL_ERROR "Botan not found")
message(FATAL_ERROR "Botan not found")
else()
message(STATUS "Botan found")
message(STATUS "Botan found")
endif()
if(UNIX AND NOT APPLE)
set(BOTAN_INCLUDE_DIR "${EXTERNAL_SRC}/botan")
set(BOTAN_INCLUDE_DIR "${EXTERNAL_BUILD}/botan")
else()
set(BOTAN_INCLUDE_DIR "$ENV{BOTAN_DIR}")
set(BOTAN_INCLUDE_DIR "$ENV{BOTAN_DIR}")
endif()
# Lib --------------------------------------------------------------------------
@@ -153,7 +158,7 @@ target_include_directories(${LIB_PROJECT_NAME} SYSTEM
${CLANG_INCLUDE_DIRS}
${Boost_INCLUDE_DIRS}
${EIGEN_ROOT}
"${CMAKE_SOURCE_DIR}/src/external"
"${CMAKE_SOURCE_DIR}/src/external"
)
target_link_libraries(${LIB_PROJECT_NAME} ${Boost_LIBRARIES})
@@ -225,7 +230,7 @@ target_include_directories(${LIB_LICENSE_PROJECT_NAME} SYSTEM
PUBLIC
${Boost_INCLUDE_DIRS}
${LIB_LICENSE_PROJECT_NAME}
${BOTAN_INCLUDE_DIR}
${BOTAN_INCLUDE_DIR}
)
# target_include_directories(${LIB_LICENSE_PROJECT_NAME} optimized "$ENV{BOTAN_DIR}/release")
@@ -255,14 +260,14 @@ set(CMAKE_AUTOMOC ON)
# Find the QtWidgets library
if(UNIX AND NOT APPLE)
set(CMAKE_PREFIX_PATH ${EXTERNAL_BUILD}/qt)
set(CMAKE_PREFIX_PATH ${EXTERNAL_BUILD}/qt)
else()
set(CMAKE_PREFIX_PATH "$ENV{QT_DIR}/")
set(CMAKE_PREFIX_PATH "$ENV{QT_DIR}/")
endif()
if(UNIX AND APPLE)
set(Qt5Widgets_DIR "$ENV{QT_DIR}/cmake/Qt5Widgets/")
set(Qt5PrintSupport_DIR "$ENV{QT_DIR}/cmake/Qt5PrintSupport/")
set(Qt5Widgets_DIR "$ENV{QT_DIR}/cmake/Qt5Widgets/")
set(Qt5PrintSupport_DIR "$ENV{QT_DIR}/cmake/Qt5PrintSupport/")
endif()
find_package(Qt5Widgets)
@@ -270,11 +275,11 @@ find_package(Qt5PrintSupport)
find_package(Qt5Network)
if(Qt5Widgets_FOUND)
MESSAGE(STATUS "Found Qt ${Qt5Widgets_VERSION_STRING}")
# FIX: Qt was built with -reduce-relocations
if (Qt5_POSITION_INDEPENDENT_CODE)
SET(CMAKE_POSITION_INDEPENDENT_CODE ON)
endif()
MESSAGE(STATUS "Found Qt ${Qt5Widgets_VERSION_STRING}")
# FIX: Qt was built with -reduce-relocations
if (Qt5_POSITION_INDEPENDENT_CODE)
SET(CMAKE_POSITION_INDEPENDENT_CODE ON)
endif()
endif()
# target for running versionnumber script
@@ -292,7 +297,7 @@ add_custom_command(
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/cmake/version.cmake
BYPRODUCTS ${PROJECT_SOURCE_DIR}/build/src/lib_gui/version.h
DEPENDS ${LIB_GUI_PROJECT_NAME}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
COMMENT "check/update version number"
)
add_dependencies(${LIB_GUI_PROJECT_NAME} versionnumber)
@@ -334,8 +339,8 @@ configure_file(
#configure the versioning file
configure_file(
${CMAKE_SOURCE_DIR}/cmake/version.h.in
${CMAKE_SOURCE_DIR}/build/src/lib_gui/version.h
${CMAKE_SOURCE_DIR}/cmake/version.h.in
${CMAKE_SOURCE_DIR}/build/src/lib_gui/version.h
)
# configure public key for the coati version
@@ -563,9 +568,9 @@ endif ()
add_subdirectory(src/test)
if(UNIX AND NOT APPLE)
set(CXXTEST_INCLUDE_DIR ${EXTERNAL_SRC}/cxxtest)
set(CXXTEST_INCLUDE_DIR ${EXTERNAL_SRC}/cxxtest)
else()
set(CXXTEST_INCLUDE_DIR $ENV{CXX_TEST_DIR})
set(CXXTEST_INCLUDE_DIR $ENV{CXX_TEST_DIR})
endif()
set(CXXTEST_PYTHON_TESTGEN_EXECUTABLE ${CXXTEST_INCLUDE_DIR}/bin/cxxtestgen)
set(TESTGEN_FILE ${CMAKE_CURRENT_BINARY_DIR}/test_main.cpp)
+30
View File
@@ -180,3 +180,33 @@ $ git push --tags
* Improved painting of icons in graph to be smoother
* Added link to documentation to Help menu
* Fixed preferences not saved
##### 0.5.1.21
* Added project setup for Compilation Databases
* Improved analysis performance for large projects (10x as fast for 1.000.000 LoC)
* Improved project load and code view performance
* Added graph panning with WASD
* Added graph zooming with Shift + mouse wheel or Shift + WS
* Added file extension UI to advanced settings in project setup summary
* Added compiler flags UI to advanced settings in project setup summary
* Show fatal errors in UI that stopped analysis
* Fixed linux package creating ~/.config if not there
* Fixed project setup window sizes to adapt to content size
* Fixed project paths are now saved relative if defined relative
* Fixed crash when opening newer project with older version of Coati
* Removed high traffic log messages
* Show loader animation when loading project
* Fixed expanding file with errors showed all locations in red
* Fixed children on namespace activation were bundled
* Fixed interrupting of analysis to show message in status bar
* Disabled config file warnings
* Added delay for changing fontsize via mouse wheel
* Fixed Visual Studio plugin project loading
* Improved context detection for template parameters
* Fixed type references in headers saved multiple times
* Prevent network message handling without valid license
* Added font size limits
* Center windows on top of main window
* Fixed crash when accessing files without read permission
* Fixed file logger using wrong directory for first log file
+16 -2
View File
@@ -87,7 +87,7 @@
</syntax>
<selection>
<location>
<token>
<normal>
<border>transparent</border>
<fill>transparent</fill>
@@ -100,7 +100,21 @@
<border>#B2B2B2</border>
<fill>#4A4A4A</fill>
</active>
</location>
</token>
<local_symbol>
<normal>
<border>transparent</border>
<fill>transparent</fill>
</normal>
<focus>
<border>#FF9C3C</border>
<fill>transparent</fill>
</focus>
<active>
<border>#FF9C3C</border>
<fill>#695540</fill>
</active>
</local_symbol>
<scope>
<normal>
<border>transparent</border>
+18 -4
View File
@@ -87,7 +87,7 @@
</syntax>
<selection>
<location>
<token>
<normal>
<border>transparent</border>
<fill>transparent</fill>
@@ -100,7 +100,21 @@
<border>#B2B2B2</border>
<fill>#EDEDED</fill>
</active>
</location>
</token>
<local_symbol>
<normal>
<border>transparent</border>
<fill>transparent</fill>
</normal>
<focus>
<border>#FF9C3C</border>
<fill>transparent</fill>
</focus>
<active>
<border>#FF9C3C</border>
<fill>#FFDFC0</fill>
</active>
</local_symbol>
<scope>
<normal>
<border>transparent</border>
@@ -295,8 +309,8 @@
</template_member_specialization>
<aggregation>
<normal>#EEE</normal>
<focus>#DDD</focus>
<normal>#DDD</normal>
<focus>#CCC</focus>
</aggregation>
</edge>
</graph>
+18 -4
View File
@@ -87,7 +87,7 @@
</syntax>
<selection>
<location>
<token>
<normal>
<border>transparent</border>
<fill>transparent</fill>
@@ -100,7 +100,21 @@
<border>#B2B2B2</border>
<fill>#4A4A4A</fill>
</active>
</location>
</token>
<local_symbol>
<normal>
<border>transparent</border>
<fill>transparent</fill>
</normal>
<focus>
<border>#FF9C3C</border>
<fill>transparent</fill>
</focus>
<active>
<border>#FF9C3C</border>
<fill>#695540</fill>
</active>
</local_symbol>
<scope>
<normal>
<border>transparent</border>
@@ -317,8 +331,8 @@
</macro_use>
<aggregation>
<normal>#5D5D5D</normal>
<focus>#6D6D6D</focus>
<normal>#3D3D3D</normal>
<focus>#4D4D4D</focus>
</aggregation>
</edge>
</graph>
@@ -14,7 +14,7 @@
<source_extensions>.c</source_extensions>
</extensions>
<source_paths>
<source_path>/Users/ebsi/Documents/Coati/bin/app/data/projects/tictactoe/src</source_path>
<source_path>./src</source_path>
</source_paths>
<use_source_paths_for_header_search>0</use_source_paths_for_header_search>
</source>
@@ -14,7 +14,7 @@
LET'S GET STARTED!\n
\tTo keep things simple just click the "main" symbol below to start the tour.\n
\n
[main](); // &lt;- start here\n\n
[main\tint\r()](); // &lt;- start here\n\n
</description>
</info>
<source>
-18
View File
@@ -1,21 +1,3 @@
CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:1:20
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:1:20
CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:1:11
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:1:13
CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:7:15
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:20
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:5:20
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: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
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:3:20
CxxDeclNameResolver.cpp ERROR: could not resolve name of decl at: input.cc:4:20
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.
+75 -55
View File
@@ -13,6 +13,25 @@
#-d ${CMAKE_SOURCE_DIR}/bin/app/data/projects/tutorial/tutorial.coatiproject)"
#)
function(InstallQtModule module qtversion componentName)
get_filename_component(realpath ${EXTERNAL_BUILD}/qt/lib/libQt5${module}.so.${qtversion} REALPATH)
INSTALL(FILES
${realpath}
DESTINATION lib
COMPONENT ${componentName}
RENAME libQt5${module}.so.${qtversion}
)
endfunction(InstallQtModule)
function(InstallQt qtversion componentName)
InstallQtModule(Gui ${qtversion} ${componentName})
InstallQtModule(Core ${qtversion} ${componentName})
InstallQtModule(Network ${qtversion} ${componentName})
InstallQtModule(XcbQpa ${qtversion} ${componentName})
InstallQtModule(Widgets ${qtversion} ${componentName})
InstallQtModule(DBus ${qtversion} ${componentName})
endfunction(InstallQt)
function(AddSharedToComponent componentName)
INSTALL(DIRECTORY
${CMAKE_SOURCE_DIR}/bin/app/data
@@ -41,30 +60,12 @@ function(AddSharedToComponent componentName)
DESTINATION .
)
INSTALL(FILES
#Qt libs
# FIXME need a better solution for that
${EXTERNAL_BUILD}/qt/lib/libQt5Gui.so.5
${EXTERNAL_BUILD}/qt/lib/libQt5Gui.so.5.5
${EXTERNAL_BUILD}/qt/lib/libQt5Gui.so.5.5.1
${EXTERNAL_BUILD}/qt/lib/libQt5Core.so.5
${EXTERNAL_BUILD}/qt/lib/libQt5Core.so.5.5
${EXTERNAL_BUILD}/qt/lib/libQt5Core.so.5.5.1
${EXTERNAL_BUILD}/qt/lib/libQt5Network.so.5
${EXTERNAL_BUILD}/qt/lib/libQt5Network.so.5.5
${EXTERNAL_BUILD}/qt/lib/libQt5Network.so.5.5.1
${EXTERNAL_BUILD}/qt/lib/libQt5XcbQpa.so.5
${EXTERNAL_BUILD}/qt/lib/libQt5XcbQpa.so.5.5
${EXTERNAL_BUILD}/qt/lib/libQt5XcbQpa.so.5.5.1
${EXTERNAL_BUILD}/qt/lib/libQt5Widgets.so.5
${EXTERNAL_BUILD}/qt/lib/libQt5Widgets.so.5.5
${EXTERNAL_BUILD}/qt/lib/libQt5Widgets.so.5.5.1
${EXTERNAL_BUILD}/qt/lib/libQt5DBus.so.5
${EXTERNAL_BUILD}/qt/lib/libQt5DBus.so.5.5
${EXTERNAL_BUILD}/qt/lib/libQt5DBus.so.5.5.1
InstallQt(5 ${componentName})
get_filename_component(realpath ${LIBSTDCPP} REALPATH)
INSTALL(FILES
#C++
${LIBSTDCPP}
${realpath}
DESTINATION lib
COMPONENT ${componentName}
)
@@ -75,12 +76,6 @@ function(AddSharedToComponent componentName)
COMPONENT ${componentName}
)
INSTALL(DIRECTORY
${CMAKE_SOURCE_DIR}/bin/app/data/projects
DESTINATION user
COMPONENT ${componentName}
)
INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/bin/app/user
DESTINATION .
COMPONENT ${componentName}
@@ -103,48 +98,73 @@ AddSharedToComponent(TRIAL)
INSTALL(DIRECTORY
${CMAKE_SOURCE_DIR}/ide_plugins/sublime_text
DESTINATION plugin
DESTINATION plugin
COMPONENT FULL
)
INSTALL(FILES
${CMAKE_SOURCE_DIR}/setup/Linux/coati.desktop
${CMAKE_SOURCE_DIR}/setup/Linux/coati-mime.xml
DESTINATION setup
COMPONENT FULL
INSTALL(DIRECTORY
${CMAKE_SOURCE_DIR}/bin/app/data/projects
DESTINATION user
COMPONENT FULL
PATTERN "*.coatidb" EXCLUDE
)
INSTALL(DIRECTORY
${CMAKE_SOURCE_DIR}/bin/app/data/projects
DESTINATION user
COMPONENT TRIAL
)
INSTALL(FILES
${CMAKE_SOURCE_DIR}/setup/Linux/coati.desktop
${CMAKE_SOURCE_DIR}/setup/Linux/coati-mime.xml
DESTINATION setup
COMPONENT FULL
)
INSTALL(PROGRAMS
${CMAKE_SOURCE_DIR}/setup/Linux/install.sh
${CMAKE_SOURCE_DIR}/setup/Linux/deinstall.sh
${CMAKE_SOURCE_DIR}/setup/Linux/removeConfigs.sh
DESTINATION setup
COMPONENT FULL
)
)
INSTALL(PROGRAMS
${CMAKE_SOURCE_DIR}/setup/Linux/Coati_trial.sh
DESTINATION .
COMPONENT TRIAL
)
INSTALL(PROGRAMS
${CMAKE_SOURCE_DIR}/setup/Linux/Coati.sh
DESTINATION .
COMPONENT FULL
)
INSTALL(PROGRAMS
${CMAKE_SOURCE_DIR}/bin/app/Release/Coati_upx
DESTINATION .
COMPONENT FULL
RENAME Coati
)
INSTALL(PROGRAMS
${CMAKE_SOURCE_DIR}/bin/app/Release/Coati_trial_upx
DESTINATION .
COMPONENT TRIAL
RENAME Coati_trial
)
INSTALL(PROGRAMS
${CMAKE_SOURCE_DIR}/setup/Linux/Coati.sh
DESTINATION .
COMPONENT FULL
)
#INSTALL(PROGRAMS
#${CMAKE_SOURCE_DIR}/bin/app/Release/Coati_upx
#DESTINATION .
#COMPONENT FULL
#RENAME Coati
#)
#INSTALL(PROGRAMS
#${CMAKE_SOURCE_DIR}/bin/app/Release/Coati_trial_upx
#DESTINATION .
#COMPONENT TRIAL
#RENAME Coati_trial
#)
INSTALL(TARGETS
${APP_PROJECT_NAME}
DESTINATION .
COMPONENT FULL
)
INSTALL(TARGETS
${TRIAL_PROJECT_NAME}
DESTINATION .
COMPONENT TRIAL
)
# SET(CPACK_GENERATOR "DEB;TGZ")
+20 -3
View File
@@ -1,11 +1,28 @@
# upx
set(upxPath ${CMAKE_CURRENT_LIST_DIR}/../bin/app/Release)
message(STATUS "upx the app")
execute_process(
COMMAND upx --brute ${CMAKE_CURRENT_LIST_DIR}/../bin/app/Release/Coati -o ${CMAKE_CURRENT_LIST_DIR}/../bin/app/Release/Coati_upx
COMMAND upx --brute ${upxPath}/Coati -o ${upxPath}/Coati_upx
)
message(STATUS "upx the trial")
execute_process(
COMMAND upx --brute ${upxPath}/Coati_trial -o ${upxPath}/Coati_trial_upx
)
execute_process(
COMMAND ${upxPath}/Coati -f -d ${upxPath}/../data/projects/tictactoe/tictactoe.coatiproject
)
execute_process(
COMMAND upx --brute ${CMAKE_CURRENT_LIST_DIR}/../bin/app/Release/Coati_trial -o
${CMAKE_CURRENT_LIST_DIR}/../bin/app/Release/Coati_trial_upx
COMMAND ${upxPath}/Coati -f -d ${upxPath}/../data/projects/tutorial/tutorial.coatiproject
)
#add_custom_command(
#OUTPUT Coati_upx
#COMMAND upx --brute ${CMAKE_CURRENT_LIST_DIR}/../bin/app/Release/Coati -o ${CMAKE_CURRENT_LIST_DIR}/../bin/app/Release/Coati_upx
#)
@@ -13,6 +13,12 @@
"SccProvider" = "8:"
"Hierarchy"
{
"Entry"
{
"MsmKey" = "8:_005CE3D98467436D97D469A9AFE3EFF8"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_009172D9B6C8445D94B50AD1CF326EB6"
@@ -93,6 +99,12 @@
}
"Entry"
{
"MsmKey" = "8:_1B21108076D9489FA204E5E435EAFA3F"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_1B9BFE4FF7844A709077984526432665"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -183,12 +195,6 @@
}
"Entry"
{
"MsmKey" = "8:_36420F99C9CC4B7BA238175503703CEA"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_38986F0870A14310AE4A8143F59891A8"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -231,12 +237,6 @@
}
"Entry"
{
"MsmKey" = "8:_44B5425A0DDE43E8AD6FAC14EECFA6C7"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_45DC2D5A95BC444F9810EADE9598735A"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -285,12 +285,6 @@
}
"Entry"
{
"MsmKey" = "8:_562E4C4D37414C7EB2A2209E29184A9A"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_568B8665216143A4A6960BC78B46E50B"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -339,6 +333,12 @@
}
"Entry"
{
"MsmKey" = "8:_66C1EB6BCCB145F698420E57E880FB69"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_671A5FE77DFA47EBB2E948CC18FD95DB"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -387,12 +387,30 @@
}
"Entry"
{
"MsmKey" = "8:_74926A7319A64D958ECC93188B7BB31F"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_759DB44AA4E240AEB6CE9B798B7B0E37"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_7675DE365CFA4046BACF2CDE793A8267"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_7ADDFE3D63114B7291316FA427083130"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_7AE9A7EE09964FB78D8B4AA404ACBDD3"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -417,6 +435,12 @@
}
"Entry"
{
"MsmKey" = "8:_8444C11B7FD0443AA8C4DFD77B898609"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_851A602506FE4244A021922533932FED"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -429,12 +453,6 @@
}
"Entry"
{
"MsmKey" = "8:_8A9919F0647547E7BFECDA6EC3651313"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_8E2479A7DD6C48F88B7BCC1567A53892"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -447,12 +465,6 @@
}
"Entry"
{
"MsmKey" = "8:_923BC9E3997B4D2FB1158E9841DAC0FE"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_927AA2450359400398EC6015571C4680"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -471,13 +483,13 @@
}
"Entry"
{
"MsmKey" = "8:_98B0B883EE3348929CBBD3664862046B"
"MsmKey" = "8:_9A25601EC45E461F9496D4DD1E562C30"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_9A25601EC45E461F9496D4DD1E562C30"
"MsmKey" = "8:_9D1935C46A004ADE9455308BD4B83AB6"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
@@ -501,12 +513,6 @@
}
"Entry"
{
"MsmKey" = "8:_A51A1BE9EB25456B93B0F789FBE5CD37"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_A66E166B06CE4949B037BA2DDEAA3152"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -543,24 +549,12 @@
}
"Entry"
{
"MsmKey" = "8:_B210763D34474243AFE73FE00C3FB606"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_B71FAEFCDCD34A8FB39491C4032DE7A0"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_B7C17B17E4FE4860824123FE785AAA4D"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_BF1E9D828D734A568A847279AC8E6B23"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -597,7 +591,13 @@
}
"Entry"
{
"MsmKey" = "8:_C3268BA9F2934E9592E7ED684C56B7A1"
"MsmKey" = "8:_C4326D1F22044938BB5DE33E24BD08FA"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_C4F2CBB1CE8641D8B818DFDFF1897303"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
@@ -621,12 +621,6 @@
}
"Entry"
{
"MsmKey" = "8:_CEFD60F0F2AE4EA7A6A1A29E32D4F752"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_D0A7CFAAC04146139FE0EEE3B12F1632"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -645,12 +639,6 @@
}
"Entry"
{
"MsmKey" = "8:_D4A675F8E07A456AAC7700C873342EE3"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_D610DF214BB1441884FFA8C6C259E6B8"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -663,6 +651,12 @@
}
"Entry"
{
"MsmKey" = "8:_D64BF6676ACD4A5ABDA1BD17B3E50147"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_D6A3AA89570B48C6B783CA2DE6993222"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -681,6 +675,18 @@
}
"Entry"
{
"MsmKey" = "8:_E29CB3460C0B4A999B08C2B7176CC731"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_E2B23A593DEB42F99173DD6F2750D15F"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_E3DAD78771E94C709B9F629FF2060A58"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -693,24 +699,12 @@
}
"Entry"
{
"MsmKey" = "8:_E4CA4D09381C428ABD06F998D2F83A12"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_E539A71312074D97840395B5F845AC87"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_E79C907B5F9D437FA1F12D956069765B"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_E89B5E761ABA49648750E4DBADC6EBFB"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -1104,6 +1098,26 @@
}
"File"
{
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_005CE3D98467436D97D469A9AFE3EFF8"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\window\\dots.png"
"TargetName" = "8:dots.png"
"Tag" = "8:"
"Folder" = "8:_56A98FDB83CE48C489B793615E24C057"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_009172D9B6C8445D94B50AD1CF326EB6"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\graph_view\\images\\typedef_3.png"
@@ -1364,6 +1378,26 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1B21108076D9489FA204E5E435EAFA3F"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\window\\refresh.png"
"TargetName" = "8:refresh.png"
"Tag" = "8:"
"Folder" = "8:_56A98FDB83CE48C489B793615E24C057"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1B9BFE4FF7844A709077984526432665"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\code_view\\images\\snippet_active.png"
@@ -1644,26 +1678,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_36420F99C9CC4B7BA238175503703CEA"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\setting_window\\window.css"
"TargetName" = "8:window.css"
"Tag" = "8:"
"Folder" = "8:_EB2EB245EFA44D13BE5310FA80D660E1"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_38986F0870A14310AE4A8143F59891A8"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\fonts\\SourceCodePro_License.txt"
@@ -1804,26 +1818,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_44B5425A0DDE43E8AD6FAC14EECFA6C7"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\setting_window\\help.png"
"TargetName" = "8:help.png"
"Tag" = "8:"
"Folder" = "8:_EB2EB245EFA44D13BE5310FA80D660E1"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_45DC2D5A95BC444F9810EADE9598735A"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\main.css"
@@ -1984,26 +1978,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_562E4C4D37414C7EB2A2209E29184A9A"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\setting_window\\plus_hover.png"
"TargetName" = "8:plus_hover.png"
"Tag" = "8:"
"Folder" = "8:_EB2EB245EFA44D13BE5310FA80D660E1"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_568B8665216143A4A6960BC78B46E50B"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\graph_view\\images\\macro_3.png"
@@ -2164,6 +2138,26 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_66C1EB6BCCB145F698420E57E880FB69"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\window\\minus_hover.png"
"TargetName" = "8:minus_hover.png"
"Tag" = "8:"
"Folder" = "8:_56A98FDB83CE48C489B793615E24C057"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_671A5FE77DFA47EBB2E948CC18FD95DB"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\icon\\project_vs_256_256.png"
@@ -2324,6 +2318,46 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_74926A7319A64D958ECC93188B7BB31F"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\window\\refresh_hover.png"
"TargetName" = "8:refresh_hover.png"
"Tag" = "8:"
"Folder" = "8:_56A98FDB83CE48C489B793615E24C057"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_759DB44AA4E240AEB6CE9B798B7B0E37"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\window\\logo.png"
"TargetName" = "8:logo.png"
"Tag" = "8:"
"Folder" = "8:_56A98FDB83CE48C489B793615E24C057"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7675DE365CFA4046BACF2CDE793A8267"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\search_view\\search_view.css"
@@ -2344,6 +2378,26 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7ADDFE3D63114B7291316FA427083130"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\window\\listbox.css"
"TargetName" = "8:listbox.css"
"Tag" = "8:"
"Folder" = "8:_56A98FDB83CE48C489B793615E24C057"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7AE9A7EE09964FB78D8B4AA404ACBDD3"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\graph_view\\images\\enum_1.png"
@@ -2424,6 +2478,26 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8444C11B7FD0443AA8C4DFD77B898609"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\window\\dots_hover.png"
"TargetName" = "8:dots_hover.png"
"Tag" = "8:"
"Folder" = "8:_56A98FDB83CE48C489B793615E24C057"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_851A602506FE4244A021922533932FED"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\projects\\tictactoe\\src\\field.h"
@@ -2464,26 +2538,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8A9919F0647547E7BFECDA6EC3651313"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\setting_window\\dots_hover.png"
"TargetName" = "8:dots_hover.png"
"Tag" = "8:"
"Folder" = "8:_EB2EB245EFA44D13BE5310FA80D660E1"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8E2479A7DD6C48F88B7BCC1567A53892"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\projects\\tutorial\\src\\code_tutorial_2.h"
@@ -2524,26 +2578,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_923BC9E3997B4D2FB1158E9841DAC0FE"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\project_wizzard\\window.css"
"TargetName" = "8:window.css"
"Tag" = "8:"
"Folder" = "8:_0E9045A24CA74A35A05497FD6B7597C3"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_927AA2450359400398EC6015571C4680"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\projects\\tictactoe\\src\\human_player.cpp"
@@ -2604,12 +2638,12 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_98B0B883EE3348929CBBD3664862046B"
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9A25601EC45E461F9496D4DD1E562C30"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\setting_window\\listbox.css"
"TargetName" = "8:listbox.css"
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\projects\\tutorial\\src\\search_tutorial_4.h"
"TargetName" = "8:search_tutorial_4.h"
"Tag" = "8:"
"Folder" = "8:_EB2EB245EFA44D13BE5310FA80D660E1"
"Folder" = "8:_A38746A96F3F43108F3B9C1A88E43FD0"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
@@ -2624,12 +2658,12 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9A25601EC45E461F9496D4DD1E562C30"
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9D1935C46A004ADE9455308BD4B83AB6"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\projects\\tutorial\\src\\search_tutorial_4.h"
"TargetName" = "8:search_tutorial_4.h"
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\window\\plus.png"
"TargetName" = "8:plus.png"
"Tag" = "8:"
"Folder" = "8:_A38746A96F3F43108F3B9C1A88E43FD0"
"Folder" = "8:_56A98FDB83CE48C489B793615E24C057"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
@@ -2704,26 +2738,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A51A1BE9EB25456B93B0F789FBE5CD37"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\setting_window\\refresh_hover.png"
"TargetName" = "8:refresh_hover.png"
"Tag" = "8:"
"Folder" = "8:_EB2EB245EFA44D13BE5310FA80D660E1"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A66E166B06CE4949B037BA2DDEAA3152"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\Release\\Qt5Widgets.dll"
@@ -2844,26 +2858,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B210763D34474243AFE73FE00C3FB606"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\setting_window\\help_hover.png"
"TargetName" = "8:help_hover.png"
"Tag" = "8:"
"Folder" = "8:_EB2EB245EFA44D13BE5310FA80D660E1"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B71FAEFCDCD34A8FB39491C4032DE7A0"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\fonts\\SourceCodePro-Regular.otf"
@@ -2884,26 +2878,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B7C17B17E4FE4860824123FE785AAA4D"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\setting_window\\plus.png"
"TargetName" = "8:plus.png"
"Tag" = "8:"
"Folder" = "8:_EB2EB245EFA44D13BE5310FA80D660E1"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BF1E9D828D734A568A847279AC8E6B23"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\projects\\tutorial\\src\\code_tutorial_1.h"
@@ -3024,12 +2998,32 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C3268BA9F2934E9592E7ED684C56B7A1"
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C4326D1F22044938BB5DE33E24BD08FA"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\setting_window\\minus.png"
"TargetName" = "8:minus.png"
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\window\\plus_hover.png"
"TargetName" = "8:plus_hover.png"
"Tag" = "8:"
"Folder" = "8:_EB2EB245EFA44D13BE5310FA80D660E1"
"Folder" = "8:_56A98FDB83CE48C489B793615E24C057"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C4F2CBB1CE8641D8B818DFDFF1897303"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\window\\window.css"
"TargetName" = "8:window.css"
"Tag" = "8:"
"Folder" = "8:_56A98FDB83CE48C489B793615E24C057"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
@@ -3084,26 +3078,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CEFD60F0F2AE4EA7A6A1A29E32D4F752"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\setting_window\\refresh.png"
"TargetName" = "8:refresh.png"
"Tag" = "8:"
"Folder" = "8:_EB2EB245EFA44D13BE5310FA80D660E1"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D0A7CFAAC04146139FE0EEE3B12F1632"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\color_schemes\\bad_rainbow.xml"
@@ -3164,26 +3138,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D4A675F8E07A456AAC7700C873342EE3"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\setting_window\\dots.png"
"TargetName" = "8:dots.png"
"Tag" = "8:"
"Folder" = "8:_EB2EB245EFA44D13BE5310FA80D660E1"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D610DF214BB1441884FFA8C6C259E6B8"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\refresh_view\\images\\auto_refresh.png"
@@ -3224,6 +3178,26 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D64BF6676ACD4A5ABDA1BD17B3E50147"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\window\\minus.png"
"TargetName" = "8:minus.png"
"Tag" = "8:"
"Folder" = "8:_56A98FDB83CE48C489B793615E24C057"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D6A3AA89570B48C6B783CA2DE6993222"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\projects\\tutorial\\tutorial.coatiproject"
@@ -3284,6 +3258,46 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E29CB3460C0B4A999B08C2B7176CC731"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\window\\help_hover.png"
"TargetName" = "8:help_hover.png"
"Tag" = "8:"
"Folder" = "8:_56A98FDB83CE48C489B793615E24C057"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E2B23A593DEB42F99173DD6F2750D15F"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\window\\help.png"
"TargetName" = "8:help.png"
"Tag" = "8:"
"Folder" = "8:_56A98FDB83CE48C489B793615E24C057"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E3DAD78771E94C709B9F629FF2060A58"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\projects\\tictactoe\\src\\tictactoe.cpp"
@@ -3324,26 +3338,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E4CA4D09381C428ABD06F998D2F83A12"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\startscreen\\logo.png"
"TargetName" = "8:logo.png"
"Tag" = "8:"
"Folder" = "8:_AC6F394DC192411E939BE8F10799D9A8"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E539A71312074D97840395B5F845AC87"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\code_view\\images\\pattern.png"
@@ -3364,26 +3358,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E79C907B5F9D437FA1F12D956069765B"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\setting_window\\minus_hover.png"
"TargetName" = "8:minus_hover.png"
"Tag" = "8:"
"Folder" = "8:_EB2EB245EFA44D13BE5310FA80D660E1"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E89B5E761ABA49648750E4DBADC6EBFB"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\fonts\\SourceCodePro-Medium.otf"
@@ -3634,17 +3608,6 @@
"Property" = "8:_3757538D3C4C4E5287C03C268F903AEE"
"Folders"
{
"{9EF0B969-E518-4E46-987F-47570745A589}:_0E9045A24CA74A35A05497FD6B7597C3"
{
"Name" = "8:project_wizzard"
"AlwaysCreate" = "11:FALSE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Property" = "8:_F4F2299605A2406A8343D3141FA77860"
"Folders"
{
}
}
"{9EF0B969-E518-4E46-987F-47570745A589}:_2A4D05AF8C6F49D0A35FBF9B5BC5FF48"
{
"Name" = "8:search_view"
@@ -3700,6 +3663,17 @@
}
}
}
"{9EF0B969-E518-4E46-987F-47570745A589}:_56A98FDB83CE48C489B793615E24C057"
{
"Name" = "8:window"
"AlwaysCreate" = "11:FALSE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Property" = "8:_DB34165AE3F348308C291EB7A8453AC0"
"Folders"
{
}
}
"{9EF0B969-E518-4E46-987F-47570745A589}:_608A524BD3B340A9AA7D0DBC82089084"
{
"Name" = "8:icon"
@@ -3821,17 +3795,6 @@
{
}
}
"{9EF0B969-E518-4E46-987F-47570745A589}:_EB2EB245EFA44D13BE5310FA80D660E1"
{
"Name" = "8:setting_window"
"AlwaysCreate" = "11:FALSE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Property" = "8:_F6844314959F483CAEC0DD1F8A669549"
"Folders"
{
}
}
}
}
"{9EF0B969-E518-4E46-987F-47570745A589}:_EF6140F33CC34D7FBE822EC8BEEB5B3C"
@@ -27,12 +27,6 @@
}
"Entry"
{
"MsmKey" = "8:_02CD8C9B8B0E409B907B9B6AC665E91B"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_037CA5C54AC54097A60194F7BF278651"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -45,6 +39,12 @@
}
"Entry"
{
"MsmKey" = "8:_05B5BA0EDD4A4E8B8704D08591FBCC5A"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_0C6F8E3E9815483DB9B9525A5CB12BC7"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -81,12 +81,6 @@
}
"Entry"
{
"MsmKey" = "8:_16F7D67EEC604D6BAA1FD46EA6958CE9"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_17E01ED758AE4C8DA24511FCB2EA736E"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -105,6 +99,12 @@
}
"Entry"
{
"MsmKey" = "8:_1C13C20D88154B1C955263E273E4D3DA"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_1E83046E306A474E9400A001600B2700"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -153,12 +153,6 @@
}
"Entry"
{
"MsmKey" = "8:_30A1423820DB45E5891A961CDA65E45A"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_32FDBCE164294A2DAAFD67F4579D89DF"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -171,18 +165,6 @@
}
"Entry"
{
"MsmKey" = "8:_36C36F93916E41918F44C3328357E17F"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_373E826B62454662887F482B3EED2872"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_383C3C31CEAE49ADB319056F4E68B3F1"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -195,12 +177,24 @@
}
"Entry"
{
"MsmKey" = "8:_394783D0BC30465C9CC8D6E45060F29C"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_3FCDDB859BC247E0B2634CBD56E2B763"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_40F860133DBD41678E02018710BA1BF9"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_4400372852214CC588823F7A1A9F5F5D"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -231,12 +225,6 @@
}
"Entry"
{
"MsmKey" = "8:_4D80F151B3F143659EEBFFF07E91C65A"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_4D9D70D2CA3244CD919DDB78843614FD"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -249,12 +237,6 @@
}
"Entry"
{
"MsmKey" = "8:_546F15E809DF45859A0C194380B70843"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_54B73F859AE8446F8D5B9E5DBB1D817A"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -285,6 +267,12 @@
}
"Entry"
{
"MsmKey" = "8:_5D9910FDB208494F955E16F93FB749EC"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_5FB6BD440CAC40449CC42655A2CEB670"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -369,6 +357,12 @@
}
"Entry"
{
"MsmKey" = "8:_79B9FEF9E5924699B7D3425EB286D165"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_7AB220117A0D4C4CB8EB6141745CF164"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -387,12 +381,6 @@
}
"Entry"
{
"MsmKey" = "8:_7FBF72581FBE44908B1D35EDBFFC118F"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_8146F7427D3C4638B39F09A19B84E3FE"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -429,6 +417,12 @@
}
"Entry"
{
"MsmKey" = "8:_8E46CF66E6674CB08C9EBE7E5D3DD4B5"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_8E87461C68FD41E3BF1077B9E7DA946B"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -459,6 +453,12 @@
}
"Entry"
{
"MsmKey" = "8:_97B3481E91FA4C21942C995D3F1B41EF"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_99A1F803D402483EBBF1AD06C31A1D50"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -471,12 +471,6 @@
}
"Entry"
{
"MsmKey" = "8:_9F28F57590444079920CE22A4A1EAF5E"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_A4D5CA6D5A6A4E73968ED13026B71B9B"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -501,12 +495,6 @@
}
"Entry"
{
"MsmKey" = "8:_A8968320B28343E28508DE2F37C12919"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_A9914A775BCE41B4A68A5348DC7326B6"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -519,6 +507,12 @@
}
"Entry"
{
"MsmKey" = "8:_ABD9143C77284EBCA7EF19F012F7E2AF"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_B1A224B08C57497B94CEC6DBBABD5323"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -531,7 +525,7 @@
}
"Entry"
{
"MsmKey" = "8:_B88D0D6B803B40C1AA0CCEDED05662ED"
"MsmKey" = "8:_BD45AF18BAFB4F88BB8BEE8EBCE82EF1"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
@@ -633,6 +627,12 @@
}
"Entry"
{
"MsmKey" = "8:_D10DA9239C28497AA681D941CC83AFC6"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_D2C2F69F414F43CBB247E8FBEE410766"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -663,13 +663,13 @@
}
"Entry"
{
"MsmKey" = "8:_DB44703A777E4FC3803F2F59A5EF1FAD"
"MsmKey" = "8:_DBCBA153A5EF4B869CF8A9003DFB5C35"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_DBCBA153A5EF4B869CF8A9003DFB5C35"
"MsmKey" = "8:_DBD6A17A0D3E4DD7BE265D5D921ADD62"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
@@ -729,18 +729,6 @@
}
"Entry"
{
"MsmKey" = "8:_EA82EEC5EE4E458FB44322D937583352"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_EB5D1E4836BB4AF6AF35821DC45F990A"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_F0F1AA2EBF404C6F87EC93AC1BAC0390"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@@ -783,6 +771,12 @@
}
"Entry"
{
"MsmKey" = "8:_FFC8343DC704415B85912121E543F649"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_3460FAB707F8431E87168499A7F51556"
"MsmSig" = "8:_UNDEFINED"
@@ -790,7 +784,7 @@
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_FB29EAD658C3497D9AC46ADE92D33C83"
"OwnerKey" = "8:_C84BE68F0D9E42D3B9BD9C8A53DF049A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
@@ -802,7 +796,7 @@
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_C84BE68F0D9E42D3B9BD9C8A53DF049A"
"OwnerKey" = "8:_FB29EAD658C3497D9AC46ADE92D33C83"
"MsmSig" = "8:_UNDEFINED"
}
}
@@ -1156,26 +1150,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_02CD8C9B8B0E409B907B9B6AC665E91B"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\project_wizzard\\window.css"
"TargetName" = "8:window.css"
"Tag" = "8:"
"Folder" = "8:_C0D58E5F41914679BBF77A64F4AD9883"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_037CA5C54AC54097A60194F7BF278651"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\fonts\\FiraSans_License.txt"
@@ -1216,6 +1190,26 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_05B5BA0EDD4A4E8B8704D08591FBCC5A"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\window\\dots.png"
"TargetName" = "8:dots.png"
"Tag" = "8:"
"Folder" = "8:_991DBD2EDC144CE79F23005FB99BF9AF"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0C6F8E3E9815483DB9B9525A5CB12BC7"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\Release\\Qt5Network.dll"
@@ -1336,26 +1330,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_16F7D67EEC604D6BAA1FD46EA6958CE9"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\setting_window\\plus_hover.png"
"TargetName" = "8:plus_hover.png"
"Tag" = "8:"
"Folder" = "8:_6BFBF58A706240718B8E6BF738AEABA9"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_17E01ED758AE4C8DA24511FCB2EA736E"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\fonts\\SourceCodePro-Bold.otf"
@@ -1416,6 +1390,26 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1C13C20D88154B1C955263E273E4D3DA"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\window\\refresh.png"
"TargetName" = "8:refresh.png"
"Tag" = "8:"
"Folder" = "8:_991DBD2EDC144CE79F23005FB99BF9AF"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1E83046E306A474E9400A001600B2700"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\graph_view\\images\\enum_2.png"
@@ -1576,26 +1570,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_30A1423820DB45E5891A961CDA65E45A"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\startscreen\\logo.png"
"TargetName" = "8:logo.png"
"Tag" = "8:"
"Folder" = "8:_48309CB0659B48DA90B6CC258F802FC3"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_32FDBCE164294A2DAAFD67F4579D89DF"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\code_view\\images\\minimize_active.png"
@@ -1616,46 +1590,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_36C36F93916E41918F44C3328357E17F"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\setting_window\\dots.png"
"TargetName" = "8:dots.png"
"Tag" = "8:"
"Folder" = "8:_6BFBF58A706240718B8E6BF738AEABA9"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_373E826B62454662887F482B3EED2872"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\setting_window\\listbox.css"
"TargetName" = "8:listbox.css"
"Tag" = "8:"
"Folder" = "8:_6BFBF58A706240718B8E6BF738AEABA9"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_383C3C31CEAE49ADB319056F4E68B3F1"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\user\\ApplicationSettings_for_package.xml"
@@ -1696,6 +1630,26 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_394783D0BC30465C9CC8D6E45060F29C"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\window\\window.css"
"TargetName" = "8:window.css"
"Tag" = "8:"
"Folder" = "8:_991DBD2EDC144CE79F23005FB99BF9AF"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3FCDDB859BC247E0B2634CBD56E2B763"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\projects\\tictactoe\\src\\artificial_player.h"
@@ -1716,6 +1670,26 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_40F860133DBD41678E02018710BA1BF9"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\window\\listbox.css"
"TargetName" = "8:listbox.css"
"Tag" = "8:"
"Folder" = "8:_991DBD2EDC144CE79F23005FB99BF9AF"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_4400372852214CC588823F7A1A9F5F5D"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\Release\\Qt5Gui.dll"
@@ -1816,26 +1790,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_4D80F151B3F143659EEBFFF07E91C65A"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\setting_window\\refresh_hover.png"
"TargetName" = "8:refresh_hover.png"
"Tag" = "8:"
"Folder" = "8:_6BFBF58A706240718B8E6BF738AEABA9"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_4D9D70D2CA3244CD919DDB78843614FD"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\about\\logo_coati.png"
@@ -1876,26 +1830,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_546F15E809DF45859A0C194380B70843"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\setting_window\\minus.png"
"TargetName" = "8:minus.png"
"Tag" = "8:"
"Folder" = "8:_6BFBF58A706240718B8E6BF738AEABA9"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_54B73F859AE8446F8D5B9E5DBB1D817A"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\code_view\\images\\maximize_active.png"
@@ -1996,6 +1930,26 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_5D9910FDB208494F955E16F93FB749EC"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\window\\plus_hover.png"
"TargetName" = "8:plus_hover.png"
"Tag" = "8:"
"Folder" = "8:_991DBD2EDC144CE79F23005FB99BF9AF"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_5FB6BD440CAC40449CC42655A2CEB670"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\splash_white.png"
@@ -2276,6 +2230,26 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_79B9FEF9E5924699B7D3425EB286D165"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\window\\plus.png"
"TargetName" = "8:plus.png"
"Tag" = "8:"
"Folder" = "8:_991DBD2EDC144CE79F23005FB99BF9AF"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7AB220117A0D4C4CB8EB6141745CF164"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\code_view\\code_view.css"
@@ -2336,26 +2310,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7FBF72581FBE44908B1D35EDBFFC118F"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\setting_window\\plus.png"
"TargetName" = "8:plus.png"
"Tag" = "8:"
"Folder" = "8:_6BFBF58A706240718B8E6BF738AEABA9"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8146F7427D3C4638B39F09A19B84E3FE"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\projects\\tutorial\\src\\search_tutorial_5.h"
@@ -2476,6 +2430,26 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8E46CF66E6674CB08C9EBE7E5D3DD4B5"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\window\\refresh_hover.png"
"TargetName" = "8:refresh_hover.png"
"Tag" = "8:"
"Folder" = "8:_991DBD2EDC144CE79F23005FB99BF9AF"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8E87461C68FD41E3BF1077B9E7DA946B"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\code_view\\images\\maximize_inactive.png"
@@ -2576,6 +2550,26 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_97B3481E91FA4C21942C995D3F1B41EF"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\window\\minus_hover.png"
"TargetName" = "8:minus_hover.png"
"Tag" = "8:"
"Folder" = "8:_991DBD2EDC144CE79F23005FB99BF9AF"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_99A1F803D402483EBBF1AD06C31A1D50"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\graph_view\\images\\enum_1.png"
@@ -2616,26 +2610,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9F28F57590444079920CE22A4A1EAF5E"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\setting_window\\help_hover.png"
"TargetName" = "8:help_hover.png"
"Tag" = "8:"
"Folder" = "8:_6BFBF58A706240718B8E6BF738AEABA9"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A4D5CA6D5A6A4E73968ED13026B71B9B"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\projects\\tutorial\\src\\main.cpp"
@@ -2716,26 +2690,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A8968320B28343E28508DE2F37C12919"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\setting_window\\help.png"
"TargetName" = "8:help.png"
"Tag" = "8:"
"Folder" = "8:_6BFBF58A706240718B8E6BF738AEABA9"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A9914A775BCE41B4A68A5348DC7326B6"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\icon\\project_cdb_256_256.png"
@@ -2776,6 +2730,26 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_ABD9143C77284EBCA7EF19F012F7E2AF"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\window\\dots_hover.png"
"TargetName" = "8:dots_hover.png"
"Tag" = "8:"
"Folder" = "8:_991DBD2EDC144CE79F23005FB99BF9AF"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B1A224B08C57497B94CEC6DBBABD5323"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\code_view\\images\\snippet_active.png"
@@ -2816,12 +2790,12 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B88D0D6B803B40C1AA0CCEDED05662ED"
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BD45AF18BAFB4F88BB8BEE8EBCE82EF1"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\setting_window\\dots_hover.png"
"TargetName" = "8:dots_hover.png"
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\window\\logo.png"
"TargetName" = "8:logo.png"
"Tag" = "8:"
"Folder" = "8:_6BFBF58A706240718B8E6BF738AEABA9"
"Folder" = "8:_991DBD2EDC144CE79F23005FB99BF9AF"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
@@ -3136,6 +3110,26 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D10DA9239C28497AA681D941CC83AFC6"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\window\\help_hover.png"
"TargetName" = "8:help_hover.png"
"Tag" = "8:"
"Folder" = "8:_991DBD2EDC144CE79F23005FB99BF9AF"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D2C2F69F414F43CBB247E8FBEE410766"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\fonts\\Roboto-Bold.ttf"
@@ -3236,12 +3230,12 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DB44703A777E4FC3803F2F59A5EF1FAD"
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DBCBA153A5EF4B869CF8A9003DFB5C35"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\setting_window\\window.css"
"TargetName" = "8:window.css"
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\Release\\Qt5Core.dll"
"TargetName" = "8:Qt5Core.dll"
"Tag" = "8:"
"Folder" = "8:_6BFBF58A706240718B8E6BF738AEABA9"
"Folder" = "8:_972788CBF3404779967EA0B73B72BF18"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
@@ -3256,12 +3250,12 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DBCBA153A5EF4B869CF8A9003DFB5C35"
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DBD6A17A0D3E4DD7BE265D5D921ADD62"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\Release\\Qt5Core.dll"
"TargetName" = "8:Qt5Core.dll"
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\window\\minus.png"
"TargetName" = "8:minus.png"
"Tag" = "8:"
"Folder" = "8:_972788CBF3404779967EA0B73B72BF18"
"Folder" = "8:_991DBD2EDC144CE79F23005FB99BF9AF"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
@@ -3456,46 +3450,6 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_EA82EEC5EE4E458FB44322D937583352"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\setting_window\\refresh.png"
"TargetName" = "8:refresh.png"
"Tag" = "8:"
"Folder" = "8:_6BFBF58A706240718B8E6BF738AEABA9"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_EB5D1E4836BB4AF6AF35821DC45F990A"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\setting_window\\minus_hover.png"
"TargetName" = "8:minus_hover.png"
"Tag" = "8:"
"Folder" = "8:_6BFBF58A706240718B8E6BF738AEABA9"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F0F1AA2EBF404C6F87EC93AC1BAC0390"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\projects\\tictactoe\\tictactoe.coatidb"
@@ -3596,6 +3550,26 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_FFC8343DC704415B85912121E543F649"
{
"SourcePath" = "8:..\\..\\..\\..\\bin\\app\\data\\gui\\window\\help.png"
"TargetName" = "8:help.png"
"Tag" = "8:"
"Folder" = "8:_991DBD2EDC144CE79F23005FB99BF9AF"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
}
"FileType"
{
@@ -3729,17 +3703,6 @@
{
}
}
"{9EF0B969-E518-4E46-987F-47570745A589}:_6BFBF58A706240718B8E6BF738AEABA9"
{
"Name" = "8:setting_window"
"AlwaysCreate" = "11:FALSE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Property" = "8:_2AEF36E74AAE4273BB268878DB34AF21"
"Folders"
{
}
}
"{9EF0B969-E518-4E46-987F-47570745A589}:_726D4EDF4337432EBB3AB25F6CAC02A9"
{
"Name" = "8:installer"
@@ -3773,6 +3736,17 @@
{
}
}
"{9EF0B969-E518-4E46-987F-47570745A589}:_991DBD2EDC144CE79F23005FB99BF9AF"
{
"Name" = "8:window"
"AlwaysCreate" = "11:FALSE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Property" = "8:_810B2D4AE8584D3EB4310B5850C1C282"
"Folders"
{
}
}
"{9EF0B969-E518-4E46-987F-47570745A589}:_ADE835DF05A44414B99BCD953C9CF395"
{
"Name" = "8:undoredo_view"
@@ -3795,17 +3769,6 @@
}
}
}
"{9EF0B969-E518-4E46-987F-47570745A589}:_C0D58E5F41914679BBF77A64F4AD9883"
{
"Name" = "8:project_wizzard"
"AlwaysCreate" = "11:FALSE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Property" = "8:_26458E233C5C4B0A9851F56E612F1E3A"
"Folders"
{
}
}
"{9EF0B969-E518-4E46-987F-47570745A589}:_E007ADDCA0E04EE4BED2606D4D221F69"
{
"Name" = "8:refresh_view"
Binary file not shown.
Binary file not shown.
@@ -1,6 +1,8 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
# Visual Studio 14
VisualStudioVersion = 14.0.24720.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CoatiPlugin", "CoatiPlugin\CoatiPlugin.csproj", "{A585A530-E120-4C74-934E-D57ED12A7DA9}"
EndProject
Global
@@ -1,9 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>
<MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">11.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
<FileUpgradeFlags>
</FileUpgradeFlags>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<OldToolsVersion>4.0</OldToolsVersion>
</PropertyGroup>
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 73 KiB

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
<Metadata>
<Identity Id="acf15780-03b5-440e-a41e-db79b7043fc2" Version="0.5.0" Language="en-US" Publisher="Coati Software OG" />
<Identity Id="acf15780-03b5-440e-a41e-db79b7043fc2" Version="0.5.2" Language="en-US" Publisher="Coati Software OG" />
<DisplayName>CoatiPlugin</DisplayName>
<Description xml:space="preserve">This package allows Coati to communicate with Visual Studio and vice versa.
More infos at www.coati.io</Description>
@@ -9,6 +9,8 @@ More infos at www.coati.io</Description>
</Metadata>
<Installation InstalledByMsi="false">
<InstallationTarget Id="Microsoft.VisualStudio.Pro" Version="11.0" />
<InstallationTarget Version="[12.0,13.0)" Id="Microsoft.VisualStudio.Pro" />
<InstallationTarget Version="[14.0,15.0)" Id="Microsoft.VisualStudio.Community" />
</Installation>
<Dependencies>
<Dependency Id="Microsoft.Framework.NDP" DisplayName="Microsoft .NET Framework" d:Source="Manual" Version="4.5" />
+16 -14
View File
@@ -3,49 +3,51 @@
# Determine path to script
MY_PATH=`dirname "$0"`
# build target
$MY_PATH/buildonly.sh $@
if [ $? -ne 0 ]
then
exit 1;
fi
cd $MY_PATH/..
# Build and run target
# run target
if [ "$1" = "release" ] || [ "$1" = "r" ]
then
if [ "$2" = "test" ]
then
#echo "release test"
cmake --build build/Release --target Coati_test && cd bin/test && Release/Coati_test
cd bin/test && Release/Coati_test
elif [ "$2" = "trial" ]
then
cmake --build build/Release --target Coati_trial && cd bin/app && Release/Coati_trial
cd bin/app && Release/Coati_trial
elif [ "$2" = "keygen" ]
then
#echo "release keygen"
cmake --build build/Release --target Coati_license_generator && cd bin/license_generator && Release/Coati_license_generator
cd bin/license_generator && Release/Coati_license_generator
else
#echo "release app"
cmake --build build/Release --target Coati && cd bin/app && Release/Coati
cd bin/app && Release/Coati
fi
elif [ "$1" = "debug" ] || [ "$1" = "d" ]
then
if [ "$2" = "test" ]
then
#echo "debug test"
cmake --build build/Debug --target Coati_test && cd bin/test && Debug/Coati_test
cd bin/test && Debug/Coati_test
elif [ "$2" = "trial" ]
then
cmake --build build/Debug --target Coati_trial && cd bin/app && Debug/Coati_trial
cd bin/app && Debug/Coati_trial
elif [ "$2" = "keygen" ]
then
#echo "debug keygen"
cmake --build build/Debug --target Coati_license_generator && cd bin/license_generator && Debug/Coati_license_generator_d
cd bin/license_generator && Debug/Coati_license_generator
else
#echo "debug app"
cmake --build build/Debug --target Coati && cd bin/app && Debug/Coati
cd bin/app && Debug/Coati
fi
elif [ "$1" = "package" ] || [ "$1" = "p" ]
then
cmake --build build/Release --target package
mkdir -p distr && cp build/Release/Coati*.tar.gz distr #&& cp build/Release/Coati*.deb distr
echo "Packages copied into the distr folder"
else
echo "no arguments: first argument 'release' or 'debug', second argument 'test' for tests"
fi
+6
View File
@@ -33,6 +33,12 @@ rm -rf bin/lib/Debug
rm -rf bin/lib/Release
rm -rf bin/test/Debug
rm -rf bin/test/Release
rm -rf bin/gen
rm -rf bin/lib
rm -rf bin/lib_gui
rm -rf bin/lib_license
rm -rf bin/lib_parser
rm -rf bin/license_generator
# Remove log files
find bin/test/data/log -type f -name 'log*' -delete
+5 -2
View File
@@ -55,8 +55,11 @@ if [ $PLATFORM == "Windows" ]; then
cmd //c 'mklink /d /j '.$MY_PATH.'\..\bin\app\Release\user '.$MY_PATH.'\..\bin\app\user' &
elif [ $PLATFORM == "Linux" ]; then
echo -e $INFO "create symbolic links for data"
ln -s bin/app/data bin/app/Release/data
ln -s bin/app/data bin/app/Debug/data
cd bin/app/Release
ln -s ../data data
cd ../Debug
ln -s ../data data
cd ../../..
fi
# Setup both Debug and Release configuration
+1 -1
View File
@@ -12,7 +12,7 @@ COATI_PATH="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
#setup data folder
if [ ! -d "${HOME}/.config/coati" ]; then
# Control will enter here if $DIRECTORY doesn't exist.
mkdir ${HOME}/.config/coati
mkdir -p ${HOME}/.config/coati
cp $COATI_PATH/user/* ${HOME}/.config/coati/
echo "First start of Coati from this user, copy default configfiles to ~/.config/coati"
fi
+1 -1
View File
@@ -13,7 +13,7 @@ COATI_PATH="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
echo $COATI_PATH
if [ ! -d "${HOME}/.config/coatitrial" ]; then
# Control will enter here if $DIRECTORY doesn't exist.
mkdir ${HOME}/.config/coatitrial
mkdir -p ${HOME}/.config/coatitrial
cp $COATI_PATH/user/* ${HOME}/.config/coatitrial/
echo "First start of Coati from this user, copy default configfiles to ~/.config/coati"
fi
+3 -3
View File
@@ -1,8 +1,8 @@
MY_PATH=`dirname "$0"`
MY_PATH=../$MY_PATH
MY_PATH=../$MY_PATH
cat ../EULA.txt
cat ${MY_PATH}/EULA.txt
echo "Agree to the EULA"
printf 'enter [y/n] '
read ans
@@ -18,5 +18,5 @@ cp $MY_PATH/data/gui/icon/project_256_256.png /usr/share/icons/project-coati.png
update-mime-database /usr/share/mime > /dev/null
update-desktop-database > /dev/null
ln -s /opt/coati/Coati.sh /usr/bin/coati > /dev/null
ln -f -s /opt/coati/Coati.sh /usr/bin/coati > /dev/null
+29
View File
@@ -7,6 +7,9 @@ proteced_branches=("forced_tests" "master")
#proteced_branch='master'
current_branch=$(git symbolic-ref -q --short HEAD)
remote="$1"
url="$2"
FAIL="\033[31mFail:\033[00m"
PASS="\033[32mPass:\033[00m"
INFO="\033[33mInfo:\033[00m"
@@ -73,6 +76,32 @@ function run_tests {
cd $ROOTDIR
}
#handle delete remote branches
while read local_ref lorem_sha remote_ref remote_sha
do
if [ "$local_ref" == "(delete)" ]
then
if [ "$remote_ref" == "refs/heads/master" ]
then
echo "seriously dont delete the master"
exit 1
else
echo "delete remote branch $remote_ref"
exit 0
fi
fi
done
# handle push --tags
while read -d $'\0' arg ; do
if [[ "$arg" == '--tags' ]] ; then
echo "pushing tags"
exit 0
fi
done < /proc/$PPID/cmdline
for branch in "${proteced_branches[@]}"
do
if [ $current_branch == $branch ]
+4
View File
@@ -127,6 +127,10 @@ private:
license.loadPublicKeyFromString(PublicKey);
valid = license.isValid();
if (license.isExpired())
{
valid = false;
}
}
while (false);
+1 -1
View File
@@ -138,7 +138,7 @@ Task::TaskState TaskParseCxx::update()
void TaskParseCxx::exit()
{
MessageStatus("building search index").dispatch();
MessageStatus("building search index", false, true).dispatch();
m_storage->finishParsing();
+11 -9
View File
@@ -32,13 +32,6 @@ void init()
LogManager::getInstance()->addLogger(fileLogger);
}
void prepare(int argc, char *argv[])
{
setup(argc, argv);
init();
}
int main(int argc, char *argv[])
{
QApplication::setApplicationName("Coati");
@@ -54,9 +47,13 @@ int main(int argc, char *argv[])
if (commandLineParser.runWithoutGUI())
{
setupPlatform(argc, argv);
// headless Coati
QtCoreApplication qtApp(argc, argv);
prepare(argc,argv);
setupApp(argc, argv);
init();
std::shared_ptr<Application> app = Application::create( version );
@@ -72,8 +69,13 @@ int main(int argc, char *argv[])
}
else
{
setupPlatform(argc, argv);
QtApplication qtApp(argc, argv);
prepare(argc,argv);
setupApp(argc, argv);
init();
qtApp.setAttribute(Qt::AA_UseHighDpiPixmaps);
QtViewFactory viewFactory;
@@ -13,10 +13,10 @@
namespace po = boost::program_options;
CommandLineParser::CommandLineParser(int argc, char** argv, const std::string& version)
: m_withoutGUI(false)
: m_force(false)
, m_quit(false)
, m_withLicense(false)
, m_force(false)
, m_withoutGUI(false)
{
std::string projectfile;
std::string projectfile_db;
@@ -20,10 +20,12 @@ private:
void processProjectfile(const std::string& file);
void processLicense(const bool isLoaded);
std::string m_projectFile;
bool m_withoutGUI;
bool m_quit;
bool m_force;
bool m_quit;
bool m_withLicense;
bool m_withoutGUI;
License m_license;
};
+1 -1
View File
@@ -95,7 +95,7 @@ bool Application::hasGUI()
void Application::loadProject(const FilePath& projectSettingsFilePath)
{
MessageStatus("Loading Project: " + projectSettingsFilePath.str()).dispatch();
MessageStatus("Loading Project: " + projectSettingsFilePath.str(), false, true).dispatch();
loadSettings();
updateRecentProjects(projectSettingsFilePath);
+15 -4
View File
@@ -107,6 +107,8 @@ add_files(
data/graph/Token.cpp
data/graph/Token.h
data/location/LocationType.cpp
data/location/LocationType.h
data/location/TokenLocation.cpp
data/location/TokenLocation.h
data/location/TokenLocationCollection.cpp
@@ -134,12 +136,8 @@ add_files(
data/search/SearchIndex.cpp
data/search/SearchIndex.h
data/search/SearchNode.cpp
data/search/SearchNode.h
data/search/SearchMatch.cpp
data/search/SearchMatch.h
data/search/SearchResult.cpp
data/search/SearchResult.h
data/type/ArrayModifiedDataType.cpp
data/type/ArrayModifiedDataType.h
@@ -154,11 +152,15 @@ add_files(
data/type/ReferenceModifiedDataType.cpp
data/type/ReferenceModifiedDataType.h
data/DefinitionType.cpp
data/DefinitionType.h
data/ErrorCountInfo.h
data/HierarchyCache.cpp
data/HierarchyCache.h
data/IntermediateStorage.cpp
data/IntermediateStorage.h
data/SqliteIndex.cpp
data/SqliteIndex.h
data/SqliteStorage.cpp
data/SqliteStorage.h
data/Storage.cpp
@@ -215,6 +217,7 @@ add_files(
utility/messaging/type/MessageActivateAll.h
utility/messaging/type/MessageActivateEdge.h
utility/messaging/type/MessageActivateFile.h
utility/messaging/type/MessageActivateLocalSymbols.h
utility/messaging/type/MessageActivateNodes.h
utility/messaging/type/MessageActivateTokenLocations.h
utility/messaging/type/MessageActivateTokenIds.h
@@ -275,6 +278,14 @@ add_files(
utility/solution/ISolutionParser.cpp
utility/solution/ISolutionParser.h
utility/solution/SolutionParserCodeBlocks.cpp
utility/solution/SolutionParserCodeBlocks.h
utility/solution/SolutionParserEclipse.cpp
utility/solution/SolutionParserEclipse.h
utility/solution/SolutionParserManager.cpp
utility/solution/SolutionParserManager.h
utility/solution/SolutionParserUtility.cpp
utility/solution/SolutionParserUtility.h
utility/solution/SolutionParserVisualStudio.cpp
utility/solution/SolutionParserVisualStudio.h
+4 -4
View File
@@ -168,7 +168,7 @@ void Project::updateFileManager()
{
std::shared_ptr<ProjectSettings> projSettings = ProjectSettings::getInstance();
std::vector<FilePath> sourcePaths = projSettings->getSourcePaths();
std::vector<FilePath> sourcePaths = projSettings->getAbsoluteSourcePaths();
std::vector<FilePath> headerPaths;
if (projSettings->getCompilationDatabasePath().exists())
@@ -196,7 +196,7 @@ Parser::Arguments Project::getParserArguments() const
// Add the source paths as HeaderSearchPaths as well, so clang will also look here when searching include files.
utility::append(args.systemHeaderSearchPaths, m_fileManager.getSourcePaths());
utility::append(args.systemHeaderSearchPaths, projSettings->getHeaderSearchPaths());
utility::append(args.systemHeaderSearchPaths, projSettings->getAbsoluteHeaderSearchPaths());
utility::append(args.systemHeaderSearchPaths, appSettings->getHeaderSearchPaths());
@@ -204,7 +204,7 @@ Parser::Arguments Project::getParserArguments() const
if (projSettings->getUseSourcePathsForHeaderSearch())
{
std::vector<FilePath> headerSearchSubPaths;
for (FilePath p : projSettings->getHeaderSearchPaths())
for (FilePath p : projSettings->getAbsoluteHeaderSearchPaths())
{
std::vector<FilePath> tempPaths = FileSystem::getSubDirectories(p);
headerSearchSubPaths.insert( headerSearchSubPaths.end(), tempPaths.begin(), tempPaths.end() );
@@ -214,7 +214,7 @@ Parser::Arguments Project::getParserArguments() const
utility::append(args.systemHeaderSearchPaths, headerSearchSubPaths);
}
utility::append(args.frameworkSearchPaths, projSettings->getFrameworkSearchPaths());
utility::append(args.frameworkSearchPaths, projSettings->getAbsoluteFrameworkSearchPaths());
utility::append(args.frameworkSearchPaths, appSettings->getFrameworkSearchPaths());
args.language = projSettings->getLanguage();
+35 -18
View File
@@ -86,13 +86,18 @@ void CodeController::handleMessage(MessageActivateAll* message)
showContents(message);
}
void CodeController::handleMessage(MessageActivateLocalSymbols* message)
{
CodeView* view = getView();
view->showActiveLocalSymbolIds(message->symbolIds);
}
void CodeController::handleMessage(MessageActivateTokens* message)
{
CodeView* view = getView();
view->setErrorMessages(std::vector<std::string>());
std::vector<Id> activeTokenIds =
(message->originalTokenIds.size() > 0 ? message->originalTokenIds : message->tokenIds);
std::vector<Id> activeTokenIds = message->tokenIds;
Id declarationId = 0; // 0 means that no token is found.
if (!message->isAggregation)
@@ -106,11 +111,6 @@ void CodeController::handleMessage(MessageActivateTokens* message)
activeTokenIds = m_storageAccess->getActiveTokenIdsForId(activeTokenIds[0], &declarationId);
}
if (message->originalTokenIds.size() > 0)
{
declarationId = 0;
}
if (message->isEdge)
{
view->showFirstActiveSnippet(activeTokenIds, message->isLast());
@@ -248,13 +248,26 @@ void CodeController::handleMessage(MessageShowScope* message)
}
std::vector<CodeSnippetParams> snippets = getSnippetsForActiveTokenLocations(collection.get(), 0);
if (snippets.size() != 1)
{
LOG_ERROR("MessageShowScope didn't result in one single snippet to be created");
return;
}
if (message->showErrors)
{
std::vector<std::string> errorMessages;
std::vector<CodeSnippetParams> errorSnippets = getSnippetsForErrorLocations(&errorMessages);
for (const CodeSnippetParams& error : errorSnippets)
{
if (error.locationFile->getFilePath() == snippets[0].locationFile->getFilePath())
{
snippets[0].locationFile = error.locationFile;
}
}
}
getView()->addCodeSnippets(snippets, true);
showContents(message);
@@ -292,7 +305,7 @@ std::vector<CodeSnippetParams> CodeController::getSnippetsForActiveTokenLocation
}
);
if (isDeclarationFile || collection->getTokenLocationFileCount() < 5 || file->isWholeCopy)
if (snippets.size() < 10 && (isDeclarationFile || collection->getTokenLocationFileCount() < 5 || file->isWholeCopy))
{
std::vector<CodeSnippetParams> fileSnippets = getSnippetsForActiveTokenLocationsInFile(file);
@@ -351,7 +364,7 @@ std::vector<CodeSnippetParams> CodeController::getSnippetsForFile(std::shared_pt
fileLocations->forEachStartTokenLocation(
[&](TokenLocation* startLoc) -> void
{
if (startLoc->getType() == TokenLocation::LOCATION_SCOPE)
if (startLoc->getType() == LOCATION_SCOPE)
{
TokenLocation* endLoc = startLoc->getOtherTokenLocation();
TokenLocation* scopeLoc = scopeLocations->addTokenLocation(
@@ -361,7 +374,7 @@ std::vector<CodeSnippetParams> CodeController::getSnippetsForFile(std::shared_pt
startLoc->getColumnNumber(),
endLoc->getLineNumber(),
endLoc->getColumnNumber());
scopeLoc->setType(TokenLocation::LOCATION_SCOPE);
scopeLoc->setType(LOCATION_SCOPE);
}
}
);
@@ -543,8 +556,8 @@ std::shared_ptr<TokenLocationFile> CodeController::getTokenLocationOfParentScope
}
std::vector<CodeSnippetParams> CodeController::getSnippetsForErrorLocations(
std::vector<std::string>* errorMessages)
const {
std::vector<std::string>* errorMessages) const
{
TokenLocationCollection errorCollection = m_storageAccess->getErrorTokenLocations(errorMessages);
std::vector<CodeSnippetParams> snippets;
@@ -569,6 +582,7 @@ std::vector<std::string> CodeController::getProjectDescription(TokenLocationFile
return std::vector<std::string>();
}
// todo fixme: this split currently prevents the next step from recognizing multi level name hierarchies.
std::vector<std::string> lines = utility::splitToVector(description, "\\n");
size_t startLineNumber = 4;
@@ -577,6 +591,7 @@ std::vector<std::string> CodeController::getProjectDescription(TokenLocationFile
std::string line = "\t" + lines[i];
line = utility::replace(line, "\\t", "\t");
line = utility::replace(line, "\\r", "\r");
size_t pos = 0;
while (pos != std::string::npos)
@@ -589,21 +604,23 @@ std::vector<std::string> CodeController::getProjectDescription(TokenLocationFile
break;
}
std::string tokenName = line.substr(posA + 1, posB - posA - 1);
std::string serializedName = line.substr(posA + 1, posB - posA - 1);
Id tokenId = m_storageAccess->getIdForNodeWithSearchNameHierarchy(NameHierarchy(tokenName));
NameHierarchy nameHierarchy = NameHierarchy::deserialize(serializedName);
Id tokenId = m_storageAccess->getIdForNodeWithNameHierarchy(nameHierarchy);
if (tokenId > 0)
{
line.replace(posA, posB - posA + 1, tokenName);
std::string nameString = nameHierarchy.getQualifiedName();
line.replace(posA, posB - posA + 1, nameString);
locationFile->addTokenLocation(
0, tokenId,
startLineNumber + i, posA + 1,
startLineNumber + i, posA + tokenName.size()
startLineNumber + i, posA + nameString.size()
);
}
pos = posA + tokenName.size();
pos = posA + serializedName.size();
}
lines[i] = line;
@@ -6,6 +6,7 @@
#include "utility/messaging/MessageListener.h"
#include "utility/messaging/type/MessageActivateAll.h"
#include "utility/messaging/type/MessageActivateLocalSymbols.h"
#include "utility/messaging/type/MessageActivateTokens.h"
#include "utility/messaging/type/MessageChangeFileView.h"
#include "utility/messaging/type/MessageFlushUpdates.h"
@@ -27,6 +28,7 @@ class TokenLocationFile;
class CodeController
: public Controller
, public MessageListener<MessageActivateAll>
, public MessageListener<MessageActivateLocalSymbols>
, public MessageListener<MessageActivateTokens>
, public MessageListener<MessageChangeFileView>
, public MessageListener<MessageFlushUpdates>
@@ -44,6 +46,7 @@ private:
static const uint s_lineRadius;
virtual void handleMessage(MessageActivateAll* message);
virtual void handleMessage(MessageActivateLocalSymbols* message);
virtual void handleMessage(MessageActivateTokens* message);
virtual void handleMessage(MessageChangeFileView* message);
virtual void handleMessage(MessageFlushUpdates* message);
@@ -65,8 +65,6 @@ void FeatureController::handleMessage(MessageActivateTokenIds* message)
void FeatureController::handleMessage(MessageActivateTokenLocations* message)
{
std::vector<Id> nodeIds = m_storageAccess->getNodeIdsForLocationIds(message->locationIds);
nodeIds = m_storageAccess->getActiveTokenIdsForTokenIds(nodeIds);
MessageActivateNodes m;
for (Id nodeId : nodeIds)
{
@@ -74,7 +72,7 @@ void FeatureController::handleMessage(MessageActivateTokenLocations* message)
nodeId,
m_storageAccess->getNodeTypeForNodeWithId(nodeId),
m_storageAccess->getNameHierarchyForNodeWithId(nodeId)
);
);
}
m.dispatchImmediately();
}
+128 -63
View File
@@ -67,16 +67,10 @@ void GraphController::handleMessage(MessageActivateTokens* message)
std::vector<Id> tokenIds = utility::concat(m_activeNodeIds, m_activeEdgeIds);
std::shared_ptr<Graph> graph =
m_storageAccess->getGraphForActiveTokenIds(tokenIds, message->originalTokenIds.size() > 0);
std::shared_ptr<Graph> graph = m_storageAccess->getGraphForActiveTokenIds(tokenIds);
createDummyGraphForTokenIds(tokenIds, graph);
if (message->originalTokenIds.size() > 0)
{
deactivateNodesRecursive(&m_dummyNodes);
}
if (m_activeNodeIds.size() == 1)
{
bundleNodes();
@@ -344,10 +338,13 @@ void GraphController::autoExpandActiveNode(const std::vector<Id>& activeTokenIds
void GraphController::setActiveAndVisibility(const std::vector<Id>& activeTokenIds)
{
bool noActive = activeTokenIds.size() == 0;
for (DummyNode& node : m_dummyNodes)
if (activeTokenIds.size() > 0)
{
setNodeActiveRecursive(node, activeTokenIds);
noActive = true;
for (DummyNode& node : m_dummyNodes)
{
setNodeActiveRecursive(node, activeTokenIds, &noActive);
}
}
for (DummyEdge& edge : m_dummyEdges)
@@ -376,22 +373,58 @@ void GraphController::setActiveAndVisibility(const std::vector<Id>& activeTokenI
for (DummyNode& node : m_dummyNodes)
{
removeImplicitAndUndefinedChildrenRecursive(node);
setNodeVisibilityRecursiveBottomUp(node, noActive);
}
}
void GraphController::setNodeActiveRecursive(DummyNode& node, const std::vector<Id>& activeTokenIds) const
void GraphController::setNodeActiveRecursive(DummyNode& node, const std::vector<Id>& activeTokenIds, bool* noActive) const
{
node.active = false;
if (node.isGraphNode())
{
node.active = find(activeTokenIds.begin(), activeTokenIds.end(), node.data->getId()) != activeTokenIds.end();
if (node.active)
{
*noActive = false;
}
}
for (DummyNode& subNode : node.subNodes)
{
setNodeActiveRecursive(subNode, activeTokenIds);
setNodeActiveRecursive(subNode, activeTokenIds, noActive);
}
}
void GraphController::removeImplicitAndUndefinedChildrenRecursive(DummyNode& node)
{
for (size_t i = 0; i < node.subNodes.size(); i++)
{
bool removeNode = false;
DummyNode& subNode = node.subNodes[i];
if (subNode.isGraphNode() && !subNode.data->isExplicit() && !subNode.connected && !subNode.active && !subNode.subNodes.size())
{
removeNode = true;
}
else
{
removeImplicitAndUndefinedChildrenRecursive(subNode);
if (subNode.isAccessNode() && subNode.subNodes.size() == 0)
{
removeNode = true;
}
}
if (removeNode)
{
node.subNodes.erase(node.subNodes.begin() + i);
i--;
}
}
}
@@ -443,18 +476,9 @@ void GraphController::setNodeVisibilityRecursiveTopDown(DummyNode& node, bool pa
}
}
void GraphController::deactivateNodesRecursive(std::vector<DummyNode>* nodes) const
{
for (DummyNode& node : *nodes)
{
node.active = false;
deactivateNodesRecursive(&node.subNodes);
}
}
void GraphController::bundleNodes()
{
bundleNodesMatching(
bundleNodesAndEdgesMatching(
[&](const DummyNode& node)
{
return isTypeNodeWithSingleAggregation(node, TokenComponentAggregation::DIRECTION_BACKWARD);
@@ -463,7 +487,7 @@ void GraphController::bundleNodes()
"Referenced Types"
);
// bundleNodesMatching(
// bundleNodesAndEdgesMatching(
// [&](const DummyNode& node)
// {
// return isTypeNodeWithSingleAggregation(node, TokenComponentAggregation::DIRECTION_FORWARD);
@@ -472,7 +496,7 @@ void GraphController::bundleNodes()
// "Referencing Types"
// );
bundleNodesMatching(
bundleNodesAndEdgesMatching(
[&](const DummyNode& node)
{
return isTypeNodeWithSingleInheritance(node, true);
@@ -481,7 +505,7 @@ void GraphController::bundleNodes()
"Base Types"
);
bundleNodesMatching(
bundleNodesAndEdgesMatching(
[&](const DummyNode& node)
{
return isTypeNodeWithSingleInheritance(node, false);
@@ -490,7 +514,7 @@ void GraphController::bundleNodes()
"Derived Types"
);
bundleNodesMatching(
bundleNodesAndEdgesMatching(
[&](const DummyNode& node)
{
return isUndefinedNode(node, false);
@@ -499,7 +523,7 @@ void GraphController::bundleNodes()
"Undefined Symbols"
);
bundleNodesMatching(
bundleNodesAndEdgesMatching(
[&](const DummyNode& node)
{
return isUndefinedNode(node, true);
@@ -508,7 +532,7 @@ void GraphController::bundleNodes()
"Undefined Symbols"
);
bundleNodesMatching(
bundleNodesAndEdgesMatching(
[&](const DummyNode& node)
{
return isTypeUserNode(node);
@@ -518,23 +542,18 @@ void GraphController::bundleNodes()
);
}
void GraphController::bundleNodesMatching(std::function<bool(const DummyNode&)> matcher, size_t count, const std::string& name)
void GraphController::bundleNodesAndEdgesMatching(std::function<bool(const DummyNode&)> matcher, size_t count, const std::string& name)
{
size_t matchCount = 0;
std::vector<size_t> nodeIndices;
std::vector<size_t> matchedNodeIndices;
for (size_t i = 0; i < m_dummyNodes.size(); i++)
{
const DummyNode& node = m_dummyNodes[i];
if (matcher(node))
if (matcher(m_dummyNodes[i]))
{
matchCount++;
nodeIndices.push_back(i);
matchedNodeIndices.push_back(i);
}
}
if (matchCount < count || matchCount == m_dummyNodes.size())
if (!matchedNodeIndices.size() || matchedNodeIndices.size() < count || matchedNodeIndices.size() == m_dummyNodes.size())
{
return;
}
@@ -543,20 +562,23 @@ void GraphController::bundleNodesMatching(std::function<bool(const DummyNode&)>
bundleNode.name = name;
bundleNode.visible = true;
for (int i = nodeIndices.size() - 1; i >= 0; i--)
for (int i = matchedNodeIndices.size() - 1; i >= 0; i--)
{
DummyNode& node = m_dummyNodes[nodeIndices[i]];
DummyNode node = m_dummyNodes[matchedNodeIndices[i]];
node.visible = false;
bundleNode.bundledNodes.push_back(node);
bundleNode.bundledNodeCount += node.getConnectedSubNodeCount();
if (!bundleNode.tokenId)
{
bundleNode.tokenId = node.data->getId();
}
m_dummyNodes.erase(m_dummyNodes.begin() + matchedNodeIndices[i]);
}
m_dummyNodes.erase(m_dummyNodes.begin() + nodeIndices[i]);
bundleNode.tokenId = bundleNode.bundledNodes[0].data->getId();
m_dummyNodes.push_back(bundleNode);
if (m_dummyEdges.size() == 0)
{
return;
}
std::vector<DummyEdge> bundleEdges;
@@ -601,6 +623,40 @@ void GraphController::bundleNodesMatching(std::function<bool(const DummyNode&)>
}
m_dummyEdges.insert(m_dummyEdges.end(), bundleEdges.begin(), bundleEdges.end());
}
void GraphController::bundleNodesMatching(std::list<DummyNode*>& nodes, std::function<bool(const DummyNode&)> matcher, const std::string& name)
{
std::vector<std::list<DummyNode*>::iterator> matchedNodes;
for (std::list<DummyNode*>::iterator it = nodes.begin(); it != nodes.end(); it++)
{
if (matcher(**it))
{
matchedNodes.push_back(it);
}
}
if (!matchedNodes.size())
{
return;
}
DummyNode bundleNode;
bundleNode.name = name;
bundleNode.visible = true;
for (int i = matchedNodes.size() - 1; i >= 0; i--)
{
DummyNode* node = *matchedNodes[i];
node->visible = false;
bundleNode.bundledNodes.push_back(*node);
bundleNode.bundledNodeCount += node->getConnectedSubNodeCount();
nodes.erase(matchedNodes[i]);
}
bundleNode.tokenId = bundleNode.bundledNodes[0].data->getId();
m_dummyNodes.push_back(bundleNode);
}
@@ -768,39 +824,48 @@ bool GraphController::isTypeUserNode(const DummyNode& node) const
return matches;
}
#define BUNDLE_BY_TYPE(__type__, __name__) \
#define BUNDLE_BY_TYPE(__nodes__, __type__, __name__) \
bundleNodesMatching( \
__nodes__, \
[&](const DummyNode& node) \
{ \
return node.visible && node.isGraphNode() && node.data->isType(__type__); \
}, \
1, \
__name__ \
); \
void GraphController::bundleNodesByType()
{
BUNDLE_BY_TYPE(Node::NODE_NAMESPACE, "Namespaces");
BUNDLE_BY_TYPE(Node::NODE_CLASS, "Classes");
BUNDLE_BY_TYPE(Node::NODE_STRUCT, "Structs");
std::vector<DummyNode> oldNodes = m_dummyNodes;
m_dummyNodes.clear();
BUNDLE_BY_TYPE(Node::NODE_FUNCTION, "Functions");
BUNDLE_BY_TYPE(Node::NODE_GLOBAL_VARIABLE, "Global Variables");
std::list<DummyNode*> nodes;
for (size_t i = 0; i < oldNodes.size(); i++)
{
nodes.push_back(&oldNodes[i]);
}
BUNDLE_BY_TYPE(Node::NODE_TYPE, "Types");
BUNDLE_BY_TYPE(Node::NODE_TYPEDEF, "Typedefs");
BUNDLE_BY_TYPE(Node::NODE_ENUM, "Enums");
BUNDLE_BY_TYPE(nodes, Node::NODE_NAMESPACE, "Namespaces");
BUNDLE_BY_TYPE(nodes, Node::NODE_CLASS, "Classes");
BUNDLE_BY_TYPE(nodes, Node::NODE_STRUCT, "Structs");
BUNDLE_BY_TYPE(Node::NODE_FILE, "Files");
BUNDLE_BY_TYPE(Node::NODE_MACRO, "Macros");
BUNDLE_BY_TYPE(nodes, Node::NODE_FUNCTION, "Functions");
BUNDLE_BY_TYPE(nodes, Node::NODE_GLOBAL_VARIABLE, "Global Variables");
// should never be visible
BUNDLE_BY_TYPE(nodes, Node::NODE_TYPE, "Types");
BUNDLE_BY_TYPE(nodes, Node::NODE_TYPEDEF, "Typedefs");
BUNDLE_BY_TYPE(nodes, Node::NODE_ENUM, "Enums");
BUNDLE_BY_TYPE(Node::NODE_METHOD, "Methods");
BUNDLE_BY_TYPE(Node::NODE_FIELD, "Fields");
BUNDLE_BY_TYPE(Node::NODE_ENUM_CONSTANT, "Enum Constants");
BUNDLE_BY_TYPE(Node::NODE_TEMPLATE_PARAMETER_TYPE, "Template Parameter Types");
BUNDLE_BY_TYPE(Node::NODE_UNDEFINED, "Undefined Symbols");
BUNDLE_BY_TYPE(nodes, Node::NODE_FILE, "Files");
BUNDLE_BY_TYPE(nodes, Node::NODE_MACRO, "Macros");
// // should never be visible
BUNDLE_BY_TYPE(nodes, Node::NODE_METHOD, "Methods");
BUNDLE_BY_TYPE(nodes, Node::NODE_FIELD, "Fields");
BUNDLE_BY_TYPE(nodes, Node::NODE_ENUM_CONSTANT, "Enum Constants");
BUNDLE_BY_TYPE(nodes, Node::NODE_TEMPLATE_PARAMETER_TYPE, "Template Parameter Types");
BUNDLE_BY_TYPE(nodes, Node::NODE_UNDEFINED, "Undefined Symbols");
for (DummyNode& node : m_dummyNodes)
{
@@ -1,6 +1,7 @@
#ifndef GRAPH_CONTROLLER_H
#define GRAPH_CONTROLLER_H
#include <list>
#include <vector>
#include "utility/messaging/MessageListener.h"
@@ -62,13 +63,14 @@ private:
void autoExpandActiveNode(const std::vector<Id>& activeTokenIds);
void setActiveAndVisibility(const std::vector<Id>& activeTokenIds);
void setNodeActiveRecursive(DummyNode& node, const std::vector<Id>& activeTokenIds) const;
void setNodeActiveRecursive(DummyNode& node, const std::vector<Id>& activeTokenIds, bool* noActive) const;
void removeImplicitAndUndefinedChildrenRecursive(DummyNode& node);
bool setNodeVisibilityRecursiveBottomUp(DummyNode& node, bool noActive) const;
void setNodeVisibilityRecursiveTopDown(DummyNode& node, bool parentExpanded) const;
void deactivateNodesRecursive(std::vector<DummyNode>* nodes) const;
void bundleNodes();
void bundleNodesMatching(std::function<bool(const DummyNode&)> matcher, size_t count, const std::string& name);
void bundleNodesAndEdgesMatching(std::function<bool(const DummyNode&)> matcher, size_t count, const std::string& name);
void bundleNodesMatching(std::list<DummyNode*>& nodes, std::function<bool(const DummyNode&)> matcher, const std::string& name);
bool isTypeNodeWithSingleAggregation(const DummyNode& node, TokenComponentAggregation::Direction direction) const;
bool isTypeNodeWithSingleInheritance(const DummyNode& node, bool isBase) const;
bool isUndefinedNode(const DummyNode& node, bool isUsed) const;
@@ -99,10 +99,11 @@ void IDECommunicationController::handleCreateProjectMessage(const NetworkProtoco
{
if (message.valid)
{
if (message.ideId == NetworkProtocolHelper::CreateProjectMessage::IDE_ID::VS)
if (message.ideId == "vs")
{
MessageProjectNew msg;
msg.setVisualStudioSolutionPath(message.solutionFileLocation);
msg.setSolutionPath(message.solutionFileLocation);
msg.ideId = message.ideId;
msg.dispatch();
}
else
@@ -22,10 +22,7 @@ void SearchController::handleMessage(MessageActivateTokens* message)
{
if (!message->keepContent() && !message->isFromSearch)
{
const std::vector<Id>& tokenIds =
(message->originalTokenIds.size() > 0 ? message->originalTokenIds : message->tokenIds);
getView()->setMatches(m_storageAccess->getSearchMatchesForTokenIds(tokenIds));
getView()->setMatches(m_storageAccess->getSearchMatchesForTokenIds(message->tokenIds));
}
}
@@ -29,7 +29,7 @@ void StatusBarController::handleMessage(MessageFinishedParsing* message)
getView()->setErrorCount(errorCount);
std::string status = message->getStatusStr();
status += " " + std::to_string(errorCount.total) + " error" + (errorCount.total > 1 ? "s" : "");
status += " " + std::to_string(errorCount.total) + " error" + (errorCount.total != 1 ? "s" : "");
if (errorCount.fatal > 0)
{
status += " (" + std::to_string(errorCount.fatal) + " fatal)";
@@ -3,6 +3,7 @@
#include "utility/logging/logging.h"
#include "utility/messaging/type/MessageActivateTokens.h"
#include "utility/messaging/type/MessageFlushUpdates.h"
#include "utility/utility.h"
#include "component/view/UndoRedoView.h"
#include "data/access/StorageAccess.h"
@@ -52,10 +53,26 @@ void UndoRedoController::handleMessage(MessageActivateFile* message)
processCommand(command);
}
void UndoRedoController::handleMessage(MessageActivateLocalSymbols* message)
{
if (m_lastCommand.message &&
m_lastCommand.message->getType() == message->getType() &&
utility::isPermutation(
message->symbolIds,
static_cast<MessageActivateLocalSymbols*>(m_lastCommand.message.get())->symbolIds)
)
{
return;
}
Command command(std::make_shared<MessageActivateLocalSymbols>(*message), 1);
processCommand(command);
}
void UndoRedoController::handleMessage(MessageActivateNodes* message)
{
if (m_lastCommand.message &&
m_lastCommand.message->getType() == message->getType() &&
if (m_lastCommand.message &&
m_lastCommand.message->getType() == message->getType() &&
message->nodes.size() &&
static_cast<MessageActivateNodes*>(m_lastCommand.message.get())->nodes.size() == message->nodes.size() &&
static_cast<MessageActivateNodes*>(m_lastCommand.message.get())->nodes[0].nameHierarchy.getQualifiedNameWithSignature() ==
@@ -7,6 +7,7 @@
#include "utility/messaging/MessageListener.h"
#include "utility/messaging/type/MessageActivateEdge.h"
#include "utility/messaging/type/MessageActivateFile.h"
#include "utility/messaging/type/MessageActivateLocalSymbols.h"
#include "utility/messaging/type/MessageActivateNodes.h"
#include "utility/messaging/type/MessageActivateTokenIds.h"
#include "utility/messaging/type/MessageChangeFileView.h"
@@ -32,6 +33,7 @@ class UndoRedoController
: public Controller
, public MessageListener<MessageActivateEdge>
, public MessageListener<MessageActivateFile>
, public MessageListener<MessageActivateLocalSymbols>
, public MessageListener<MessageActivateNodes>
, public MessageListener<MessageActivateTokenIds>
, public MessageListener<MessageChangeFileView>
@@ -65,6 +67,7 @@ private:
virtual void handleMessage(MessageActivateEdge* message);
virtual void handleMessage(MessageActivateFile* message);
virtual void handleMessage(MessageActivateLocalSymbols* message);
virtual void handleMessage(MessageActivateNodes* message);
virtual void handleMessage(MessageActivateTokenIds* message);
virtual void handleMessage(MessageChangeFileView* message);
@@ -95,11 +95,7 @@ std::shared_ptr<MessageActivateTokens> ActivationTranslator::translateMessage(co
}
std::shared_ptr<MessageActivateTokens> m;
m = std::make_shared<MessageActivateTokens>(message, m_storageAccess->getActiveTokenIdsForTokenIds(nodeIds));
if (nodeIds != m->tokenIds)
{
m->originalTokenIds = nodeIds;
}
m = std::make_shared<MessageActivateTokens>(message, nodeIds);
m->isFromSystem = message->isFromSystem;
return m;
}
@@ -135,12 +131,7 @@ std::shared_ptr<MessageActivateTokens> ActivationTranslator::translateMessage(co
std::vector<Id> tokenIds = m_storageAccess->getTokenIdsForMatches(matches);
std::shared_ptr<MessageActivateTokens> m =
std::make_shared<MessageActivateTokens>(message, m_storageAccess->getActiveTokenIdsForTokenIds(tokenIds));
if (tokenIds != m->tokenIds)
{
m->originalTokenIds = tokenIds;
}
std::shared_ptr<MessageActivateTokens> m = std::make_shared<MessageActivateTokens>(message, tokenIds);
if (message->isFresh())
{
m->isFromSearch = true;
@@ -3,8 +3,12 @@
#include <sstream>
#include <string>
#include <boost/algorithm/string.hpp>
#include "utility/logging/logging.h"
#include "utility/solution/SolutionParserVisualStudio.h"
std::string NetworkProtocolHelper::m_divider = ">>";
std::string NetworkProtocolHelper::m_setActiveTokenPrefix = "setActiveToken";
std::string NetworkProtocolHelper::m_moveCursorPrefix = "moveCursor";
@@ -100,14 +104,10 @@ NetworkProtocolHelper::CreateProjectMessage NetworkProtocolHelper::parseCreatePr
{
networkMessage.solutionFileLocation = fileLocation;
if (ideId == "vs")
{
networkMessage.ideId = CreateProjectMessage::IDE_ID::VS;
}
else
{
networkMessage.ideId = CreateProjectMessage::IDE_ID::UNKNOWN;
}
std::string nonConstId = ideId;
boost::algorithm::to_lower(nonConstId);
networkMessage.ideId = nonConstId;
networkMessage.valid = true;
}
@@ -28,18 +28,12 @@ public:
public:
CreateProjectMessage()
: solutionFileLocation("")
, ideId(IDE_ID::UNKNOWN)
, ideId("")
, valid(false)
{}
enum IDE_ID
{
UNKNOWN = 0,
VS
};
std::string solutionFileLocation;
IDE_ID ideId;
std::string ideId;
bool valid;
};
+1
View File
@@ -39,6 +39,7 @@ public:
virtual void showFirstActiveSnippet(const std::vector<Id>& activeTokenIds, bool scrollTo) = 0;
virtual void showActiveTokenIds(const std::vector<Id>& activeTokenIds) = 0;
virtual void showActiveLocalSymbolIds(const std::vector<Id>& activeLocalSymbolIds) = 0;
virtual void focusTokenIds(const std::vector<Id>& focusedTokenIds) = 0;
virtual void defocusTokenIds() = 0;
+10 -3
View File
@@ -261,7 +261,7 @@ GraphViewStyle::NodeMargins GraphViewStyle::getMarginsOfAccessNode(TokenComponen
margins.minWidth = 58;
break;
case TokenComponentAccess::ACCESS_TEMPLATE:
margins.minWidth = 103;
margins.minWidth = 133;
break;
}
@@ -433,8 +433,14 @@ GraphViewStyle::EdgeStyle GraphViewStyle::getStyleForEdgeType(Edge::EdgeType typ
switch (type)
{
case Edge::EDGE_AGGREGATION:
style.isStraight = true;
style.width = 4;
style.width = 2;
style.arrowLength = 7;
style.arrowWidth = 10;
style.originOffset.x = 22;
style.targetOffset.x = 22;
style.originOffset.y = 0;
style.targetOffset.y = 0;
style.verticalOffset = 0;
style.zValue = isActive ? -2 : -5;
break;
case Edge::EDGE_CALL:
@@ -452,6 +458,7 @@ GraphViewStyle::EdgeStyle GraphViewStyle::getStyleForEdgeType(Edge::EdgeType typ
style.arrowWidth = 14;
style.arrowClosed = true;
style.targetOffset.x = 34;
style.zValue = isActive ? -1 : -3;
break;
default:
break;
+19
View File
@@ -0,0 +1,19 @@
#include "data/DefinitionType.h"
int definitionTypeToInt(DefinitionType definitionType)
{
return definitionType;
}
DefinitionType intToDefinitionType(int definitionType)
{
switch (definitionType)
{
case 0:
return DEFINITION_NONE;
case 1:
return DEFINITION_IMPLICIT;
case 2:
return DEFINITION_EXPLICIT;
}
}
+14
View File
@@ -0,0 +1,14 @@
#ifndef DEFINITION_TYPE_H
#define DEFINITION_TYPE_H
enum DefinitionType
{
DEFINITION_NONE = 0,
DEFINITION_IMPLICIT = 1,
DEFINITION_EXPLICIT = 2
};
int definitionTypeToInt(DefinitionType definitionType);
DefinitionType intToDefinitionType(int definitionType);
#endif // DEFINITION_TYPE_H
+61 -21
View File
@@ -35,26 +35,28 @@ Id IntermediateStorage::addEdge(int type, Id sourceId, Id targetId)
return id;
}
Id IntermediateStorage::addNode(int type, const NameHierarchy& nameHierarchy, bool defined)
Id IntermediateStorage::addNode(int type, const NameHierarchy& nameHierarchy, int definitionType)
{
std::shared_ptr<StorageNode> node = std::make_shared<StorageNode>(0, type, NameHierarchy::serialize(nameHierarchy), defined);
std::shared_ptr<StorageNode> node = std::make_shared<StorageNode>(0, type, NameHierarchy::serialize(nameHierarchy), definitionType);
std::string serialized = serialize(*(node.get()));
std::unordered_map<std::string, Id>::const_iterator it = m_nodeNamesToIds.find(serialized);
if (it != m_nodeNamesToIds.end())
{
// refine stored information
if (defined)
// update stored information
if (definitionType > 0)
{
std::unordered_map<Id, std::shared_ptr<StorageNode>>::const_iterator it2 = m_nodeIdsToData.find(it->second);
std::map<Id, std::shared_ptr<StorageNode>>::const_iterator it2 = m_nodeIdsToData.find(it->second);
std::shared_ptr<StorageNode> storageNode = it2->second;
if (!storageNode->defined && storageNode->type < type)
if (storageNode->definitionType == 0)
{
storageNode->type = type;
storageNode->definitionType = definitionType;
if (storageNode->type < type)
{
storageNode->type = type;
}
}
storageNode->defined = true;
}
return it->second;
}
@@ -106,7 +108,25 @@ Id IntermediateStorage::addFile(const std::string& filePath)
return id;
}
void IntermediateStorage::addSourceLocation(Id elementId, const ParseLocation& location, bool isScope)
Id IntermediateStorage::addLocalSymbol(const std::string& name)
{
std::shared_ptr<StorageLocalSymbol> localSymbol = std::make_shared<StorageLocalSymbol>(0, name);
std::string serialized = serialize(*(localSymbol.get()));
std::unordered_map<std::string, Id>::const_iterator it = m_localSymbolNamesToIds.find(serialized);
if (it != m_localSymbolNamesToIds.end())
{
return it->second;
}
Id id = m_nextId++;
m_localSymbolNamesToIds[serialized] = id;
m_localSymbolIdsToData[id] = localSymbol;
return id;
}
void IntermediateStorage::addSourceLocation(Id elementId, const ParseLocation& location, int type)
{
Id fileNodeId = addFile(location.filePath.str());
m_sourceLocations.push_back(StorageSourceLocation(
@@ -117,7 +137,7 @@ void IntermediateStorage::addSourceLocation(Id elementId, const ParseLocation& l
location.startColumnNumber,
location.endLineNumber,
location.endColumnNumber,
isScope
type
));
}
@@ -184,30 +204,33 @@ void IntermediateStorage::transferToStorage(SqliteStorage& storage)
}
}
for (std::unordered_map<Id, std::shared_ptr<StorageNode>>::const_iterator it = m_nodeIdsToData.begin(); it != m_nodeIdsToData.end(); it++)
for (std::map<Id, std::shared_ptr<StorageNode>>::const_iterator it = m_nodeIdsToData.begin(); it != m_nodeIdsToData.end(); it++)
{
StorageNode clientNode = *(it->second.get());
StorageNode storageNode = storage.getNodeBySerializedName(clientNode.serializedName);
Id storageNodeId = storageNode.id;
if (storageNodeId)
{
if (clientNode.defined)
if (clientNode.definitionType > 0)
{
storage.setNodeDefined(true, storageNode.id);
if (!storageNode.defined && storageNode.type < clientNode.type)
if (storageNode.definitionType == 0)
{
storage.setNodeType(clientNode.type, storageNode.id);
storage.setNodeDefinitionType(clientNode.definitionType, storageNode.id);
if(storageNode.type < clientNode.type)
{
storage.setNodeType(clientNode.type, storageNode.id);
}
}
}
}
else
{
storageNodeId = storage.addNode(clientNode.type, clientNode.serializedName, clientNode.defined);
storageNodeId = storage.addNode(clientNode.type, clientNode.serializedName, clientNode.definitionType);
}
clientIdToStorageId[it->first] = storageNodeId;
}
for (std::unordered_map<Id, std::shared_ptr<StorageEdge>>::const_iterator it = m_edgeIdsToData.begin(); it != m_edgeIdsToData.end(); it++)
for (std::map<Id, std::shared_ptr<StorageEdge>>::const_iterator it = m_edgeIdsToData.begin(); it != m_edgeIdsToData.end(); it++)
{
std::unordered_map<Id, Id>::const_iterator it2;
it2 = clientIdToStorageId.find(it->second->sourceNodeId);
@@ -233,6 +256,18 @@ void IntermediateStorage::transferToStorage(SqliteStorage& storage)
clientIdToStorageId[it->first] = edgeId;
}
for (std::map<Id, std::shared_ptr<StorageLocalSymbol>>::const_iterator it = m_localSymbolIdsToData.begin(); it != m_localSymbolIdsToData.end(); it++)
{
StorageLocalSymbol clientLocalSymbol = *(it->second.get());
StorageLocalSymbol storageLocalSymbol = storage.getLocalSymbolByName(clientLocalSymbol.name);
Id storageLocalSymbolId = storageLocalSymbol.id;
if (storageLocalSymbolId == 0)
{
storageLocalSymbolId = storage.addLocalSymbol(clientLocalSymbol.name);
}
clientIdToStorageId[it->first] = storageLocalSymbolId;
}
for (size_t i = 0; i < m_sourceLocations.size(); i++)
{
StorageSourceLocation sourceLocation = m_sourceLocations[i];
@@ -258,7 +293,7 @@ void IntermediateStorage::transferToStorage(SqliteStorage& storage)
sourceLocation.startCol,
sourceLocation.endLine,
sourceLocation.endCol,
sourceLocation.isScope
sourceLocation.type
);
}
@@ -324,7 +359,7 @@ void IntermediateStorage::forEachFile(std::function<void(const Id /*id*/, const
void IntermediateStorage::forEachNode(std::function<void(const Id /*id*/, const StorageNode& /*data*/)> callback) const
{
for (std::unordered_map<Id, std::shared_ptr<StorageNode>>::const_iterator it = m_nodeIdsToData.begin(); it != m_nodeIdsToData.end(); it++)
for (std::map<Id, std::shared_ptr<StorageNode>>::const_iterator it = m_nodeIdsToData.begin(); it != m_nodeIdsToData.end(); it++)
{
callback(it->first, *(it->second.get()));
}
@@ -332,7 +367,7 @@ void IntermediateStorage::forEachNode(std::function<void(const Id /*id*/, const
void IntermediateStorage::forEachEdge(std::function<void(const Id /*id*/, const StorageEdge& /*data*/)> callback) const
{
for (std::unordered_map<Id, std::shared_ptr<StorageEdge>>::const_iterator it = m_edgeIdsToData.begin(); it != m_edgeIdsToData.end(); it++)
for (std::map<Id, std::shared_ptr<StorageEdge>>::const_iterator it = m_edgeIdsToData.begin(); it != m_edgeIdsToData.end(); it++)
{
callback(it->first, *(it->second.get()));
}
@@ -388,3 +423,8 @@ std::string IntermediateStorage::serialize(const StorageFile& file)
{
return file.filePath;
}
std::string IntermediateStorage::serialize(const StorageLocalSymbol& localSymbol)
{
return localSymbol.name;
}
+10 -4
View File
@@ -18,10 +18,11 @@ public:
IntermediateStorage();
~IntermediateStorage();
Id addEdge(int type, Id sourceId, Id targetId);
Id addNode(int type, const NameHierarchy& nameHierarchy, bool defined);
Id addNode(int type, const NameHierarchy& nameHierarchy, int definitionType);
Id addFile(const std::string& name, const std::string& filePath, const std::string& modificationTime);
Id addFile(const std::string& filePath);
void addSourceLocation(Id elementId, const ParseLocation& location, bool isScope);
Id addLocalSymbol(const std::string& name);
void addSourceLocation(Id elementId, const ParseLocation& location, int type);
void addComponentAccess(Id nodeId , int type);
void addCommentLocation(const ParseLocation& location);
void addError(const std::string& message, bool fatal, const ParseLocation& location);
@@ -40,15 +41,20 @@ private:
std::string serialize(const StorageEdge& edge);
std::string serialize(const StorageNode& node);
std::string serialize(const StorageFile& file);
std::string serialize(const StorageLocalSymbol& localSymbol);
std::unordered_map<std::string, Id> m_fileNamesToIds; // this is used to prevent duplicates (unique)
std::unordered_map<Id, std::shared_ptr<StorageFile>> m_fileIdsToData;
std::unordered_map<std::string, Id> m_nodeNamesToIds; // this is used to prevent duplicates (unique)
std::unordered_map<Id, std::shared_ptr<StorageNode>> m_nodeIdsToData;
std::map<Id, std::shared_ptr<StorageNode>> m_nodeIdsToData;
std::unordered_map<std::string, Id> m_edgeNamesToIds; // this is used to prevent duplicates (unique)
std::unordered_map<Id, std::shared_ptr<StorageEdge>> m_edgeIdsToData;
std::map<Id, std::shared_ptr<StorageEdge>> m_edgeIdsToData;
std::unordered_map<std::string, Id> m_localSymbolNamesToIds; // this is used to prevent duplicates (unique)
std::map<Id, std::shared_ptr<StorageLocalSymbol>> m_localSymbolIdsToData;
std::vector<StorageSourceLocation> m_sourceLocations;
std::vector<StorageComponentAccess> m_componentAccesses;
+25
View File
@@ -0,0 +1,25 @@
#include "data/SqliteIndex.h"
SqliteIndex::SqliteIndex(const std::string& indexName, const std::string& indexTarget)
: m_indexName(indexName)
, m_indexTarget(indexTarget)
{
}
SqliteIndex::~SqliteIndex()
{
}
void SqliteIndex::createOnDatabase(CppSQLite3DB& database)
{
database.execDML((
"CREATE INDEX IF NOT EXISTS " + m_indexName + " ON " + m_indexTarget + ";"
).c_str());
}
void SqliteIndex::removeFromDatabase(CppSQLite3DB& database)
{
database.execDML((
"DROP INDEX IF EXISTS main." + m_indexName + ";"
).c_str());
}
+21
View File
@@ -0,0 +1,21 @@
#ifndef SQLITE_INDEX_H
#define SQLITE_INDEX_H
#include <string>
#include "sqlite/CppSQLite3.h"
class SqliteIndex
{
public:
SqliteIndex(const std::string& indexName, const std::string& indexTarget);
~SqliteIndex();
void createOnDatabase(CppSQLite3DB& database);
void removeFromDatabase(CppSQLite3DB& database);
private:
std::string m_indexName;
std::string m_indexTarget;
};
#endif // SQLITE_INDEX_H
+87 -42
View File
@@ -2,6 +2,8 @@
#include "data/graph/Node.h"
#include "data/location/TokenLocation.h"
#include "data/DefinitionType.h"
#include "data/SqliteIndex.h"
#include "utility/logging/logging.h"
#include "utility/text/TextAccess.h"
#include "utility/utility.h"
@@ -29,7 +31,7 @@ bool SqliteStorage::init()
setup();
return false;
}
else if (version.isOlderStorageVersionThan(Version::getApplicationVersion()))
else if (version.isDifferentStorageVersionThan(Version::getApplicationVersion()))
{
clear();
return false;
@@ -102,7 +104,7 @@ Id SqliteStorage::addEdge(int type, Id sourceNodeId, Id targetNodeId)
return id;
}
Id SqliteStorage::addNode(int type, const std::string& serializedName, bool defined)
Id SqliteStorage::addNode(int type, const std::string& serializedName, int definitionType)
{
m_database.execDML(
"INSERT INTO element(id) VALUES(NULL);"
@@ -110,8 +112,8 @@ Id SqliteStorage::addNode(int type, const std::string& serializedName, bool defi
Id id = m_database.lastRowId();
m_database.execDML((
"INSERT INTO node(id, type, serialized_name, defined) VALUES("
+ std::to_string(id) + ", " + std::to_string(type) + ", '" + serializedName + "', " + std::to_string(defined) + ");"
"INSERT INTO node(id, type, serialized_name, definition_type) VALUES("
+ std::to_string(id) + ", " + std::to_string(type) + ", '" + serializedName + "', " + std::to_string(definitionType) + ");"
).c_str());
return id;
@@ -119,7 +121,7 @@ Id SqliteStorage::addNode(int type, const std::string& serializedName, bool defi
Id SqliteStorage::addFile(const std::string& serializedName, const std::string& filePath, const std::string& modificationTime)
{
Id id = addNode(Node::NODE_FILE, serializedName, true);
Id id = addNode(Node::NODE_FILE, serializedName, definitionTypeToInt(DEFINITION_EXPLICIT));
std::shared_ptr<TextAccess> content = TextAccess::createFromFile(filePath);
unsigned int loc = content->getLineCount();
@@ -134,14 +136,29 @@ Id SqliteStorage::addFile(const std::string& serializedName, const std::string&
return id;
}
Id SqliteStorage::addLocalSymbol(const std::string& name)
{
m_database.execDML(
"INSERT INTO element(id) VALUES(NULL);"
);
Id id = m_database.lastRowId();
m_database.execDML((
"INSERT INTO local_symbol(id, name) VALUES("
+ std::to_string(id) + ", '" + name + "');"
).c_str());
return id;
}
Id SqliteStorage::addSourceLocation(
Id elementId, Id fileNodeId, uint startLine, uint startCol, uint endLine, uint endCol, bool isScope)
Id elementId, Id fileNodeId, uint startLine, uint startCol, uint endLine, uint endCol, int type)
{
m_database.execDML((
"INSERT INTO source_location(id, element_id, file_node_id, start_line, start_column, end_line, end_column, is_scope) "
"INSERT INTO source_location(id, element_id, file_node_id, start_line, start_column, end_line, end_column, type) "
"VALUES(NULL, " + std::to_string(elementId) + ", " + std::to_string(fileNodeId) + ", "
+ std::to_string(startLine) + ", " + std::to_string(startCol) + ", "
+ std::to_string(endLine) + ", " + std::to_string(endCol) + ", " + std::to_string(isScope) + ");"
+ std::to_string(endLine) + ", " + std::to_string(endCol) + ", " + std::to_string(type) + ");"
).c_str());
return m_database.lastRowId();
@@ -230,8 +247,11 @@ void SqliteStorage::removeElementsWithLocationInFiles(const std::vector<Id>& fil
).c_str());
m_database.execDML((
"DELETE FROM element WHERE element.id IN (" + utility::join(utility::toStrings(elementIds), ',') + ") AND element.id NOT IN "
"( SELECT source_location.element_id FROM source_location WHERE source_location.element_id == element.id );"
"DELETE FROM element WHERE "
"element.id IN (" + utility::join(utility::toStrings(elementIds), ',') + ") " // skip all elements that dont have a matching id.
"AND element.id NOT IN ("
"SELECT source_location.element_id FROM source_location WHERE source_location.element_id == element.id LIMIT 1"
");" // delete all elements that dont have a source location. This query is executed for each element that passed the first test.
).c_str());
}
@@ -250,7 +270,7 @@ StorageNode SqliteStorage::getFirstNode() const
return nodes[0];
}
return StorageNode(0, 0, "", false);
return StorageNode(0, 0, "", definitionTypeToInt(DEFINITION_NONE));
}
std::vector<StorageNode> SqliteStorage::getAllNodes() const
@@ -400,23 +420,14 @@ StorageNode SqliteStorage::getNodeById(Id id) const
{
if (id != 0)
{
std::vector<StorageNode> nodes = getAllNodes("WHERE id == " + std::to_string(id));
if (nodes.size())
{
return nodes[0];
}
return getFirstNode("WHERE id == " + std::to_string(id));
}
return StorageNode(0, 0, 0, false);
return StorageNode(0, 0, 0, definitionTypeToInt(DEFINITION_NONE));
}
StorageNode SqliteStorage::getNodeBySerializedName(const std::string& serializedName) const
{
std::vector<StorageNode> nodes = getAllNodes("WHERE serialized_name == '" + serializedName + "'"); // Todo: use getfirstnode here
if (nodes.size() > 0)
{
return nodes[0];
}
return StorageNode(0, 0, "", 0);
return getFirstNode("WHERE serialized_name == '" + serializedName + "'");
}
std::vector<StorageNode> SqliteStorage::getNodesByIds(const std::vector<Id>& nodeIds) const
@@ -424,6 +435,18 @@ std::vector<StorageNode> SqliteStorage::getNodesByIds(const std::vector<Id>& nod
return getAllNodes("WHERE id IN (" + utility::join(utility::toStrings(nodeIds), ',') + ")");
}
StorageLocalSymbol SqliteStorage::getLocalSymbolByName(const std::string& name) const
{
StorageLocalSymbol localSymbol(
getFirstResult<Id>(
"SELECT id FROM local_symbol WHERE "
"name == '" + name + "';"
),
name
);
return localSymbol;
}
StorageFile SqliteStorage::getFileById(const Id id) const
{
return getFirstFile(
@@ -468,17 +491,17 @@ void SqliteStorage::setNodeType(int type, Id nodeId)
).c_str());
}
void SqliteStorage::setNodeDefined(bool defined, Id nodeId)
void SqliteStorage::setNodeDefinitionType(int definitionType, Id nodeId)
{
m_database.execDML((
"UPDATE node SET defined = " + std::to_string(defined) + " WHERE id == " + std::to_string(nodeId) + ";"
"UPDATE node SET definition_type = " + std::to_string(definitionType) + " WHERE id == " + std::to_string(nodeId) + ";"
).c_str());
}
StorageSourceLocation SqliteStorage::getSourceLocationById(const Id id) const
{
return getFirstSourceLocation(
"SELECT id, element_id, file_node_id, start_line, start_column, end_line, end_column, is_scope FROM source_location WHERE id == " + std::to_string(id) + ";"
"SELECT id, element_id, file_node_id, start_line, start_column, end_line, end_column, type FROM source_location WHERE id == " + std::to_string(id) + ";"
);
}
@@ -493,7 +516,7 @@ std::shared_ptr<TokenLocationFile> SqliteStorage::getTokenLocationsForFile(const
}
CppSQLite3Query q = m_database.execQuery((
"SELECT id, element_id, start_line, start_column, end_line, end_column, is_scope FROM source_location WHERE file_node_id == " + std::to_string(fileNodeId) + ";"
"SELECT id, element_id, start_line, start_column, end_line, end_column, type FROM source_location WHERE file_node_id == " + std::to_string(fileNodeId) + ";"
).c_str());
while (!q.eof())
@@ -504,12 +527,12 @@ std::shared_ptr<TokenLocationFile> SqliteStorage::getTokenLocationsForFile(const
const int startColNumber = q.getIntField(3, -1);
const int endLineNumber = q.getIntField(4, -1);
const int endColNumber = q.getIntField(5, -1);
const int isScope = q.getIntField(6, -1);
const int type = q.getIntField(6, -1);
if (locationId != 0 && elementId != 0 && startLineNumber != -1 && startColNumber != -1 && endLineNumber != -1 && endColNumber != -1 && isScope != -1)
if (locationId != 0 && elementId != 0 && startLineNumber != -1 && startColNumber != -1 && endLineNumber != -1 && endColNumber != -1 && type != -1)
{
TokenLocation* loc = ret->addTokenLocation(locationId, elementId, startLineNumber, startColNumber, endLineNumber, endColNumber);
loc->setType(isScope ? TokenLocation::LOCATION_SCOPE : TokenLocation::LOCATION_TOKEN);
loc->setType(intToLocationType(type));
}
q.nextRow();
}
@@ -528,7 +551,7 @@ std::vector<StorageSourceLocation> SqliteStorage::getTokenLocationsForElementIds
std::vector<StorageSourceLocation> locations;
CppSQLite3Query q = m_database.execQuery((
"SELECT id, element_id, file_node_id, start_line, start_column, end_line, end_column, is_scope FROM source_location WHERE element_id IN (" + utility::join(utility::toStrings(elementIds), ',') + ");"
"SELECT id, element_id, file_node_id, start_line, start_column, end_line, end_column, type FROM source_location WHERE element_id IN (" + utility::join(utility::toStrings(elementIds), ',') + ");"
).c_str());
while (!q.eof())
@@ -540,12 +563,12 @@ std::vector<StorageSourceLocation> SqliteStorage::getTokenLocationsForElementIds
const int startColNumber = q.getIntField(4, -1);
const int endLineNumber = q.getIntField(5, -1);
const int endColNumber = q.getIntField(6, -1);
const int isScope = q.getIntField(7, -1);
const int type = q.getIntField(7, -1);
if (id != 0 && elementId != 0 && fileNodeId != 0 && startLineNumber != -1 && startColNumber != -1 && endLineNumber != -1 && endColNumber != -1 && isScope != -1)
if (id != 0 && elementId != 0 && fileNodeId != 0 && startLineNumber != -1 && startColNumber != -1 && endLineNumber != -1 && endColNumber != -1 && type != -1)
{
locations.push_back(StorageSourceLocation(
id, elementId, fileNodeId, startLineNumber, startColNumber, endLineNumber, endColNumber, isScope
id, elementId, fileNodeId, startLineNumber, startColNumber, endLineNumber, endColNumber, type
));
}
q.nextRow();
@@ -704,6 +727,7 @@ void SqliteStorage::clearTables()
m_database.execDML("DROP TABLE IF EXISTS main.comment_location;");
m_database.execDML("DROP TABLE IF EXISTS main.component_access;");
m_database.execDML("DROP TABLE IF EXISTS main.source_location;");
m_database.execDML("DROP TABLE IF EXISTS main.local_symbol;");
m_database.execDML("DROP TABLE IF EXISTS main.file;");
m_database.execDML("DROP TABLE IF EXISTS main.node;");
m_database.execDML("DROP TABLE IF EXISTS main.edge;");
@@ -748,7 +772,7 @@ void SqliteStorage::setupTables()
"id INTEGER NOT NULL, "
"type INTEGER NOT NULL, "
"serialized_name TEXT, "
"defined INTEGER NOT NULL, "
"definition_type INTEGER NOT NULL, "
"PRIMARY KEY(id), "
"FOREIGN KEY(id) REFERENCES element(id) ON DELETE CASCADE);"
);
@@ -768,6 +792,14 @@ void SqliteStorage::setupTables()
"FOREIGN KEY(id) REFERENCES node(id) ON DELETE CASCADE);"
);
m_database.execDML(
"CREATE TABLE IF NOT EXISTS local_symbol("
"id INTEGER NOT NULL, "
"name TEXT, "
"PRIMARY KEY(id), "
"FOREIGN KEY(id) REFERENCES element(id) ON DELETE CASCADE);"
);
m_database.execDML(
"CREATE TABLE IF NOT EXISTS source_location("
"id INTEGER NOT NULL, "
@@ -777,12 +809,15 @@ void SqliteStorage::setupTables()
"start_column INTEGER, "
"end_line INTEGER, "
"end_column INTEGER, "
"is_scope INTEGER, "
"type INTEGER, "
"PRIMARY KEY(id), "
"FOREIGN KEY(element_id) REFERENCES element(id) ON DELETE CASCADE, "
"FOREIGN KEY(file_node_id) REFERENCES node(id) ON DELETE CASCADE);"
);
SqliteIndex("source_location_element_id_index", "source_location(element_id)").createOnDatabase(m_database);
SqliteIndex("source_location_file_node_id_index", "source_location(file_node_id)").createOnDatabase(m_database);
m_database.execDML(
"CREATE TABLE IF NOT EXISTS component_access("
"id INTEGER NOT NULL, "
@@ -908,12 +943,12 @@ StorageSourceLocation SqliteStorage::getFirstSourceLocation(const std::string& q
const int startColNumber = q.getIntField(4, -1);
const int endLineNumber = q.getIntField(5, -1);
const int endColNumber = q.getIntField(6, -1);
const int isScope = q.getIntField(7, -1);
const int type = q.getIntField(7, -1);
if (id != 0 && elementId != 0 && fileNodeId != 0 && startLineNumber != -1 && startColNumber != -1 && endLineNumber != -1 && endColNumber != -1 && isScope != -1)
if (id != 0 && elementId != 0 && fileNodeId != 0 && startLineNumber != -1 && startColNumber != -1 && endLineNumber != -1 && endColNumber != -1 && type != -1)
{
return StorageSourceLocation(
id, elementId, fileNodeId, startLineNumber, startColNumber, endLineNumber, endColNumber, isScope
id, elementId, fileNodeId, startLineNumber, startColNumber, endLineNumber, endColNumber, type
);
}
}
@@ -948,7 +983,7 @@ std::vector<StorageEdge> SqliteStorage::getAllEdges(const std::string& query) co
std::vector<StorageNode> SqliteStorage::getAllNodes(const std::string& query) const
{
CppSQLite3Query q = m_database.execQuery((
"SELECT id, type, serialized_name, defined FROM node " + query + ";"
"SELECT id, type, serialized_name, definition_type FROM node " + query + ";"
).c_str());
std::vector<StorageNode> nodes;
@@ -957,14 +992,24 @@ std::vector<StorageNode> SqliteStorage::getAllNodes(const std::string& query) co
const Id id = q.getIntField(0, 0);
const int type = q.getIntField(1, -1);
const std::string serializedName = q.getStringField(2, "");
const bool defined = q.getIntField(3, 0);
const int definitionType = q.getIntField(3, 0);
if (id != 0 && type != -1)
{
nodes.push_back(StorageNode(id, type, serializedName, defined));
nodes.push_back(StorageNode(id, type, serializedName, definitionType));
}
q.nextRow();
}
return nodes;
}
StorageNode SqliteStorage::getFirstNode(const std::string& query) const
{
std::vector<StorageNode> nodes = getAllNodes(query + " LIMIT 1");
if (nodes.size() > 0)
{
return nodes[0];
}
return StorageNode(0, 0, "", definitionTypeToInt(DEFINITION_NONE));
}
+7 -3
View File
@@ -35,9 +35,10 @@ public:
void setVersion(const Version& version);
Id addEdge(int type, Id sourceNodeId, Id targetNodeId);
Id addNode(int type, const std::string& serializedName, bool defined);
Id addNode(int type, const std::string& serializedName, int definitionType);
Id addFile(const std::string& serializedName, const std::string& filePath, const std::string& modificationTime);
Id addSourceLocation(Id elementId, Id fileNodeId, uint startLine, uint startCol, uint endLine, uint endCol, bool isScope);
Id addLocalSymbol(const std::string& name);
Id addSourceLocation(Id elementId, Id fileNodeId, uint startLine, uint startCol, uint endLine, uint endCol, int type);
Id addComponentAccess(Id memberEdgeId, int type);
@@ -75,13 +76,15 @@ public:
StorageNode getNodeBySerializedName(const std::string& serializedName) const;
std::vector<StorageNode> getNodesByIds(const std::vector<Id>& nodeIds) const;
StorageLocalSymbol getLocalSymbolByName(const std::string& name) const;
StorageFile getFileById(const Id id) const;
StorageFile getFileByPath(const std::string& filePath) const;
std::vector<StorageFile> getAllFiles() const;
std::shared_ptr<TextAccess> getFileContentByPath(const std::string& filePath) const;
void setNodeType(int type, Id nodeId);
void setNodeDefined(bool defined, Id nodeId);
void setNodeDefinitionType(int definitionType, Id nodeId);
StorageSourceLocation getSourceLocationById(const Id id) const;
std::shared_ptr<TokenLocationFile> getTokenLocationsForFile(const FilePath& filePath) const;
@@ -118,6 +121,7 @@ private:
std::vector<StorageEdge> getAllEdges(const std::string& query) const;
std::vector<StorageNode> getAllNodes(const std::string& query) const;
StorageNode getFirstNode(const std::string& query) const;
template <typename ResultType>
ResultType getFirstResult(const std::string& query) const;
+269 -352
View File
@@ -39,8 +39,9 @@ Version Storage::getVersion() const
bool Storage::init()
{
m_commandIndex.addNode(NameHierarchy(SearchMatch::getCommandName(SearchMatch::COMMAND_ALL)));
m_commandIndex.addNode(NameHierarchy(SearchMatch::getCommandName(SearchMatch::COMMAND_ERROR)));
m_commandIndex.addNode(0, NameHierarchy(SearchMatch::getCommandName(SearchMatch::COMMAND_ALL)));
m_commandIndex.addNode(0, NameHierarchy(SearchMatch::getCommandName(SearchMatch::COMMAND_ERROR)));
m_commandIndex.finishSetup();
return m_sqliteStorage.init();
}
@@ -54,7 +55,7 @@ void Storage::clear()
void Storage::clearCaches()
{
m_tokenIndex.clear();
m_searchIndex.clear();
m_fileNodeIds.clear();
m_hierarchyCache.clear();
}
@@ -135,11 +136,6 @@ std::vector<FileInfo> Storage::getInfoOnAllFiles() const
return fileInfos;
}
const SearchIndex& Storage::getSearchIndex() const
{
return m_tokenIndex;
}
void Storage::logStats() const
{
std::stringstream ss;
@@ -149,15 +145,13 @@ void Storage::logStats() const
ss << "\t" << stats.nodeCount << " Nodes\n";
ss << "\t" << stats.edgeCount << " Edges\n";
ss << "\nSearch:\n";
ss << "\t" << stats.charCount << " Characters\n";
ss << "\t" << stats.wordCount << " Words\n";
ss << "\t" << stats.searchNodeCount << " SearchNodes\n";
ss << "\nCode:\n";
ss << "\t" << stats.fileCount << " Files\n";
ss << "\t" << stats.fileLOCCount << " Lines of Code\n";
ss << "\t" << stats.sourceLocationCount << " Source Locations\n";
ss << "\nErrors:\n";
ss << "\t" << stats.errorCount.total << " Errors\n";
ss << "\t" << stats.errorCount.fatal << " Fatal Errors\n";
LOG_WARNING(ss.str());
}
@@ -194,17 +188,6 @@ Id Storage::getIdForNodeWithNameHierarchy(const NameHierarchy& nameHierarchy) co
return m_sqliteStorage.getNodeBySerializedName(NameHierarchy::serialize(nameHierarchy)).id;
}
Id Storage::getIdForNodeWithSearchNameHierarchy(const NameHierarchy& nameHierarchy) const
{
SearchNode* node = m_tokenIndex.getNode(nameHierarchy);
if (node)
{
return node->getFirstTokenId();
}
return 0;
}
Id Storage::getIdForEdge(
Edge::EdgeType type, const NameHierarchy& fromNameHierarchy, const NameHierarchy& toNameHierarchy
) const
@@ -231,77 +214,79 @@ Node::NodeType Storage::getNodeTypeForNodeWithId(Id nodeId) const
std::vector<SearchMatch> Storage::getAutocompletionMatches(const std::string& query) const
{
if (query.size() == m_cachedQuery.size() + 1 && query.find(m_cachedQuery) == 0 && m_cachedResults.size())
const size_t maxResultCount = 100;
std::vector<SearchResult> results = m_commandIndex.search(query, 0);
utility::append(results, m_searchIndex.search(query, maxResultCount));
std::vector<SearchMatch> matches;
for (size_t i = 0; i < results.size(); i++)
{
m_cachedResults = m_tokenIndex.runFuzzySearchCached(query, m_cachedResults);
}
else
{
m_cachedResults = m_tokenIndex.runFuzzySearch(query);
}
SearchMatch match;
m_cachedQuery = query;
SearchResults results = m_cachedResults;
SearchResults commandResults = m_commandIndex.runFuzzySearch(query);
results.insert(commandResults.begin(), commandResults.end());
std::vector<SearchMatch> matches = SearchIndex::getMatches(results, query);
LOG_INFO_STREAM(<< matches.size() << " matches for \"" << query << "\"");
if (matches.size() > 100)
{
matches.resize(100);
}
for (SearchMatch& match : matches)
{
if (!match.tokenIds.size())
if (results[i].elementIds.size() > 0)
{
match.searchType = SearchMatch::SEARCH_COMMAND;
match.typeName = "command";
continue;
}
Id elementId = *(match.tokenIds.cbegin());
if (m_sqliteStorage.isNode(elementId))
{
StorageNode node = m_sqliteStorage.getNodeById(elementId);
match.nodeType = Node::intToType(node.type);
match.typeName = Node::getTypeString(match.nodeType);
if (!node.defined && match.nodeType != Node::NODE_UNDEFINED)
StorageNode firstNode(0, 0, "", 0);
for (std::set<Id>::const_iterator itElementIds = results[i].elementIds.begin();
itElementIds != results[i].elementIds.end();
itElementIds++)
{
match.typeName = "undefined " + match.typeName;
Id elementId = *itElementIds;
if (elementId != 0)
{
StorageNode node = m_sqliteStorage.getNodeById(elementId);
match.nameHierarchies.push_back(NameHierarchy::deserialize(node.serializedName));
if (firstNode.id == 0)
{
firstNode = node;
}
}
}
match.text = results[i].text;
match.indices = results[i].indices;
if (firstNode.id != 0)
{
match.nodeType = Node::intToType(firstNode.type);
match.typeName = Node::getTypeString(match.nodeType);
if (intToDefinitionType(firstNode.definitionType) == DEFINITION_NONE && match.nodeType != Node::NODE_UNDEFINED)
{
match.typeName = "undefined " + match.typeName;
}
match.searchType = SearchMatch::SEARCH_TOKEN;
}
else
{
match.searchType = SearchMatch::SEARCH_COMMAND;
match.typeName = "command";
}
}
else
{
match.typeName = Edge::getTypeString(Edge::intToType(m_sqliteStorage.getEdgeById(elementId).type));
}
match.searchType = SearchMatch::SEARCH_TOKEN;
matches.push_back(match);
}
return matches;
}
std::vector<SearchMatch> Storage::getSearchMatchesForTokenIds(const std::vector<Id>& tokenIds) const
std::vector<SearchMatch> Storage::getSearchMatchesForTokenIds(const std::vector<Id>& elementIds) const
{
// todo: what if all these elements share the same node in the searchindex?
// In that case there should be only one search match.
std::vector<SearchMatch> matches;
for (Id tokenId : tokenIds)
for (Id elementId : elementIds)
{
SearchMatch match;
if (m_sqliteStorage.isFile(tokenId))
if (m_sqliteStorage.isFile(elementId))
{
match.nodeType = Node::NODE_FILE;
}
else if (m_sqliteStorage.isNode(tokenId))
else if (m_sqliteStorage.isNode(elementId))
{
StorageNode node = m_sqliteStorage.getNodeById(tokenId);
StorageNode node = m_sqliteStorage.getNodeById(elementId);
match.nodeType = Node::intToType(node.type);
}
else
@@ -309,8 +294,9 @@ std::vector<SearchMatch> Storage::getSearchMatchesForTokenIds(const std::vector<
continue;
}
match.tokenIds.insert(tokenId);
match.nameHierarchy = m_tokenIndex.getNameHierarchyForTokenId(tokenId);
NameHierarchy nameHierarchy = NameHierarchy::deserialize(m_sqliteStorage.getNodeById(elementId).serializedName);
match.text = nameHierarchy.getQualifiedName();
match.nameHierarchies.push_back(nameHierarchy.getQualifiedName());
match.searchType = SearchMatch::SEARCH_TOKEN;
matches.push_back(match);
@@ -326,7 +312,8 @@ std::shared_ptr<Graph> Storage::getGraphForAll() const
std::vector<Id> tokenIds;
for (StorageNode node: m_sqliteStorage.getAllNodes())
{
if (node.defined && (!m_hierarchyCache.isChildOfVisibleNodeOrInvisible(node.id) ||
if (intToDefinitionType(node.definitionType) == DEFINITION_EXPLICIT &&
(!m_hierarchyCache.isChildOfVisibleNodeOrInvisible(node.id) ||
Node::intToType(node.type) == Node::NODE_NAMESPACE))
{
tokenIds.push_back(node.id);
@@ -338,53 +325,90 @@ std::shared_ptr<Graph> Storage::getGraphForAll() const
return graph;
}
std::shared_ptr<Graph> Storage::getGraphForActiveTokenIds(const std::vector<Id>& tokenIds, bool activeOnly) const
std::shared_ptr<Graph> Storage::getGraphForActiveTokenIds(const std::vector<Id>& tokenIds) const
{
std::shared_ptr<Graph> g = std::make_shared<Graph>();
Graph* graph = g.get();
if (tokenIds.size() == 1 && !activeOnly)
std::vector<Id> ids(tokenIds);
bool isNamespace = false;
std::vector<Id> nodeIds;
std::vector<Id> edgeIds;
bool addAggregations = false;
if (tokenIds.size() == 1)
{
const Id elementId = tokenIds[0];
StorageNode node = m_sqliteStorage.getNodeById(elementId);
if (m_sqliteStorage.isNode(elementId))
if (node.id > 0)
{
const StorageNode node = m_sqliteStorage.getNodeById(elementId);
addNodeAndAllChildrenToGraph(getLastVisibleParentNodeId(node.id), graph);
std::vector<StorageEdge> edges = m_sqliteStorage.getEdgesBySourceOrTargetId(node.id);
for (size_t i = 0; i < edges.size(); i++)
if (Node::intToType(node.type) == Node::NODE_NAMESPACE)
{
if (Edge::intToType(edges[i].type) != Edge::EDGE_MEMBER)
{
addEdgeAndAllChildrenToGraph(edges[i].id, graph);
}
}
ids.clear();
m_hierarchyCache.addFirstVisibleChildIdsForNodeId(elementId, &ids);
addAggregationEdgesToGraph(elementId, graph);
}
else if (m_sqliteStorage.isEdge(elementId))
{
addEdgeAndAllChildrenToGraph(elementId, graph);
}
}
else if (tokenIds.size() >= 1)
{
for (size_t i = 0; i < tokenIds.size(); i++)
{
const Id elementId = tokenIds[i];
if (m_sqliteStorage.isNode(elementId))
{
addNodeAndAllChildrenToGraph(getLastVisibleParentNodeId(elementId), graph);
isNamespace = true;
}
else
{
addEdgeAndAllChildrenToGraph(elementId, graph);
nodeIds.push_back(elementId);
std::vector<StorageEdge> edges = m_sqliteStorage.getEdgesBySourceOrTargetId(elementId);
for (const StorageEdge& edge : edges)
{
if (Edge::intToType(edge.type) != Edge::EDGE_MEMBER)
{
edgeIds.push_back(edge.id);
}
}
addAggregations = true;
}
}
else if (m_sqliteStorage.isEdge(elementId))
{
edgeIds.push_back(elementId);
}
}
if (ids.size() >= 1 || isNamespace)
{
std::vector<StorageNode> nodes = m_sqliteStorage.getNodesByIds(ids);
for (const StorageNode& node : nodes)
{
if (node.id > 0 && (!isNamespace || intToDefinitionType(node.definitionType) == DEFINITION_EXPLICIT))
{
nodeIds.push_back(node.id);
}
}
if (nodeIds.size() != ids.size())
{
std::vector<StorageEdge> edges = m_sqliteStorage.getEdgesByIds(ids);
for (const StorageEdge& edge : edges)
{
if (edge.id > 0)
{
edgeIds.push_back(edge.id);
}
}
}
}
if (isNamespace)
{
addNodesToGraph(nodeIds, graph);
}
else
{
addNodesWithChildrenAndEdgesToGraph(nodeIds, edgeIds, graph);
}
if (addAggregations)
{
addAggregationEdgesToGraph(tokenIds[0], graph);
}
addComponentAccessToGraph(graph);
@@ -392,39 +416,6 @@ std::shared_ptr<Graph> Storage::getGraphForActiveTokenIds(const std::vector<Id>&
return g;
}
std::vector<Id> Storage::getActiveTokenIdsForTokenIds(const std::vector<Id>& tokenIds) const
{
bool different = false;
std::vector<Id> activeIds;
for (Id id : tokenIds)
{
if (m_sqliteStorage.isNode(id))
{
m_hierarchyCache.addFirstVisibleChildIdsForNodeId(id, &activeIds);
if (id != activeIds.back())
{
different = true;
}
}
else
{
activeIds.push_back(id);
}
}
if (!different)
{
return tokenIds;
}
std::set<Id> idSet(activeIds.begin(), activeIds.end());
activeIds.clear();
activeIds.insert(activeIds.end(), idSet.begin(), idSet.end());
return activeIds;
}
// TODO: rename: getActiveElementIdsForId; TODO: make separate function for declarationId
std::vector<Id> Storage::getActiveTokenIdsForId(Id tokenId, Id* declarationId) const
{
@@ -465,9 +456,13 @@ std::vector<Id> Storage::getNodeIdsForLocationIds(const std::vector<Id>& locatio
{
edgeIds.insert(edge.targetNodeId);
}
else
else if(m_sqliteStorage.isNode(elementId))
{
nodeIds.insert(elementId);
StorageNode node = m_sqliteStorage.getNodeById(elementId);
if (node.id != 0 && intToDefinitionType(node.definitionType) == DEFINITION_EXPLICIT)
{
nodeIds.insert(elementId);
}
}
}
@@ -479,15 +474,31 @@ std::vector<Id> Storage::getNodeIdsForLocationIds(const std::vector<Id>& locatio
return utility::toVector(edgeIds);
}
std::vector<Id> Storage::getLocalSymbolIdsForLocationIds(const std::vector<Id>& locationIds) const
{
std::set<Id> localSymbolIds;
for (Id locationId : locationIds)
{
Id elementId = m_sqliteStorage.getElementIdByLocationId(locationId);
if (m_sqliteStorage.getNodeById(elementId).id == 0 && m_sqliteStorage.getEdgeById(elementId).id == 0)
{
localSymbolIds.insert(elementId);
}
}
return utility::toVector(localSymbolIds);
}
std::vector<Id> Storage::getTokenIdsForMatches(const std::vector<SearchMatch>& matches) const
{
std::set<Id> idSet;
for (const SearchMatch& match : matches)
{
SearchNode* searchNode = m_tokenIndex.getNode(match.nameHierarchy);
if (searchNode)
for (size_t i = 0; i < match.nameHierarchies.size(); i++)
{
utility::append(idSet, searchNode->getTokenIds());
idSet.insert(m_sqliteStorage.getNodeBySerializedName(NameHierarchy::serialize(match.nameHierarchies[i])).id);
}
}
@@ -590,7 +601,7 @@ std::shared_ptr<TokenLocationCollection> Storage::getTokenLocationsForTokenIds(c
if (loc)
{
loc->setType(location.isScope ? TokenLocation::LOCATION_SCOPE : TokenLocation::LOCATION_TOKEN);
loc->setType(intToLocationType(location.type));
}
}
@@ -611,8 +622,8 @@ std::shared_ptr<TokenLocationCollection> Storage::getTokenLocationsForLocationId
location.startLine,
location.startCol,
location.endLine,
location.endCol)->setType(location.isScope ? TokenLocation::LOCATION_SCOPE : TokenLocation::LOCATION_TOKEN
);
location.endCol
)->setType(intToLocationType(location.type));
}
return collection;
@@ -690,137 +701,14 @@ StorageStats Storage::getStorageStats() const
stats.nodeCount = m_sqliteStorage.getNodeCount();
stats.edgeCount = m_sqliteStorage.getEdgeCount();
stats.charCount = m_tokenIndex.getCharCount();
stats.wordCount = m_tokenIndex.getWordCount();
stats.searchNodeCount = m_tokenIndex.getNodeCount();
stats.fileCount = m_sqliteStorage.getFileCount();
stats.fileLOCCount = m_sqliteStorage.getFileLOCCount();
stats.sourceLocationCount = m_sqliteStorage.getSourceLocationCount();
stats.errorCount = getErrorCount();
return stats;
}
Id Storage::addNodeHierarchy(Node::NodeType nodeType, NameHierarchy nameHierarchy, bool defined)
{
if (nameHierarchy.size() == 0)
{
return 0;
}
Id parentNodeId = 0;
bool nodeMayExist = true;
NameHierarchy currentNameHierarchy;
for (size_t i = 0; i < nameHierarchy.size(); i++)
{
currentNameHierarchy.push(nameHierarchy[i]);
const bool isLastElement = (i == nameHierarchy.size() - 1);
Node::NodeType type = (isLastElement ? nodeType : Node::NODE_UNDEFINED);
StorageNode node(0, 0, "", false);
if (nodeMayExist)
{
node = m_sqliteStorage.getNodeBySerializedName(NameHierarchy::serialize(currentNameHierarchy));
}
Id nodeId = node.id;
if (nodeId && !node.defined && isLastElement && defined) // todo: move this down!
{
m_sqliteStorage.setNodeDefined(true, nodeId);
}
if (nodeId == 0)
{
nodeMayExist = false;
nodeId = m_sqliteStorage.addNode(Node::typeToInt(type), NameHierarchy::serialize(currentNameHierarchy), isLastElement && defined);
if (parentNodeId != 0)
{
addEdge(parentNodeId, nodeId, Edge::EDGE_MEMBER);
}
}
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 (!node.defined && type > storedType)
{
m_sqliteStorage.setNodeType(Node::typeToInt(type), nodeId);
}
}
parentNodeId = nodeId;
}
return parentNodeId;
}
Id Storage::addSourceLocation(Id elementNodeId, const ParseLocation &location, bool isScope)
{
if (!location.isValid())
{
return 0;
}
if (location.filePath.empty())
{
LOG_ERROR("no filename set!");
return 0;
}
else
{
Id fileNodeId = getFileNodeId(location.filePath);
if (!fileNodeId)
{
LOG_ERROR("Can't create source location, file node does not exist for: " + location.filePath.str());
return 0;
}
Id locationId = m_sqliteStorage.addSourceLocation(
elementNodeId, fileNodeId, location.startLineNumber, location.startColumnNumber,
location.endLineNumber, location.endColumnNumber, isScope
);
return locationId;
}
}
Id Storage::addEdge(Id sourceNodeId, Id targetNodeId, Edge::EdgeType type)
{
if (!sourceNodeId || !targetNodeId)
{
return 0;
}
Id edgeId = m_sqliteStorage.getEdgeBySourceTargetType(sourceNodeId, targetNodeId, type).id;
if (!edgeId)
{
edgeId = m_sqliteStorage.addEdge(type, sourceNodeId, targetNodeId);
}
return edgeId;
}
Id Storage::addEdge(Id sourceNodeId, Id targetNodeId, Edge::EdgeType type, ParseLocation location)
{
if (!sourceNodeId || !targetNodeId)
{
return 0;
}
Id edgeId = addEdge(sourceNodeId, targetNodeId, type);
addSourceLocation(edgeId, location, false);
return edgeId;
}
Id Storage::getFileNodeId(const FilePath& filePath) const
{
std::map<FilePath, Id>::const_iterator it = m_fileNodeIds.find(filePath);
@@ -876,47 +764,104 @@ std::vector<Id> Storage::getAllChildNodeIds(const Id nodeId) const
return childNodeIds;
}
void Storage::addEdgeAndAllChildrenToGraph(const Id edgeId, Graph* graph) const
void Storage::addNodesToGraph(const std::vector<Id>& nodeIds, Graph* graph) const
{
StorageEdge storageEdge = m_sqliteStorage.getEdgeById(edgeId);
Node* sourceNode = graph->getNodeById(storageEdge.sourceNodeId);
Node* targetNode = graph->getNodeById(storageEdge.targetNodeId);
if (!sourceNode)
if (nodeIds.size() == 0)
{
addNodeAndAllChildrenToGraph(getLastVisibleParentNodeId(storageEdge.sourceNodeId), graph);
sourceNode = graph->getNodeById(storageEdge.sourceNodeId);
return;
}
if (!targetNode)
{
addNodeAndAllChildrenToGraph(getLastVisibleParentNodeId(storageEdge.targetNodeId), graph);
targetNode = graph->getNodeById(storageEdge.targetNodeId);
}
std::vector<StorageNode> storageNodes = m_sqliteStorage.getNodesByIds(nodeIds);
graph->createEdge(edgeId, Edge::intToType(storageEdge.type), sourceNode, targetNode);
for (const StorageNode& storageNode : storageNodes)
{
NameHierarchy nameHierarchy = NameHierarchy::deserialize(storageNode.serializedName);
Node::NodeType type = Node::intToType(storageNode.type);
DefinitionType defType = intToDefinitionType(storageNode.definitionType);
Node* node = graph->createNode(
storageNode.id,
type,
nameHierarchy,
defType != DEFINITION_NONE
);
if (defType == DEFINITION_IMPLICIT)
{
node->setImplicit(true);
}
else if (defType == DEFINITION_EXPLICIT)
{
node->setExplicit(true);
}
if (type == Node::NODE_FUNCTION || type == Node::NODE_METHOD)
{
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<TokenComponentSignature>(signatureString)
);
}
}
}
}
Node* Storage::addNodeAndAllChildrenToGraph(const Id nodeId, Graph* graph) const
void Storage::addEdgesToGraph(const std::vector<Id>& edgeIds, Graph* graph) const
{
Node* node = graph->getNodeById(nodeId);
if (node)
if (edgeIds.size() == 0)
{
return node;
return;
}
std::vector<Id> nodeIdsToAdd;
std::vector<Id> edgeIdsToAdd;
std::vector<StorageEdge> storageEdges = m_sqliteStorage.getEdgesByIds(edgeIds);
for (const StorageEdge& storageEdge : storageEdges)
{
Node* sourceNode = graph->getNodeById(storageEdge.sourceNodeId);
Node* targetNode = graph->getNodeById(storageEdge.targetNodeId);
nodeIdsToAdd.push_back(nodeId);
if (sourceNode && targetNode)
{
graph->createEdge(storageEdge.id, Edge::intToType(storageEdge.type), sourceNode, targetNode);
}
else
{
LOG_ERROR("Can't add edge because nodes are not present");
}
}
}
m_hierarchyCache.addAllChildIdsForNodeId(nodeId, &nodeIdsToAdd, &edgeIdsToAdd);
void Storage::addNodesWithChildrenAndEdgesToGraph(const std::vector<Id>& nodeIds, const std::vector<Id>& edgeIds, Graph* graph) const
{
std::set<Id> parentNodeIds;
addNodesToGraph(nodeIdsToAdd, graph);
addEdgesToGraph(edgeIdsToAdd, graph);
for (Id nodeId : nodeIds)
{
parentNodeIds.insert(getLastVisibleParentNodeId(nodeId));
}
return graph->getNodeById(nodeId);
if (edgeIds.size() > 0)
{
std::vector<StorageEdge> storageEdges = m_sqliteStorage.getEdgesByIds(edgeIds);
for (const StorageEdge& storageEdge : storageEdges)
{
parentNodeIds.insert(getLastVisibleParentNodeId(storageEdge.sourceNodeId));
parentNodeIds.insert(getLastVisibleParentNodeId(storageEdge.targetNodeId));
}
}
std::vector<Id> allNodeIds;
std::vector<Id> allEdgeIds = edgeIds;
for (Id parentNodeId : parentNodeIds)
{
allNodeIds.push_back(parentNodeId);
m_hierarchyCache.addAllChildIdsForNodeId(parentNodeId, &allNodeIds, &allEdgeIds);
}
addNodesToGraph(allNodeIds, graph);
addEdgesToGraph(allEdgeIds, graph);
}
void Storage::addAggregationEdgesToGraph(const Id nodeId, Graph* graph) const
@@ -930,6 +875,10 @@ void Storage::addAggregationEdgesToGraph(const Id nodeId, Graph* graph) const
// build aggregation edges:
// get all children of the active node
std::vector<Id> childNodeIds = getAllChildNodeIds(nodeId);
if (childNodeIds.size() == 0)
{
return;
}
// get all edges of the children
std::map<Id, std::vector<EdgeInfo>> connectedNodeIds;
@@ -966,9 +915,20 @@ void Storage::addAggregationEdgesToGraph(const Id nodeId, Graph* graph) const
}
}
// add hierarchies for these parents and create aggregation edges between parents and active node
Node* sourceNode = graph->getNodeById(nodeId);
// add hierarchies of these parents
std::vector<Id> nodeIdsToAdd;
for (const std::pair<Id, std::vector<EdgeInfo>> p : connectedParentNodeIds)
{
const Id aggregationTargetNodeId = p.first;
if (!graph->getNodeById(aggregationTargetNodeId))
{
nodeIdsToAdd.push_back(aggregationTargetNodeId);
}
}
addNodesWithChildrenAndEdgesToGraph(nodeIdsToAdd, std::vector<Id>(), graph);
// create aggregation edges between parents and active node
Node* sourceNode = graph->getNodeById(nodeId);
for (const std::pair<Id, std::vector<EdgeInfo>> p : connectedParentNodeIds)
{
const Id aggregationTargetNodeId = p.first;
@@ -976,7 +936,7 @@ void Storage::addAggregationEdgesToGraph(const Id nodeId, Graph* graph) const
Node* targetNode = graph->getNodeById(aggregationTargetNodeId);
if (!targetNode)
{
targetNode = addNodeAndAllChildrenToGraph(aggregationTargetNodeId, graph);
LOG_ERROR("Aggregation target node not present.");
}
std::shared_ptr<TokenComponentAggregation> componentAggregation = std::make_shared<TokenComponentAggregation>();
@@ -996,54 +956,6 @@ void Storage::addAggregationEdgesToGraph(const Id nodeId, Graph* graph) const
}
}
void Storage::addNodesToGraph(const std::vector<Id> nodeIds, Graph* graph) const
{
std::vector<StorageNode> storageNodes = m_sqliteStorage.getNodesByIds(nodeIds);
for (const StorageNode& storageNode : storageNodes)
{
NameHierarchy nameHierarchy = NameHierarchy::deserialize(storageNode.serializedName);
Node::NodeType type = Node::intToType(storageNode.type);
Node* node = graph->createNode(
storageNode.id,
type,
nameHierarchy,
storageNode.defined
);
if (type == Node::NODE_FUNCTION || type == Node::NODE_METHOD)
{
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<TokenComponentSignature>(signatureString)
);
}
}
}
}
void Storage::addEdgesToGraph(const std::vector<Id> edgeIds, Graph* graph) const
{
std::vector<StorageEdge> storageEdges = m_sqliteStorage.getEdgesByIds(edgeIds);
for (const StorageEdge& storageEdge : storageEdges)
{
Node* sourceNode = graph->getNodeById(storageEdge.sourceNodeId);
Node* targetNode = graph->getNodeById(storageEdge.targetNodeId);
if (sourceNode && targetNode)
{
graph->createEdge(storageEdge.id, Edge::intToType(storageEdge.type), sourceNode, targetNode);
}
else
{
LOG_ERROR("Can't add edge because nodes are not present");
}
}
}
void Storage::addComponentAccessToGraph(Graph* graph) const
{
std::vector<Id> memberEdgeIds;
@@ -1075,17 +987,22 @@ void Storage::buildSearchIndex()
{
for (StorageNode node: m_sqliteStorage.getAllNodes())
{
m_tokenIndex.addTokenId(m_tokenIndex.addNode(NameHierarchy::deserialize(node.serializedName)), node.id);
m_searchIndex.addNode(node.id, NameHierarchy::deserialize(node.serializedName));
}
m_searchIndex.finishSetup();
}
void Storage::buildHierarchyCache()
{
std::vector<StorageEdge> memberEdges = m_sqliteStorage.getEdgesByType(Edge::typeToInt(Edge::EDGE_MEMBER));
Cache<Id, Node::NodeType> nodeTypeCache([this](Id id){
return Node::intToType(m_sqliteStorage.getNodeById(id).type);
});
for (const StorageEdge& edge : memberEdges)
{
bool isVisible = !(Node::intToType(m_sqliteStorage.getNodeById(edge.sourceNodeId).type) & Node::NODE_NOT_VISIBLE);
bool isVisible = !(nodeTypeCache.getValue(edge.sourceNodeId) & Node::NODE_NOT_VISIBLE);
m_hierarchyCache.createConnection(edge.id, edge.sourceNodeId, edge.targetNodeId, isVisible);
}
}
+9 -22
View File
@@ -7,11 +7,11 @@
#include "utility/file/FilePath.h"
#include "data/access/StorageAccess.h"
#include "data/HierarchyCache.h"
#include "data/graph/token_component/TokenComponentAccess.h"
#include "data/location/TokenLocationCollection.h"
#include "data/parser/ParserClient.h"
#include "data/search/SearchIndex.h"
#include "data/HierarchyCache.h"
#include "data/SqliteStorage.h"
#include "data/parser/ParserClientImpl.h"
@@ -35,7 +35,6 @@ public:
void removeUnusedNames();
std::vector<FileInfo> getInfoOnAllFiles() const;
const SearchIndex& getSearchIndex() const;
void logStats() const;
@@ -46,7 +45,6 @@ public:
// StorageAccess implementation
virtual Id getIdForNodeWithNameHierarchy(const NameHierarchy& nameHierarchy) const;
virtual Id getIdForNodeWithSearchNameHierarchy(const NameHierarchy& nameHierarchy) const;
virtual Id getIdForEdge(
Edge::EdgeType type, const NameHierarchy& fromNameHierarchy, const NameHierarchy& toNameHierarchy) const;
@@ -56,15 +54,15 @@ public:
virtual Node::NodeType getNodeTypeForNodeWithId(Id nodeId) const;
virtual std::vector<SearchMatch> getAutocompletionMatches(const std::string& query) const;
virtual std::vector<SearchMatch> getSearchMatchesForTokenIds(const std::vector<Id>& tokenIds) const;
virtual std::vector<SearchMatch> getSearchMatchesForTokenIds(const std::vector<Id>& elementIds) const;
virtual std::shared_ptr<Graph> getGraphForAll() const;
virtual std::shared_ptr<Graph> getGraphForActiveTokenIds(const std::vector<Id>& tokenIds, bool activeOnly) const;
virtual std::shared_ptr<Graph> getGraphForActiveTokenIds(const std::vector<Id>& tokenIds) const;
virtual std::vector<Id> getActiveTokenIdsForTokenIds(const std::vector<Id>& tokenIds) const;
virtual std::vector<Id> getActiveTokenIdsForId(Id tokenId, Id* declarationId) const;
virtual std::vector<Id> getNodeIdsForLocationIds(const std::vector<Id>& locationIds) const;
virtual std::vector<Id> getLocalSymbolIdsForLocationIds(const std::vector<Id>& locationIds) const;
virtual std::vector<Id> getTokenIdsForMatches(const std::vector<SearchMatch>& matches) const;
virtual Id getTokenIdForFileNode(const FilePath& filePath) const;
@@ -87,25 +85,17 @@ public:
virtual StorageStats getStorageStats() const;
private:
Id addNodeHierarchy(Node::NodeType nodeType, NameHierarchy nameHierarchy, bool defined);
Id addSourceLocation(Id elementNodeId, const ParseLocation &location, bool isScope = false);
Id addEdge(Id sourceNodeId, Id targetNodeId, Edge::EdgeType type);
Id addEdge(Id sourceNodeId, Id targetNodeId, Edge::EdgeType type, ParseLocation location);
Id getFileNodeId(const FilePath& filePath) const;
FilePath getFileNodePath(Id fileId) const;
Id getLastVisibleParentNodeId(const Id nodeId) const;
std::vector<Id> getAllChildNodeIds(const Id nodeId) const;
void addEdgeAndAllChildrenToGraph(const Id edgeId, Graph* graph) const;
Node* addNodeAndAllChildrenToGraph(const Id nodeId, Graph* graph) const;
void addNodesToGraph(const std::vector<Id>& nodeIds, Graph* graph) const;
void addEdgesToGraph(const std::vector<Id>& edgeIds, Graph* graph) const;
void addNodesWithChildrenAndEdgesToGraph(const std::vector<Id>& nodeIds, const std::vector<Id>& edgeIds, Graph* graph) const;
void addAggregationEdgesToGraph(const Id nodeId, Graph* graph) const;
void addNodesToGraph(const std::vector<Id> nodeIds, Graph* graph) const;
void addEdgesToGraph(const std::vector<Id> edgeIds, Graph* graph) const;
void addComponentAccessToGraph(Graph* graph) const;
void buildSearchIndex();
@@ -113,16 +103,13 @@ private:
void log(std::string type, std::string str, const ParseLocation& location) const;
SearchIndex m_tokenIndex;
SearchIndex m_commandIndex;
SearchIndex m_searchIndex;
SqliteStorage m_sqliteStorage;
mutable std::map <FilePath, Id> m_fileNodeIds;
HierarchyCache m_hierarchyCache;
mutable SearchResults m_cachedResults;
mutable std::string m_cachedQuery;
};
#endif // STORAGE_H
-9
View File
@@ -8,25 +8,16 @@ struct StorageStats
StorageStats()
: nodeCount(0)
, edgeCount(0)
, charCount(0)
, wordCount(0)
, searchNodeCount(0)
, fileCount(0)
, fileLOCCount(0)
, sourceLocationCount(0)
, errorCount(ErrorCountInfo())
{}
size_t nodeCount;
size_t edgeCount;
size_t charCount;
size_t wordCount;
size_t searchNodeCount;
size_t fileCount;
size_t fileLOCCount;
size_t sourceLocationCount;
ErrorCountInfo errorCount;
};
+17 -6
View File
@@ -22,17 +22,17 @@ struct StorageEdge
struct StorageNode
{
StorageNode(Id id, int type, const std::string& serializedName, bool defined)
StorageNode(Id id, int type, const std::string& serializedName, int definitionType)
: id(id)
, type(type)
, serializedName(serializedName)
, defined(defined)
, definitionType(definitionType)
{}
Id id;
int type;
std::string serializedName;
bool defined;
int definitionType;
};
struct StorageFile
@@ -50,9 +50,20 @@ struct StorageFile
std::string modificationTime;
};
struct StorageLocalSymbol
{
StorageLocalSymbol(Id id, const std::string& name)
: id(id)
, name(name)
{}
Id id;
std::string name;
};
struct StorageSourceLocation
{
StorageSourceLocation(Id id, Id elementId, Id fileNodeId, uint startLine, uint startCol, uint endLine, uint endCol, bool isScope)
StorageSourceLocation(Id id, Id elementId, Id fileNodeId, uint startLine, uint startCol, uint endLine, uint endCol, int type)
: id(id)
, elementId(elementId)
, fileNodeId(fileNodeId)
@@ -60,7 +71,7 @@ struct StorageSourceLocation
, startCol(startCol)
, endLine(endLine)
, endCol(endCol)
, isScope(isScope)
, type(type)
{}
Id id;
@@ -70,7 +81,7 @@ struct StorageSourceLocation
uint startCol;
uint endLine;
uint endCol;
bool isScope;
int type;
};
struct StorageComponentAccess
+2 -3
View File
@@ -27,7 +27,6 @@ public:
virtual ~StorageAccess();
virtual Id getIdForNodeWithNameHierarchy(const NameHierarchy& nameHierarchy) const = 0;
virtual Id getIdForNodeWithSearchNameHierarchy(const NameHierarchy& nameHierarchy) const = 0;
virtual Id getIdForEdge(
Edge::EdgeType type, const NameHierarchy& fromNameHierarchy, const NameHierarchy& toNameHierarchy) const = 0;
@@ -40,12 +39,12 @@ public:
virtual std::vector<SearchMatch> getSearchMatchesForTokenIds(const std::vector<Id>& tokenIds) const = 0;
virtual std::shared_ptr<Graph> getGraphForAll() const = 0;
virtual std::shared_ptr<Graph> getGraphForActiveTokenIds(const std::vector<Id>& tokenIds, bool activeOnly) const = 0;
virtual std::shared_ptr<Graph> getGraphForActiveTokenIds(const std::vector<Id>& tokenIds) const = 0;
virtual std::vector<Id> getActiveTokenIdsForTokenIds(const std::vector<Id>& tokenIds) const = 0;
virtual std::vector<Id> getActiveTokenIdsForId(Id tokenId, Id* declarationId) const = 0;
virtual std::vector<Id> getNodeIdsForLocationIds(const std::vector<Id>& locationIds) const = 0;
virtual std::vector<Id> getLocalSymbolIdsForLocationIds(const std::vector<Id>& locationIds) const = 0;
virtual std::vector<Id> getTokenIdsForMatches(const std::vector<SearchMatch>& matches) const = 0;
virtual Id getTokenIdForFileNode(const FilePath& filePath) const = 0;
+12 -22
View File
@@ -43,16 +43,6 @@ Id StorageAccessProxy::getIdForNodeWithNameHierarchy(const NameHierarchy& nameHi
return 0;
}
Id StorageAccessProxy::getIdForNodeWithSearchNameHierarchy(const NameHierarchy& nameHierarchy) const
{
if (hasSubject())
{
return m_subject->getIdForNodeWithSearchNameHierarchy(nameHierarchy);
}
return 0;
}
Id StorageAccessProxy::getIdForEdge(
Edge::EdgeType type, const NameHierarchy& fromNameHierarchy, const NameHierarchy& toNameHierarchy
) const {
@@ -123,26 +113,16 @@ std::shared_ptr<Graph> StorageAccessProxy::getGraphForAll() const
return std::make_shared<Graph>();
}
std::shared_ptr<Graph> StorageAccessProxy::getGraphForActiveTokenIds(const std::vector<Id>& tokenIds, bool activeOnly) const
std::shared_ptr<Graph> StorageAccessProxy::getGraphForActiveTokenIds(const std::vector<Id>& tokenIds) const
{
if (hasSubject())
{
return m_subject->getGraphForActiveTokenIds(tokenIds, activeOnly);
return m_subject->getGraphForActiveTokenIds(tokenIds);
}
return std::make_shared<Graph>();
}
std::vector<Id> StorageAccessProxy::getActiveTokenIdsForTokenIds(const std::vector<Id>& tokenIds) const
{
if (hasSubject())
{
return m_subject->getActiveTokenIdsForTokenIds(tokenIds);
}
return std::vector<Id>();
}
std::vector<Id> StorageAccessProxy::getActiveTokenIdsForId(Id tokenId, Id* delcarationId) const
{
if (hasSubject())
@@ -163,6 +143,16 @@ std::vector<Id> StorageAccessProxy::getNodeIdsForLocationIds(const std::vector<I
return std::vector<Id>();
}
std::vector<Id> StorageAccessProxy::getLocalSymbolIdsForLocationIds(const std::vector<Id>& locationIds) const
{
if (hasSubject())
{
return m_subject->getLocalSymbolIdsForLocationIds(locationIds);
}
return std::vector<Id>();
}
std::vector<Id> StorageAccessProxy::getTokenIdsForMatches(const std::vector<SearchMatch>& matches) const
{
if (hasSubject())
+2 -3
View File
@@ -14,7 +14,6 @@ public:
// StorageAccess implementation
virtual Id getIdForNodeWithNameHierarchy(const NameHierarchy& nameHierarchy) const;
virtual Id getIdForNodeWithSearchNameHierarchy(const NameHierarchy& nameHierarchy) const;
virtual Id getIdForEdge(
Edge::EdgeType type, const NameHierarchy& fromNameHierarchy, const NameHierarchy& toNameHierarchy) const;
@@ -27,12 +26,12 @@ public:
virtual std::vector<SearchMatch> getSearchMatchesForTokenIds(const std::vector<Id>& tokenIds) const;
virtual std::shared_ptr<Graph> getGraphForAll() const;
virtual std::shared_ptr<Graph> getGraphForActiveTokenIds(const std::vector<Id>& tokenIds, bool activeOnly) const;
virtual std::shared_ptr<Graph> getGraphForActiveTokenIds(const std::vector<Id>& tokenIds) const;
virtual std::vector<Id> getActiveTokenIdsForTokenIds(const std::vector<Id>& tokenIds) const;
virtual std::vector<Id> getActiveTokenIdsForId(Id tokenId, Id* declarationId) const;
virtual std::vector<Id> getNodeIdsForLocationIds(const std::vector<Id>& locationIds) const;
virtual std::vector<Id> getLocalSymbolIdsForLocationIds(const std::vector<Id>& locationIds) const;
virtual std::vector<Id> getTokenIdsForMatches(const std::vector<SearchMatch>& matches) const;
virtual Id getTokenIdForFileNode(const FilePath& filePath) const;
+22
View File
@@ -98,6 +98,8 @@ Node::Node(Id id, NodeType type, NameHierarchy nameHierarchy, bool defined)
, m_type(type)
, m_nameHierarchy(nameHierarchy)
, m_defined(defined)
, m_implicit(false)
, m_explicit(false)
{
}
@@ -152,6 +154,26 @@ void Node::setDefined(bool defined)
m_defined = defined;
}
bool Node::isImplicit() const
{
return m_implicit;
}
void Node::setImplicit(bool implicit)
{
m_implicit = implicit;
}
bool Node::isExplicit() const
{
return m_explicit;
}
void Node::setExplicit(bool bExplicit)
{
m_explicit = bExplicit;
}
const std::vector<Edge*>& Node::getEdges() const
{
return m_edges;
+8
View File
@@ -63,6 +63,12 @@ public:
bool isDefined() const;
void setDefined(bool defined);
bool isImplicit() const;
void setImplicit(bool implicit);
bool isExplicit() const;
void setExplicit(bool bExplicit);
const std::vector<Edge*>& getEdges() const;
void addEdge(Edge* edge);
@@ -107,6 +113,8 @@ private:
NodeType m_type;
NameHierarchy m_nameHierarchy;
bool m_defined;
bool m_implicit;
bool m_explicit;
};
std::ostream& operator<<(std::ostream& ostream, const Node& node);
+27
View File
@@ -0,0 +1,27 @@
#include "data/location/LocationType.h"
int locationTypeToInt(LocationType type)
{
switch (type)
{
case LOCATION_TOKEN:
return 0;
case LOCATION_SCOPE:
return 1;
case LOCATION_LOCAL_SYMBOL:
return 2;
}
}
LocationType intToLocationType(int value)
{
switch (value)
{
case 0:
return LOCATION_TOKEN;
case 1:
return LOCATION_SCOPE;
case 2:
return LOCATION_LOCAL_SYMBOL;
}
}
+14
View File
@@ -0,0 +1,14 @@
#ifndef LOCATION_TYPE_H
#define LOCATION_TYPE_H
enum LocationType
{
LOCATION_TOKEN,
LOCATION_SCOPE,
LOCATION_LOCAL_SYMBOL
};
int locationTypeToInt(LocationType type);
LocationType intToLocationType(int value);
#endif // LOCATION_TYPE_H
+1 -1
View File
@@ -69,7 +69,7 @@ Id TokenLocation::getTokenId() const
return m_tokenId;
}
TokenLocation::LocationType TokenLocation::getType() const
LocationType TokenLocation::getType() const
{
return m_type;
}
+1 -7
View File
@@ -5,6 +5,7 @@
#include <ostream>
#include <string>
#include "data/location/LocationType.h"
#include "utility/file/FilePath.h"
#include "utility/types.h"
@@ -15,13 +16,6 @@ class TokenLocationLine;
class TokenLocation
{
public:
enum LocationType
{
LOCATION_TOKEN,
LOCATION_SCOPE
};
TokenLocation(Id tokenId, TokenLocationLine* line, unsigned int columnNumber, bool isStart);
TokenLocation(Id locationId, Id tokenId, TokenLocationLine* line, unsigned int columnNumber, bool isStart);
TokenLocation(TokenLocation* other, TokenLocationLine* line, unsigned int columnNumber, bool isStart);
TokenLocation(const TokenLocation& other, TokenLocationLine* line);
+15 -13
View File
@@ -54,27 +54,29 @@ public:
virtual void onError(const ParseLocation& location, const std::string& message, bool fatal) = 0;
virtual Id onTypedefParsed(
const ParseLocation& location, const NameHierarchy& typedefName, AccessType access) = 0;
const ParseLocation& location, const NameHierarchy& typedefName, AccessType access, bool isImplicit) = 0;
virtual Id onClassParsed(
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
const ParseLocation& scopeLocation) = 0;
const ParseLocation& scopeLocation, bool isImplicit) = 0;
virtual Id onStructParsed(
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
const ParseLocation& scopeLocation) = 0;
virtual Id onGlobalVariableParsed(const ParseLocation& location, const NameHierarchy& variable) = 0;
virtual Id onFieldParsed(const ParseLocation& location, const NameHierarchy& field, AccessType access) = 0;
const ParseLocation& scopeLocation, bool isImplicit) = 0;
virtual Id onGlobalVariableParsed(const ParseLocation& location, const NameHierarchy& variable, bool isImplicit) = 0;
virtual Id onFieldParsed(const ParseLocation& location, const NameHierarchy& field, AccessType access, bool isImplicit) = 0;
virtual Id onFunctionParsed(
const ParseLocation& location, const NameHierarchy& function, const ParseLocation& scopeLocation) = 0;
const ParseLocation& location, const NameHierarchy& function, const ParseLocation& scopeLocation, bool isImplicit) = 0;
virtual Id onMethodParsed(
const ParseLocation& location, const NameHierarchy& method, AccessType access, AbstractionType abstraction,
const ParseLocation& scopeLocation) = 0;
const ParseLocation& scopeLocation, bool isImplicit) = 0;
virtual Id onNamespaceParsed(
const ParseLocation& location, const NameHierarchy& nameHierarchy,
const ParseLocation& scopeLocation) = 0;
const ParseLocation& scopeLocation, bool isImplicit) = 0;
virtual Id onEnumParsed(
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
const ParseLocation& scopeLocation) = 0;
virtual Id onEnumConstantParsed(const ParseLocation& location, const NameHierarchy& nameHierarchy) = 0;
const ParseLocation& scopeLocation, bool isImplicit) = 0;
virtual Id onEnumConstantParsed(const ParseLocation& location, const NameHierarchy& nameHierarchy, bool isImplicit) = 0;
virtual Id onTemplateParameterTypeParsed(
const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy, bool isImplicit) = 0;
virtual Id onInheritanceParsed(
const ParseLocation& location, const NameHierarchy& nameHierarchy,
@@ -96,15 +98,15 @@ public:
const NameHierarchy& templateNameHierarchy) = 0;
virtual Id onTemplateDefaultArgumentTypeParsed(
const ParseLocation& location, const NameHierarchy& defaultArgumentTypeNameHierarchy,
const NameHierarchy& templateArgumentTypeNameHierarchy) = 0;
virtual Id onTemplateParameterTypeParsed(
const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy) = 0;
const NameHierarchy& templateParameterNameHierarchy) = 0;
virtual Id onTemplateSpecializationParsed(
const ParseLocation& location, const NameHierarchy& specializedNameHierarchy,
const NameHierarchy& specializedFromNameHierarchy) = 0;
virtual Id onTemplateMemberFunctionSpecializationParsed(
const ParseLocation& location, const NameHierarchy& instantiatedFunction, const NameHierarchy& specializedFunction) = 0;
virtual Id onLocalSymbolParsed(const std::string& name, const ParseLocation& location) = 0;
virtual Id onFileParsed(const FileInfo& fileInfo) = 0;
virtual Id onFileIncludeParsed(
const ParseLocation& location, const FileInfo& fileInfo, const FileInfo& includedFileInfo) = 0;
+133 -96
View File
@@ -5,6 +5,7 @@
#include "data/graph/Edge.h"
#include "utility/logging/logging.h"
#include "utility/utility.h"
#include "data/location/TokenLocation.h"
ParserClientImpl::ParserClientImpl()
{
@@ -53,12 +54,12 @@ void ParserClientImpl::onError(const ParseLocation& location, const std::string&
}
Id ParserClientImpl::onTypedefParsed(
const ParseLocation& location, const NameHierarchy& typedefName, AccessType access)
const ParseLocation& location, const NameHierarchy& typedefName, AccessType access, bool isImplicit)
{
log("typedef", typedefName.getQualifiedName(), location);
Id nodeId = addNodeHierarchy(Node::NODE_TYPEDEF, typedefName, true);
addSourceLocation(nodeId, location, false);
Id nodeId = addNodeHierarchy(Node::NODE_TYPEDEF, typedefName, (isImplicit ? DEFINITION_IMPLICIT : DEFINITION_EXPLICIT));
addSourceLocation(nodeId, location, locationTypeToInt(LOCATION_TOKEN));
addAccess(nodeId, access);
return 0;
@@ -66,13 +67,17 @@ Id ParserClientImpl::onTypedefParsed(
Id ParserClientImpl::onClassParsed(
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
const ParseLocation& scopeLocation)
const ParseLocation& scopeLocation, bool isImplicit)
{
log("class", nameHierarchy.getQualifiedName(), location);
Id nodeId = addNodeHierarchy(Node::NODE_CLASS, nameHierarchy, scopeLocation.isValid());
addSourceLocation(nodeId, location, false);
addSourceLocation(nodeId, scopeLocation, true);
Id nodeId = addNodeHierarchy(
Node::NODE_CLASS,
nameHierarchy,
(isImplicit ? DEFINITION_IMPLICIT : (scopeLocation.isValid() ? DEFINITION_EXPLICIT : DEFINITION_NONE))
);
addSourceLocation(nodeId, location, locationTypeToInt(LOCATION_TOKEN));
addSourceLocation(nodeId, scopeLocation, locationTypeToInt(LOCATION_SCOPE));
addAccess(nodeId, access);
return 0;
@@ -80,97 +85,117 @@ Id ParserClientImpl::onClassParsed(
Id ParserClientImpl::onStructParsed(
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
const ParseLocation& scopeLocation)
const ParseLocation& scopeLocation, bool isImplicit)
{
log("struct", nameHierarchy.getQualifiedName(), location);
Id nodeId = addNodeHierarchy(Node::NODE_STRUCT, nameHierarchy, scopeLocation.isValid());
addSourceLocation(nodeId, location, false);
addSourceLocation(nodeId, scopeLocation, true);
Id nodeId = addNodeHierarchy(
Node::NODE_STRUCT,
nameHierarchy,
(isImplicit ? DEFINITION_IMPLICIT : (scopeLocation.isValid() ? DEFINITION_EXPLICIT : DEFINITION_NONE))
);
addSourceLocation(nodeId, location, locationTypeToInt(LOCATION_TOKEN));
addSourceLocation(nodeId, scopeLocation, locationTypeToInt(LOCATION_SCOPE));
addAccess(nodeId, access);
return 0;
}
Id ParserClientImpl::onGlobalVariableParsed(const ParseLocation& location, const NameHierarchy& variable)
Id ParserClientImpl::onGlobalVariableParsed(const ParseLocation& location, const NameHierarchy& variable, bool isImplicit)
{
log("global", variable.getQualifiedName(), location);
Id nodeId = addNodeHierarchy(Node::NODE_GLOBAL_VARIABLE, variable, true);
addSourceLocation(nodeId, location, false);
Id nodeId = addNodeHierarchy(Node::NODE_GLOBAL_VARIABLE, variable, (isImplicit ? DEFINITION_IMPLICIT : DEFINITION_EXPLICIT));
addSourceLocation(nodeId, location, locationTypeToInt(LOCATION_TOKEN));
return 0;
}
Id ParserClientImpl::onFieldParsed(const ParseLocation& location, const NameHierarchy& field, AccessType access)
Id ParserClientImpl::onFieldParsed(const ParseLocation& location, const NameHierarchy& field, AccessType access, bool isImplicit)
{
log("field", field.getQualifiedName(), location);
Id nodeId = addNodeHierarchy(Node::NODE_FIELD, field, true);
addSourceLocation(nodeId, location, false);
Id nodeId = addNodeHierarchy(Node::NODE_FIELD, field, (isImplicit ? DEFINITION_IMPLICIT : DEFINITION_EXPLICIT));
addSourceLocation(nodeId, location, locationTypeToInt(LOCATION_TOKEN));
addAccess(nodeId, access);
return 0;
}
Id ParserClientImpl::onFunctionParsed(
const ParseLocation& location, const NameHierarchy& function, const ParseLocation& scopeLocation)
const ParseLocation& location, const NameHierarchy& function, const ParseLocation& scopeLocation, bool isImplicit)
{
log("function", function.getQualifiedNameWithSignature(), location);
Id nodeId = addNodeHierarchy(Node::NODE_FUNCTION, function, true);
addSourceLocation(nodeId, location, false);
addSourceLocation(nodeId, scopeLocation, true);
Id nodeId = addNodeHierarchy(Node::NODE_FUNCTION, function, (isImplicit ? DEFINITION_IMPLICIT : DEFINITION_EXPLICIT));
addSourceLocation(nodeId, location, locationTypeToInt(LOCATION_TOKEN));
addSourceLocation(nodeId, scopeLocation, locationTypeToInt(LOCATION_SCOPE));
return 0;
}
Id ParserClientImpl::onMethodParsed(
const ParseLocation& location, const NameHierarchy& method, AccessType access, AbstractionType abstraction,
const ParseLocation& scopeLocation)
const ParseLocation& scopeLocation, bool isImplicit)
{
log("method", method.getQualifiedNameWithSignature(), location);
Id nodeId = addNodeHierarchy(Node::NODE_METHOD, method, location.isValid() && scopeLocation.isValid());
addSourceLocation(nodeId, location, false);
addSourceLocation(nodeId, scopeLocation, true);
Id nodeId = addNodeHierarchy(
Node::NODE_METHOD,
method,
(isImplicit ? DEFINITION_IMPLICIT : ((location.isValid() && scopeLocation.isValid()) ? (DEFINITION_EXPLICIT) : DEFINITION_NONE))
);
addSourceLocation(nodeId, location, locationTypeToInt(LOCATION_TOKEN));
addSourceLocation(nodeId, scopeLocation, locationTypeToInt(LOCATION_SCOPE));
addAccess(nodeId, access);
return 0;
}
Id ParserClientImpl::onNamespaceParsed(
const ParseLocation& location, const NameHierarchy& nameHierarchy, const ParseLocation& scopeLocation)
const ParseLocation& location, const NameHierarchy& nameHierarchy, const ParseLocation& scopeLocation, bool isImplicit)
{
log("namespace", nameHierarchy.getQualifiedName(), location);
Id nodeId = addNodeHierarchy(Node::NODE_NAMESPACE, nameHierarchy, true);
addSourceLocation(nodeId, location, false);
addSourceLocation(nodeId, scopeLocation, true);
Id nodeId = addNodeHierarchy(Node::NODE_NAMESPACE, nameHierarchy, (isImplicit ? DEFINITION_IMPLICIT : DEFINITION_EXPLICIT));
addSourceLocation(nodeId, location, locationTypeToInt(LOCATION_TOKEN));
addSourceLocation(nodeId, scopeLocation, locationTypeToInt(LOCATION_SCOPE));
return 0;
}
Id ParserClientImpl::onEnumParsed(
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
const ParseLocation& scopeLocation)
const ParseLocation& scopeLocation, bool isImplicit)
{
log("enum", nameHierarchy.getQualifiedName(), location);
Id nodeId = addNodeHierarchy(Node::NODE_ENUM, nameHierarchy, true);
addSourceLocation(nodeId, location, false);
addSourceLocation(nodeId, scopeLocation, true);
Id nodeId = addNodeHierarchy(Node::NODE_ENUM, nameHierarchy, (isImplicit ? DEFINITION_IMPLICIT : DEFINITION_EXPLICIT));
addSourceLocation(nodeId, location, locationTypeToInt(LOCATION_TOKEN));
addSourceLocation(nodeId, scopeLocation, locationTypeToInt(LOCATION_SCOPE));
addAccess(nodeId, access);
return 0;
}
Id ParserClientImpl::onEnumConstantParsed(const ParseLocation& location, const NameHierarchy& nameHierarchy)
Id ParserClientImpl::onEnumConstantParsed(const ParseLocation& location, const NameHierarchy& nameHierarchy, bool isImplicit)
{
log("enum constant", nameHierarchy.getQualifiedName(), location);
Id nodeId = addNodeHierarchy(Node::NODE_ENUM_CONSTANT, nameHierarchy, true);
addSourceLocation(nodeId, location, false);
Id nodeId = addNodeHierarchy(Node::NODE_ENUM_CONSTANT, nameHierarchy, (isImplicit ? DEFINITION_IMPLICIT : DEFINITION_EXPLICIT));
addSourceLocation(nodeId, location, locationTypeToInt(LOCATION_TOKEN));
return 0;
}
Id ParserClientImpl::onTemplateParameterTypeParsed(
const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy, bool isImplicit)
{
log("template parameter type", templateParameterTypeNameHierarchy.getQualifiedName(), location);
Id nodeId = addNodeHierarchy(Node::NODE_TEMPLATE_PARAMETER_TYPE, templateParameterTypeNameHierarchy, (isImplicit ? DEFINITION_IMPLICIT : DEFINITION_EXPLICIT));
addSourceLocation(nodeId, location, locationTypeToInt(LOCATION_TOKEN));
addAccess(nodeId, TokenComponentAccess::ACCESS_TEMPLATE);
return 0;
}
@@ -181,10 +206,10 @@ Id ParserClientImpl::onInheritanceParsed(
{
log("inheritance", childNameHierarchy.getQualifiedName() + " : " + parentNameHierarchy.getQualifiedName(), location);
Id childNodeId = addNodeHierarchy(Node::NODE_TYPE, childNameHierarchy, false);
Id parentNodeId = addNodeHierarchy(Node::NODE_TYPE, parentNameHierarchy, false);
Id childNodeId = addNodeHierarchy(Node::NODE_TYPE, childNameHierarchy, DEFINITION_NONE);
Id parentNodeId = addNodeHierarchy(Node::NODE_TYPE, parentNameHierarchy, DEFINITION_NONE);
Id edgeId = addEdge(Edge::EDGE_INHERITANCE, childNodeId, parentNodeId);
addSourceLocation(edgeId, location, false);
addSourceLocation(edgeId, location, locationTypeToInt(LOCATION_TOKEN));
return edgeId;
}
@@ -194,10 +219,10 @@ Id ParserClientImpl::onMethodOverrideParsed(
{
log("override", overridden.getQualifiedNameWithSignature() + " -> " + overrider.getQualifiedNameWithSignature(), location);
Id overriddenNodeId = addNodeHierarchy(Node::NODE_FUNCTION, overridden, false);
Id overriderNodeId = addNodeHierarchy(Node::NODE_FUNCTION, overrider, false);
Id overriddenNodeId = addNodeHierarchy(Node::NODE_FUNCTION, overridden, DEFINITION_NONE);
Id overriderNodeId = addNodeHierarchy(Node::NODE_FUNCTION, overrider, DEFINITION_NONE);
Id edgeId = addEdge(Edge::EDGE_OVERRIDE, overriderNodeId, overriddenNodeId);
addSourceLocation(edgeId, location, false);
addSourceLocation(edgeId, location, locationTypeToInt(LOCATION_TOKEN));
return edgeId;
}
@@ -206,10 +231,10 @@ Id ParserClientImpl::onCallParsed(const ParseLocation& location, const NameHiera
{
log("call", caller.getQualifiedNameWithSignature() + " -> " + callee.getQualifiedNameWithSignature(), location);
Id callerNodeId = addNodeHierarchy(Node::NODE_FUNCTION, caller, false);
Id calleeNodeId = addNodeHierarchy(Node::NODE_FUNCTION, callee, false);
Id callerNodeId = addNodeHierarchy(Node::NODE_FUNCTION, caller, DEFINITION_NONE);
Id calleeNodeId = addNodeHierarchy(Node::NODE_FUNCTION, callee, DEFINITION_NONE);
Id edgeId = addEdge(Edge::EDGE_CALL, callerNodeId, calleeNodeId);
addSourceLocation(edgeId, location, false);
addSourceLocation(edgeId, location, locationTypeToInt(LOCATION_TOKEN));
return edgeId;
}
@@ -219,10 +244,10 @@ Id ParserClientImpl::onFieldUsageParsed(
{
log("field usage", userNameHierarchy.getQualifiedNameWithSignature() + " -> " + usedNameHierarchy.getQualifiedName(), location);
Id userNodeId = addNodeHierarchy(Node::NODE_FUNCTION, userNameHierarchy, false);
Id usedNodeId = addNodeHierarchy(Node::NODE_FIELD, usedNameHierarchy, false);
Id userNodeId = addNodeHierarchy(Node::NODE_FUNCTION, userNameHierarchy, DEFINITION_NONE);
Id usedNodeId = addNodeHierarchy(Node::NODE_FIELD, usedNameHierarchy, DEFINITION_NONE);
Id edgeId = addEdge(Edge::EDGE_USAGE, userNodeId, usedNodeId);
addSourceLocation(edgeId, location, false);
addSourceLocation(edgeId, location, locationTypeToInt(LOCATION_TOKEN));
return edgeId;
}
@@ -232,10 +257,10 @@ Id ParserClientImpl::onGlobalVariableUsageParsed( // or static variable used
{
log("global usage", userNameHierarchy.getQualifiedNameWithSignature() + " -> " + usedNameHierarchy.getQualifiedNameWithSignature(), location);
Id userNodeId = addNodeHierarchy(Node::NODE_FUNCTION, userNameHierarchy, false);
Id usedNodeId = addNodeHierarchy(Node::NODE_GLOBAL_VARIABLE, usedNameHierarchy, false);
Id userNodeId = addNodeHierarchy(Node::NODE_FUNCTION, userNameHierarchy, DEFINITION_NONE);
Id usedNodeId = addNodeHierarchy(Node::NODE_GLOBAL_VARIABLE, usedNameHierarchy, DEFINITION_NONE);
Id edgeId = addEdge(Edge::EDGE_USAGE, userNodeId, usedNodeId);
addSourceLocation(edgeId, location, false);
addSourceLocation(edgeId, location, locationTypeToInt(LOCATION_TOKEN));
return edgeId;
}
@@ -245,10 +270,10 @@ Id ParserClientImpl::onEnumConstantUsageParsed(
{
log("enum constant usage", userNameHierarchy.getQualifiedNameWithSignature() + " -> " + usedNameHierarchy.getQualifiedNameWithSignature(), location);
Id userNodeId = addNodeHierarchy(Node::NODE_UNDEFINED, userNameHierarchy, false);
Id usedNodeId = addNodeHierarchy(Node::NODE_ENUM_CONSTANT, usedNameHierarchy, false);
Id userNodeId = addNodeHierarchy(Node::NODE_UNDEFINED, userNameHierarchy, DEFINITION_NONE);
Id usedNodeId = addNodeHierarchy(Node::NODE_ENUM_CONSTANT, usedNameHierarchy, DEFINITION_NONE);
Id edgeId = addEdge(Edge::EDGE_USAGE, userNodeId, usedNodeId);
addSourceLocation(edgeId, location, false);
addSourceLocation(edgeId, location, locationTypeToInt(LOCATION_TOKEN));
return edgeId;
}
@@ -262,10 +287,10 @@ Id ParserClientImpl::onTypeUsageParsed(const ParseLocation& location, const Name
return 0;
}
Id functionNodeId = addNodeHierarchy(Node::NODE_UNDEFINED, user, false);
Id typeNodeId = addNodeHierarchy(Node::NODE_TYPE, used, false);
Id functionNodeId = addNodeHierarchy(Node::NODE_UNDEFINED, user, DEFINITION_NONE);
Id typeNodeId = addNodeHierarchy(Node::NODE_TYPE, used, DEFINITION_NONE);
Id edgeId = addEdge(Edge::EDGE_TYPE_USAGE, functionNodeId, typeNodeId);
addSourceLocation(edgeId, location, false);
addSourceLocation(edgeId, location, locationTypeToInt(LOCATION_TOKEN));
return edgeId;
}
@@ -280,10 +305,10 @@ Id ParserClientImpl::onTemplateArgumentTypeParsed(
location
);
Id argumentNodeId = addNodeHierarchy(Node::NODE_TYPE, argumentTypeNameHierarchy, false);
Id templateNodeId = addNodeHierarchy(Node::NODE_UNDEFINED, templateNameHierarchy, false);
Id argumentNodeId = addNodeHierarchy(Node::NODE_TYPE, argumentTypeNameHierarchy, DEFINITION_NONE);
Id templateNodeId = addNodeHierarchy(Node::NODE_UNDEFINED, templateNameHierarchy, DEFINITION_NONE);
Id edgeId = addEdge(Edge::EDGE_TEMPLATE_ARGUMENT, templateNodeId, argumentNodeId);
addSourceLocation(edgeId, location, false);
addSourceLocation(edgeId, location, locationTypeToInt(LOCATION_TOKEN));
return argumentNodeId;
}
@@ -298,26 +323,14 @@ Id ParserClientImpl::onTemplateDefaultArgumentTypeParsed(
location
);
Id defaultArgumentNodeId = addNodeHierarchy(Node::NODE_TYPE, defaultArgumentTypeNameHierarchy, false);
Id parameterNodeId = addNodeHierarchy(Node::NODE_TYPE, templateParameterNameHierarchy, false);
Id defaultArgumentNodeId = addNodeHierarchy(Node::NODE_TYPE, defaultArgumentTypeNameHierarchy, DEFINITION_NONE);
Id parameterNodeId = addNodeHierarchy(Node::NODE_TYPE, templateParameterNameHierarchy, DEFINITION_NONE);
Id edgeId = addEdge(Edge::EDGE_TEMPLATE_DEFAULT_ARGUMENT, parameterNodeId, defaultArgumentNodeId);
addSourceLocation(edgeId, location, false);
addSourceLocation(edgeId, location, locationTypeToInt(LOCATION_TOKEN));
return defaultArgumentNodeId;
}
Id ParserClientImpl::onTemplateParameterTypeParsed( // TODO: move this up to where nodes are created
const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy)
{
log("template parameter type", templateParameterTypeNameHierarchy.getQualifiedName(), location);
Id nodeId = addNodeHierarchy(Node::NODE_TEMPLATE_PARAMETER_TYPE, templateParameterTypeNameHierarchy, true);
addSourceLocation(nodeId, location, false);
addAccess(nodeId, TokenComponentAccess::ACCESS_TEMPLATE);
return 0;
}
Id ParserClientImpl::onTemplateSpecializationParsed(
const ParseLocation& location, const NameHierarchy& specializedNameHierarchy,
const NameHierarchy& specializedFromNameHierarchy)
@@ -328,10 +341,10 @@ Id ParserClientImpl::onTemplateSpecializationParsed(
location
);
Id specializedId = addNodeHierarchy(Node::NODE_TYPE, specializedNameHierarchy, false);
Id recordNodeId = addNodeHierarchy(Node::NODE_TYPE, specializedFromNameHierarchy, false);
Id specializedId = addNodeHierarchy(Node::NODE_TYPE, specializedNameHierarchy, DEFINITION_NONE);
Id recordNodeId = addNodeHierarchy(Node::NODE_TYPE, specializedFromNameHierarchy, DEFINITION_NONE);
Id edgeId = addEdge(Edge::EDGE_TEMPLATE_SPECIALIZATION_OF, specializedId, recordNodeId);
addSourceLocation(edgeId, location, false);
addSourceLocation(edgeId, location, locationTypeToInt(LOCATION_TOKEN));
return edgeId;
}
@@ -343,16 +356,30 @@ Id ParserClientImpl::onTemplateMemberFunctionSpecializationParsed(
"template member function specialization",
instantiatedFunction.getQualifiedNameWithSignature() + " -> " + specializedFunction.getQualifiedNameWithSignature(),
location
);
);
Id instantiatedFunctionNodeId = addNodeHierarchy(Node::NODE_FUNCTION, instantiatedFunction, false);
Id specializedFunctionNodeId = addNodeHierarchy(Node::NODE_FUNCTION, specializedFunction, false);
Id instantiatedFunctionNodeId = addNodeHierarchy(Node::NODE_FUNCTION, instantiatedFunction, DEFINITION_NONE);
Id specializedFunctionNodeId = addNodeHierarchy(Node::NODE_FUNCTION, specializedFunction, DEFINITION_NONE);
Id edgeId = addEdge(Edge::EDGE_TEMPLATE_MEMBER_SPECIALIZATION_OF, instantiatedFunctionNodeId, specializedFunctionNodeId);
addSourceLocation(edgeId, location, false);
addSourceLocation(edgeId, location, locationTypeToInt(LOCATION_TOKEN));
return edgeId;
}
Id ParserClientImpl::onLocalSymbolParsed(const std::string& name, const ParseLocation& location)
{
log(
"local symbol",
name,
location
);
Id localSymbolId = addLocalSymbol(name);
addSourceLocation(localSymbolId, location, locationTypeToInt(LOCATION_LOCAL_SYMBOL));
return localSymbolId;
}
Id ParserClientImpl::onFileParsed(const FileInfo& fileInfo) // TODO: move up to nodes
{
log("file", fileInfo.path.str(), ParseLocation());
@@ -369,7 +396,7 @@ Id ParserClientImpl::onFileIncludeParsed(const ParseLocation& location, const Fi
Id fileNodeId = addFile(fileInfo.path.fileName(), fileInfo.path.str(), utility::timeToString(fileInfo.lastWriteTime));
Id includedFileNodeId = addFile(includedFileInfo.path.fileName(), includedFileInfo.path.str(), utility::timeToString(includedFileInfo.lastWriteTime));
Id edgeId = addEdge(Edge::EDGE_INCLUDE, fileNodeId, includedFileNodeId);
addSourceLocation(edgeId, location, false);
addSourceLocation(edgeId, location, locationTypeToInt(LOCATION_TOKEN));
return fileNodeId;
}
@@ -379,9 +406,9 @@ Id ParserClientImpl::onMacroDefineParsed(
{
log("macro", macroNameHierarchy.getQualifiedName(), location);
Id macroId = addNodeHierarchy(Node::NODE_MACRO, macroNameHierarchy, true);
addSourceLocation(macroId, location, false);
addSourceLocation(macroId, scopeLocation, true);
Id macroId = addNodeHierarchy(Node::NODE_MACRO, macroNameHierarchy, DEFINITION_EXPLICIT);
addSourceLocation(macroId, location, locationTypeToInt(LOCATION_TOKEN));
addSourceLocation(macroId, scopeLocation, locationTypeToInt(LOCATION_SCOPE));
//Id fileNodeId = getFileNodeId(location.filePath); // do we need this???
//addEdge(Edge::EDGE_MACRO_USAGE, fileNodeId, macroId, , location);
@@ -392,10 +419,10 @@ Id ParserClientImpl::onMacroExpandParsed(const ParseLocation &location, const Na
{
log("macro use", macroNameHierarchy.getQualifiedName(), location);
Id macroExpandId = addNodeHierarchy(Node::NODE_MACRO, macroNameHierarchy, false);
Id macroExpandId = addNodeHierarchy(Node::NODE_MACRO, macroNameHierarchy, DEFINITION_NONE);
Id fileNodeId = addFile(location.filePath.str());
Id edgeId = addEdge(Edge::EDGE_MACRO_USAGE, fileNodeId, macroExpandId);
addSourceLocation(edgeId, location, false);
addSourceLocation(edgeId, location, locationTypeToInt(LOCATION_TOKEN));
return edgeId;
}
@@ -440,7 +467,7 @@ void ParserClientImpl::addAccess(Id nodeId, TokenComponentAccess::AccessType acc
addComponentAccess(nodeId, access);
}
Id ParserClientImpl::addNodeHierarchy(Node::NodeType nodeType, NameHierarchy nameHierarchy, bool defined)
Id ParserClientImpl::addNodeHierarchy(Node::NodeType nodeType, NameHierarchy nameHierarchy, DefinitionType definitionType)
{
if (nameHierarchy.size() == 0)
{
@@ -454,10 +481,11 @@ Id ParserClientImpl::addNodeHierarchy(Node::NodeType nodeType, NameHierarchy nam
for (size_t i = 0; i < nameHierarchy.size(); i++)
{
currentNameHierarchy.push(nameHierarchy[i]);
const bool isLastElement = (i == nameHierarchy.size() - 1);
Node::NodeType type = (isLastElement ? nodeType : Node::NODE_UNDEFINED);
const bool currentIsLastElement = (i == nameHierarchy.size() - 1);
Node::NodeType currentType = (currentIsLastElement ? nodeType : Node::NODE_UNDEFINED); // TODO: rename to unknown!
DefinitionType currentDefinitionType = (currentIsLastElement ? definitionType : DEFINITION_NONE);
Id nodeId = addNode(type, currentNameHierarchy, isLastElement && defined);
Id nodeId = addNode(currentType, currentNameHierarchy, currentDefinitionType);
// Todo: performance optimization: check if node exists. dont add edge if it existed before...
if (parentNodeId != 0)
@@ -493,14 +521,14 @@ Id ParserClientImpl::addFile(const std::string& filePath)
return m_storage->addFile(filePath);
}
Id ParserClientImpl::addNode(Node::NodeType nodeType, NameHierarchy nameHierarchy, bool defined)
Id ParserClientImpl::addNode(Node::NodeType nodeType, NameHierarchy nameHierarchy, DefinitionType definitionType)
{
if (!m_storage)
{
return 0;
}
return m_storage->addNode(Node::typeToInt(nodeType), nameHierarchy, defined);
return m_storage->addNode(Node::typeToInt(nodeType), nameHierarchy, definitionTypeToInt(definitionType));
}
Id ParserClientImpl::addEdge(int type, Id sourceId, Id targetId)
@@ -518,8 +546,17 @@ Id ParserClientImpl::addEdge(int type, Id sourceId, Id targetId)
return m_storage->addEdge(type, sourceId, targetId);
}
Id ParserClientImpl::addLocalSymbol(const std::string& name)
{
if (!m_storage)
{
return 0;
}
void ParserClientImpl::addSourceLocation(Id elementId, const ParseLocation& location, bool isScope)
return m_storage->addLocalSymbol(name);
}
void ParserClientImpl::addSourceLocation(Id elementId, const ParseLocation& location, int type)
{
if (!m_storage)
{
@@ -537,7 +574,7 @@ void ParserClientImpl::addSourceLocation(Id elementId, const ParseLocation& loca
return;
}
m_storage->addSourceLocation(elementId, location, isScope);
m_storage->addSourceLocation(elementId, location, type);
}
void ParserClientImpl::addComponentAccess(Id nodeId , int type)
+20 -16
View File
@@ -6,6 +6,7 @@
#include "data/graph/token_component/TokenComponentAccess.h"
#include "data/graph/Node.h"
#include "data/DefinitionType.h"
#include "data/SqliteStorage.h"
class ParserClientImpl: public ParserClient
@@ -26,27 +27,29 @@ public:
virtual void onError(const ParseLocation& location, const std::string& message, bool fatal);
virtual Id onTypedefParsed(
const ParseLocation& location, const NameHierarchy& typedefName, AccessType access);
const ParseLocation& location, const NameHierarchy& typedefName, AccessType access, bool isImplicit);
virtual Id onClassParsed(
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
const ParseLocation& scopeLocation);
const ParseLocation& scopeLocation, bool isImplicit);
virtual Id onStructParsed(
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
const ParseLocation& scopeLocation);
virtual Id onGlobalVariableParsed(const ParseLocation& location, const NameHierarchy& variable);
virtual Id onFieldParsed(const ParseLocation& location, const NameHierarchy& field, AccessType access);
const ParseLocation& scopeLocation, bool isImplicit);
virtual Id onGlobalVariableParsed(const ParseLocation& location, const NameHierarchy& variable, bool isImplicit);
virtual Id onFieldParsed(const ParseLocation& location, const NameHierarchy& field, AccessType access, bool isImplicit);
virtual Id onFunctionParsed(
const ParseLocation& location, const NameHierarchy& function, const ParseLocation& scopeLocation);
const ParseLocation& location, const NameHierarchy& function, const ParseLocation& scopeLocation, bool isImplicit);
virtual Id onMethodParsed(
const ParseLocation& location, const NameHierarchy& method, AccessType access, AbstractionType abstraction,
const ParseLocation& scopeLocation);
const ParseLocation& scopeLocation, bool isImplicit);
virtual Id onNamespaceParsed(
const ParseLocation& location, const NameHierarchy& nameHierarchy,
const ParseLocation& scopeLocation);
const ParseLocation& scopeLocation, bool isImplicit);
virtual Id onEnumParsed(
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
const ParseLocation& scopeLocation);
virtual Id onEnumConstantParsed(const ParseLocation& location, const NameHierarchy& nameHierarchy);
const ParseLocation& scopeLocation, bool isImplicit);
virtual Id onEnumConstantParsed(const ParseLocation& location, const NameHierarchy& nameHierarchy, bool isImplicit);
virtual Id onTemplateParameterTypeParsed(
const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy, bool isImplicit);
virtual Id onInheritanceParsed(
const ParseLocation& location, const NameHierarchy& nameHierarchy,
@@ -68,15 +71,15 @@ public:
const NameHierarchy& templateNameHierarchy);
virtual Id onTemplateDefaultArgumentTypeParsed(
const ParseLocation& location, const NameHierarchy& defaultArgumentTypeNameHierarchy,
const NameHierarchy& templateArgumentTypeNameHierarchy);
virtual Id onTemplateParameterTypeParsed(
const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy);
const NameHierarchy& templateParameterNameHierarchy);
virtual Id onTemplateSpecializationParsed(
const ParseLocation& location, const NameHierarchy& specializedNameHierarchy,
const NameHierarchy& specializedFromNameHierarchy);
virtual Id onTemplateMemberFunctionSpecializationParsed(
const ParseLocation& location, const NameHierarchy& instantiatedFunction, const NameHierarchy& specializedFunction);
virtual Id onLocalSymbolParsed(const std::string& name, const ParseLocation& location);
virtual Id onFileParsed(const FileInfo& fileInfo);
virtual Id onFileIncludeParsed(
const ParseLocation& location, const FileInfo& fileInfo, const FileInfo& includedFileInfo);
@@ -92,13 +95,14 @@ private:
TokenComponentAccess::AccessType convertAccessType(ParserClient::AccessType access) const;
void addAccess(Id nodeId, ParserClient::AccessType access);
void addAccess(Id nodeId, TokenComponentAccess::AccessType access);
Id ParserClientImpl::addNodeHierarchy(Node::NodeType nodeType, NameHierarchy nameHierarchy, bool defined);
Id addNodeHierarchy(Node::NodeType nodeType, NameHierarchy nameHierarchy, DefinitionType definitionType);
Id addFile(const std::string& name, const std::string& filePath, const std::string& modificationTime);
Id addFile(const std::string& filePath);
Id addNode(Node::NodeType nodeType, NameHierarchy nameHierarchy, bool defined);
Id addNode(Node::NodeType nodeType, NameHierarchy nameHierarchy, DefinitionType definitionType);
Id addEdge(int type, Id sourceId, Id targetId);
void addSourceLocation(Id elementId, const ParseLocation& location, bool isScope);
Id addLocalSymbol(const std::string& name);
void addSourceLocation(Id elementId, const ParseLocation& location, int type);
void addComponentAccess(Id nodeId , int type);
void addCommentLocation(const ParseLocation& location);
void addError(const std::string& message, bool fatal, const ParseLocation& location);
+238 -164
View File
@@ -1,208 +1,282 @@
#include "data/search/SearchIndex.h"
#include <algorithm>
#include <cctype>
#include <ctype.h>
#include "utility/logging/logging.h"
#include "data/search/SearchMatch.h"
std::vector<SearchMatch> SearchIndex::getMatches(
const SearchResults& searchResults,
const std::string& query
){
std::vector<SearchMatch> result;
for (SearchResultsIterator it = searchResults.begin(); it != searchResults.end(); it++)
{
SearchMatch match = it->node->fuzzyMatchData(query, it->parent->getParent());
result.push_back(match);
}
return result;
}
#include "utility/utility.h"
SearchIndex::SearchIndex()
: m_root(nullptr, DELIMITER, 0)
{
clear();
}
SearchIndex::~SearchIndex()
{
}
void SearchIndex::clear()
void SearchIndex::addNode(Id id, const NameHierarchy& nameHierarchy)
{
m_root.m_nodes.clear();
m_dictionary.clear();
m_tokenIds.clear();
}
Node* currentNode = m_root;
size_t SearchIndex::getNodeCount() const
{
return m_root.getNodeCount() - 1;
}
// we don't use the signature here, so elements with the same signature share the same node in the search index.
std::string remaining = nameHierarchy.getQualifiedName();
size_t SearchIndex::getCharCount() const
{
return m_dictionary.getCharCount();
}
size_t SearchIndex::getWordCount() const
{
return m_dictionary.getWordCount();
}
Id SearchIndex::getWordId(const std::string& word)
{
return m_dictionary.getWordId(word);
}
const std::string& SearchIndex::getWord(Id wordId) const
{
return m_dictionary.getWord(wordId);
}
SearchNode* SearchIndex::addNode(NameHierarchy nameHierarchy)
{
std::deque<Id> nameIds;
for (size_t i = 0; i < nameHierarchy.size(); i++)
while (remaining.size() > 0)
{
nameIds.push_back(m_dictionary.getWordId(nameHierarchy[i]->getName()));
}
if (nameIds.size())
{
return m_root.addNodeRecursive(&nameIds, m_dictionary).get();
}
return nullptr;
}
SearchNode* SearchIndex::getNode(const NameHierarchy& nameHierarchy) const
{
std::deque<Id> nameIds = m_dictionary.getWordIdsConst(nameHierarchy);
if (nameIds.size())
{
return m_root.getNodeRecursive(&nameIds).get();
}
return nullptr;
}
SearchNode* SearchIndex::getNode(const std::string& fullName) const
{
std::deque<Id> nameIds = m_dictionary.getWordIdsConst(fullName, DELIMITER);
if (nameIds.size())
{
return m_root.getNodeRecursive(&nameIds).get();
}
return nullptr;
}
SearchNode* SearchIndex::getNode(const SearchNode* searchNode) const
{
if(searchNode == nullptr)
{
return nullptr;
}
std::deque<Id> nameIds = searchNode->getNameIdsRecursive();
if (nameIds.size())
{
return m_root.getNodeRecursive(&nameIds).get();
}
return nullptr;
}
void SearchIndex::removeNode(SearchNode* searchNode)
{
if(searchNode == nullptr)
{
return;
}
SearchNode* parent = searchNode->getParent();
if (!parent)
{
LOG_ERROR_STREAM(<< "SearchNode to be removed has no parent: " << searchNode->getFullName());
return;
}
parent->removeSearchNode(searchNode);
}
bool SearchIndex::removeNodeIfUnreferencedRecursive(SearchNode* searchNode)
{
if(searchNode == nullptr)
{
return false;
}
if (!searchNode->hasTokenIdsRecursive())
{
SearchNode* parent = searchNode->getParent();
removeNode(searchNode);
if (parent && parent != &m_root)
bool matchingEdgeFound = false;
// has edge starting with c?
for (size_t i = 0; i < currentNode->edges.size(); i++)
{
removeNodeIfUnreferencedRecursive(parent);
Edge* currentEdge = currentNode->edges[i];
const std::string& edgeString = currentEdge->s;
size_t matchCount = 0;
for (size_t j = 0; j < edgeString.size() && j < remaining.size(); j++)
{
if (edgeString[j] != remaining[j])
{
break;
}
matchCount++;
}
if (matchCount != 0)
{
remaining = remaining.substr(matchCount);
if (matchCount < edgeString.size())
{
// split current edge
std::shared_ptr<Node> n = std::make_shared<Node>();
m_nodes.push_back(n);
std::shared_ptr<Edge> e = std::make_shared<Edge>();
m_edges.push_back(e);
n->edges.push_back(e.get());
e->s = edgeString.substr(matchCount);
e->target = currentEdge->target;
currentEdge->s = edgeString.substr(0, matchCount);
currentEdge->target = n.get();
}
currentNode = currentEdge->target;
matchingEdgeFound = true;
break;
}
}
return true;
if (!matchingEdgeFound)
{
std::shared_ptr<Node> n = std::make_shared<Node>();
m_nodes.push_back(n);
std::shared_ptr<Edge> e = std::make_shared<Edge>();
m_edges.push_back(e);
e->s = remaining;
e->target = n.get();
currentNode->edges.push_back(e.get());
currentNode = n.get();
remaining = "";
}
}
return false;
currentNode->elementIds.insert(id);
}
void SearchIndex::addTokenId(SearchNode* node, Id tokenId)
void SearchIndex::finishSetup()
{
if(node == nullptr)
for (size_t i = 0; i < m_root->edges.size(); i++)
{
LOG_ERROR("Node points to nullptr: Can't add tokenid");
return;
populateEdgeGate(m_root->edges[i]);
}
node->addTokenId(tokenId);
m_tokenIds.emplace(tokenId, node);
}
NameHierarchy SearchIndex::getNameHierarchyForTokenId(Id tokenId) const
void SearchIndex::clear()
{
std::map<Id, SearchNode*>::const_iterator it = m_tokenIds.find(tokenId);
m_nodes.clear();
m_edges.clear();
if (it != m_tokenIds.end())
std::shared_ptr<Node> n = std::make_shared<Node>();
m_nodes.push_back(n);
m_root = n.get();
}
std::vector<SearchResult> SearchIndex::search(const std::string& query, size_t maxResultCount) const
{
std::string lowerCaseQuery = "";
for (size_t i = 0; i < query.size(); i++)
{
SearchNode* node = it->second;
return node->getNameHierarchy();
lowerCaseQuery += tolower(query[i]);
}
return NameHierarchy();
Path startPath;
startPath.node = m_root;
std::vector<Path> paths = search(startPath, lowerCaseQuery);
// scoring paths
std::vector<std::pair<int, Path>> scoredPaths;
for (size_t i = 0; i < paths.size(); i++)
{
const std::vector<size_t>& currentIndices = paths[i].indices;
const int unmatchedLetterBonus = -1;
const int consecutiveLetterBonus = 5;
const int camelCaseBonus = 10;
const int delayedStartBonus = -3;
const int minDelayedStartBonus = -9;
int unmatchedLetterScore = 0;
int consecutiveLetterScore = 0;
for (size_t j = 1; j < currentIndices.size(); j++)
{
unmatchedLetterScore += (currentIndices[j] - currentIndices[j-1] - 1) * unmatchedLetterBonus;
consecutiveLetterScore += (currentIndices[j] - currentIndices[j-1] == 1 ? consecutiveLetterBonus : 0);
}
int camelCaseScore = 0;
for (size_t j = 0; j < currentIndices.size(); j++)
{
size_t index = currentIndices[j];
if (index == 0 || islower(paths[i].text[index-1]))
{
camelCaseScore += (isupper(paths[i].text[index]) ? camelCaseBonus : 0);
}
}
int leadingStartScore = 0;
leadingStartScore += std::max(int(currentIndices[0]) * delayedStartBonus, minDelayedStartBonus);
int score =
unmatchedLetterScore +
consecutiveLetterScore +
camelCaseScore +
leadingStartScore;
scoredPaths.push_back(std::make_pair(score, paths[i]));
}
// sorting paths
std::sort(scoredPaths.begin(), scoredPaths.end(), [](
std::pair<int, Path> a,
std::pair<int, Path> b)
{
return b.first < a.first;
}
);
// preparing results
std::vector<SearchResult> searchResults;
for (size_t i = 0; i < scoredPaths.size() && (maxResultCount == 0 || searchResults.size() < maxResultCount); i++)
{
std::vector<Path> currentPaths;
currentPaths.push_back(scoredPaths[i].second);
while (currentPaths.size() > 0)
{
std::vector<Path> nextPaths;
for (size_t j = 0; j < currentPaths.size(); j++)
{
Path& currentPath = currentPaths[j];
if (currentPath.node->elementIds.size() > 0 && (maxResultCount == 0 || searchResults.size() < maxResultCount))
{
SearchResult result;
result.elementIds = currentPath.node->elementIds;
result.indices = currentPath.indices;
result.text = currentPath.text;
searchResults.push_back(result);
}
for (size_t k = 0; k < currentPath.node->edges.size(); k++)
{
Path nextPath;
nextPath.indices = currentPath.indices;
nextPath.node = currentPath.node->edges[k]->target;
nextPath.text = currentPath.text + currentPath.node->edges[k]->s;
nextPaths.push_back(nextPath);
}
}
currentPaths = nextPaths;
if (!(maxResultCount == 0 || searchResults.size() < maxResultCount))
{
break;
}
}
}
return searchResults;
}
SearchResults SearchIndex::runFuzzySearch(const std::string& query) const
void SearchIndex::populateEdgeGate(Edge* e)
{
return m_root.runFuzzySearch(query);
Node* target = e->target;
for (size_t i = 0; i < target->edges.size(); i++)
{
Edge* targetEdge = target->edges[i];
populateEdgeGate(targetEdge);
utility::append(e->gate, targetEdge->gate);
}
for (size_t i = 0; i < e->s.size(); i++)
{
e->gate.insert(tolower(e->s[i]));
}
}
SearchResults SearchIndex::runFuzzySearchCached(const std::string& query, const SearchResults& searchResults) const
std::vector<SearchIndex::Path> SearchIndex::search(const Path& path, const std::string& remainingQuery) const
{
return m_root.runFuzzySearchCached(query, searchResults);
}
std::vector<Path> results;
std::vector<SearchMatch> SearchIndex::runFuzzySearchAndGetMatches(const std::string& query) const
{
return getMatches(runFuzzySearch(query), query);
}
if (remainingQuery.size() == 0)
{
results.push_back(path);
}
else
{
for (size_t i = 0; i < path.node->edges.size(); i++)
{
const Edge* currentEdge = path.node->edges[i];
const std::string SearchIndex::DELIMITER = "::";
// test if s passes the edge's gate.
bool passesGate = true;
for (size_t j = 0; j < remainingQuery.size(); j++)
{
if (currentEdge->gate.find(tolower(remainingQuery[j])) == currentEdge->gate.end())
{
passesGate = false;
break;
}
}
std::ostream& operator<<(std::ostream& ostream, const SearchIndex& index)
{
ostream << "SearchIndex:\n";
ostream << &index.m_root;
return ostream;
if (passesGate)
{
// consume characters for edge
const std::string& edgeString = currentEdge->s;
std::vector<size_t> currentFoundIds = path.indices;
std::string currentRemainingQuery = remainingQuery;
for (size_t j = 0; j < edgeString.size() && currentRemainingQuery.size() > 0; j++)
{
if (currentRemainingQuery[0] == tolower(edgeString[j]))
{
currentFoundIds.push_back(path.text.size() + j);
currentRemainingQuery = currentRemainingQuery.substr(1);
}
}
Path currentPath;
currentPath.node = currentEdge->target;
currentPath.indices = currentFoundIds;
currentPath.text = path.text + edgeString;
utility::append(results, search(currentPath, currentRemainingQuery));
}
}
}
return results;
}
+44 -37
View File
@@ -1,59 +1,66 @@
#ifndef SEARCH_INDEX_H
#define SEARCH_INDEX_H
#include <ostream>
#include <set>
#include <map>
#include <memory>
#include <vector>
#include "utility/text/Dictionary.h"
#include "utility/types.h"
#include <set>
#include <string>
#include <unordered_set>
#include "data/name/NameHierarchy.h"
#include "data/search/SearchNode.h"
#include "utility/types.h"
struct SearchResult
{
std::string text;
std::set<Id> elementIds;
std::vector<size_t> indices;
};
class SearchIndex
{
public:
static std::vector<SearchMatch> getMatches(const SearchResults& searchResults, const std::string& query);
SearchIndex();
virtual ~SearchIndex();
void addNode(Id id, const NameHierarchy& nameHierarchy);
void finishSetup();
void clear();
size_t getNodeCount() const;
size_t getCharCount() const;
size_t getWordCount() const;
Id getWordId(const std::string& word);
const std::string& getWord(Id wordId) const;
SearchNode* addNode(NameHierarchy nameHierarchy);
SearchNode* getNode(const NameHierarchy& nameHierarchy) const;
SearchNode* getNode(const std::string& fullName) const;
SearchNode* getNode(const SearchNode* searchNode) const;
void removeNode(SearchNode* searchNode);
bool removeNodeIfUnreferencedRecursive(SearchNode* searchNode);
void addTokenId(SearchNode* node, Id tokenId);
NameHierarchy getNameHierarchyForTokenId(Id tokenId) const;
SearchResults runFuzzySearch(const std::string& query) const;
SearchResults runFuzzySearchCached(const std::string& query, const SearchResults& searchResults) const;
std::vector<SearchMatch> runFuzzySearchAndGetMatches(const std::string& query) const;
static const std::string DELIMITER;
// maxResultCount == 0 means "no restriction".
std::vector<SearchResult> search(const std::string& query, size_t maxResultCount) const;
private:
SearchNode m_root;
Dictionary m_dictionary;
struct Node;
struct Edge;
std::map<Id, SearchNode*> m_tokenIds;
struct Node
{
std::set<Id> elementIds;
std::vector<Edge*> edges;
};
friend std::ostream& operator<<(std::ostream& ostream, const SearchIndex& index);
struct Edge
{
Node* target;
std::string s;
std::unordered_set<char> gate;
};
struct Path
{
std::string text;
std::vector<size_t> indices;
Node* node;
};
void populateEdgeGate(Edge* e);
std::vector<Path> search(const Path& path, const std::string& remainingQuery) const;
std::vector<std::shared_ptr<Node>> m_nodes;
std::vector<std::shared_ptr<Edge>> m_edges;
Node* m_root;
};
std::ostream& operator<<(std::ostream& ostream, const SearchIndex& index);
#endif // SEARCH_INDEX_H
+4 -4
View File
@@ -48,7 +48,7 @@ std::string SearchMatch::searchMatchesToString(const std::vector<SearchMatch>& m
SearchMatch SearchMatch::createCommand(CommandType type)
{
SearchMatch match;
match.nameHierarchy = NameHierarchy(getCommandName(type));
match.text = getCommandName(type);
match.typeName = "command";
match.searchType = SEARCH_COMMAND;
return match;
@@ -74,7 +74,7 @@ SearchMatch::SearchMatch()
}
SearchMatch::SearchMatch(const std::string& query)
: nameHierarchy(query)
: text(query)
, typeName("")
, searchType(SEARCH_NONE)
{
@@ -87,7 +87,7 @@ bool SearchMatch::isValid() const
void SearchMatch::print(std::ostream& ostream) const
{
ostream << weight << '\t' << nameHierarchy.getQualifiedName() << std::endl << '\t';
ostream << text << 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.getQualifiedName();
return text;
}
std::string SearchMatch::getNodeTypeAsString() const
+3 -6
View File
@@ -44,16 +44,13 @@ struct SearchMatch
std::string getNodeTypeAsString() const;
std::string getSearchTypeName() const;
NameHierarchy nameHierarchy;
std::string text;
std::string typeName;
Node::NodeType nodeType;
SearchType searchType;
std::set<Id> tokenIds;
std::vector<size_t> indices;
size_t weight;
std::vector<NameHierarchy> nameHierarchies;
};
-458
View File
@@ -1,458 +0,0 @@
#include "data/search/SearchNode.h"
#include <algorithm>
#include "utility/text/Dictionary.h"
#include "data/name/NameHierarchy.h"
#include "data/search/SearchIndex.h"
#include "data/search/SearchMatch.h"
#include "data/search/SearchResult.h"
SearchNode::SearchNode(SearchNode* parent, const std::string& name, Id nameId)
: m_parent(parent)
, m_name(name)
, m_nameId(nameId)
{
}
SearchNode::~SearchNode()
{
}
size_t SearchNode::getNodeCount() const
{
size_t count = 1;
for (std::shared_ptr<SearchNode> n: m_nodes)
{
count += n->getNodeCount();
}
return count;
}
const std::string& SearchNode::getName() const
{
return m_name;
}
NameHierarchy SearchNode::getNameHierarchy() const
{
NameHierarchy nameHierarchy;
const SearchNode* parent = getParent();
if (parent && parent->m_nameId)
{
nameHierarchy = parent->getNameHierarchy();
}
nameHierarchy.push(std::make_shared<NameElement>(getName()));
return nameHierarchy;
}
std::string SearchNode::getFullName() const
{
if (m_parent && m_parent->m_nameId)
{
return m_parent->getFullName() + SearchIndex::DELIMITER + getName();
}
else
{
return getName();
}
}
Id SearchNode::getNameId() const
{
return m_nameId;
}
std::deque<Id> SearchNode::getNameIdsRecursive() const
{
std::deque<Id> ids;
ids.push_front(m_nameId);
SearchNode* parent = m_parent;
while (parent && parent->m_nameId)
{
ids.push_front(parent->getNameId());
parent = parent->getParent();
}
return ids;
}
Id SearchNode::getFirstTokenId() const
{
if (m_tokenIds.size())
{
return *m_tokenIds.begin();
}
return 0;
}
const std::set<Id>& SearchNode::getTokenIds() const
{
return m_tokenIds;
}
bool SearchNode::hasTokenIdsRecursive() const
{
if (m_tokenIds.size())
{
return true;
}
for (std::shared_ptr<SearchNode> n: m_nodes)
{
if (n->hasTokenIdsRecursive())
{
return true;
}
}
return false;
}
void SearchNode::addTokenId(Id tokenId)
{
m_tokenIds.insert(tokenId);
}
void SearchNode::removeTokenId(Id tokenId)
{
m_tokenIds.erase(tokenId);
}
SearchNode* SearchNode::getParent() const
{
if (m_parent)
{
return m_parent;
}
return nullptr;
}
std::deque<SearchNode*> SearchNode::getParentsWithoutTokenId()
{
std::deque<SearchNode*> nodes;
SearchNode* node = this;
while (node->m_nameId && !node->m_tokenIds.size())
{
nodes.push_front(node);
node = node->m_parent;
}
return nodes;
}
const std::set<std::shared_ptr<SearchNode>>& SearchNode::getChildren() const
{
return m_nodes;
}
SearchResults SearchNode::runFuzzySearch(const std::string& query) const
{
SearchResults result;
for (std::shared_ptr<SearchNode> n: m_nodes)
{
FuzzyMap m = n->fuzzyMatchRecursive(query, 0, 0, 0);
for (const std::pair<size_t, const SearchNode*>& p : m)
{
addResultsRecursive(&result, p.first, p.second, n.get());
}
}
return result;
}
SearchResults SearchNode::runFuzzySearchCached(const std::string& query, const SearchResults& searchResults) const
{
SearchResults result;
std::set<const SearchNode*> nodes;
for (const SearchResult& r : searchResults)
{
nodes.insert(r.parent);
}
for (const SearchNode* n : nodes)
{
FuzzyMap m = n->fuzzyMatchRecursive(query, 0, 0, 0);
for (const std::pair<size_t, const SearchNode*>& p : m)
{
addResultsRecursive(&result, p.first, p.second, n);
}
}
return result;
}
SearchResults SearchNode::runFuzzySearchOnSelf(const std::string& query) const
{
SearchResults result;
FuzzyMap m = fuzzyMatchRecursive(query, 0, 0, 0);
for (const std::pair<size_t, const SearchNode*>& p : m)
{
addResultsRecursive(&result, p.first, p.second, this);
}
return result;
}
void SearchNode::addResultsRecursive(
SearchResults* results, size_t weight, const SearchNode* node, const SearchNode* parent
) const {
results->insert(SearchResult(weight, node, parent));
for (std::shared_ptr<SearchNode> n: node->m_nodes)
{
addResultsRecursive(results, weight, n.get(), parent);
}
}
std::shared_ptr<SearchNode> SearchNode::addNodeRecursive(
std::deque<Id>* nameIds, const Dictionary& dictionary
){
Id nameId = nameIds->front();
nameIds->pop_front();
std::shared_ptr<SearchNode> node = getChildWithNameId(nameId);
if (!node)
{
node = std::make_shared<SearchNode>(this, dictionary.getWord(nameId), nameId);
m_nodes.insert(node);
}
if (nameIds->size() > 0)
{
return node->addNodeRecursive(nameIds, dictionary);
}
return node;
}
std::shared_ptr<SearchNode> SearchNode::getNodeRecursive(std::deque<Id>* nameIds) const
{
Id nameId = nameIds->front();
nameIds->pop_front();
std::shared_ptr<SearchNode> node = getChildWithNameId(nameId);
if (node)
{
if (!nameIds->size())
{
return node;
}
return node->getNodeRecursive(nameIds);
}
return nullptr;
}
void SearchNode::removeSearchNode(SearchNode* node)
{
for (std::set<std::shared_ptr<SearchNode>>::iterator it = m_nodes.begin(); it != m_nodes.end(); it++)
{
if ((*it)->m_nameId == node->m_nameId)
{
m_nodes.erase(it);
return;
}
}
}
SearchMatch SearchNode::fuzzyMatchData(const std::string& query, const SearchNode* parent) const
{
SearchMatch data;
data.nameHierarchy = getNameHierarchy();
data.tokenIds = m_tokenIds;
data.weight = 0;
size_t pos = 0;
size_t size = 0;
const SearchNode* root = parent;
std::deque<const SearchNode*> nodes = getNodesToParent(parent);
if (!nodes.size())
{
nodes.push_back(this);
root = root->getParent();
}
while (root && root->getNameId())
{
size += root->getName().size() + SearchIndex::DELIMITER.size();
root = root->getParent();
}
for (const SearchNode* node : nodes)
{
std::pair<size_t, size_t> p = node->fuzzyMatch(query, pos, size, &data.indices);
pos = p.first;
data.weight += p.second;
size += node->m_name.size() + SearchIndex::DELIMITER.size();
}
return data;
}
SearchNode::FuzzyMap SearchNode::fuzzyMatchRecursive(
const std::string& query, size_t pos, size_t weight, size_t size) const
{
FuzzyMap result;
std::pair<size_t, size_t> p = fuzzyMatch(query, pos, size);
pos = p.first;
weight += p.second;
if (pos == query.size())
{
result.emplace(weight, this);
return result;
}
for (std::shared_ptr<SearchNode> n: m_nodes)
{
FuzzyMap m = n->fuzzyMatchRecursive(query, pos, weight, size + m_name.size() + SearchIndex::DELIMITER.size());
result.insert(m.begin(), m.end());
}
return result;
}
std::pair<size_t, size_t> SearchNode::fuzzyMatch(
const std::string query, size_t start, size_t size, std::vector<size_t>* indices) const
{
size_t pos = start;
size_t weight = 0;
size_t matchCount = 0;
size_t ql = query.size();
if (!query.size())
{
return std::pair<size_t, size_t>(pos, weight);
}
if (query[pos] == ':')
{
pos++;
if (indices && size >= 2)
{
indices->push_back(size - 2);
}
if (pos < ql && query[pos] == ':')
{
pos++;
if (indices && size >= 1)
{
indices->push_back(size - 1);
}
}
}
char last = '\0';
size_t nl = m_name.size();
for (size_t i = 0; i < nl; i++)
{
char c = m_name[i];
char next = (i + 1 == nl ? '\0' : m_name[i + 1]);
if (tolower(query[pos]) == tolower(c))
{
weight += std::max<size_t>(100 / sqrt(size + i + 1), 1);
if (matchCount)
{
weight += matchCount * matchCount * 10;
}
if (i == 0)
{
weight += 20;
}
if (last == '_' || next == '_' || next == '\0')
{
weight += 20;
}
else if ((tolower(c) != c && tolower(next) == next) || (tolower(c) == c && tolower(next) != next))
{
weight += 20;
}
matchCount++;
pos++;
if (indices)
{
indices->push_back(size + i);
}
if (pos == ql || query[pos] == ':')
{
break;
}
}
else
{
matchCount = 0;
}
last = c;
}
return std::pair<size_t, size_t>(pos, weight);
}
std::shared_ptr<SearchNode> SearchNode::getChildWithNameId(Id nameId) const
{
for (std::shared_ptr<SearchNode> n: m_nodes)
{
if (n->m_nameId == nameId)
{
return n;
}
}
return nullptr;
}
std::deque<const SearchNode*> SearchNode::getNodesToParent(const SearchNode* parent) const
{
std::deque<const SearchNode*> nodes;
const SearchNode* node = this;
while (node->m_nameId && node != parent)
{
nodes.push_front(node);
node = node->m_parent;
}
return nodes;
}
std::ostream& operator<<(std::ostream& ostream, const SearchNode* node)
{
ostream << node->m_name;
for (Id tokenId : node->m_tokenIds)
{
ostream << ' ' << tokenId;
}
ostream << '\n';
for (const std::shared_ptr<SearchNode> n : node->m_nodes)
{
ostream << n.get();
}
return ostream;
}
-87
View File
@@ -1,87 +0,0 @@
#ifndef SEARCH_NODE_H
#define SEARCH_NODE_H
#include <deque>
#include <map>
#include <memory>
#include <set>
#include <string>
#include <vector>
#include "utility/types.h"
#include "data/search/SearchResult.h"
class Dictionary;
class NameHierarchy;
class SearchIndex;
struct SearchMatch;
class SearchNode
{
public:
SearchNode(SearchNode* parent, const std::string& name, Id nameId);
~SearchNode();
size_t getNodeCount() const;
const std::string& getName() const;
NameHierarchy getNameHierarchy() const;
std::string getFullName() const;
Id getNameId() const;
std::deque<Id> getNameIdsRecursive() const;
Id getFirstTokenId() const;
const std::set<Id>& getTokenIds() const;
bool hasTokenIdsRecursive() const;
void addTokenId(Id tokenId);
void removeTokenId(Id tokenId);
SearchNode* getParent() const;
std::deque<SearchNode*> getParentsWithoutTokenId();
const std::set<std::shared_ptr<SearchNode>>& getChildren() const;
SearchResults runFuzzySearch(const std::string& query) const;
SearchResults runFuzzySearchCached(const std::string& query, const SearchResults& searchResults) const;
SearchResults runFuzzySearchOnSelf(const std::string& query) const;
void addResultsRecursive(SearchResults* results, size_t weight, const SearchNode* node, const SearchNode* parent) const;
private:
typedef std::multimap<size_t, const SearchNode*> FuzzyMap;
typedef FuzzyMap::const_iterator FuzzyMapIterator;
// Accessed by SearchIndex
std::shared_ptr<SearchNode> addNodeRecursive(std::deque<Id>* nameIds, const Dictionary& dictionary);
std::shared_ptr<SearchNode> getNodeRecursive(std::deque<Id>* nameIds) const;
void removeSearchNode(SearchNode* node);
SearchMatch fuzzyMatchData(const std::string& query, const SearchNode* parent) const;
friend class SearchIndex;
FuzzyMap fuzzyMatchRecursive(const std::string& query, size_t pos, size_t weight, size_t size) const;
std::pair<size_t, size_t> fuzzyMatch(
const std::string query, size_t start, size_t size, std::vector<size_t>* indices = nullptr) const;
std::shared_ptr<SearchNode> getChildWithNameId(Id nameId) const;
std::deque<const SearchNode*> getNodesToParent(const SearchNode* parent) const;
std::set<std::shared_ptr<SearchNode>> m_nodes;
SearchNode* m_parent;
std::set<Id> m_tokenIds;
const std::string& m_name;
const Id m_nameId;
friend std::ostream& operator<<(std::ostream& ostream, const SearchNode* node);
};
std::ostream& operator<<(std::ostream& ostream, const SearchNode* node);
#endif // SEARCH_NODE_H
-34
View File
@@ -1,34 +0,0 @@
#include "data/search/SearchResult.h"
#include "utility/utilityString.h"
#include "data/search/SearchNode.h"
SearchResult::SearchResult()
{
}
SearchResult::SearchResult(size_t weight, const SearchNode* node, const SearchNode* parent)
: weight(weight)
, node(node)
, parent(parent)
{
}
bool SearchResult::operator()(const SearchResult& lhs, const SearchResult& rhs) const
{
if (lhs.weight != rhs.weight)
{
return lhs.weight > rhs.weight;
}
std::string lhsLow = utility::toLowerCase(lhs.node->getFullName());
std::string rhsLow = utility::toLowerCase(rhs.node->getFullName());
if (lhsLow != rhsLow)
{
return lhsLow < rhsLow;
}
return lhs.node->getFirstTokenId() < rhs.node->getFirstTokenId();
}
-24
View File
@@ -1,24 +0,0 @@
#ifndef SEARCH_RESULT_H
#define SEARCH_RESULT_H
#include <set>
#include <stddef.h>
class SearchNode;
struct SearchResult
{
SearchResult();
SearchResult(size_t weight, const SearchNode* node, const SearchNode* parent);
bool operator()(const SearchResult& lhs, const SearchResult& rhs) const;
size_t weight;
const SearchNode* node;
const SearchNode* parent;
};
typedef std::set<SearchResult, SearchResult> SearchResults;
typedef SearchResults::const_iterator SearchResultsIterator;
#endif // SEARCH_RESULT_H

Some files were not shown because too many files have changed in this diff Show More