Example #1
0
/**
 * 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);
}
Example #2
0
/**
 * 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 );
}
Example #3
0
/**
 * 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;
}