/** * Import a single file. * @param fileName The file to import. */ void CppImport::parseFile(const QString& fileName) { if (ms_seenFiles.indexOf(fileName) != -1) return; ms_driver->parseFile( fileName ); feedTheModel(fileName); }
/** * Auxiliary method for recursively traversing the #include dependencies * in order to feed innermost includes to the model before dependent * includes. It is important that includefiles are fed to the model * in proper order so that references between UML objects are created * properly. * @param fileName the file to import */ void CppImport::feedTheModel(const QString& fileName) { if (ms_seenFiles.indexOf(fileName) != -1) return; ms_seenFiles.append(fileName); QMap<QString, Dependence> deps = ms_driver->dependences(fileName); if (! deps.empty()) { QMap<QString, Dependence>::Iterator it; for (it = deps.begin(); it != deps.end(); ++it) { if (it.value().second == Dep_Global) // don't want these continue; QString includeFile = it.key(); if (includeFile.isEmpty()) { uError() << fileName << ": " << it.value().first << " not found"; continue; } uDebug() << fileName << ": " << includeFile << " => " << it.value().first; if (ms_seenFiles.indexOf(includeFile) == -1) feedTheModel(includeFile); } } TranslationUnitAST *ast = ms_driver->translationUnit( fileName ); if (ast == NULL) { uError() << fileName << " not found"; return; } CppTree2Uml modelFeeder( fileName ); modelFeeder.parseTranslationUnit( ast ); }
/** * Import a single file. * @param fileName The file to import. */ bool CppImport::parseFile(const QString& fileName) { if (ms_seenFiles.indexOf(fileName) != -1) return true; bool result = ms_driver->parseFile(fileName); foreach(const Problem &problem, ms_driver->problems(fileName)) { QString level; if (problem.level() == Problem::Level_Error) level = QLatin1String("error"); else if (problem.level() == Problem::Level_Warning) level = QLatin1String("warning"); else if (problem.level() == Problem::Level_Todo) level = QLatin1String("todo"); else if (problem.level() == Problem::Level_Fixme) level = QLatin1String("fixme"); QString item = QString::fromLatin1("%1:%2:%3: %4: %5") .arg(problem.fileName()).arg(problem.line()+1) .arg(problem.column()).arg(level).arg(problem.text()); UMLApp::app()->logWindow()->addItem(item); } if (!result) return false; feedTheModel(fileName); return true; }