1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2016 The Qt Company Ltd. 4 ** Contact: https://www.qt.io/licensing/ 5 ** 6 ** This file is part of Qt Creator. 7 ** 8 ** Commercial License Usage 9 ** Licensees holding valid commercial Qt licenses may use this file in 10 ** accordance with the commercial license agreement provided with the 11 ** Software or, alternatively, in accordance with the terms contained in 12 ** a written agreement between you and The Qt Company. For licensing terms 13 ** and conditions see https://www.qt.io/terms-conditions. For further 14 ** information use the contact form at https://www.qt.io/contact-us. 15 ** 16 ** GNU General Public License Usage 17 ** Alternatively, this file may be used under the terms of the GNU 18 ** General Public License version 3 as published by the Free Software 19 ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT 20 ** included in the packaging of this file. Please review the following 21 ** information to ensure the GNU General Public License requirements will 22 ** be met: https://www.gnu.org/licenses/gpl-3.0.html. 23 ** 24 ****************************************************************************/ 25 26 #pragma once 27 28 #include "qmljstools_global.h" 29 30 #include <qmljs/qmljsdocument.h> 31 32 #include <texteditor/refactoringchanges.h> 33 34 namespace QmlJS { class ModelManagerInterface; } 35 36 namespace QmlJSTools { 37 38 class QmlJSRefactoringChanges; 39 class QmlJSRefactoringFile; 40 class QmlJSRefactoringChangesData; 41 using QmlJSRefactoringFilePtr = QSharedPointer<QmlJSRefactoringFile>; 42 43 class QMLJSTOOLS_EXPORT QmlJSRefactoringFile: public TextEditor::RefactoringFile 44 { 45 public: 46 QmlJS::Document::Ptr qmljsDocument() const; 47 48 /*! 49 \returns the offset in the document for the start position of the given 50 source location. 51 */ 52 unsigned startOf(const QmlJS::SourceLocation &loc) const; 53 54 bool isCursorOn(QmlJS::AST::UiObjectMember *ast) const; 55 bool isCursorOn(QmlJS::AST::UiQualifiedId *ast) const; 56 bool isCursorOn(QmlJS::SourceLocation loc) const; 57 58 protected: 59 QmlJSRefactoringFile(const Utils::FilePath &filePath, 60 const QSharedPointer<TextEditor::RefactoringChangesData> &data); 61 QmlJSRefactoringFile(TextEditor::TextEditorWidget *editor, QmlJS::Document::Ptr document); 62 63 QmlJSRefactoringChangesData *data() const; 64 void fileChanged() override; 65 66 mutable QmlJS::Document::Ptr m_qmljsDocument; 67 68 friend class QmlJSRefactoringChanges; 69 }; 70 71 72 class QMLJSTOOLS_EXPORT QmlJSRefactoringChanges: public TextEditor::RefactoringChanges 73 { 74 public: 75 QmlJSRefactoringChanges(QmlJS::ModelManagerInterface *modelManager, 76 const QmlJS::Snapshot &snapshot); 77 78 static QmlJSRefactoringFilePtr file(TextEditor::TextEditorWidget *editor, 79 const QmlJS::Document::Ptr &document); 80 QmlJSRefactoringFilePtr file(const Utils::FilePath &filePath) const; 81 82 const QmlJS::Snapshot &snapshot() const; 83 84 private: 85 QmlJSRefactoringChangesData *data() const; 86 }; 87 88 } // namespace QmlJSTools 89