forked from qt-creator/qt-creator
		
	CppTools: Add API to set/query compiler call data
...and make some comparison functions public. Change-Id: If4c9a95031dece32073ce111484a890230190688 Reviewed-by: Fawzi Mohamed <fawzi.mohamed@theqtcompany.com>
This commit is contained in:
		
				
					committed by
					
						
						Fawzi Mohamed
					
				
			
			
				
	
			
			
			
						parent
						
							bb4a58304d
						
					
				
				
					commit
					33359a7922
				
			@@ -629,21 +629,9 @@ public:
 | 
			
		||||
        , m_newSourceFiles(newProjectInfo.sourceFiles())
 | 
			
		||||
    {}
 | 
			
		||||
 | 
			
		||||
    bool definesChanged() const
 | 
			
		||||
    {
 | 
			
		||||
        return m_new.defines() != m_old.defines();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    bool configurationChanged() const
 | 
			
		||||
    {
 | 
			
		||||
        return definesChanged()
 | 
			
		||||
            || m_new.headerPaths() != m_old.headerPaths();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    bool nothingChanged() const
 | 
			
		||||
    {
 | 
			
		||||
        return !configurationChanged() && m_new.sourceFiles() == m_old.sourceFiles();
 | 
			
		||||
    }
 | 
			
		||||
    bool definesChanged() const { return m_new.definesChanged(m_old); }
 | 
			
		||||
    bool configurationChanged() const { return m_new.configurationChanged(m_old); }
 | 
			
		||||
    bool configurationOrFilesChanged() const { return m_new.configurationOrFilesChanged(m_old); }
 | 
			
		||||
 | 
			
		||||
    QSet<QString> addedFiles() const
 | 
			
		||||
    {
 | 
			
		||||
@@ -735,8 +723,12 @@ QFuture<void> CppModelManager::updateProjectInfo(const ProjectInfo &newProjectIn
 | 
			
		||||
        ProjectInfo oldProjectInfo = d->m_projectToProjectsInfo.value(project);
 | 
			
		||||
        if (oldProjectInfo.isValid()) {
 | 
			
		||||
            ProjectInfoComparer comparer(oldProjectInfo, newProjectInfo);
 | 
			
		||||
            if (comparer.nothingChanged())
 | 
			
		||||
 | 
			
		||||
            if (!comparer.configurationOrFilesChanged()) {
 | 
			
		||||
                // Some other attached data might have changed
 | 
			
		||||
                d->m_projectToProjectsInfo.insert(project, newProjectInfo);
 | 
			
		||||
                return QFuture<void>();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // If the project configuration changed, do a full reindexing
 | 
			
		||||
            if (comparer.configurationChanged()) {
 | 
			
		||||
 
 | 
			
		||||
@@ -137,6 +137,36 @@ ProjectInfo::ProjectInfo(QPointer<ProjectExplorer::Project> project)
 | 
			
		||||
    : m_project(project)
 | 
			
		||||
{}
 | 
			
		||||
 | 
			
		||||
bool ProjectInfo::operator ==(const ProjectInfo &other) const
 | 
			
		||||
{
 | 
			
		||||
    return m_project == other.m_project
 | 
			
		||||
            && m_projectParts == other.m_projectParts
 | 
			
		||||
            && m_compilerCallData == other.m_compilerCallData
 | 
			
		||||
            && m_headerPaths == other.m_headerPaths
 | 
			
		||||
            && m_sourceFiles == other.m_sourceFiles
 | 
			
		||||
            && m_defines == other.m_defines;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool ProjectInfo::operator !=(const ProjectInfo &other) const
 | 
			
		||||
{
 | 
			
		||||
    return !operator ==(other);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool ProjectInfo::definesChanged(const ProjectInfo &other) const
 | 
			
		||||
{
 | 
			
		||||
    return m_defines != other.m_defines;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool ProjectInfo::configurationChanged(const ProjectInfo &other) const
 | 
			
		||||
{
 | 
			
		||||
    return definesChanged(other) || m_headerPaths != other.m_headerPaths;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool ProjectInfo::configurationOrFilesChanged(const ProjectInfo &other) const
 | 
			
		||||
{
 | 
			
		||||
    return configurationChanged(other) || m_sourceFiles != other.m_sourceFiles;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool ProjectInfo::isValid() const
 | 
			
		||||
{
 | 
			
		||||
    return !m_project.isNull();
 | 
			
		||||
@@ -193,6 +223,7 @@ void ProjectInfo::clearProjectParts()
 | 
			
		||||
    m_headerPaths.clear();
 | 
			
		||||
    m_sourceFiles.clear();
 | 
			
		||||
    m_defines.clear();
 | 
			
		||||
    m_compilerCallData.clear();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const ProjectPart::HeaderPaths ProjectInfo::headerPaths() const
 | 
			
		||||
@@ -210,6 +241,16 @@ const QByteArray ProjectInfo::defines() const
 | 
			
		||||
    return m_defines;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ProjectInfo::setCompilerCallData(const CompilerCallData &data)
 | 
			
		||||
{
 | 
			
		||||
    m_compilerCallData = data;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ProjectInfo::CompilerCallData ProjectInfo::compilerCallData() const
 | 
			
		||||
{
 | 
			
		||||
    return m_compilerCallData;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
namespace {
 | 
			
		||||
class ProjectFileCategorizer
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
@@ -142,6 +142,12 @@ public:
 | 
			
		||||
 | 
			
		||||
    bool isValid() const;
 | 
			
		||||
 | 
			
		||||
    bool operator ==(const ProjectInfo &other) const;
 | 
			
		||||
    bool operator !=(const ProjectInfo &other) const;
 | 
			
		||||
    bool definesChanged(const ProjectInfo &other) const;
 | 
			
		||||
    bool configurationChanged(const ProjectInfo &other) const;
 | 
			
		||||
    bool configurationOrFilesChanged(const ProjectInfo &other) const;
 | 
			
		||||
 | 
			
		||||
    QPointer<ProjectExplorer::Project> project() const;
 | 
			
		||||
    const QList<ProjectPart::Ptr> projectParts() const;
 | 
			
		||||
 | 
			
		||||
@@ -153,10 +159,16 @@ public:
 | 
			
		||||
    const QSet<QString> sourceFiles() const;
 | 
			
		||||
    const QByteArray defines() const;
 | 
			
		||||
 | 
			
		||||
    // Source file --> List of compiler calls
 | 
			
		||||
    typedef QHash<QString, QList<QStringList>> CompilerCallData;
 | 
			
		||||
    void setCompilerCallData(const CompilerCallData &data);
 | 
			
		||||
    CompilerCallData compilerCallData() const;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    QPointer<ProjectExplorer::Project> m_project;
 | 
			
		||||
    QList<ProjectPart::Ptr> m_projectParts;
 | 
			
		||||
    // The members below are (re)calculated from the project parts once a part is appended.
 | 
			
		||||
    CompilerCallData m_compilerCallData;
 | 
			
		||||
    // The members below are (re)calculated from the project parts with finish()
 | 
			
		||||
    ProjectPart::HeaderPaths m_headerPaths;
 | 
			
		||||
    QSet<QString> m_sourceFiles;
 | 
			
		||||
    QByteArray m_defines;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user