data: saving errors to Storage

* saving errors in separate sqlite table
* use MessageShowErrors to show the errors in the UI
* show error count permanently in the right side of the status bar with click to show
* fixed clicking of error locations
* fixed expanding of files with errors
This commit is contained in:
Eberhard Graether
2015-11-04 12:00:28 +01:00
parent 78259c7123
commit 9f684ad9f5
30 changed files with 301 additions and 92 deletions
+35 -27
View File
@@ -78,30 +78,6 @@ void CodeController::handleMessage(MessageActivateTokens* message)
}
}
void CodeController::handleMessage(MessageFinishedParsing* message)
{
if (message->errorCount > 0)
{
std::vector<std::string> errorMessages;
TokenLocationCollection errorCollection = m_storageAccess->getErrorTokenLocations(&errorMessages);
std::vector<CodeView::CodeSnippetParams> snippets;
errorCollection.forEachTokenLocationFile(
[&](std::shared_ptr<TokenLocationFile> file) -> void
{
std::vector<CodeView::CodeSnippetParams> fileSnippets = getSnippetsForFile(file);
snippets.insert(snippets.end(), fileSnippets.begin(), fileSnippets.end());
}
);
CodeView* view = getView();
view->setActiveTokenIds(std::vector<Id>());
view->setErrorMessages(errorMessages);
view->showCodeSnippets(snippets);
}
}
void CodeController::handleMessage(MessageFocusIn* message)
{
getView()->focusToken(message->tokenId);
@@ -112,17 +88,49 @@ void CodeController::handleMessage(MessageFocusOut* message)
getView()->defocusToken();
}
void CodeController::handleMessage(MessageShowErrors* message)
{
std::vector<std::string> errorMessages;
TokenLocationCollection errorCollection = m_storageAccess->getErrorTokenLocations(&errorMessages);
std::vector<CodeView::CodeSnippetParams> snippets;
errorCollection.forEachTokenLocationFile(
[&](std::shared_ptr<TokenLocationFile> file) -> void
{
std::vector<CodeView::CodeSnippetParams> fileSnippets = getSnippetsForFile(file);
snippets.insert(snippets.end(), fileSnippets.begin(), fileSnippets.end());
}
);
CodeView* view = getView();
view->setActiveTokenIds(std::vector<Id>());
view->setErrorMessages(errorMessages);
view->showCodeSnippets(snippets);
}
void CodeController::handleMessage(MessageShowFile* message)
{
CodeView::CodeSnippetParams params;
params.startLineNumber = message->startLineNumber;
params.endLineNumber = message->endLineNumber;
params.startLineNumber = 0;
params.endLineNumber = 0;
std::shared_ptr<TextAccess> textAccess = m_storageAccess->getFileContent(message->filePath);
params.code = textAccess->getText();
params.modificationTime = m_storageAccess->getFileModificationTime(message->filePath);
params.locationFile = m_storageAccess->getTokenLocationsForFile(message->filePath.str());
if (message->showErrors)
{
std::vector<std::string> errorMessages;
TokenLocationCollection errorCollection = m_storageAccess->getErrorTokenLocations(&errorMessages);
params.locationFile = std::make_shared<TokenLocationFile>(*errorCollection.findTokenLocationFileByPath(message->filePath));
params.locationFile->isWholeCopy = true;
}
else
{
params.locationFile = m_storageAccess->getTokenLocationsForFile(message->filePath.str());
}
getView()->showCodeFile(params);
}
@@ -6,9 +6,9 @@
#include "utility/messaging/MessageListener.h"
#include "utility/messaging/type/MessageActivateTokens.h"
#include "utility/messaging/type/MessageFinishedParsing.h"
#include "utility/messaging/type/MessageFocusIn.h"
#include "utility/messaging/type/MessageFocusOut.h"
#include "utility/messaging/type/MessageShowErrors.h"
#include "utility/messaging/type/MessageShowFile.h"
#include "utility/messaging/type/MessageShowScope.h"
#include "utility/messaging/type/MessageShowSnippets.h"
@@ -25,9 +25,9 @@ class TokenLocationFile;
class CodeController
: public Controller
, public MessageListener<MessageActivateTokens>
, public MessageListener<MessageFinishedParsing>
, public MessageListener<MessageFocusIn>
, public MessageListener<MessageFocusOut>
, public MessageListener<MessageShowErrors>
, public MessageListener<MessageShowFile>
, public MessageListener<MessageShowScope>
, public MessageListener<MessageShowSnippets>
@@ -40,9 +40,9 @@ private:
static const uint s_lineRadius;
virtual void handleMessage(MessageActivateTokens* message);
virtual void handleMessage(MessageFinishedParsing* message);
virtual void handleMessage(MessageFocusIn* message);
virtual void handleMessage(MessageFocusOut* message);
virtual void handleMessage(MessageShowErrors* message);
virtual void handleMessage(MessageShowFile* message);
virtual void handleMessage(MessageShowScope* message);
virtual void handleMessage(MessageShowSnippets* message);
@@ -134,6 +134,11 @@ void GraphController::handleMessage(MessageGraphNodeMove* message)
}
}
void GraphController::handleMessage(MessageShowErrors* message)
{
clear();
}
GraphView* GraphController::getView() const
{
return Controller::getView<GraphView>();
@@ -11,6 +11,7 @@
#include "utility/messaging/type/MessageGraphNodeBundleSplit.h"
#include "utility/messaging/type/MessageGraphNodeExpand.h"
#include "utility/messaging/type/MessageGraphNodeMove.h"
#include "utility/messaging/type/MessageShowErrors.h"
#include "component/controller/Controller.h"
#include "component/view/GraphView.h"
@@ -32,6 +33,7 @@ class GraphController
, public MessageListener<MessageGraphNodeBundleSplit>
, public MessageListener<MessageGraphNodeExpand>
, public MessageListener<MessageGraphNodeMove>
, public MessageListener<MessageShowErrors>
{
public:
GraphController(StorageAccess* storageAccess);
@@ -45,6 +47,7 @@ private:
virtual void handleMessage(MessageGraphNodeBundleSplit* message);
virtual void handleMessage(MessageGraphNodeExpand* message);
virtual void handleMessage(MessageGraphNodeMove* message);
virtual void handleMessage(MessageShowErrors* message);
GraphView* getView() const;
@@ -31,6 +31,11 @@ void SearchController::handleMessage(MessageSearchAutocomplete* message)
getView()->setAutocompletionList(m_storageAccess->getAutocompletionMatches(message->query));
}
void SearchController::handleMessage(MessageShowErrors* message)
{
getView()->setMatches(std::vector<SearchMatch>());
}
SearchView* SearchController::getView()
{
return Controller::getView<SearchView>();
@@ -6,6 +6,7 @@
#include "utility/messaging/type/MessageActivateTokens.h"
#include "utility/messaging/type/MessageFind.h"
#include "utility/messaging/type/MessageSearchAutocomplete.h"
#include "utility/messaging/type/MessageShowErrors.h"
class StorageAccess;
class SearchView;
@@ -15,6 +16,7 @@ class SearchController
, public MessageListener<MessageActivateTokens>
, public MessageListener<MessageFind>
, public MessageListener<MessageSearchAutocomplete>
, public MessageListener<MessageShowErrors>
{
public:
SearchController(StorageAccess* storageAccess);
@@ -24,6 +26,7 @@ private:
virtual void handleMessage(MessageActivateTokens* message);
virtual void handleMessage(MessageFind* message);
virtual void handleMessage(MessageSearchAutocomplete* message);
virtual void handleMessage(MessageShowErrors* message);
SearchView* getView();
@@ -17,6 +17,11 @@ StatusBarView* StatusBarController::getView()
return Controller::getView<StatusBarView>();
}
void StatusBarController::handleMessage(MessageFinishedParsing* message)
{
getView()->setErrorCount(message->errorCount);
}
void StatusBarController::handleMessage(MessageStatus* message)
{
setStatus(message->status, message->isError, message->showLoader);
@@ -6,12 +6,14 @@
#include "component/controller/Controller.h"
#include "utility/messaging/MessageListener.h"
#include "utility/messaging/type/MessageFinishedParsing.h"
#include "utility/messaging/type/MessageStatus.h"
class StatusBarView;
class StatusBarController
: public Controller
, public MessageListener<MessageFinishedParsing>
, public MessageListener<MessageStatus>
{
public:
@@ -21,6 +23,7 @@ public:
StatusBarView* getView();
private:
virtual void handleMessage(MessageFinishedParsing* message);
virtual void handleMessage(MessageStatus* message);
void setStatus(const std::string& status, bool isError, bool showLoader);
@@ -196,6 +196,17 @@ void UndoRedoController::handleMessage(MessageSearch* message)
processCommand(command);
}
void UndoRedoController::handleMessage(MessageShowErrors* message)
{
if (m_lastCommand.message && m_lastCommand.message->getType() == message->getType())
{
return;
}
Command command(std::make_shared<MessageShowErrors>(*message), 0);
processCommand(command);
}
void UndoRedoController::handleMessage(MessageShowFile* message)
{
if (m_lastCommand.message && m_lastCommand.message->getType() == message->getType() &&
@@ -16,6 +16,7 @@
#include "utility/messaging/type/MessageRedo.h"
#include "utility/messaging/type/MessageRefresh.h"
#include "utility/messaging/type/MessageSearch.h"
#include "utility/messaging/type/MessageShowErrors.h"
#include "utility/messaging/type/MessageShowFile.h"
#include "utility/messaging/type/MessageShowScope.h"
#include "utility/messaging/type/MessageUndo.h"
@@ -39,6 +40,7 @@ class UndoRedoController
, public MessageListener<MessageRedo>
, public MessageListener<MessageRefresh>
, public MessageListener<MessageSearch>
, public MessageListener<MessageShowErrors>
, public MessageListener<MessageShowFile>
, public MessageListener<MessageShowScope>
, public MessageListener<MessageUndo>
@@ -69,6 +71,7 @@ private:
virtual void handleMessage(MessageRedo* message);
virtual void handleMessage(MessageRefresh* message);
virtual void handleMessage(MessageSearch* message);
virtual void handleMessage(MessageShowErrors* message);
virtual void handleMessage(MessageShowFile* message);
virtual void handleMessage(MessageShowScope* message);
virtual void handleMessage(MessageUndo* message);