Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b9c4bd05cd | ||
|
|
a448485b35 | ||
|
|
9307d6d855 | ||
|
|
e8e6b909a8 | ||
|
|
78287dd694 | ||
|
|
ae6cd6e02c | ||
|
|
7a0cd0c8d7 | ||
|
|
7bc2f2b548 | ||
|
|
73e77a1baa | ||
|
|
5e6714d95a | ||
|
|
93f21283f6 | ||
|
|
2ffec90c19 | ||
|
|
f3dc12b0ed | ||
|
|
ffc00829f0 | ||
|
|
e5bf177241 | ||
|
|
31f366ab8f | ||
|
|
2be3b541a6 | ||
|
|
03901e8173 | ||
|
|
fe74dfb7cc | ||
|
|
b75dd2abe1 | ||
|
|
cec370cfff | ||
|
|
a662424e2b | ||
|
|
ac506622b4 | ||
|
|
880a199540 | ||
|
|
82db193c78 | ||
|
|
bac394381c | ||
|
|
fee1d97604 | ||
|
|
d1a4bc7b08 | ||
|
|
6743336f03 | ||
|
|
eab703cb0d | ||
|
|
f6de07ecf1 | ||
|
|
a78e7b85d1 | ||
|
|
2d0700cd06 | ||
|
|
d18b6fb873 | ||
|
|
3140b6dbb8 | ||
|
|
2008d1401a | ||
|
|
23f05c003b | ||
|
|
09e3ff6897 | ||
|
|
0db6f5fb36 | ||
|
|
c398302e4d | ||
|
|
ba523111af | ||
|
|
0cc777a892 | ||
|
|
1032b83a09 | ||
|
|
52aeae2f6d | ||
|
|
0dbdf9081e | ||
|
|
cefaeae1ab | ||
|
|
f82da323b3 | ||
|
|
53d5fe6a06 | ||
|
|
bcb43eccd0 | ||
|
|
813cde4d26 | ||
|
|
f6e2821430 | ||
|
|
47bf9bb7fa | ||
|
|
8c9b9355d5 | ||
|
|
a8aaf6950f | ||
|
|
f85d5a6024 |
@@ -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
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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](); // <- start here\n\n
|
||||
[main\tint\r()](); // <- start here\n\n
|
||||
</description>
|
||||
</info>
|
||||
<source>
|
||||
|
||||
@@ -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
@@ -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")
|
||||
|
||||
@@ -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.
+3
-1
@@ -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
|
||||
BIN
Binary file not shown.
+6
-1
@@ -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 |
+3
-1
@@ -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" />
|
||||
Binary file not shown.
+16
-14
@@ -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
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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 ]
|
||||
|
||||
@@ -127,6 +127,10 @@ private:
|
||||
|
||||
license.loadPublicKeyFromString(PublicKey);
|
||||
valid = license.isValid();
|
||||
if (license.isExpired())
|
||||
{
|
||||
valid = false;
|
||||
}
|
||||
|
||||
}
|
||||
while (false);
|
||||
|
||||
@@ -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
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
@@ -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
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
@@ -69,7 +69,7 @@ Id TokenLocation::getTokenId() const
|
||||
return m_tokenId;
|
||||
}
|
||||
|
||||
TokenLocation::LocationType TokenLocation::getType() const
|
||||
LocationType TokenLocation::getType() const
|
||||
{
|
||||
return m_type;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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
Reference in New Issue
Block a user