| 
									
										
										
										
											2012-10-02 09:12:39 +02:00
										 |  |  | /****************************************************************************
 | 
					
						
							| 
									
										
										
										
											2009-07-13 11:40:54 +02:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2013-01-28 17:12:19 +01:00
										 |  |  | ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). | 
					
						
							| 
									
										
										
										
											2012-10-02 09:12:39 +02:00
										 |  |  | ** Contact: http://www.qt-project.org/legal
 | 
					
						
							| 
									
										
										
										
											2009-07-13 11:40:54 +02:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2012-10-02 09:12:39 +02:00
										 |  |  | ** This file is part of Qt Creator. | 
					
						
							| 
									
										
										
										
											2009-07-13 11:40:54 +02:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2012-10-02 09:12:39 +02:00
										 |  |  | ** Commercial License Usage | 
					
						
							|  |  |  | ** Licensees holding valid commercial Qt licenses may use this file in | 
					
						
							|  |  |  | ** accordance with the commercial license agreement provided with the | 
					
						
							|  |  |  | ** Software or, alternatively, in accordance with the terms contained in | 
					
						
							|  |  |  | ** a written agreement between you and Digia.  For licensing terms and | 
					
						
							|  |  |  | ** conditions see http://qt.digia.com/licensing.  For further information
 | 
					
						
							|  |  |  | ** use the contact form at http://qt.digia.com/contact-us.
 | 
					
						
							| 
									
										
										
										
											2009-07-13 11:40:54 +02:00
										 |  |  | ** | 
					
						
							|  |  |  | ** GNU Lesser General Public License Usage | 
					
						
							| 
									
										
										
										
											2012-10-02 09:12:39 +02: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.
 | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** In addition, as a special exception, Digia gives you certain additional | 
					
						
							|  |  |  | ** rights.  These rights are described in the Digia Qt LGPL Exception | 
					
						
							| 
									
										
										
										
											2010-12-17 16:01:08 +01:00
										 |  |  | ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. | 
					
						
							|  |  |  | ** | 
					
						
							| 
									
										
										
										
											2012-10-02 09:12:39 +02:00
										 |  |  | ****************************************************************************/ | 
					
						
							| 
									
										
										
										
											2009-07-13 11:40:54 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-12 12:06:41 +01:00
										 |  |  | #ifndef CPLUSPLUSCHECKSYMBOLS_H
 | 
					
						
							|  |  |  | #define CPLUSPLUSCHECKSYMBOLS_H
 | 
					
						
							| 
									
										
										
										
											2009-07-13 11:40:54 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-28 13:48:22 +01:00
										 |  |  | #include "cpptools_global.h"
 | 
					
						
							| 
									
										
										
										
											2010-07-05 17:43:13 +02:00
										 |  |  | #include "cppsemanticinfo.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-03 12:22:16 +02:00
										 |  |  | #include <cplusplus/TypeOfExpression.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-02-15 10:42:41 +01:00
										 |  |  | #include <QSet>
 | 
					
						
							|  |  |  | #include <QFuture>
 | 
					
						
							|  |  |  | #include <QtConcurrentRun>
 | 
					
						
							| 
									
										
										
										
											2009-07-13 11:40:54 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-02 11:28:11 +02:00
										 |  |  | namespace CppTools { | 
					
						
							| 
									
										
										
										
											2009-07-13 11:40:54 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-28 13:48:22 +01:00
										 |  |  | class CPPTOOLS_EXPORT CheckSymbols: | 
					
						
							| 
									
										
										
										
											2013-04-02 11:28:11 +02:00
										 |  |  |         protected CPlusPlus::ASTVisitor, | 
					
						
							| 
									
										
										
										
											2010-07-19 11:08:39 +02:00
										 |  |  |         public QRunnable, | 
					
						
							| 
									
										
										
										
											2012-02-07 15:09:08 +01:00
										 |  |  |         public QFutureInterface<TextEditor::SemanticHighlighter::Result> | 
					
						
							| 
									
										
										
										
											2009-07-13 11:40:54 +02:00
										 |  |  | { | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2010-07-13 15:25:05 +02:00
										 |  |  |     virtual ~CheckSymbols(); | 
					
						
							| 
									
										
										
										
											2009-07-13 11:40:54 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-02-07 15:09:08 +01:00
										 |  |  |     typedef TextEditor::SemanticHighlighter::Result Use; | 
					
						
							|  |  |  |     typedef CppTools::SemanticInfo::UseKind UseKind; | 
					
						
							| 
									
										
										
										
											2010-05-25 14:53:21 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-07 09:42:56 +02:00
										 |  |  |     virtual void run(); | 
					
						
							| 
									
										
										
										
											2010-07-05 18:52:52 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     typedef QFuture<Use> Future; | 
					
						
							| 
									
										
										
										
											2010-07-19 11:08:39 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     Future start() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         this->setRunnable(this); | 
					
						
							|  |  |  |         this->reportStarted(); | 
					
						
							|  |  |  |         Future future = this->future(); | 
					
						
							| 
									
										
										
										
											2010-08-09 11:14:17 +02:00
										 |  |  |         QThreadPool::globalInstance()->start(this, QThread::LowestPriority); | 
					
						
							| 
									
										
										
										
											2010-07-19 11:08:39 +02:00
										 |  |  |         return future; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-02 11:28:11 +02:00
										 |  |  |     static Future go(CPlusPlus::Document::Ptr doc, | 
					
						
							|  |  |  |                      const CPlusPlus::LookupContext &context, | 
					
						
							|  |  |  |                      const QList<Use> ¯oUses); | 
					
						
							| 
									
										
										
										
											2010-05-25 14:53:21 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-13 14:37:31 +02:00
										 |  |  |     static QMap<int, QVector<Use> > chunks(const QFuture<Use> &future, int from, int to) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         QMap<int, QVector<Use> > chunks; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         for (int i = from; i < to; ++i) { | 
					
						
							|  |  |  |             const Use use = future.resultAt(i); | 
					
						
							| 
									
										
										
										
											2013-02-14 14:25:31 +01:00
										 |  |  |             if (use.isInvalid()) | 
					
						
							|  |  |  |                 continue; | 
					
						
							| 
									
										
										
										
											2010-07-13 14:37:31 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |             const int blockNumber = use.line - 1; | 
					
						
							|  |  |  |             chunks[blockNumber].append(use); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return chunks; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-13 11:40:54 +02:00
										 |  |  | protected: | 
					
						
							|  |  |  |     using ASTVisitor::visit; | 
					
						
							| 
									
										
										
										
											2010-06-01 11:57:25 +02:00
										 |  |  |     using ASTVisitor::endVisit; | 
					
						
							| 
									
										
										
										
											2009-07-13 11:40:54 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-02 11:28:11 +02:00
										 |  |  |     CheckSymbols(CPlusPlus::Document::Ptr doc, | 
					
						
							|  |  |  |                  const CPlusPlus::LookupContext &context, | 
					
						
							|  |  |  |                  const QList<Use> ¯oUses); | 
					
						
							| 
									
										
										
										
											2010-07-05 18:52:52 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-02 11:28:11 +02:00
										 |  |  |     bool hasVirtualDestructor(CPlusPlus::Class *klass) const; | 
					
						
							|  |  |  |     bool hasVirtualDestructor(CPlusPlus::ClassOrNamespace *binding) const; | 
					
						
							| 
									
										
										
										
											2010-08-09 17:06:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-21 15:44:35 +02:00
										 |  |  |     bool warning(unsigned line, unsigned column, const QString &text, unsigned length = 0); | 
					
						
							| 
									
										
										
										
											2013-04-02 11:28:11 +02:00
										 |  |  |     bool warning(CPlusPlus::AST *ast, const QString &text); | 
					
						
							| 
									
										
										
										
											2009-07-13 11:40:54 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-02 11:28:11 +02:00
										 |  |  |     QByteArray textOf(CPlusPlus::AST *ast) const; | 
					
						
							| 
									
										
										
										
											2010-08-03 17:34:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-02 11:28:11 +02:00
										 |  |  |     bool maybeType(const CPlusPlus::Name *name) const; | 
					
						
							|  |  |  |     bool maybeField(const CPlusPlus::Name *name) const; | 
					
						
							|  |  |  |     bool maybeStatic(const CPlusPlus::Name *name) const; | 
					
						
							|  |  |  |     bool maybeFunction(const CPlusPlus::Name *name) const; | 
					
						
							| 
									
										
										
										
											2010-08-05 12:19:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-02 11:28:11 +02:00
										 |  |  |     void checkNamespace(CPlusPlus::NameAST *name); | 
					
						
							|  |  |  |     void checkName(CPlusPlus::NameAST *ast, CPlusPlus::Scope *scope = 0); | 
					
						
							|  |  |  |     CPlusPlus::ClassOrNamespace *checkNestedName(CPlusPlus::QualifiedNameAST *ast); | 
					
						
							| 
									
										
										
										
											2010-07-05 18:52:52 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-05 12:19:07 +02:00
										 |  |  |     void addUse(const Use &use); | 
					
						
							| 
									
										
										
										
											2011-08-16 09:47:54 +02:00
										 |  |  |     void addUse(unsigned tokenIndex, UseKind kind); | 
					
						
							| 
									
										
										
										
											2013-04-02 11:28:11 +02:00
										 |  |  |     void addUse(CPlusPlus::NameAST *name, UseKind kind); | 
					
						
							| 
									
										
										
										
											2010-08-03 17:34:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-02 11:28:11 +02:00
										 |  |  |     void addType(CPlusPlus::ClassOrNamespace *b, CPlusPlus::NameAST *ast); | 
					
						
							| 
									
										
										
										
											2010-08-05 12:19:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-02 11:28:11 +02:00
										 |  |  |     bool maybeAddTypeOrStatic(const QList<CPlusPlus::LookupItem> &candidates, | 
					
						
							|  |  |  |                               CPlusPlus::NameAST *ast); | 
					
						
							|  |  |  |     bool maybeAddField(const QList<CPlusPlus::LookupItem> &candidates, | 
					
						
							|  |  |  |                        CPlusPlus::NameAST *ast); | 
					
						
							|  |  |  |     bool maybeAddFunction(const QList<CPlusPlus::LookupItem> &candidates, | 
					
						
							|  |  |  |                           CPlusPlus::NameAST *ast, unsigned argumentCount); | 
					
						
							| 
									
										
										
										
											2010-08-05 12:19:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-02 11:28:11 +02:00
										 |  |  |     bool isTemplateClass(CPlusPlus::Symbol *s) const; | 
					
						
							| 
									
										
										
										
											2010-08-11 15:39:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-02 11:28:11 +02:00
										 |  |  |     CPlusPlus::Scope *enclosingScope() const; | 
					
						
							|  |  |  |     CPlusPlus::FunctionDefinitionAST *enclosingFunctionDefinition(bool skipTopOfStack = false) const; | 
					
						
							|  |  |  |     CPlusPlus::TemplateDeclarationAST *enclosingTemplateDeclaration() const; | 
					
						
							| 
									
										
										
										
											2010-07-15 16:03:48 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-02 11:28:11 +02:00
										 |  |  |     virtual bool preVisit(CPlusPlus::AST *); | 
					
						
							|  |  |  |     virtual void postVisit(CPlusPlus::AST *); | 
					
						
							| 
									
										
										
										
											2009-10-05 18:02:01 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-02 11:28:11 +02:00
										 |  |  |     virtual bool visit(CPlusPlus::NamespaceAST *); | 
					
						
							|  |  |  |     virtual bool visit(CPlusPlus::UsingDirectiveAST *); | 
					
						
							|  |  |  |     virtual bool visit(CPlusPlus::SimpleDeclarationAST *); | 
					
						
							|  |  |  |     virtual bool visit(CPlusPlus::TypenameTypeParameterAST *ast); | 
					
						
							|  |  |  |     virtual bool visit(CPlusPlus::TemplateTypeParameterAST *ast); | 
					
						
							|  |  |  |     virtual bool visit(CPlusPlus::FunctionDefinitionAST *ast); | 
					
						
							|  |  |  |     virtual bool visit(CPlusPlus::ParameterDeclarationAST *ast); | 
					
						
							| 
									
										
										
										
											2010-02-06 14:32:25 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-02 11:28:11 +02:00
										 |  |  |     virtual bool visit(CPlusPlus::ElaboratedTypeSpecifierAST *ast); | 
					
						
							| 
									
										
										
										
											2010-08-09 18:07:09 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-02 11:28:11 +02:00
										 |  |  |     virtual bool visit(CPlusPlus::SimpleNameAST *ast); | 
					
						
							|  |  |  |     virtual bool visit(CPlusPlus::DestructorNameAST *ast); | 
					
						
							|  |  |  |     virtual bool visit(CPlusPlus::QualifiedNameAST *ast); | 
					
						
							|  |  |  |     virtual bool visit(CPlusPlus::TemplateIdAST *ast); | 
					
						
							| 
									
										
										
										
											2010-05-25 14:53:21 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-02 11:28:11 +02:00
										 |  |  |     virtual bool visit(CPlusPlus::MemberAccessAST *ast); | 
					
						
							|  |  |  |     virtual bool visit(CPlusPlus::CallAST *ast); | 
					
						
							|  |  |  |     virtual bool visit(CPlusPlus::NewExpressionAST *ast); | 
					
						
							| 
									
										
										
										
											2010-08-03 13:01:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-02 11:28:11 +02:00
										 |  |  |     virtual bool visit(CPlusPlus::GotoStatementAST *ast); | 
					
						
							|  |  |  |     virtual bool visit(CPlusPlus::LabeledStatementAST *ast); | 
					
						
							|  |  |  |     virtual bool visit(CPlusPlus::SimpleSpecifierAST *ast); | 
					
						
							|  |  |  |     virtual bool visit(CPlusPlus::ClassSpecifierAST *ast); | 
					
						
							| 
									
										
										
										
											2012-02-07 15:59:08 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-02 11:28:11 +02:00
										 |  |  |     virtual bool visit(CPlusPlus::MemInitializerAST *ast); | 
					
						
							|  |  |  |     virtual bool visit(CPlusPlus::EnumeratorAST *ast); | 
					
						
							| 
									
										
										
										
											2012-07-12 12:47:33 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-02 11:28:11 +02:00
										 |  |  |     CPlusPlus::NameAST *declaratorId(CPlusPlus::DeclaratorAST *ast) const; | 
					
						
							| 
									
										
										
										
											2010-08-03 17:34:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-02 11:28:11 +02:00
										 |  |  |     static unsigned referenceToken(CPlusPlus::NameAST *name); | 
					
						
							| 
									
										
										
										
											2012-07-12 12:47:33 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-06 12:42:55 +02:00
										 |  |  |     void flush(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-13 11:40:54 +02:00
										 |  |  | private: | 
					
						
							| 
									
										
										
										
											2013-04-11 18:27:52 +02:00
										 |  |  |     bool isConstructorDeclaration(CPlusPlus::Symbol *declaration); | 
					
						
							| 
									
										
										
										
											2013-04-07 09:05:22 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-02 11:28:11 +02:00
										 |  |  |     CPlusPlus::Document::Ptr _doc; | 
					
						
							|  |  |  |     CPlusPlus::LookupContext _context; | 
					
						
							|  |  |  |     CPlusPlus::TypeOfExpression typeOfExpression; | 
					
						
							| 
									
										
										
										
											2010-05-21 15:44:35 +02:00
										 |  |  |     QString _fileName; | 
					
						
							| 
									
										
										
										
											2010-05-25 14:53:21 +02:00
										 |  |  |     QSet<QByteArray> _potentialTypes; | 
					
						
							| 
									
										
										
										
											2012-07-12 12:47:33 +02:00
										 |  |  |     QSet<QByteArray> _potentialFields; | 
					
						
							| 
									
										
										
										
											2010-10-18 17:45:49 +02:00
										 |  |  |     QSet<QByteArray> _potentialFunctions; | 
					
						
							| 
									
										
										
										
											2010-08-09 18:07:09 +02:00
										 |  |  |     QSet<QByteArray> _potentialStatics; | 
					
						
							| 
									
										
										
										
											2013-04-02 11:28:11 +02:00
										 |  |  |     QList<CPlusPlus::AST *> _astStack; | 
					
						
							| 
									
										
										
										
											2010-07-16 18:00:54 +02:00
										 |  |  |     QVector<Use> _usages; | 
					
						
							| 
									
										
										
										
											2013-02-26 11:11:43 +01:00
										 |  |  |     int _chunkSize; | 
					
						
							| 
									
										
										
										
											2011-08-30 10:52:41 +02:00
										 |  |  |     unsigned _lineOfLastUsage; | 
					
						
							| 
									
										
										
										
											2010-11-03 11:02:25 +01:00
										 |  |  |     QList<Use> _macroUses; | 
					
						
							| 
									
										
										
										
											2009-07-13 11:40:54 +02:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-02 11:28:11 +02:00
										 |  |  | } // namespace CppTools
 | 
					
						
							| 
									
										
										
										
											2009-07-13 11:40:54 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-12 12:06:41 +01:00
										 |  |  | #endif // CPLUSPLUSCHECKSYMBOLS_H
 |