From 7ab30d8a63aff133a1a216f4832919e8e25d77aa Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@nokia.com> Date: Mon, 9 Aug 2010 12:23:21 +0200 Subject: [PATCH] C++-Settings/License template: Add %FILENAME%, %CLASS% placeholders. ... for doxygen. Change logic for known empty keywords to be replaced by an empty string. Task-number: QTCREATORBUG-1854 --- src/plugins/cppeditor/cppclasswizard.cpp | 11 +++-- src/plugins/cppeditor/cppfilewizard.cpp | 3 +- .../cpptools/abstracteditorsupport.cpp | 4 +- src/plugins/cpptools/cppfilesettingspage.cpp | 45 +++++++++++++------ src/plugins/cpptools/cppfilesettingspage.h | 2 +- .../cpptools/cppmodelmanagerinterface.h | 2 +- .../cpp/formclasswizardparameters.cpp | 9 ++-- .../customwidgetwizard/customwidgetwizard.cpp | 2 - .../customwidgetwizard/plugingenerator.cpp | 20 ++++++--- .../customwidgetwizard/plugingenerator.h | 1 - .../wizards/consoleappwizard.cpp | 3 +- .../wizards/guiappwizard.cpp | 9 ++-- .../wizards/librarywizard.cpp | 10 +++-- .../qt4projectmanager/wizards/testwizard.cpp | 2 +- 14 files changed, 78 insertions(+), 45 deletions(-) diff --git a/src/plugins/cppeditor/cppclasswizard.cpp b/src/plugins/cppeditor/cppclasswizard.cpp index 3f7e66b56df..6c841fcd689 100644 --- a/src/plugins/cppeditor/cppclasswizard.cpp +++ b/src/plugins/cppeditor/cppclasswizard.cpp @@ -233,14 +233,19 @@ bool CppClassWizard::generateHeaderAndSource(const CppClassWizardParameters &par if (namespaceList.empty()) // Paranoia! return false; - const QString license = CppTools::AbstractEditorSupport::licenseTemplate(); + const QString headerLicense = + CppTools::AbstractEditorSupport::licenseTemplate(params.headerFile, + params.className); + const QString sourceLicense = + CppTools::AbstractEditorSupport::licenseTemplate(params.sourceFile, + params.className); const QString unqualifiedClassName = namespaceList.takeLast(); const QString guard = Utils::headerGuard(params.headerFile); // == Header file == QTextStream headerStr(header); - headerStr << license << "#ifndef " << guard + headerStr << headerLicense << "#ifndef " << guard << "\n#define " << guard << '\n'; const QRegExp qtClassExpr(QLatin1String("^Q[A-Z3].+")); @@ -328,7 +333,7 @@ bool CppClassWizard::generateHeaderAndSource(const CppClassWizardParameters &par // == Source file == QTextStream sourceStr(source); - sourceStr << license; + sourceStr << sourceLicense; Utils::writeIncludeFileDirective(params.headerFile, false, sourceStr); if (params.classType == Utils::NewClassWidget::SharedDataClass) Utils::writeIncludeFileDirective(QLatin1String("QSharedData"), true, sourceStr); diff --git a/src/plugins/cppeditor/cppfilewizard.cpp b/src/plugins/cppeditor/cppfilewizard.cpp index eff7f242661..2a0cf9b2dd3 100644 --- a/src/plugins/cppeditor/cppfilewizard.cpp +++ b/src/plugins/cppeditor/cppfilewizard.cpp @@ -68,10 +68,9 @@ Core::GeneratedFiles CppFileWizard::generateFilesFromPath(const QString &path, QString CppFileWizard::fileContents(FileType type, const QString &fileName) const { - const QString baseName = QFileInfo(fileName).completeBaseName(); QString contents; QTextStream str(&contents); - str << CppTools::AbstractEditorSupport::licenseTemplate(); + str << CppTools::AbstractEditorSupport::licenseTemplate(fileName); switch (type) { case Header: { const QString guard = Utils::headerGuard(fileName); diff --git a/src/plugins/cpptools/abstracteditorsupport.cpp b/src/plugins/cpptools/abstracteditorsupport.cpp index 6a1578d64e3..d1edabf72d9 100644 --- a/src/plugins/cpptools/abstracteditorsupport.cpp +++ b/src/plugins/cpptools/abstracteditorsupport.cpp @@ -92,9 +92,9 @@ QString AbstractEditorSupport::functionAt(const CppModelManagerInterface *modelM return QString(); } -QString AbstractEditorSupport::licenseTemplate() +QString AbstractEditorSupport::licenseTemplate(const QString &file, const QString &className) { - return Internal::CppFileSettings::licenseTemplate(); + return Internal::CppFileSettings::licenseTemplate(file, className); } } diff --git a/src/plugins/cpptools/cppfilesettingspage.cpp b/src/plugins/cpptools/cppfilesettingspage.cpp index b3833e016fe..397cb912808 100644 --- a/src/plugins/cpptools/cppfilesettingspage.cpp +++ b/src/plugins/cpptools/cppfilesettingspage.cpp @@ -41,6 +41,7 @@ #include <QtCore/QSettings> #include <QtCore/QDebug> #include <QtCore/QFile> +#include <QtCore/QFileInfo> #include <QtCore/QCoreApplication> #include <QtCore/QDate> #include <QtCore/QLocale> @@ -106,10 +107,22 @@ bool CppFileSettings::equals(const CppFileSettings &rhs) const } // Replacements of special license template keywords. -static QString keyWordReplacement(const QString &keyWord) +static bool keyWordReplacement(const QString &keyWord, + const QString &file, + const QString &className, + QString *value) { if (keyWord == QLatin1String("%YEAR%")) { - return QString::number(QDate::currentDate().year()); + *value = QString::number(QDate::currentDate().year()); + return true; + } + if (keyWord == QLatin1String("%CLASS%")) { + *value = className; + return true; + } + if (keyWord == QLatin1String("%FILENAME%")) { + *value = QFileInfo(file).fileName(); + return true; } if (keyWord == QLatin1String("%DATE%")) { static QString format; @@ -121,26 +134,29 @@ static QString keyWordReplacement(const QString &keyWord) if (format.count(ypsilon) == 2) format.insert(format.indexOf(ypsilon), QString(2, ypsilon)); } - return QDate::currentDate().toString(format); + *value = QDate::currentDate().toString(format); + return true; } if (keyWord == QLatin1String("%USER%")) { #ifdef Q_OS_WIN - return QString::fromLocal8Bit(qgetenv("USERNAME")); + *value = QString::fromLocal8Bit(qgetenv("USERNAME")); #else - return QString::fromLocal8Bit(qgetenv("USER")); + *value = QString::fromLocal8Bit(qgetenv("USER")); #endif + return true; } // Environment variables (for example '%$EMAIL%'). if (keyWord.startsWith(QLatin1String("%$"))) { const QString varName = keyWord.mid(2, keyWord.size() - 3); - return QString::fromLocal8Bit(qgetenv(varName.toLocal8Bit())); + *value = QString::fromLocal8Bit(qgetenv(varName.toLocal8Bit())); + return true; } - return QString(); + return false; } // Parse a license template, scan for %KEYWORD% and replace if known. // Replace '%%' by '%'. -static void parseLicenseTemplatePlaceholders(QString *t) +static void parseLicenseTemplatePlaceholders(QString *t, const QString &file, const QString &className) { int pos = 0; const QChar placeHolder = QLatin1Char('%'); @@ -156,19 +172,20 @@ static void parseLicenseTemplatePlaceholders(QString *t) pos = placeHolderPos + 1; } else { const QString keyWord = t->mid(placeHolderPos, endPlaceHolderPos + 1 - placeHolderPos); - const QString replacement = keyWordReplacement(keyWord); - if (replacement.isEmpty()) { - pos = endPlaceHolderPos + 1; - } else { + QString replacement; + if (keyWordReplacement(keyWord, file, className, &replacement)) { t->replace(placeHolderPos, keyWord.size(), replacement); pos = placeHolderPos + replacement.size(); + } else { + // Leave invalid keywords as is. + pos = endPlaceHolderPos + 1; } } } while (pos < t->size()); } // Convenience that returns the formatted license template. -QString CppFileSettings::licenseTemplate() +QString CppFileSettings::licenseTemplate(const QString &fileName, const QString &className) { const QSettings *s = Core::ICore::instance()->settings(); @@ -184,7 +201,7 @@ QString CppFileSettings::licenseTemplate() return QString(); } QString license = QString::fromUtf8(file.readAll()); - parseLicenseTemplatePlaceholders(&license); + parseLicenseTemplatePlaceholders(&license, fileName, className); // Ensure exactly one additional new line separating stuff const QChar newLine = QLatin1Char('\n'); if (!license.endsWith(newLine)) diff --git a/src/plugins/cpptools/cppfilesettingspage.h b/src/plugins/cpptools/cppfilesettingspage.h index 6ee51051656..f00ce4c1f44 100644 --- a/src/plugins/cpptools/cppfilesettingspage.h +++ b/src/plugins/cpptools/cppfilesettingspage.h @@ -60,7 +60,7 @@ struct CppFileSettings // Convenience to return a license template completely formatted. // Currently made public in - static QString licenseTemplate(); + static QString licenseTemplate(const QString &file = QString(), const QString &className = QString()); bool equals(const CppFileSettings &rhs) const; }; diff --git a/src/plugins/cpptools/cppmodelmanagerinterface.h b/src/plugins/cpptools/cppmodelmanagerinterface.h index aab5cf4ad57..cf95b468a82 100644 --- a/src/plugins/cpptools/cppmodelmanagerinterface.h +++ b/src/plugins/cpptools/cppmodelmanagerinterface.h @@ -170,7 +170,7 @@ public: const QString &fileName, int line, int column); - static QString licenseTemplate(); + static QString licenseTemplate(const QString &file = QString(), const QString &className = QString()); private: CppModelManagerInterface *m_modelmanager; diff --git a/src/plugins/designer/cpp/formclasswizardparameters.cpp b/src/plugins/designer/cpp/formclasswizardparameters.cpp index 922c97ef985..9fdd1692e9d 100644 --- a/src/plugins/designer/cpp/formclasswizardparameters.cpp +++ b/src/plugins/designer/cpp/formclasswizardparameters.cpp @@ -341,7 +341,10 @@ bool FormClassWizardParametersPrivate::generateCpp(const FormClassWizardGenerati const QString unqualifiedClassName = namespaceList.takeLast(); - const QString license = CppTools::AbstractEditorSupport::licenseTemplate(); + const QString headerLicense = + CppTools::AbstractEditorSupport::licenseTemplate(headerFile, className); + const QString sourceLicense = + CppTools::AbstractEditorSupport::licenseTemplate(sourceFile, className); // Include guards const QString guard = Utils::headerGuard(headerFile); @@ -351,7 +354,7 @@ bool FormClassWizardParametersPrivate::generateCpp(const FormClassWizardGenerati // 1) Header file QTextStream headerStr(header); - headerStr << license << "#ifndef " << guard + headerStr << headerLicense << "#ifndef " << guard << "\n#define " << guard << '\n' << '\n'; // Include 'ui_' @@ -409,7 +412,7 @@ bool FormClassWizardParametersPrivate::generateCpp(const FormClassWizardGenerati // 2) Source file QTextStream sourceStr(source); - sourceStr << license; + sourceStr << sourceLicense; Utils::writeIncludeFileDirective(headerFile, false, sourceStr); if (embedding == FormClassWizardGenerationParameters::PointerAggregatedUiClass) Utils::writeIncludeFileDirective(uiInclude, false, sourceStr); diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.cpp b/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.cpp index cbc94a4028a..c59d5f321f0 100644 --- a/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.cpp +++ b/src/plugins/qt4projectmanager/customwidgetwizard/customwidgetwizard.cpp @@ -33,7 +33,6 @@ #include "pluginoptions.h" #include "filenamingparameters.h" -#include <cpptools/cppmodelmanagerinterface.h> #include <projectexplorer/projectexplorerconstants.h> #include <QtGui/QIcon> @@ -71,7 +70,6 @@ Core::GeneratedFiles CustomWidgetWizard::generateFiles(const QWizard *w, GenerationParameters p; p.fileName = cw->projectName(); p.path = cw->path(); - p.license = CppTools::AbstractEditorSupport::licenseTemplate(); p.templatePath = QtWizard::templateDir(); p.templatePath += QLatin1String("/customwidgetwizard"); return PluginGenerator::generatePlugin(p, *(cw->pluginOptions()), errorMessage); diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.cpp b/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.cpp index 0da9c70f200..0ad9269cf7e 100644 --- a/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.cpp +++ b/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.cpp @@ -32,6 +32,8 @@ #include <coreplugin/basefilewizard.h> +#include <cpptools/cppmodelmanagerinterface.h> + #include <QtCore/QFileInfo> #include <QtCore/QDir> #include <QtCore/QSet> @@ -103,7 +105,8 @@ QList<Core::GeneratedFile> PluginGenerator::generatePlugin(const GenerationPara if (pluginHeaderContents.isEmpty()) return QList<Core::GeneratedFile>(); Core::GeneratedFile pluginHeader(baseDir + wo.pluginHeaderFile); - pluginHeader.setContents(p.license + pluginHeaderContents); + pluginHeader.setContents(CppTools::AbstractEditorSupport::licenseTemplate(wo.pluginHeaderFile, wo.pluginClassName) + + pluginHeaderContents); rc.push_back(pluginHeader); sm.remove(QLatin1String("SINGLE_INCLUDE_GUARD")); @@ -134,7 +137,8 @@ QList<Core::GeneratedFile> PluginGenerator::generatePlugin(const GenerationPara if (pluginSourceContents.isEmpty()) return QList<Core::GeneratedFile>(); Core::GeneratedFile pluginSource(baseDir + wo.pluginSourceFile); - pluginSource.setContents(p.license + pluginSourceContents); + pluginSource.setContents(CppTools::AbstractEditorSupport::licenseTemplate(wo.pluginSourceFile, wo.pluginClassName) + + pluginSourceContents); if (i == 0 && widgetCount == 1) // Open first widget unless collection pluginSource.setAttributes(Core::GeneratedFile::OpenEditorAttribute); rc.push_back(pluginSource); @@ -179,7 +183,8 @@ QList<Core::GeneratedFile> PluginGenerator::generatePlugin(const GenerationPara if (widgetHeaderContents.isEmpty()) return QList<Core::GeneratedFile>(); Core::GeneratedFile widgetHeader(baseDir + wo.widgetHeaderFile); - widgetHeader.setContents(p.license + widgetHeaderContents); + widgetHeader.setContents(CppTools::AbstractEditorSupport::licenseTemplate(wo.widgetHeaderFile, wo.widgetClassName) + + widgetHeaderContents); rc.push_back(widgetHeader); sm.remove(QLatin1String("WIDGET_INCLUDE_GUARD")); @@ -188,7 +193,8 @@ QList<Core::GeneratedFile> PluginGenerator::generatePlugin(const GenerationPara if (widgetSourceContents.isEmpty()) return QList<Core::GeneratedFile>(); Core::GeneratedFile widgetSource(baseDir + wo.widgetSourceFile); - widgetSource.setContents(p.license + widgetSourceContents); + widgetSource.setContents(CppTools::AbstractEditorSupport::licenseTemplate(wo.widgetSourceFile, wo.widgetClassName) + + widgetSourceContents); rc.push_back(widgetSource); } } @@ -221,7 +227,8 @@ QList<Core::GeneratedFile> PluginGenerator::generatePlugin(const GenerationPara if (collectionHeaderContents.isEmpty()) return QList<Core::GeneratedFile>(); Core::GeneratedFile collectionHeader(baseDir + options.collectionHeaderFile); - collectionHeader.setContents(p.license + collectionHeaderContents); + collectionHeader.setContents(CppTools::AbstractEditorSupport::licenseTemplate(options.collectionHeaderFile, options.collectionClassName) + + collectionHeaderContents); rc.push_back(collectionHeader); sm.remove(QLatin1String("COLLECTION_INCLUDE_GUARD")); @@ -241,7 +248,8 @@ QList<Core::GeneratedFile> PluginGenerator::generatePlugin(const GenerationPara if (collectionSourceFileContents.isEmpty()) return QList<Core::GeneratedFile>(); Core::GeneratedFile collectionSource(baseDir + options.collectionSourceFile); - collectionSource.setContents(p.license + collectionSourceFileContents); + collectionSource.setContents(CppTools::AbstractEditorSupport::licenseTemplate(options.collectionSourceFile, options.collectionClassName) + + collectionSourceFileContents); collectionSource.setAttributes(Core::GeneratedFile::OpenEditorAttribute); rc.push_back(collectionSource); diff --git a/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.h b/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.h index c0de7d2d573..7680dfaa820 100644 --- a/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.h +++ b/src/plugins/qt4projectmanager/customwidgetwizard/plugingenerator.h @@ -51,7 +51,6 @@ struct PluginOptions; struct GenerationParameters { QString path; QString fileName; - QString license; QString templatePath; }; diff --git a/src/plugins/qt4projectmanager/wizards/consoleappwizard.cpp b/src/plugins/qt4projectmanager/wizards/consoleappwizard.cpp index d12e3f0e0b9..fa8dc638407 100644 --- a/src/plugins/qt4projectmanager/wizards/consoleappwizard.cpp +++ b/src/plugins/qt4projectmanager/wizards/consoleappwizard.cpp @@ -81,13 +81,12 @@ Core::GeneratedFiles const ConsoleAppWizardDialog *wizard = qobject_cast< const ConsoleAppWizardDialog *>(w); const QtProjectParameters params = wizard->parameters(); const QString projectPath = params.projectPath(); - const QString license = CppTools::AbstractEditorSupport::licenseTemplate(); // Create files: Source const QString sourceFileName = Core::BaseFileWizard::buildFileName(projectPath, QLatin1String(mainSourceFileC), sourceSuffix()); Core::GeneratedFile source(sourceFileName); - source.setContents(license + QLatin1String(mainCppC)); + source.setContents(CppTools::AbstractEditorSupport::licenseTemplate(sourceFileName) + QLatin1String(mainCppC)); source.setAttributes(Core::GeneratedFile::OpenEditorAttribute); // Create files: Profile const QString profileName = Core::BaseFileWizard::buildFileName(projectPath, params.fileName, profileSuffix()); diff --git a/src/plugins/qt4projectmanager/wizards/guiappwizard.cpp b/src/plugins/qt4projectmanager/wizards/guiappwizard.cpp index a112fb13ae5..24e63444983 100644 --- a/src/plugins/qt4projectmanager/wizards/guiappwizard.cpp +++ b/src/plugins/qt4projectmanager/wizards/guiappwizard.cpp @@ -165,7 +165,8 @@ Core::GeneratedFiles GuiAppWizard::generateFiles(const QWizard *w, Core::GeneratedFile mainSource(mainSourceFileName); if (!parametrizeTemplate(templatePath, QLatin1String("main.cpp"), params, &contents, errorMessage)) return Core::GeneratedFiles(); - mainSource.setContents(license + contents); + mainSource.setContents(CppTools::AbstractEditorSupport::licenseTemplate(mainSourceFileName) + + contents); // Create files: form source with or without form const QString formSourceFileName = buildFileName(projectPath, params.sourceFileName, sourceSuffix()); const QString formHeaderName = buildFileName(projectPath, params.headerFileName, headerSuffix()); @@ -187,13 +188,15 @@ Core::GeneratedFiles GuiAppWizard::generateFiles(const QWizard *w, const QString formSourceTemplate = QLatin1String("mywidget.cpp"); if (!parametrizeTemplate(templatePath, formSourceTemplate, params, &contents, errorMessage)) return Core::GeneratedFiles(); - formSource.setContents(license + contents); + formSource.setContents(CppTools::AbstractEditorSupport::licenseTemplate(formSourceFileName) + + contents); formSource.setAttributes(Core::GeneratedFile::OpenEditorAttribute); // Create files: form header const QString formHeaderTemplate = QLatin1String("mywidget.h"); if (!parametrizeTemplate(templatePath, formHeaderTemplate, params, &contents, errorMessage)) return Core::GeneratedFiles(); - formHeader.setContents(license + contents); + formHeader.setContents(CppTools::AbstractEditorSupport::licenseTemplate(formHeaderName) + + contents); } // Create files: profile const QString profileName = buildFileName(projectPath, projectParams.fileName, profileSuffix()); diff --git a/src/plugins/qt4projectmanager/wizards/librarywizard.cpp b/src/plugins/qt4projectmanager/wizards/librarywizard.cpp index 39eede1791c..e86de20dcd3 100644 --- a/src/plugins/qt4projectmanager/wizards/librarywizard.cpp +++ b/src/plugins/qt4projectmanager/wizards/librarywizard.cpp @@ -82,7 +82,6 @@ Core::GeneratedFiles LibraryWizard::generateFiles(const QWizard *w, const QtProjectParameters projectParams = dialog->parameters(); const QString projectPath = projectParams.projectPath(); const LibraryParameters params = dialog->libraryParameters(); - const QString license = CppTools::AbstractEditorSupport::licenseTemplate(); const QString sharedLibExportMacro = QtProjectParameters::exportMacro(projectParams.fileName); @@ -102,7 +101,8 @@ Core::GeneratedFiles LibraryWizard::generateFiles(const QWizard *w, const QString globalHeaderName = buildFileName(projectPath, projectParams.fileName + QLatin1String(sharedHeaderPostfixC), headerSuffix()); Core::GeneratedFile globalHeader(globalHeaderName); globalHeaderFileName = QFileInfo(globalHeader.path()).fileName(); - globalHeader.setContents(license + LibraryParameters::generateSharedHeader(globalHeaderFileName, projectParams.fileName, sharedLibExportMacro)); + globalHeader.setContents(CppTools::AbstractEditorSupport::licenseTemplate(globalHeaderFileName) + + LibraryParameters::generateSharedHeader(globalHeaderFileName, projectParams.fileName, sharedLibExportMacro)); rc.push_back(globalHeader); } @@ -112,8 +112,10 @@ Core::GeneratedFiles LibraryWizard::generateFiles(const QWizard *w, globalHeaderFileName, sharedLibExportMacro, /* indentation*/ 4, &headerContents, &sourceContents); - source.setContents(license + sourceContents); - header.setContents(license + headerContents); + source.setContents(CppTools::AbstractEditorSupport::licenseTemplate(sourceFileName, params.className) + + sourceContents); + header.setContents(CppTools::AbstractEditorSupport::licenseTemplate(headerFileFullName, params.className) + + headerContents); rc.push_back(source); rc.push_back(header); // Create files: profile diff --git a/src/plugins/qt4projectmanager/wizards/testwizard.cpp b/src/plugins/qt4projectmanager/wizards/testwizard.cpp index 55b3e21ae84..a493270e2ba 100644 --- a/src/plugins/qt4projectmanager/wizards/testwizard.cpp +++ b/src/plugins/qt4projectmanager/wizards/testwizard.cpp @@ -96,7 +96,7 @@ static QString generateTestCode(const TestWizardParameters &testParams, const QString indent = QString(4, QLatin1Char(' ')); QTextStream str(&rc); // Includes - str << CppTools::AbstractEditorSupport::licenseTemplate() + str << CppTools::AbstractEditorSupport::licenseTemplate(testParams.fileName, testParams.className) << "#include <QtCore/QString>\n#include <QtTest/QtTest>\n"; if (testParams.requiresQApplication) str << "#include <QtCore/QCoreApplication>\n"; -- GitLab