File indexing completed on 2024-05-12 04:37:41

0001 /*
0002     SPDX-FileCopyrightText: 2012 Milian Wolff <mail@milianw.de>
0003     SPDX-FileCopyrightText: 2014 Kevin Funk <kfunk@kde.org>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-only
0006 */
0007 
0008 #include "renamefileaction.h"
0009 
0010 #include <debug.h>
0011 
0012 #include <language/codegen/documentchangeset.h>
0013 #include <language/codegen/basicrefactoring.h>
0014 
0015 #include <interfaces/idocumentcontroller.h>
0016 #include <interfaces/iuicontroller.h>
0017 #include <interfaces/icore.h>
0018 #include <sublime/message.h>
0019 // KF
0020 #include <KLocalizedString>
0021 
0022 using namespace KDevelop;
0023 
0024 class RenameFileActionPrivate
0025 {
0026 public:
0027     KDevelop::BasicRefactoring* m_refactoring;
0028     QUrl m_file;
0029     QString m_newName;
0030 };
0031 
0032 RenameFileAction::RenameFileAction(BasicRefactoring* refactoring, const QUrl& file, const QString& newName)
0033     : d_ptr(new RenameFileActionPrivate)
0034 {
0035     Q_D(RenameFileAction);
0036 
0037     d->m_refactoring = refactoring;
0038     d->m_file = file;
0039     d->m_newName = newName;
0040 }
0041 
0042 RenameFileAction::~RenameFileAction()
0043 {
0044 }
0045 
0046 QString RenameFileAction::description() const
0047 {
0048     Q_D(const RenameFileAction);
0049 
0050     return i18n("Rename file from \"%1\" to \"%2\".",
0051                 d->m_file.fileName(), d->m_refactoring->newFileName(d->m_file, d->m_newName));
0052 }
0053 
0054 void RenameFileAction::execute()
0055 {
0056     Q_D(RenameFileAction);
0057 
0058     // save document to prevent unwanted dialogs
0059     IDocument* doc = ICore::self()->documentController()->documentForUrl(d->m_file);
0060     if (!doc) {
0061         qCWarning(LANGUAGE) << "could find no document for url:" << d->m_file;
0062         return;
0063     }
0064 
0065     if (!ICore::self()->documentController()->saveSomeDocuments(QList<IDocument*>() << doc, IDocument::Silent)) {
0066         return;
0067     }
0068 
0069     // rename document
0070     DocumentChangeSet changes;
0071     DocumentChangeSet::ChangeResult result = d->m_refactoring->addRenameFileChanges(d->m_file, d->m_newName, &changes);
0072     if (result) {
0073         result = changes.applyAllChanges();
0074     }
0075     if (!result) {
0076         auto* message = new Sublime::Message(i18n("Failed to apply changes: %1", result.m_failureReason), Sublime::Message::Error);
0077         ICore::self()->uiController()->postMessage(message);
0078     }
0079     emit executed(this);
0080 }
0081 
0082 #include "moc_renamefileaction.cpp"