File paths are not unique since e.g. each qbs group in a file is mapped
to a project part.
Change-Id: I7df3f224dd23046b869f2588b8a34eb26cfc0b1a
Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
Needed for ClangCodeModel.
If the content changes, we want to send it immediately to the
codemodelbackend process.
Change-Id: Iedf16930b494ccb5e91f1bc435db026067d98613
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
Reviewed-by: Daniel Teske <daniel.teske@theqtcompany.com>
Quitting Qt Creator before the project was loaded from the project
manager triggers the assert because the updateProjectInfo() call was not
yet made by the project manager.
Change-Id: I23c660971e48d007d1bae00ecf8ed5c2ad3d4071
Reviewed-by: Christian Stenger <christian.stenger@theqtcompany.com>
Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
This makes us independent of libclang crashes for completion.
Re-parsing for highlighting still happens in the Qt Creator process.
Run in verbose mode:
qtc.clangcodemodel.ipc=true
Run tests:
-test "ClangCodeModel"
Task-number: QTCREATORBUG-14108
Task-number: QTCREATORBUG-12819
Change-Id: Id3e95bd2afdb6508bbd1d35fddc69534a909b905
Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
For indexing we used a custom revision that was updated on each
modelManager BuiltinIndexingSupport::refreshSourceFiles() call. This
could lead to rejection of updated documents triggered by refactoring
actions, like for the following case:
1. Open a project containing a.h and a.cpp
2. Open a.cpp, insert some new lines, save and close the document
3. Open a.h and rename a function that is defined in a.cpp
--> The refactoring action modifies a.h and a.cpp, so re-indexing
of those is triggered. Since a.cpp has already a higher revision
(step 2) than the updated document, the updated document is
discarded. As a consequence find usages and follow symbol fails
for the renamed function.
Now the document call back provided to CppSourceProcessor is responsible
for updating the document revision based on the latest revision in the
global snapshot.
Change-Id: I4dfa0a4d34991655acfa749109f00c47b0fbfdbe
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
Reviewed-by: Eike Ziller <eike.ziller@theqtcompany.com>
When the configuration (defines and includes dirs) did not change, we
only updated the m_projectToProjectsInfo data structure, but not the
others (m_projectFileToProjectPart, m_fileToProjectParts).
Change-Id: I0ca235ea4bbe4556bd8b6d36897dedd6482f86a0
Reviewed-by: Christian Stenger <christian.stenger@theqtcompany.com>
These operators led to parse errors, most prominently in Q_OBJECT uses
since this macro nowdays uses these operators.
Task-number: QTCREATORBUG-13905
Change-Id: I65632820d02ca5c5ef0b98f5d969cdc516d7f5b0
Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
Mostly done using the following ruby script:
Dir.glob('**/*.cpp').each { |file|
next if file =~ %r{src/shared/qbs|/qmljs/}
s = File.read(file)
s.scan(/^using namespace (.*);$/) {
ns = $1
t = s.gsub(/^(.*)\b#{ns}::((?!Const)[A-Z])/) { |m|
before = $1
char = $2
if before =~ /"|\/\/|\\|using|SIGNAL|SLOT|Q_/
m
else
before + char
end
}
if t != s
puts file
File.open(file, 'w').write(t)
end
}
}
Change-Id: I6fbe13ddc1485efe95c3156097bf41d90c0febac
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
...and related functions. For clarity in client code.
Change-Id: Icad6fc7b1eee2ce46a2eba8435359837a23409c8
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
...instead of going through CppModelManager::projectInfo().
Now CppModelManager::projectInfo() returns an invalid ProjectInfo in
case there is no valid data for the given Project.
Change-Id: I11908bf2ddf865b1d3d71ff176eaf4139292b21c
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
... by keying on Utils::FileName.
Task-number: QTCREATORBUG-12390
Change-Id: Ib99eefcf3440d4383f624a614a3093f427efffbd
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
... by keying on Utils::FileName
Task-number: QTCREATORBUG-12390
Change-Id: Ia98afb5a9160a7fd9225a2f9e02539ff3c35ae86
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
...since this will confuse the completer.
Task-number: QTCREATORBUG-13567
Change-Id: I4172d433f23f3907690d4c00f92fadb68fa354e8
Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
Reviewed-by: Eike Ziller <eike.ziller@theqtcompany.com>
This fixes
SOFT ASSERT: "!filePath.isEmpty()" in file
/home/nik/dev/creator/creator-ut/src/plugins/cpptools/cppmodelmanager.cpp,
line 467
which can be triggered by e.g. a "git show" document
(onCurrentEditorChanged does not check for an empty file path).
Change-Id: If4ed8e552069b290cb4ac93da52427b7ed2b91e8
Reviewed-by: Eike Ziller <eike.ziller@theqtcompany.com>
...if the project was updated in the meanwhile.
If a project is updated mark invisible editor documents dirty and update
them if they get focus.
This also fixes document highlighting when restoring a session for
documents that the user "switched away" before the project info is
pushed to CppModelManager.
This completes
CppTools: Update visible documents on project update
commit c2eb91e053
which only takes care of visible documents.
Task-number: QTCREATORBUG-13270
Change-Id: Id445e7f509deac5d03194aecc54ce4629b7926ce
Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
A DiffEditorDocument has an empty file path.
Change-Id: If097497514afa82b1ed220a37cae410f4a81aa9a
Task-number: QTCREATORBUG-13489
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
The messages were computed, but not added to the document.
Change-Id: Ibeea802cf9f291ad14b2fe2e9d2a285c927a4449
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
Superseded by commit
commit 89bd4ee3c4
C++: Base parsing on editor document instead of widget
Change-Id: Iffa6e47bddc0fa3de1eab9b65fe8f711520d2d7f
Reviewed-by: Christian Stenger <christian.stenger@digia.com>
projectPartFromDependencies() is also called from another thread.
Change-Id: Ic1319569d1b9b934a1be0916caa2e5bd68dce4fb
Reviewed-by: Fawzi Mohamed <fawzi.mohamed@digia.com>
With asynchron project managers, creating a new project from a wizard or
re-opening a session will first open the editor documents and then
provide the project information later (it's the other way around with
synchronous project managers). This sequence leave the documents with
various error diagnostics behind. Fixed by re-triggering the re-parsing.
This change does not fix QTCREATORBUG-11606 yet. Though it will trigger
a reparse with the right includes, clang still reports 'file not found'.
Will be addressed by a follow-up patch.
Task-number: QTCREATORBUG-11606
Change-Id: Ib5d251e05accf4268f9b36decc5224b2c75f610c
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: Fawzi Mohamed <fawzi.mohamed@digia.com>
For the time being, this function actually sets an additional
CppIndexSupport to be executed. Handle the case that a client tries to
restore the previous CppIndexingSupport (see SymbolSearcherTestCase).
This fixes GenericProjectManager::test_simple in interaction with
CppTools::test_builtinsymbolsearcher. Now first running the CppTools
tests and then the GenericProjectManager tests work fine.
Change-Id: Ibe7248ec8651d4fdc312f10cdcc9c56d6dd086d9
Reviewed-by: Christian Stenger <christian.stenger@digia.com>
First step of some more 'Base' removal in TextEditor.
s/Core::TextDocument/Core::BaseTextDocument/
s/TextEditor::BaseTextDocument/TextEditor::TextDocument/
Change-Id: I71ba325a2f0ad72ec9dae0d96846cbae72d326f7
Reviewed-by: hjk <hjk121@nokiamail.com>
Replace the CppModelManagerInterface/derived CppModelManager
combo by a more common CppModelManager/CppModelManagerPrivate
pimpl pattern.
Change-Id: Ia4582845ed94d5ef60b8571bab9b2260c6290287
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62224
.obj/release-shared/cppcodemodelinspectordialog.o: In function `CppEditor::Internal::CppCodeModelInspectorDialog::refresh()':
cppcodemodelinspectordialog.cpp:(.text+0x79fc): undefined reference to `CppTools::Internal::CppModelManager::ensureUpdated()'
.obj/release-shared/cppcodemodelinspectordialog.o: In function `CppTools::Internal::CppModelManager::definedMacros()':
cppcodemodelinspectordialog.cpp:+0x26): undefined reference to `CppTools::Internal::CppModelManager::ensureUpdated()'
.obj/release-shared/cppcodemodelinspectordialog.o: In function `CppTools::Internal::CppModelManager::headerPaths()':
cppcodemodelinspectordialog.cpp: +0x26): undefined reference to `CppTools::Internal::CppModelManager::ensureUpdated()'
Change-Id: Ie0e01f7628668cbbe11b701a93caef98bb8e335f
Reviewed-by: Adam Majer <adamm@zombino.com>
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
(cherry picked from commit c023a1cac1)
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
Reviewed-by: Eike Ziller <eike.ziller@digia.com>
It logically depends on the Snapshot and has a related lifetime.
Keeping it in the Snapshot avoids some code compelxity.
Change-Id: I24ee4483b44d9b0d7f2e4d494ae7ea624b949f9c
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
.. because they now hold only files for a single language+extensions
combination.
Task-number: QTCREATORBUG-11709
Task-number: QTCREATORBUG-12818
Change-Id: If294f6de07d60126be733d98de12b89b8af3efce
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62224
.obj/release-shared/cppcodemodelinspectordialog.o: In function `CppEditor::Internal::CppCodeModelInspectorDialog::refresh()':
cppcodemodelinspectordialog.cpp:(.text+0x79fc): undefined reference to `CppTools::Internal::CppModelManager::ensureUpdated()'
.obj/release-shared/cppcodemodelinspectordialog.o: In function `CppTools::Internal::CppModelManager::definedMacros()':
cppcodemodelinspectordialog.cpp:+0x26): undefined reference to `CppTools::Internal::CppModelManager::ensureUpdated()'
.obj/release-shared/cppcodemodelinspectordialog.o: In function `CppTools::Internal::CppModelManager::headerPaths()':
cppcodemodelinspectordialog.cpp: +0x26): undefined reference to `CppTools::Internal::CppModelManager::ensureUpdated()'
Change-Id: Ie0e01f7628668cbbe11b701a93caef98bb8e335f
Reviewed-by: Adam Majer <adamm@zombino.com>
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
This eliminates a bunch of list->set->list conversions. Especially the
ProjectInfo::appendProjectPart takes lots of time converting for every
part added.
Change-Id: Ib3c8cd4b0ad6c012ccbeed12ebedd46b9b6cca95
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
This will hopefully help a bit in resolving the crashes that happen in
QCoreApplication::notifyInternal.
Change-Id: Ib3aa8c1a1f50778bd89938d7c529d8399ccf91ea
Task-number: QTCREATORBUG-11262
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
This mainly takes CppEditorSupport apart.
* Parsing is now invoked by CPPEditorDocument itself by listening to
QTextDocument::contentsChanged().
* Upon construction and destruction CPPEditorDocument creates and
deletes an EditorDocumentHandle for (un)registration in the model
manager. This handle provides everything to generate the working copy
and to access the editor document processor.
* A CPPEditorDocument owns a BaseEditorDocumentProcessor instance that
controls parsing, semantic info recalculation and the semantic
highlighting for the document. This is more or less what is left from
CppEditorSupport and can be considered as the backend of a
CPPEditorDocument. CPPEditorDocument itself is quite small.
* BuiltinEditorDocumentProcessor and ClangEditorDocumentProcessor
derive from BaseEditorDocumentProcessor and implement the gaps.
* Since the semantic info calculation was bound to the widget, it
also calculated the local uses, which depend on the cursor
position. This calculation got moved into the extracted class
UseSeletionsUpdater in the cppeditor plugin, which is run once the
cursor position changes or the semantic info document is updated.
* Some more logic got extracted:
- SemanticInfoUpdater (logic was in CppEditorSupport)
- SemanticHighlighter (logic was in CppEditorSupport)
* The *Parser and *Processor classes can be easily accessed by the
static function get().
* CppHighlightingSupport is gone since it turned out to be useless.
* The editor dependency in CompletionAssistProviders is gone since we
actually only need the file path now.
Change-Id: I49d3a7bd138c5ed9620123e34480772535156508
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>