diff options
20 files changed, 72 insertions, 60 deletions
diff --git a/src/plugins/clangcodemodel/clangfollowsymbol.cpp b/src/plugins/clangcodemodel/clangfollowsymbol.cpp index 3e85ebc8d9..c430c810c3 100644 --- a/src/plugins/clangcodemodel/clangfollowsymbol.cpp +++ b/src/plugins/clangcodemodel/clangfollowsymbol.cpp @@ -163,13 +163,10 @@ void ClangFollowSymbol::findLink(const CppTools::CursorInEditor &data, CppTools::SymbolFinder *symbolFinder, bool inNextSplit) { - int lineNumber = 0, positionInBlock = 0; + int line = 0; + int column = 0; QTextCursor cursor = Utils::Text::wordStartCursor(data.cursor()); - Utils::Text::convertPosition(cursor.document(), cursor.position(), &lineNumber, - &positionInBlock); - - const uint line = lineNumber; - const uint column = positionInBlock + 1; + Utils::Text::convertPosition(cursor.document(), cursor.position(), &line, &column); ClangEditorDocumentProcessor *processor = ClangEditorDocumentProcessor::get( data.filePath().toString()); @@ -177,7 +174,10 @@ void ClangFollowSymbol::findLink(const CppTools::CursorInEditor &data, return processLinkCallback(Utils::Link()); if (!resolveTarget) { - processLinkCallback(linkAtCursor(cursor, data.filePath().toString(), line, column, + processLinkCallback(linkAtCursor(cursor, + data.filePath().toString(), + static_cast<uint>(line), + static_cast<uint>(column), processor)); return; } diff --git a/src/plugins/classview/classviewmanager.cpp b/src/plugins/classview/classviewmanager.cpp index 2b3b839cda..de4b1450c5 100644 --- a/src/plugins/classview/classviewmanager.cpp +++ b/src/plugins/classview/classviewmanager.cpp @@ -423,7 +423,7 @@ void Manager::onDocumentUpdated(CPlusPlus::Document::Ptr doc) /*! Opens the text editor for the file \a fileName on \a line (1-based) and - \a column (1-based). + \a column (0-based). */ void Manager::gotoLocation(const QString &fileName, int line, int column) @@ -468,7 +468,8 @@ void Manager::gotoLocations(const QList<QVariant> &list) } } } - gotoLocation(loc.fileName(), loc.line(), loc.column()); + // line is 1-based, column is 0-based + gotoLocation(loc.fileName(), loc.line(), loc.column() - 1); } /*! diff --git a/src/plugins/classview/classviewparser.cpp b/src/plugins/classview/classviewparser.cpp index e206b180a1..edf7a038ce 100644 --- a/src/plugins/classview/classviewparser.cpp +++ b/src/plugins/classview/classviewparser.cpp @@ -369,9 +369,9 @@ void Parser::addSymbol(const ParserTreeItem::Ptr &item, const CPlusPlus::Symbol if (itemAdd.isNull()) itemAdd = ParserTreeItem::Ptr(new ParserTreeItem()); - // locations are 1-based in Symbol, start with 0 for the editor + // locations have 1-based column in Symbol, use the same here. SymbolLocation location(QString::fromUtf8(symbol->fileName() , symbol->fileNameLength()), - symbol->line(), symbol->column() - 1); + symbol->line(), symbol->column()); itemAdd->addSymbolLocation(location); // prevent showing a content of the functions diff --git a/src/plugins/cmakeprojectmanager/cmakeeditor.cpp b/src/plugins/cmakeprojectmanager/cmakeeditor.cpp index a1b529e3e9..122569616e 100644 --- a/src/plugins/cmakeprojectmanager/cmakeeditor.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeeditor.cpp @@ -146,8 +146,10 @@ void CMakeEditorWidget::findLinkAt(const QTextCursor &cursor, { Utils::Link link; - int lineNumber = 0, positionInBlock = 0; - convertPosition(cursor.position(), &lineNumber, &positionInBlock); + int line = 0; + int column = 0; + convertPosition(cursor.position(), &line, &column); + const int positionInBlock = column - 1; const QString block = cursor.block().text(); diff --git a/src/plugins/cppeditor/cppuseselections_test.cpp b/src/plugins/cppeditor/cppuseselections_test.cpp index 8de8048a89..99674b2e3c 100644 --- a/src/plugins/cppeditor/cppuseselections_test.cpp +++ b/src/plugins/cppeditor/cppuseselections_test.cpp @@ -31,6 +31,7 @@ #include <QElapsedTimer> #include <QtTest> +// Uses 1-based line and 0-based column. struct Selection { Selection(int line, int column, int length) : line(line), column(column), length(length) {} int line; @@ -116,7 +117,7 @@ SelectionList UseSelectionsTestCase::toSelectionList( int line, column; const int position = qMin(selection.cursor.position(), selection.cursor.anchor()); m_editorWidget->convertPosition(position, &line, &column); - result << Selection(line, column, selection.cursor.selectedText().length()); + result << Selection(line, column - 1, selection.cursor.selectedText().length()); } return result; } diff --git a/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp b/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp index 3ac121d918..8d30cfbd43 100644 --- a/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp +++ b/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp @@ -317,7 +317,7 @@ F2TestCase::F2TestCase(CppEditorAction action, initialTestFile->m_editor->setCursorPosition(initialTestFile->m_cursorPosition); // qDebug() << "Initial line:" << initialTestFile->editor->currentLine(); -// qDebug() << "Initial column:" << initialTestFile->editor->currentColumn() - 1; +// qDebug() << "Initial column:" << initialTestFile->editor->currentColumn(); OverrideItemList immediateVirtualSymbolResults; OverrideItemList finalVirtualSymbolResults; @@ -338,7 +338,7 @@ F2TestCase::F2TestCase(CppEditorAction action, QSKIP((curTestName + " is not supported by Clang FollowSymbol").toLatin1()); } - initialTestFile->m_editorWidget->openLinkUnderCursor(); + widget->openLinkUnderCursor(); break; } @@ -349,7 +349,7 @@ F2TestCase::F2TestCase(CppEditorAction action, QSharedPointer<VirtualFunctionTestAssistProvider> testProvider( new VirtualFunctionTestAssistProvider(widget)); builtinFollowSymbol->setVirtualFunctionAssistProvider(testProvider); - initialTestFile->m_editorWidget->openLinkUnderCursor(); + widget->openLinkUnderCursor(); immediateVirtualSymbolResults = testProvider->m_immediateItems; finalVirtualSymbolResults = testProvider->m_finalItems; @@ -382,7 +382,7 @@ F2TestCase::F2TestCase(CppEditorAction action, QEXPECT_FAIL("globalVarFromEnum", "Contributor works on a fix.", Abort); QEXPECT_FAIL("matchFunctionSignature_Follow_5", "foo(int) resolved as CallAST", Abort); QCOMPARE(currentTextEditor->currentLine(), expectedLine); - QCOMPARE(currentTextEditor->currentColumn() - 1, expectedColumn); + QCOMPARE(currentTextEditor->currentColumn(), expectedColumn); // qDebug() << immediateVirtualSymbolResults; // qDebug() << finalVirtualSymbolResults; diff --git a/src/plugins/cpptools/builtincursorinfo.cpp b/src/plugins/cpptools/builtincursorinfo.cpp index 4522af15a9..85603ba090 100644 --- a/src/plugins/cpptools/builtincursorinfo.cpp +++ b/src/plugins/cpptools/builtincursorinfo.cpp @@ -184,8 +184,9 @@ private: { CursorInfo result; + // findLocalUses operates with 1-based line and 0-based column const CppTools::SemanticInfo::LocalUseMap localUses - = BuiltinCursorInfo::findLocalUses(m_document, m_line, m_column); + = BuiltinCursorInfo::findLocalUses(m_document, m_line, m_column - 1); result.localUses = localUses; splitLocalUses(localUses, &result.useRanges, &result.unusedVariablesRanges); @@ -216,8 +217,7 @@ private: bool good = false; foreach (const CppTools::SemanticInfo::Use &use, uses) { unsigned l = static_cast<unsigned>(m_line); - // convertCursorPosition() returns a 0-based column number. - unsigned c = static_cast<unsigned>(m_column + 1); + unsigned c = static_cast<unsigned>(m_column); if (l == use.line && c >= use.column && c <= (use.column + use.length)) { good = true; break; diff --git a/src/plugins/cpptools/builtineditordocumentprocessor.cpp b/src/plugins/cpptools/builtineditordocumentprocessor.cpp index 684f765eac..d5bfa51020 100644 --- a/src/plugins/cpptools/builtineditordocumentprocessor.cpp +++ b/src/plugins/cpptools/builtineditordocumentprocessor.cpp @@ -112,7 +112,6 @@ CppTools::CheckSymbols *createHighlighter(const CPlusPlus::Document::Ptr &doc, int line, column; convertPosition(textDocument, macro.utf16CharOffset(), &line, &column); - ++column; //Highlighting starts at (column-1) --> compensate here Result use(line, column, macro.nameToQString().size(), SemanticHighlighter::MacroUse); macroUses.append(use); } diff --git a/src/plugins/cpptools/cppcanonicalsymbol.cpp b/src/plugins/cpptools/cppcanonicalsymbol.cpp index 3f1869de63..fa5d074921 100644 --- a/src/plugins/cpptools/cppcanonicalsymbol.cpp +++ b/src/plugins/cpptools/cppcanonicalsymbol.cpp @@ -60,7 +60,6 @@ Scope *CanonicalSymbol::getScopeAndExpression(const QTextCursor &cursor, QString QTextCursor tc = cursor; int line, column; Utils::Text::convertPosition(cursor.document(), tc.position(), &line, &column); - ++column; // 1-based line and 1-based column int pos = tc.position(); QTextDocument *textDocument = cursor.document(); @@ -74,7 +73,7 @@ Scope *CanonicalSymbol::getScopeAndExpression(const QTextCursor &cursor, QString ExpressionUnderCursor expressionUnderCursor(m_document->languageFeatures()); *code = expressionUnderCursor(tc); - return m_document->scopeAt(line, column); + return m_document->scopeAt(line, column - 1); } Symbol *CanonicalSymbol::operator()(const QTextCursor &cursor) diff --git a/src/plugins/cpptools/cppcompletionassist.cpp b/src/plugins/cpptools/cppcompletionassist.cpp index af4372a458..87bc2df0b4 100644 --- a/src/plugins/cpptools/cppcompletionassist.cpp +++ b/src/plugins/cpptools/cppcompletionassist.cpp @@ -1092,7 +1092,7 @@ int InternalCppCompletionAssistProcessor::startCompletionHelper() int line = 0, column = 0; Utils::Text::convertPosition(m_interface->textDocument(), startOfExpression, &line, &column); const QString fileName = m_interface->fileName(); - return startCompletionInternal(fileName, line, column, expression, endOfExpression); + return startCompletionInternal(fileName, line, column - 1, expression, endOfExpression); } bool InternalCppCompletionAssistProcessor::tryObjCCompletion() @@ -1125,7 +1125,7 @@ bool InternalCppCompletionAssistProcessor::tryObjCCompletion() int line = 0, column = 0; Utils::Text::convertPosition(m_interface->textDocument(), m_interface->position(), &line, &column); - Scope *scope = thisDocument->scopeAt(line, column); + Scope *scope = thisDocument->scopeAt(line, column - 1); if (!scope) return false; @@ -1319,7 +1319,8 @@ bool InternalCppCompletionAssistProcessor::objcKeywordsWanted() const } int InternalCppCompletionAssistProcessor::startCompletionInternal(const QString &fileName, - unsigned line, unsigned column, + unsigned line, + unsigned positionInBlock, const QString &expr, int endOfExpression) { @@ -1331,7 +1332,7 @@ int InternalCppCompletionAssistProcessor::startCompletionInternal(const QString m_model->m_typeOfExpression->init(thisDocument, m_interface->snapshot()); - Scope *scope = thisDocument->scopeAt(line, column); + Scope *scope = thisDocument->scopeAt(line, positionInBlock); QTC_ASSERT(scope != 0, return -1); if (expression.isEmpty()) { @@ -2016,7 +2017,7 @@ bool InternalCppCompletionAssistProcessor::completeConstructorOrFunction(const Q int lineSigned = 0, columnSigned = 0; Utils::Text::convertPosition(m_interface->textDocument(), m_interface->position(), &lineSigned, &columnSigned); - unsigned line = lineSigned, column = columnSigned; + unsigned line = lineSigned, column = columnSigned - 1; // find a scope that encloses the current location, starting from the lastVisibileSymbol // and moving outwards diff --git a/src/plugins/cpptools/cppcompletionassist.h b/src/plugins/cpptools/cppcompletionassist.h index 8e0097b2fa..7bb7776940 100644 --- a/src/plugins/cpptools/cppcompletionassist.h +++ b/src/plugins/cpptools/cppcompletionassist.h @@ -113,7 +113,7 @@ private: bool tryObjCCompletion(); bool objcKeywordsWanted() const; int startCompletionInternal(const QString &fileName, - unsigned line, unsigned column, + unsigned line, unsigned positionInBlock, const QString &expression, int endOfExpression); diff --git a/src/plugins/cpptools/cppelementevaluator.cpp b/src/plugins/cpptools/cppelementevaluator.cpp index 90fb21a34c..afd8944bde 100644 --- a/src/plugins/cpptools/cppelementevaluator.cpp +++ b/src/plugins/cpptools/cppelementevaluator.cpp @@ -373,7 +373,7 @@ void CppElementEvaluator::execute() // Fetch the expression's code ExpressionUnderCursor expressionUnderCursor(doc->languageFeatures()); const QString &expression = expressionUnderCursor(m_tc); - Scope *scope = doc->scopeAt(line, column); + Scope *scope = doc->scopeAt(line, column - 1); TypeOfExpression typeOfExpression; typeOfExpression.init(doc, snapshot); diff --git a/src/plugins/cpptools/cppfollowsymbolundercursor.cpp b/src/plugins/cpptools/cppfollowsymbolundercursor.cpp index 65bfd310a5..a66c357986 100644 --- a/src/plugins/cpptools/cppfollowsymbolundercursor.cpp +++ b/src/plugins/cpptools/cppfollowsymbolundercursor.cpp @@ -491,12 +491,12 @@ void FollowSymbolUnderCursor::findLink( { Link link; - int lineNumber = 0, positionInBlock = 0; + int line = 0; + int column = 0; QTextCursor cursor = data.cursor(); QTextDocument *document = cursor.document(); - Utils::Text::convertPosition(document, cursor.position(), &lineNumber, &positionInBlock); - const unsigned line = lineNumber; - const unsigned column = positionInBlock + 1; + Utils::Text::convertPosition(document, cursor.position(), &line, &column); + const int positionInBlock = column - 1; Snapshot snapshot = theSnapshot; @@ -541,8 +541,8 @@ void FollowSymbolUnderCursor::findLink( for (int i = 0; i < tokens.size(); ++i) { const Token &tk = tokens.at(i); - if (((unsigned) positionInBlock) >= tk.utf16charsBegin() - && ((unsigned) positionInBlock) < tk.utf16charsEnd()) { + if (static_cast<unsigned>(positionInBlock) >= tk.utf16charsBegin() + && static_cast<unsigned>(positionInBlock) < tk.utf16charsEnd()) { int closingParenthesisPos = tokens.size(); if (i >= 2 && tokens.at(i).is(T_IDENTIFIER) && tokens.at(i - 1).is(T_LPAREN) && (tokens.at(i - 2).is(T_SIGNAL) || tokens.at(i - 2).is(T_SLOT))) { @@ -584,8 +584,8 @@ void FollowSymbolUnderCursor::findLink( // In this case we want to look at one token before the current position to recognize // an operator if the cursor is inside the actual operator: operator[$] - if (unsigned(positionInBlock) >= tk.utf16charsBegin() - && unsigned(positionInBlock) <= tk.utf16charsEnd()) { + if (static_cast<unsigned>(positionInBlock) >= tk.utf16charsBegin() + && static_cast<unsigned>(positionInBlock) <= tk.utf16charsEnd()) { cursorRegionReached = true; if (tk.is(T_OPERATOR)) { link = attemptFuncDeclDef(cursor, theSnapshot, @@ -675,7 +675,7 @@ void FollowSymbolUnderCursor::findLink( } // Find the last symbol up to the cursor position - Scope *scope = doc->scopeAt(line, column); + Scope *scope = doc->scopeAt(line, positionInBlock); if (!scope) return processLinkCallback(link); @@ -698,19 +698,21 @@ void FollowSymbolUnderCursor::findLink( if (d->isDeclaration() || d->isFunction()) { const QString fileName = QString::fromUtf8(d->fileName(), d->fileNameLength()); if (data.filePath().toString() == fileName) { - if (unsigned(lineNumber) == d->line() - && unsigned(positionInBlock) >= d->column()) { // TODO: check the end + if (static_cast<unsigned>(line) == d->line() + && static_cast<unsigned>(positionInBlock) >= d->column()) { + // TODO: check the end result = r; // take the symbol under cursor. break; } } } else if (d->isUsingDeclaration()) { - int tokenBeginLineNumber = 0, tokenBeginColumnNumber = 0; + int tokenBeginLineNumber = 0; + int tokenBeginColumnNumber = 0; Utils::Text::convertPosition(document, beginOfToken, &tokenBeginLineNumber, &tokenBeginColumnNumber); - if (unsigned(tokenBeginLineNumber) > d->line() - || (unsigned(tokenBeginLineNumber) == d->line() - && unsigned(tokenBeginColumnNumber) > d->column())) { + if (static_cast<unsigned>(tokenBeginLineNumber) > d->line() + || (static_cast<unsigned>(tokenBeginLineNumber) == d->line() + && static_cast<unsigned>(tokenBeginColumnNumber) >= d->column())) { result = r; // take the symbol under cursor. break; } diff --git a/src/plugins/debugger/analyzer/analyzerutils.cpp b/src/plugins/debugger/analyzer/analyzerutils.cpp index 96fb4ef9e5..2a30067562 100644 --- a/src/plugins/debugger/analyzer/analyzerutils.cpp +++ b/src/plugins/debugger/analyzer/analyzerutils.cpp @@ -74,7 +74,7 @@ CPlusPlus::Symbol *AnalyzerUtils::findSymbolUnderCursor() CPlusPlus::ExpressionUnderCursor expressionUnderCursor(doc->languageFeatures()); moveCursorToEndOfName(&tc); const QString &expression = expressionUnderCursor(tc); - CPlusPlus::Scope *scope = doc->scopeAt(line, column); + CPlusPlus::Scope *scope = doc->scopeAt(line, column - 1); CPlusPlus::TypeOfExpression typeOfExpression; typeOfExpression.init(doc, snapshot); diff --git a/src/plugins/designer/qtcreatorintegration.cpp b/src/plugins/designer/qtcreatorintegration.cpp index 703fac1434..9d3f9919a0 100644 --- a/src/plugins/designer/qtcreatorintegration.cpp +++ b/src/plugins/designer/qtcreatorintegration.cpp @@ -329,7 +329,8 @@ static Document::Ptr addDefinition(const Snapshot &docTable, const QString contents = editor->textDocument()->plainText(); int column; editor->convertPosition(contents.length(), line, &column); - editor->gotoLine(*line, column); + // gotoLine accepts 0-based column. + editor->gotoLine(*line, column - 1); editor->insert(definition); *line += 1; } diff --git a/src/plugins/qmakeprojectmanager/profileeditor.cpp b/src/plugins/qmakeprojectmanager/profileeditor.cpp index fb854311a7..cb26142767 100644 --- a/src/plugins/qmakeprojectmanager/profileeditor.cpp +++ b/src/plugins/qmakeprojectmanager/profileeditor.cpp @@ -81,8 +81,10 @@ void ProFileEditorWidget::findLinkAt(const QTextCursor &cursor, { Link link; - int lineNumber = 0, positionInBlock = 0; - convertPosition(cursor.position(), &lineNumber, &positionInBlock); + int line = 0; + int column = 0; + convertPosition(cursor.position(), &line, &column); + const int positionInBlock = column - 1; const QString block = cursor.block().text(); diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.cpp b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.cpp index 6e3a3e43ad..3af228874a 100644 --- a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.cpp @@ -128,7 +128,8 @@ void QmakeManager::addLibraryImpl(const QString &fileName, BaseTextEditor *edito // add extra \n in case the last line is not empty int line, column; editor->convertPosition(endOfDoc, &line, &column); - if (!editor->textAt(endOfDoc - column, column).simplified().isEmpty()) + const int positionInBlock = column - 1; + if (!editor->textAt(endOfDoc - positionInBlock, positionInBlock).simplified().isEmpty()) snippet = QLatin1Char('\n') + snippet; editor->insert(snippet); diff --git a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp index 8bf98d79c9..240fe160d4 100644 --- a/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp +++ b/src/plugins/qmldesigner/components/texteditor/texteditorwidget.cpp @@ -133,9 +133,10 @@ void TextEditorWidget::jumpTextCursorToSelectedModelNode() const int nodeOffset = rewriterView->nodeOffset(selectedNode); if (nodeOffset > 0) { - int line, column; - m_textEditor->editorWidget()->convertPosition(nodeOffset, &line, &column); - m_textEditor->editorWidget()->gotoLine(line, column); + int line, column; + m_textEditor->editorWidget()->convertPosition(nodeOffset, &line, &column); + // line has to be 1 based, column 0 based! + m_textEditor->editorWidget()->gotoLine(line, column - 1); } } m_updateSelectionTimer.stop(); diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp index 877010a3b7..9ab39cce37 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.cpp +++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp @@ -374,7 +374,8 @@ void QmlDesignerPlugin::jumpTextCursorToSelectedModelNode() if (currentSelectedNode != selectedNode) { int line, column; currentDesignDocument()->textEditor()->convertPosition(nodeOffset, &line, &column); - currentDesignDocument()->textEditor()->gotoLine(line, column); + // line has to be 1 based, column 0 based! + currentDesignDocument()->textEditor()->gotoLine(line, column - 1); } } } diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index 3141a12620..37a57412bf 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -3104,14 +3104,14 @@ bool TextEditorWidget::restoreState(const QByteArray &state) int version; int vval; int hval; - int lval; - int cval; + int lineVal; + int columnVal; QDataStream stream(state); stream >> version; stream >> vval; stream >> hval; - stream >> lval; - stream >> cval; + stream >> lineVal; + stream >> columnVal; if (version >= 1) { QList<int> collapsedBlocks; @@ -3137,7 +3137,8 @@ bool TextEditorWidget::restoreState(const QByteArray &state) } d->m_lastCursorChangeWasInteresting = false; // avoid adding last position to history - gotoLine(lval, cval); + // line is 1-based, column is 0-based + gotoLine(lineVal, columnVal - 1); verticalScrollBar()->setValue(vval); horizontalScrollBar()->setValue(hval); d->saveCurrentCursorPositionForNavigation(); |