| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | /**************************************************************************
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | ** | 
					
						
							|  |  |  | ** This file is part of Qt Creator | 
					
						
							|  |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | ** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-06-17 00:01:27 +10:00
										 |  |  | ** Contact: Nokia Corporation (qt-info@nokia.com) | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | ** Commercial Usage | 
					
						
							| 
									
										
										
										
											2008-12-02 14:17:16 +01:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | ** Licensees holding valid Qt Commercial licenses may use this file in | 
					
						
							|  |  |  | ** accordance with the Qt Commercial License Agreement provided with the | 
					
						
							|  |  |  | ** Software or, alternatively, in accordance with the terms contained in | 
					
						
							|  |  |  | ** a written agreement between you and Nokia. | 
					
						
							| 
									
										
										
										
											2008-12-02 14:17:16 +01:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | ** GNU Lesser General Public License Usage | 
					
						
							| 
									
										
										
										
											2008-12-02 14:17:16 +01:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | ** Alternatively, this file may be used under the terms of the GNU Lesser | 
					
						
							|  |  |  | ** General Public License version 2.1 as published by the Free Software | 
					
						
							|  |  |  | ** Foundation and appearing in the file LICENSE.LGPL included in the | 
					
						
							|  |  |  | ** packaging of this file.  Please review the following information to | 
					
						
							|  |  |  | ** ensure the GNU Lesser General Public License version 2.1 requirements | 
					
						
							|  |  |  | ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
 | 
					
						
							| 
									
										
										
										
											2008-12-02 14:17:16 +01:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | ** If you are unsure which license is appropriate for your use, please | 
					
						
							| 
									
										
										
										
											2009-06-17 00:01:27 +10:00
										 |  |  | ** contact the sales department at http://www.qtsoftware.com/contact.
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-02-25 09:15:00 +01:00
										 |  |  | **************************************************************************/ | 
					
						
							| 
									
										
										
										
											2008-12-02 14:09:21 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | #ifndef CPPDOCUMENT_H
 | 
					
						
							|  |  |  | #define CPPDOCUMENT_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <CPlusPlusForwardDeclarations.h>
 | 
					
						
							| 
									
										
										
										
											2008-12-22 14:10:47 +01:00
										 |  |  | #include "Macro.h"
 | 
					
						
							| 
									
										
										
										
											2008-12-08 12:59:33 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | #include <QByteArray>
 | 
					
						
							| 
									
										
										
										
											2009-03-26 18:04:06 +01:00
										 |  |  | #include <QFileInfo>
 | 
					
						
							| 
									
										
										
										
											2008-12-02 14:09:21 +01:00
										 |  |  | #include <QList>
 | 
					
						
							| 
									
										
										
										
											2008-12-12 10:07:58 +01:00
										 |  |  | #include <QMap>
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | #include <QSharedPointer>
 | 
					
						
							|  |  |  | #include <QString>
 | 
					
						
							|  |  |  | #include <QStringList>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace CPlusPlus { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-08 12:59:33 +01:00
										 |  |  | class Macro; | 
					
						
							| 
									
										
										
										
											2009-03-04 11:47:30 +01:00
										 |  |  | class MacroArgumentReference; | 
					
						
							| 
									
										
										
										
											2009-06-03 16:16:20 +02:00
										 |  |  | class NamespaceBinding; | 
					
						
							| 
									
										
										
										
											2008-12-08 12:59:33 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | class CPLUSPLUS_EXPORT Document | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Document(const Document &other); | 
					
						
							|  |  |  |     void operator =(const Document &other); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Document(const QString &fileName); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  |     typedef QSharedPointer<Document> Ptr; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  |     ~Document(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     QString fileName() const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     QStringList includedFiles() const; | 
					
						
							| 
									
										
										
										
											2008-12-10 17:21:01 +01:00
										 |  |  |     void addIncludeFile(const QString &fileName, unsigned line); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-08 12:59:33 +01:00
										 |  |  |     void appendMacro(const Macro ¯o); | 
					
						
							| 
									
										
										
										
											2009-03-04 11:47:30 +01:00
										 |  |  |     void addMacroUse(const Macro ¯o, unsigned offset, unsigned length, | 
					
						
							|  |  |  |                      const QVector<MacroArgumentReference> &range); | 
					
						
							| 
									
										
										
										
											2008-12-04 12:05:04 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     Control *control() const; | 
					
						
							|  |  |  |     TranslationUnit *translationUnit() const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     bool skipFunctionBody() const; | 
					
						
							|  |  |  |     void setSkipFunctionBody(bool skipFunctionBody); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     unsigned globalSymbolCount() const; | 
					
						
							|  |  |  |     Symbol *globalSymbolAt(unsigned index) const; | 
					
						
							|  |  |  |     Scope *globalSymbols() const; // ### deprecate?
 | 
					
						
							|  |  |  |     Namespace *globalNamespace() const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-08 12:59:33 +01:00
										 |  |  |     QList<Macro> definedMacros() const | 
					
						
							|  |  |  |     { return _definedMacros; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     Symbol *findSymbolAt(unsigned line, unsigned column) const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-05 14:29:57 +02:00
										 |  |  |     QByteArray source() const; | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     void setSource(const QByteArray &source); | 
					
						
							| 
									
										
										
										
											2009-06-05 14:29:57 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     void startSkippingBlocks(unsigned offset); | 
					
						
							|  |  |  |     void stopSkippingBlocks(unsigned offset); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-03 14:01:19 +01:00
										 |  |  |     enum ParseMode { // ### keep in sync with CPlusPlus::TranslationUnit
 | 
					
						
							|  |  |  |         ParseTranlationUnit, | 
					
						
							|  |  |  |         ParseDeclaration, | 
					
						
							|  |  |  |         ParseExpression, | 
					
						
							| 
									
										
										
										
											2009-03-30 15:07:30 +02:00
										 |  |  |         ParseDeclarator, | 
					
						
							| 
									
										
										
										
											2008-12-03 14:01:19 +01:00
										 |  |  |         ParseStatement | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-24 11:04:52 +01:00
										 |  |  |     bool isTokenized() const; | 
					
						
							|  |  |  |     void tokenize(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     bool isParsed() const; | 
					
						
							| 
									
										
										
										
											2008-12-03 14:01:19 +01:00
										 |  |  |     bool parse(ParseMode mode = ParseTranlationUnit); | 
					
						
							| 
									
										
										
										
											2009-02-24 11:04:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     void check(); | 
					
						
							| 
									
										
										
										
											2009-02-24 11:04:52 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     void releaseSource(); | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     void releaseTranslationUnit(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     static Ptr create(const QString &fileName); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     class DiagnosticMessage | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |     public: | 
					
						
							|  |  |  |         enum Level { | 
					
						
							|  |  |  |             Warning, | 
					
						
							|  |  |  |             Error, | 
					
						
							|  |  |  |             Fatal | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public: | 
					
						
							|  |  |  |         DiagnosticMessage(int level, const QString &fileName, | 
					
						
							|  |  |  |                           int line, int column, | 
					
						
							|  |  |  |                           const QString &text) | 
					
						
							|  |  |  |             : _level(level), | 
					
						
							|  |  |  |               _fileName(fileName), | 
					
						
							|  |  |  |               _line(line), | 
					
						
							|  |  |  |               _column(column), | 
					
						
							|  |  |  |               _text(text) | 
					
						
							|  |  |  |         { } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         int level() const | 
					
						
							|  |  |  |         { return _level; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         bool isWarning() const | 
					
						
							|  |  |  |         { return _level == Warning; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         bool isError() const | 
					
						
							|  |  |  |         { return _level == Error; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         bool isFatal() const | 
					
						
							|  |  |  |         { return _level == Fatal; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         QString fileName() const | 
					
						
							|  |  |  |         { return _fileName; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-18 10:51:25 +01:00
										 |  |  |         unsigned line() const | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         { return _line; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-18 10:51:25 +01:00
										 |  |  |         unsigned column() const | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         { return _column; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         QString text() const | 
					
						
							|  |  |  |         { return _text; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     private: | 
					
						
							|  |  |  |         int _level; | 
					
						
							|  |  |  |         QString _fileName; | 
					
						
							| 
									
										
										
										
											2008-12-18 10:51:25 +01:00
										 |  |  |         unsigned _line; | 
					
						
							|  |  |  |         unsigned _column; | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |         QString _text; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void addDiagnosticMessage(const DiagnosticMessage &d) | 
					
						
							|  |  |  |     { _diagnosticMessages.append(d); } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     QList<DiagnosticMessage> diagnosticMessages() const | 
					
						
							|  |  |  |     { return _diagnosticMessages; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     class Block | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         unsigned _begin; | 
					
						
							|  |  |  |         unsigned _end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public: | 
					
						
							|  |  |  |         inline Block(unsigned begin = 0, unsigned end = 0) | 
					
						
							|  |  |  |             : _begin(begin), _end(end) | 
					
						
							|  |  |  |         { } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         inline unsigned begin() const | 
					
						
							|  |  |  |         { return _begin; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         inline unsigned end() const | 
					
						
							|  |  |  |         { return _end; } | 
					
						
							| 
									
										
										
										
											2008-12-09 15:23:47 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         bool contains(unsigned pos) const | 
					
						
							|  |  |  |         { return pos >= _begin && pos < _end; } | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-10 17:21:01 +01:00
										 |  |  |     class Include { | 
					
						
							|  |  |  |         QString _fileName; | 
					
						
							|  |  |  |         unsigned _line; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public: | 
					
						
							|  |  |  |         Include(const QString &fileName, unsigned line) | 
					
						
							|  |  |  |             : _fileName(fileName), _line(line) | 
					
						
							|  |  |  |         { } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         QString fileName() const | 
					
						
							|  |  |  |         { return _fileName; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         unsigned line() const | 
					
						
							|  |  |  |         { return _line; } | 
					
						
							| 
									
										
										
										
											2009-03-26 18:04:06 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         bool resolved() const | 
					
						
							|  |  |  |         { return QFileInfo(_fileName).isAbsolute(); } | 
					
						
							| 
									
										
										
										
											2008-12-10 17:21:01 +01:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-09 15:23:47 +01:00
										 |  |  |     class MacroUse: public Block { | 
					
						
							|  |  |  |         Macro _macro; | 
					
						
							| 
									
										
										
										
											2009-03-04 11:47:30 +01:00
										 |  |  |         QVector<Block> _arguments; | 
					
						
							| 
									
										
										
										
											2008-12-09 15:23:47 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     public: | 
					
						
							|  |  |  |         inline MacroUse(const Macro ¯o, | 
					
						
							|  |  |  |                         unsigned begin = 0, | 
					
						
							|  |  |  |                         unsigned end = 0) | 
					
						
							|  |  |  |             : Block(begin, end), | 
					
						
							|  |  |  |               _macro(macro) | 
					
						
							|  |  |  |         { } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         const Macro ¯o() const | 
					
						
							|  |  |  |         { return _macro; } | 
					
						
							| 
									
										
										
										
											2009-03-04 11:47:30 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         bool isFunctionLike() const | 
					
						
							|  |  |  |         { return _macro.isFunctionLike(); } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         QVector<Block> arguments() const | 
					
						
							|  |  |  |         { return _arguments; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         void setArguments(const QVector<Block> &arguments) | 
					
						
							|  |  |  |         { _arguments = arguments; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         void addArgument(const Block &block) | 
					
						
							|  |  |  |         { _arguments.append(block); } | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-10 17:21:01 +01:00
										 |  |  |     QList<Include> includes() const | 
					
						
							|  |  |  |     { return _includes; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     QList<Block> skippedBlocks() const | 
					
						
							|  |  |  |     { return _skippedBlocks; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-09 15:23:47 +01:00
										 |  |  |     QList<MacroUse> macroUses() const | 
					
						
							| 
									
										
										
										
											2008-12-04 12:05:04 +01:00
										 |  |  |     { return _macroUses; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | private: | 
					
						
							|  |  |  |     Symbol *findSymbolAt(unsigned line, unsigned column, Scope *scope) const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							|  |  |  |     QString _fileName; | 
					
						
							|  |  |  |     Control *_control; | 
					
						
							|  |  |  |     TranslationUnit *_translationUnit; | 
					
						
							|  |  |  |     Namespace *_globalNamespace; | 
					
						
							|  |  |  |     QList<DiagnosticMessage> _diagnosticMessages; | 
					
						
							| 
									
										
										
										
											2008-12-10 17:21:01 +01:00
										 |  |  |     QList<Include> _includes; | 
					
						
							| 
									
										
										
										
											2008-12-08 12:59:33 +01:00
										 |  |  |     QList<Macro> _definedMacros; | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  |     QList<Block> _skippedBlocks; | 
					
						
							| 
									
										
										
										
											2008-12-09 15:23:47 +01:00
										 |  |  |     QList<MacroUse> _macroUses; | 
					
						
							| 
									
										
										
										
											2009-02-24 11:04:52 +01:00
										 |  |  |     QByteArray _source; | 
					
						
							| 
									
										
										
										
											2009-06-03 16:16:20 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     friend class Snapshot; | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-12 10:07:58 +01:00
										 |  |  | class CPLUSPLUS_EXPORT Snapshot: public QMap<QString, Document::Ptr> | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-03-04 11:47:30 +01:00
										 |  |  |     typedef QMap<QString, Document::Ptr> _Base; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-12 10:07:58 +01:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2009-03-04 11:47:30 +01:00
										 |  |  |     Snapshot(); | 
					
						
							|  |  |  |     ~Snapshot(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-15 15:38:20 +02:00
										 |  |  |     QByteArray preprocessedCode(const QString &source, | 
					
						
							| 
									
										
										
										
											2009-06-03 16:16:20 +02:00
										 |  |  |                                 const QString &fileName) const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Document::Ptr documentFromSource(const QByteArray &preprocessedCode, | 
					
						
							|  |  |  |                                      const QString &fileName) const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     QSharedPointer<NamespaceBinding> globalNamespaceBinding(Document::Ptr doc) const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-04 11:47:30 +01:00
										 |  |  |     void insert(Document::Ptr doc); | 
					
						
							| 
									
										
										
										
											2008-12-12 10:07:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-04 11:47:30 +01:00
										 |  |  |     using _Base::insert; | 
					
						
							| 
									
										
										
										
											2008-12-12 10:07:58 +01:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 12:01:29 +01:00
										 |  |  | } // end of namespace CPlusPlus
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif // CPPDOCUMENT_H
 |