forked from qt-creator/qt-creator
C++: FastPreprocessor: Add only includes if there are none
For the case that the document is based upon another one (see Snapshot::preprocessedDocument(), the only client of FastPreprocessor) the FastPreprocessor added extra unresolved includes. Change-Id: I0a7719fa8806af59f87a48bc6914270efd653e84 Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
This commit is contained in:
@@ -40,11 +40,14 @@ using namespace CPlusPlus;
|
||||
FastPreprocessor::FastPreprocessor(const Snapshot &snapshot)
|
||||
: _snapshot(snapshot)
|
||||
, _preproc(this, &_env)
|
||||
, _addIncludesToCurrentDoc(false)
|
||||
{ }
|
||||
|
||||
QByteArray FastPreprocessor::run(Document::Ptr newDoc, const QByteArray &source)
|
||||
{
|
||||
std::swap(newDoc, _currentDoc);
|
||||
_addIncludesToCurrentDoc = _currentDoc->resolvedIncludes().isEmpty()
|
||||
&& _currentDoc->unresolvedIncludes().isEmpty();
|
||||
const QString fileName = _currentDoc->fileName();
|
||||
_preproc.setExpandFunctionlikeMacros(false);
|
||||
_preproc.setKeepComments(true);
|
||||
@@ -72,9 +75,11 @@ void FastPreprocessor::sourceNeeded(unsigned line, const QString &fileName, Incl
|
||||
{
|
||||
Q_UNUSED(initialIncludes)
|
||||
Q_ASSERT(_currentDoc);
|
||||
// CHECKME: Is that cleanName needed?
|
||||
QString cleanName = QDir::cleanPath(fileName);
|
||||
_currentDoc->addIncludeFile(Document::Include(fileName, cleanName, line, mode));
|
||||
if (_addIncludesToCurrentDoc) {
|
||||
// CHECKME: Is that cleanName needed?
|
||||
const QString cleanName = QDir::cleanPath(fileName);
|
||||
_currentDoc->addIncludeFile(Document::Include(fileName, cleanName, line, mode));
|
||||
}
|
||||
mergeEnvironment(fileName);
|
||||
}
|
||||
|
||||
|
||||
@@ -49,6 +49,7 @@ class CPLUSPLUS_EXPORT FastPreprocessor: public Client
|
||||
Preprocessor _preproc;
|
||||
QSet<QString> _merged;
|
||||
Document::Ptr _currentDoc;
|
||||
bool _addIncludesToCurrentDoc;
|
||||
|
||||
void mergeEnvironment(const QString &fileName);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user