Commit 746e4f41 authored by Eike Ziller's avatar Eike Ziller

Fix marking JavaScript lines that threw an exception

Since EditorManager::openedEditors doesn't exactly do what one would
expect, it was only marking a single editor even if there were multiple
editors on the same document.

Change-Id: Iae579c2cfd8455de2783d39fa69944fe92dfc60a
Reviewed-by: default avatarAurindam Jana <aurindam.jana@digia.com>
parent 00a46667
......@@ -163,7 +163,7 @@ void DocumentModel::addEntry(Entry *entry)
QString fileName = entry->fileName();
// replace a non-loaded entry (aka 'restored') if possible
int previousIndex = indexofFileName(fileName);
int previousIndex = indexOfFilePath(fileName);
if (previousIndex >= 0) {
if (entry->document && d->m_documents.at(previousIndex)->document == 0) {
Entry *previousEntry = d->m_documents.at(previousIndex);
......@@ -190,12 +190,12 @@ void DocumentModel::addEntry(Entry *entry)
endInsertRows();
}
int DocumentModel::indexofFileName(const QString &filename) const
int DocumentModel::indexOfFilePath(const QString &filePath) const
{
if (filename.isEmpty())
if (filePath.isEmpty())
return -1;
for (int i = 0; i < d->m_documents.count(); ++i) {
if (d->m_documents.at(i)->fileName() == filename)
if (d->m_documents.at(i)->fileName() == filePath)
return i;
}
return -1;
......@@ -226,7 +226,7 @@ void DocumentModel::removeEditor(IEditor *editor, bool *lastOneForDocument)
void DocumentModel::removeDocument(const QString &fileName)
{
int index = indexofFileName(fileName);
int index = indexOfFilePath(fileName);
QTC_ASSERT(!d->m_documents.at(index)->document, return); // we wouldn't know what to do with the associated editors
removeDocument(index);
}
......
......@@ -77,6 +77,7 @@ public:
int documentCount() const;
QList<Entry *> documents() const;
int indexOfDocument(IDocument *document) const;
int indexOfFilePath(const QString &filePath) const;
Entry *entryForDocument(IDocument *document) const;
QList<IDocument *> openedDocuments() const;
......@@ -98,7 +99,6 @@ private slots:
private:
void addEntry(Entry *entry);
int indexofFileName(const QString &filename) const;
void removeDocument(int idx);
DocumentModelPrivate *d;
......
......@@ -1993,50 +1993,52 @@ void QmlV8DebuggerClient::highlightExceptionCode(int lineNumber,
const QString &filePath,
const QString &errorMessage)
{
EditorManager *editorManager = EditorManager::instance();
QList<IEditor *> openedEditors = editorManager->openedEditors();
DocumentModel *documentModel = EditorManager::documentModel();
int index = documentModel->indexOfFilePath(filePath);
if (index < 0 || !documentModel->documents().at(index)->document)
return;
QList<IEditor *> editors = documentModel->editorsForDocument(
documentModel->documents().at(index)->document);
// set up the format for the errors
QTextCharFormat errorFormat;
errorFormat.setUnderlineStyle(QTextCharFormat::WaveUnderline);
errorFormat.setUnderlineColor(Qt::red);
foreach (IEditor *editor, openedEditors) {
if (editor->document()->filePath() == filePath) {
TextEditor::BaseTextEditorWidget *ed = qobject_cast<TextEditor::BaseTextEditorWidget *>(editor->widget());
if (!ed)
continue;
foreach (IEditor *editor, editors) {
TextEditor::BaseTextEditorWidget *ed = qobject_cast<TextEditor::BaseTextEditorWidget *>(editor->widget());
if (!ed)
continue;
QList<QTextEdit::ExtraSelection> selections;
QTextEdit::ExtraSelection sel;
sel.format = errorFormat;
QTextCursor c(ed->document()->findBlockByNumber(lineNumber - 1));
const QString text = c.block().text();
for (int i = 0; i < text.size(); ++i) {
if (! text.at(i).isSpace()) {
c.setPosition(c.position() + i);
break;
}
QList<QTextEdit::ExtraSelection> selections;
QTextEdit::ExtraSelection sel;
sel.format = errorFormat;
QTextCursor c(ed->document()->findBlockByNumber(lineNumber - 1));
const QString text = c.block().text();
for (int i = 0; i < text.size(); ++i) {
if (! text.at(i).isSpace()) {
c.setPosition(c.position() + i);
break;
}
c.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor);
sel.cursor = c;
}
c.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor);
sel.cursor = c;
sel.format.setToolTip(errorMessage);
sel.format.setToolTip(errorMessage);
selections.append(sel);
ed->setExtraSelections(TextEditor::BaseTextEditorWidget::DebuggerExceptionSelection, selections);
selections.append(sel);
ed->setExtraSelections(TextEditor::BaseTextEditorWidget::DebuggerExceptionSelection, selections);
QString message = QString(_("%1: %2: %3")).arg(filePath).arg(lineNumber)
.arg(errorMessage);
d->engine->showMessage(message, ConsoleOutput);
}
QString message = QString(_("%1: %2: %3")).arg(filePath).arg(lineNumber)
.arg(errorMessage);
d->engine->showMessage(message, ConsoleOutput);
}
}
void QmlV8DebuggerClient::clearExceptionSelection()
{
EditorManager *editorManager = EditorManager::instance();
QList<IEditor *> openedEditors = editorManager->openedEditors();
DocumentModel *documentModel = EditorManager::documentModel();
QList<IEditor *> openedEditors = documentModel->editorsForDocuments(documentModel->openedDocuments());
QList<QTextEdit::ExtraSelection> selections;
foreach (IEditor *editor, openedEditors) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment