| 111 | DefinesAndIncludesManager::~DefinesAndIncludesManager() = default; |
| 112 | |
| 113 | Defines DefinesAndIncludesManager::defines( ProjectBaseItem* item, Type type ) const |
| 114 | { |
| 115 | Q_ASSERT(QThread::currentThread() == qApp->thread()); |
| 116 | |
| 117 | if (!item) { |
| 118 | return m_settings->provider()->defines(nullptr); |
| 119 | } |
| 120 | |
| 121 | Defines defines; |
| 122 | |
| 123 | for (auto provider : m_providers) { |
| 124 | if (provider->type() & type) { |
| 125 | merge(&defines, provider->defines(item)); |
| 126 | } |
| 127 | } |
| 128 | |
| 129 | if ( type & ProjectSpecific ) { |
| 130 | auto buildManager = item->project()->buildSystemManager(); |
| 131 | if ( buildManager ) { |
| 132 | merge(&defines, buildManager->defines(item)); |
| 133 | } |
| 134 | } |
| 135 | |
| 136 | // Manually set defines have the highest priority and overwrite values of all other types of defines. |
| 137 | if (type & UserDefined) { |
| 138 | auto cfg = item->project()->projectConfiguration().data(); |
| 139 | |
| 140 | merge(&defines, findConfigForItem(m_settings->readPaths(cfg), item).defines); |
| 141 | } |
| 142 | |
| 143 | merge(&defines, NoProjectIncludePathsManager::defines(item->path().path())); |
| 144 | |
| 145 | return defines; |
| 146 | } |
| 147 | |
| 148 | Path::List DefinesAndIncludesManager::includes( ProjectBaseItem* item, Type type ) const |
| 149 | { |
nothing calls this directly
no test coverage detected