logic: Refreshing reloads the source code and resets the Token ids to start from 1

This commit is contained in:
Eberhard Graether
2014-07-26 15:31:55 +02:00
parent 68c6ede244
commit 4bf459fa99
7 changed files with 42 additions and 10 deletions
+1 -1
View File
@@ -13,7 +13,7 @@ y fooy();
z fooz(); z fooz();
*/ */
const bool *ab(int a, int b); const bool *ab(int abc, int bca);
bool const *abc(int a, int b); bool const *abc(int a, int b);
+15 -4
View File
@@ -45,8 +45,7 @@ void Application::loadProject(const std::string& projectSettingsFilePath)
m_project->loadProjectSettings(projectSettingsFilePath); m_project->loadProjectSettings(projectSettingsFilePath);
m_project->parseCode(); m_project->parseCode();
MessageActivateToken message(1); MessageActivateToken(1).dispatch();
message.dispatch();
} }
void Application::loadSource(const std::string& sourceDirectoryPath) void Application::loadSource(const std::string& sourceDirectoryPath)
@@ -57,8 +56,15 @@ void Application::loadSource(const std::string& sourceDirectoryPath)
m_project->setSourceDirectoryPath(sourceDirectoryPath); m_project->setSourceDirectoryPath(sourceDirectoryPath);
m_project->parseCode(); m_project->parseCode();
MessageActivateToken message(1); MessageActivateToken(1).dispatch();
message.dispatch(); }
void Application::reloadProject()
{
m_project->clearStorage();
m_project->parseCode();
MessageActivateToken(1).dispatch();
} }
void Application::handleMessage(MessageLoadProject* message) void Application::handleMessage(MessageLoadProject* message)
@@ -70,3 +76,8 @@ void Application::handleMessage(MessageLoadSource* message)
{ {
loadSource(message->sourceDirectoryPath); loadSource(message->sourceDirectoryPath);
} }
void Application::handleMessage(MessageRefresh* message)
{
reloadProject();
}
+4
View File
@@ -8,6 +8,7 @@
#include "utility/messaging/MessageListener.h" #include "utility/messaging/MessageListener.h"
#include "utility/messaging/type/MessageLoadProject.h" #include "utility/messaging/type/MessageLoadProject.h"
#include "utility/messaging/type/MessageLoadSource.h" #include "utility/messaging/type/MessageLoadSource.h"
#include "utility/messaging/type/MessageRefresh.h"
class ViewFactory; class ViewFactory;
class MainView; class MainView;
@@ -17,6 +18,7 @@ class LocationAccessProxy;
class Application class Application
: public MessageListener<MessageLoadProject> : public MessageListener<MessageLoadProject>
, public MessageListener<MessageLoadSource> , public MessageListener<MessageLoadSource>
, public MessageListener<MessageRefresh>
{ {
public: public:
static std::shared_ptr<Application> create(ViewFactory* viewFactory); static std::shared_ptr<Application> create(ViewFactory* viewFactory);
@@ -25,12 +27,14 @@ public:
void loadProject(const std::string& projectSettingsFilePath); void loadProject(const std::string& projectSettingsFilePath);
void loadSource(const std::string& sourceDirectoryPath); void loadSource(const std::string& sourceDirectoryPath);
void reloadProject();
private: private:
Application(); Application();
virtual void handleMessage(MessageLoadProject* message); virtual void handleMessage(MessageLoadProject* message);
virtual void handleMessage(MessageLoadSource* message); virtual void handleMessage(MessageLoadSource* message);
virtual void handleMessage(MessageRefresh* message);
std::shared_ptr<Project> m_project; std::shared_ptr<Project> m_project;
std::shared_ptr<GraphAccessProxy> m_graphAccessProxy; std::shared_ptr<GraphAccessProxy> m_graphAccessProxy;
+14 -5
View File
@@ -5,6 +5,7 @@
#include "data/access/GraphAccessProxy.h" #include "data/access/GraphAccessProxy.h"
#include "data/access/LocationAccessProxy.h" #include "data/access/LocationAccessProxy.h"
#include "data/graph/Token.h"
#include "data/parser/cxx/CxxParser.h" #include "data/parser/cxx/CxxParser.h"
#include "utility/FileSystem.h" #include "utility/FileSystem.h"
#include "utility/logging/logging.h" #include "utility/logging/logging.h"
@@ -13,11 +14,7 @@
std::shared_ptr<Project> Project::create(GraphAccessProxy* graphAccessProxy, LocationAccessProxy* locationAccessProxy) std::shared_ptr<Project> Project::create(GraphAccessProxy* graphAccessProxy, LocationAccessProxy* locationAccessProxy)
{ {
std::shared_ptr<Project> ptr(new Project(graphAccessProxy, locationAccessProxy)); std::shared_ptr<Project> ptr(new Project(graphAccessProxy, locationAccessProxy));
ptr->m_storage = std::make_shared<Storage>(); ptr->clearStorage();
graphAccessProxy->setSubject(ptr->m_storage.get());
locationAccessProxy->setSubject(ptr->m_storage.get());
return ptr; return ptr;
} }
@@ -40,13 +37,25 @@ bool Project::setSourceDirectoryPath(const std::string& sourceDirectoryPath)
return ProjectSettings::getInstance()->setSourcePath(sourceDirectoryPath); return ProjectSettings::getInstance()->setSourcePath(sourceDirectoryPath);
} }
void Project::clearStorage()
{
m_storage = std::make_shared<Storage>();
m_graphAccessProxy->setSubject(m_storage.get());
m_locationAccessProxy->setSubject(m_storage.get());
Token::resetNextId();
}
void Project::parseCode() void Project::parseCode()
{ {
if (ProjectSettings::getInstance()->getSourcePath() != "") if (ProjectSettings::getInstance()->getSourcePath() != "")
{ {
std::vector<std::string> extensions; std::vector<std::string> extensions;
extensions.push_back(".cpp"); extensions.push_back(".cpp");
extensions.push_back(".cc");
extensions.push_back(".h"); extensions.push_back(".h");
extensions.push_back(".hpp");
CxxParser parser(m_storage); CxxParser parser(m_storage);
parser.parseFiles( parser.parseFiles(
+1
View File
@@ -21,6 +21,7 @@ public:
bool setSourceDirectoryPath(const std::string& sourceDirectoryPath); bool setSourceDirectoryPath(const std::string& sourceDirectoryPath);
void clearStorage();
void parseCode(); void parseCode();
private: private:
+5
View File
@@ -3,6 +3,11 @@
#include "data/location/TokenLocation.h" #include "data/location/TokenLocation.h"
#include "utility/logging/logging.h" #include "utility/logging/logging.h"
void Token::resetNextId()
{
s_nextId = 1;
}
Token::Token() Token::Token()
: m_id(s_nextId++) : m_id(s_nextId++)
{ {
+2
View File
@@ -10,6 +10,8 @@
class Token class Token
{ {
public: public:
static void resetNextId();
Token(); Token();
virtual ~Token(); virtual ~Token();