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