diff --git a/src/plugins/modeleditor/componentviewcontroller.cpp b/src/plugins/modeleditor/componentviewcontroller.cpp index 1c35e912021..c790fe64dd4 100644 --- a/src/plugins/modeleditor/componentviewcontroller.cpp +++ b/src/plugins/modeleditor/componentviewcontroller.cpp @@ -161,6 +161,16 @@ void UpdateIncludeDependenciesVisitor::visitMComponent(qmt::MComponent *componen if (document) { foreach (const CPlusPlus::Document::Include &include, document->resolvedIncludes()) { QString includeFilePath = include.resolvedFileName(); + // replace proxy header with real one + CPlusPlus::Document::Ptr includeDocument = snapshot.document(includeFilePath); + if (includeDocument) { + QList includes = includeDocument->resolvedIncludes(); + if (includes.count() == 1 && + QFileInfo(includes.at(0).resolvedFileName()).fileName() == QFileInfo(includeFilePath).fileName()) + { + includeFilePath = includes.at(0).resolvedFileName(); + } + } qmt::MComponent *includeComponent = findComponentFromFilePath(includeFilePath); if (includeComponent && includeComponent != component) { // add dependency between components @@ -390,7 +400,8 @@ void ComponentViewController::createComponentModel(const QString &filePath, const QString &anchorFolder) { d->diagramSceneController->modelController()->startResetModel(); - doCreateComponentModel(filePath, diagram, anchorFolder); + doCreateComponentModel(filePath, diagram, anchorFolder, false); + doCreateComponentModel(filePath, diagram, anchorFolder, true); d->diagramSceneController->modelController()->finishResetModel(true); } @@ -404,7 +415,8 @@ void ComponentViewController::updateIncludeDependencies(qmt::MPackage *rootPacka d->diagramSceneController->modelController()->finishResetModel(true); } -void ComponentViewController::doCreateComponentModel(const QString &filePath, qmt::MDiagram *diagram, const QString &anchorFolder) +void ComponentViewController::doCreateComponentModel(const QString &filePath, qmt::MDiagram *diagram, + const QString &anchorFolder, bool scanHeaders) { for (const QString &fileName : QDir(filePath).entryList(QDir::Files)) { QString file = filePath + "/" + fileName; @@ -413,18 +425,20 @@ void ComponentViewController::doCreateComponentModel(const QString &filePath, qm bool isSource = false; CppTools::ProjectFile::Kind kind = CppTools::ProjectFile::classify(file); switch (kind) { - case CppTools::ProjectFile::AmbiguousHeader: - case CppTools::ProjectFile::CHeader: case CppTools::ProjectFile::CSource: - case CppTools::ProjectFile::CXXHeader: case CppTools::ProjectFile::CXXSource: case CppTools::ProjectFile::ObjCSource: - case CppTools::ProjectFile::ObjCHeader: case CppTools::ProjectFile::ObjCXXSource: - case CppTools::ProjectFile::ObjCXXHeader: case CppTools::ProjectFile::CudaSource: case CppTools::ProjectFile::OpenCLSource: - isSource = true; + isSource = !scanHeaders; + break; + case CppTools::ProjectFile::AmbiguousHeader: + case CppTools::ProjectFile::CHeader: + case CppTools::ProjectFile::CXXHeader: + case CppTools::ProjectFile::ObjCHeader: + case CppTools::ProjectFile::ObjCXXHeader: + isSource = scanHeaders && !isProxyHeader(file); break; case CppTools::ProjectFile::Unclassified: case CppTools::ProjectFile::Unsupported: @@ -450,9 +464,24 @@ void ComponentViewController::doCreateComponentModel(const QString &filePath, qm } for (const QString &fileName : QDir(filePath).entryList(QDir::Dirs|QDir::NoDotAndDotDot)) { QString file = filePath + "/" + fileName; - doCreateComponentModel(file, diagram, anchorFolder); + doCreateComponentModel(file, diagram, anchorFolder, scanHeaders); } } +bool ComponentViewController::isProxyHeader(const QString &file) const +{ + CppTools::CppModelManager *cppModelManager = CppTools::CppModelManager::instance(); + CPlusPlus::Snapshot snapshot = cppModelManager->snapshot(); + + CPlusPlus::Document::Ptr document = snapshot.document(file); + if (document) { + QList includes = document->resolvedIncludes(); + if (includes.count() != 1) + return false; + return QFileInfo(includes.at(0).resolvedFileName()).fileName() == QFileInfo(file).fileName(); + } + return false; +} + } // namespace Internal } // namespace ModelEditor diff --git a/src/plugins/modeleditor/componentviewcontroller.h b/src/plugins/modeleditor/componentviewcontroller.h index 98f4ac0ca6f..584bc55b50d 100644 --- a/src/plugins/modeleditor/componentviewcontroller.h +++ b/src/plugins/modeleditor/componentviewcontroller.h @@ -58,8 +58,9 @@ public: void updateIncludeDependencies(qmt::MPackage *rootPackage); private: - void doCreateComponentModel(const QString &filePath, - qmt::MDiagram *diagram, const QString &anchorFolder); + void doCreateComponentModel(const QString &filePath, qmt::MDiagram *diagram, + const QString &anchorFolder, bool scanHeaders); + bool isProxyHeader(const QString &file) const; ComponentViewControllerPrivate *d; };