forked from qt-creator/qt-creator
C++: Record also unresolved paths for includes
Change-Id: Id107b6c1f34f594c5a01502c156963c964235ed7 Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
This commit is contained in:
committed by
Erik Verbruggen
parent
35a790fb63
commit
e3bc84c414
@@ -341,15 +341,15 @@ QStringList Document::includedFiles() const
|
||||
{
|
||||
QStringList files;
|
||||
foreach (const Include &i, _includes)
|
||||
files.append(i.fileName());
|
||||
files.append(i.resolvedFileName());
|
||||
files.removeDuplicates();
|
||||
return files;
|
||||
}
|
||||
|
||||
// This assumes to be called with a QDir::cleanPath cleaned fileName.
|
||||
void Document::addIncludeFile(const QString &fileName, unsigned line)
|
||||
void Document::addIncludeFile(const Document::Include &include)
|
||||
{
|
||||
_includes.append(Include(fileName, line));
|
||||
_includes.append(include);
|
||||
}
|
||||
|
||||
void Document::appendMacro(const Macro ¯o)
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
#include "Macro.h"
|
||||
|
||||
#include <cplusplus/CPlusPlusForwardDeclarations.h>
|
||||
#include <cplusplus/PreprocessorClient.h>
|
||||
|
||||
#include <QSharedPointer>
|
||||
#include <QDateTime>
|
||||
@@ -75,9 +76,6 @@ public:
|
||||
|
||||
QString fileName() const;
|
||||
|
||||
QStringList includedFiles() const;
|
||||
void addIncludeFile(const QString &fileName, unsigned line);
|
||||
|
||||
void appendMacro(const Macro ¯o);
|
||||
void addMacroUse(const Macro ¯o, unsigned offset, unsigned length,
|
||||
unsigned beginLine,
|
||||
@@ -233,22 +231,31 @@ public:
|
||||
};
|
||||
|
||||
class Include {
|
||||
QString _fileName;
|
||||
QString _resolvedFileName;
|
||||
QString _unresolvedFileName;
|
||||
unsigned _line;
|
||||
Client::IncludeType _type;
|
||||
|
||||
public:
|
||||
Include(const QString &fileName, unsigned line)
|
||||
: _fileName(fileName), _line(line)
|
||||
Include(const QString &unresolvedFileName, const QString &resolvedFileName, unsigned line,
|
||||
Client::IncludeType type)
|
||||
: _resolvedFileName(resolvedFileName)
|
||||
, _unresolvedFileName(unresolvedFileName)
|
||||
, _line(line)
|
||||
, _type(type)
|
||||
{ }
|
||||
|
||||
QString fileName() const
|
||||
{ return _fileName; }
|
||||
QString resolvedFileName() const
|
||||
{ return _resolvedFileName; }
|
||||
|
||||
QString unresolvedFileName() const
|
||||
{ return _unresolvedFileName; }
|
||||
|
||||
unsigned line() const
|
||||
{ return _line; }
|
||||
|
||||
bool resolved() const
|
||||
{ return QFileInfo(_fileName).isAbsolute(); }
|
||||
Client::IncludeType type() const
|
||||
{ return _type; }
|
||||
};
|
||||
|
||||
class MacroUse: public Block {
|
||||
@@ -302,6 +309,9 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
QStringList includedFiles() const;
|
||||
void addIncludeFile(const Include &include);
|
||||
|
||||
QList<Include> includes() const
|
||||
{ return _includes; }
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ QByteArray FastPreprocessor::run(Document::Ptr newDoc, const QString &source)
|
||||
|
||||
mergeEnvironment(Preprocessor::configurationFileName);
|
||||
foreach (const Document::Include &i, doc->includes())
|
||||
mergeEnvironment(i.fileName());
|
||||
mergeEnvironment(i.resolvedFileName());
|
||||
}
|
||||
|
||||
const QByteArray preprocessed = _preproc.run(fileName, source);
|
||||
@@ -62,13 +62,13 @@ QByteArray FastPreprocessor::run(Document::Ptr newDoc, const QString &source)
|
||||
return preprocessed;
|
||||
}
|
||||
|
||||
void FastPreprocessor::sourceNeeded(unsigned line, const QString &fileName, IncludeType)
|
||||
void FastPreprocessor::sourceNeeded(unsigned line, const QString &fileName,
|
||||
IncludeType mode)
|
||||
{
|
||||
Q_ASSERT(_currentDoc);
|
||||
// CHECKME: Is that cleanName needed?
|
||||
QString cleanName = QDir::cleanPath(fileName);
|
||||
_currentDoc->addIncludeFile(cleanName, line);
|
||||
|
||||
_currentDoc->addIncludeFile(Document::Include(fileName, cleanName, line, mode));
|
||||
mergeEnvironment(fileName);
|
||||
}
|
||||
|
||||
@@ -79,7 +79,7 @@ void FastPreprocessor::mergeEnvironment(const QString &fileName)
|
||||
|
||||
if (Document::Ptr doc = _snapshot.document(fileName)) {
|
||||
foreach (const Document::Include &i, doc->includes())
|
||||
mergeEnvironment(i.fileName());
|
||||
mergeEnvironment(i.resolvedFileName());
|
||||
|
||||
_env.addMacros(doc->definedMacros());
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ public:
|
||||
QByteArray run(Document::Ptr newDoc, const QString &source);
|
||||
|
||||
// CPlusPlus::Client
|
||||
virtual void sourceNeeded(unsigned line, const QString &fileName, IncludeType);
|
||||
virtual void sourceNeeded(unsigned line, const QString &fileName, IncludeType mode);
|
||||
|
||||
virtual void macroAdded(const Macro &);
|
||||
|
||||
|
||||
@@ -1364,7 +1364,7 @@ void CreateBindings::process(Document::Ptr doc)
|
||||
_processed.insert(globalNamespace);
|
||||
|
||||
foreach (const Document::Include &i, doc->includes()) {
|
||||
if (Document::Ptr incl = _snapshot.document(i.fileName()))
|
||||
if (Document::Ptr incl = _snapshot.document(i.resolvedFileName()))
|
||||
process(incl);
|
||||
}
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ void SnapshotSymbolVisitor::accept(Document::Ptr doc, QSet<QString> *processed)
|
||||
processed->insert(doc->fileName());
|
||||
|
||||
foreach (const Document::Include &i, doc->includes()) {
|
||||
if (Document::Ptr incl = _snapshot.document(i.fileName()))
|
||||
if (Document::Ptr incl = _snapshot.document(i.resolvedFileName()))
|
||||
accept(incl, processed);
|
||||
}
|
||||
|
||||
|
||||
@@ -176,7 +176,7 @@ void TypeOfExpression::processEnvironment(Document::Ptr doc, Environment *env,
|
||||
processed->insert(doc->fileName());
|
||||
|
||||
foreach (const Document::Include &incl, doc->includes())
|
||||
processEnvironment(m_snapshot.document(incl.fileName()), env, processed);
|
||||
processEnvironment(m_snapshot.document(incl.resolvedFileName()), env, processed);
|
||||
|
||||
foreach (const Macro ¯o, doc->definedMacros())
|
||||
env->bind(macro);
|
||||
|
||||
Reference in New Issue
Block a user