source: trunk/tools/porting/src/tokenreplacements.h@ 497

Last change on this file since 497 was 2, checked in by Dmitry A. Kuminov, 16 years ago

Initially imported qt-all-opensource-src-4.5.1 from Trolltech.

File size: 5.2 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4** Contact: Qt Software Information ([email protected])
5**
6** This file is part of the qt3to4 porting application of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial Usage
10** Licensees holding valid Qt Commercial licenses may use this file in
11** accordance with the Qt Commercial License Agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and Nokia.
14**
15** GNU Lesser General Public License Usage
16** Alternatively, this file may be used under the terms of the GNU Lesser
17** General Public License version 2.1 as published by the Free Software
18** Foundation and appearing in the file LICENSE.LGPL included in the
19** packaging of this file. Please review the following information to
20** ensure the GNU Lesser General Public License version 2.1 requirements
21** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
22**
23** In addition, as a special exception, Nokia gives you certain
24** additional rights. These rights are described in the Nokia Qt LGPL
25** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
26** package.
27**
28** GNU General Public License Usage
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file. Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35**
36** If you are unsure which license is appropriate for your use, please
37** contact the sales department at [email protected].
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42#ifndef TOKENREPLACEMENTS_H
43#define TOKENREPLACEMENTS_H
44
45#include "tokenengine.h"
46#include "textreplacement.h"
47#include <QStringList>
48#include <QByteArray>
49
50QT_BEGIN_NAMESPACE
51
52void addLogSourceEntry(const QString &text, const TokenEngine::TokenContainer&, const int index);
53void addLogWarning(const QString &text);
54
55class TokenReplacement
56{
57public:
58
59 virtual bool doReplace(const TokenEngine::TokenContainer& ,
60 int /*tokenIndex*/,
61 TextReplacements&){return false;};
62 /*
63 returns the replace key for this replacement. Every time a token matches the replace key,
64 doReplace() will be called for this TokenReplacement.
65 */
66 virtual QByteArray getReplaceKey(){return QByteArray();};
67 virtual ~TokenReplacement(){};
68};
69
70/*
71 A TokenReplacement that change any token
72*/
73class GenericTokenReplacement : public TokenReplacement
74{
75public:
76 GenericTokenReplacement(QByteArray oldToken, QByteArray newToken);
77 bool doReplace(const TokenEngine::TokenContainer &tokenContainer,
78 int tokenIndex, TextReplacements &textReplacements);
79 QByteArray getReplaceKey();
80private:
81 QByteArray oldToken;
82 QByteArray newToken;
83};
84
85/*
86 A TokenReplacement that changes tokens that specify class names.
87 In some cases where the class name token is a part of a qualified name
88 it is not correct to rename it. ex:
89
90 QButton::toggleState
91
92 Here it is wrong to rename QButton -> Q3Button, since there is
93 a rule that says QButton::ToggleState -> QCheckBox::ToggleState,
94 but no rule for Q3Button::ToggleState.
95*/
96class ClassNameReplacement : public TokenReplacement
97{
98public:
99 ClassNameReplacement(QByteArray oldToken, QByteArray newToken);
100 bool doReplace(const TokenEngine::TokenContainer &tokenContainer,
101 int tokenIndex, TextReplacements &textReplacements);
102 QByteArray getReplaceKey();
103private:
104 QByteArray oldToken;
105 QByteArray newToken;
106};
107
108/*
109 Changes scoped tokens:
110 AA::BB -> CC::DD
111 oldToken corresponds to the AA::BB part, newToken corresponds CC::DD.
112 Since this is a token replacement, the AA part of oldToken is typically
113 unknown. This means that we might change tokens named BB that does not belong
114 to the AA scope. Ast replacemnts will fix this.
115
116*/
117class ScopedTokenReplacement : public TokenReplacement
118{
119public:
120 ScopedTokenReplacement(const QByteArray &oldToken, const QByteArray &newToken);
121 bool doReplace(const TokenEngine::TokenContainer &tokenContainer,
122 int tokenIndex, TextReplacements &textReplacements);
123 QByteArray getReplaceKey();
124private:
125 QByteArray oldName;
126 QByteArray oldScope;
127 QByteArray newName;
128 QByteArray newScope;
129 QByteArray newScopedName;
130 bool strictMode;
131};
132
133class QualifiedNameParser
134{
135public:
136 QualifiedNameParser(const TokenEngine::TokenContainer &tokenContainer,
137 const int tokenIndex);
138 enum Direction { Left=-1, Right=1 };
139 bool isPartOfQualifiedName();
140 bool isValidIndex(int index);
141 bool isQualifier();
142 bool isName();
143 int peek(Direction direction);
144 int move(Direction direction);
145private:
146 int nextScopeToken(Direction direction);
147 int findScopeOperator(Direction direction);
148 const TokenEngine::TokenContainer tokenContainer;
149 int currentIndex;
150};
151
152QT_END_NAMESPACE
153
154#endif
Note: See TracBrowser for help on using the repository browser.