forked from qt-creator/qt-creator
		
	CppTools: Cancel parsing if editor is closed
The m_parserFuture.cancel() in ~BuiltinEditorDocumentProcessor() did not cancel anything. Thus, closing a document while the parser was running led to a blocking UI thread. Now it cancels at the next include directive it encounters. Change-Id: I092fddbbd747e0bc95265b6e9b4fcc26b3f76cb3 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
		
				
					committed by
					
						 Tim Jenssen
						Tim Jenssen
					
				
			
			
				
	
			
			
			
						parent
						
							c8020af997
						
					
				
				
					commit
					ad49e64ff0
				
			| @@ -762,6 +762,11 @@ QByteArray Preprocessor::run(const QString &fileName, | ||||
|     return preprocessed; | ||||
| } | ||||
|  | ||||
| void Preprocessor::setCancelChecker(const Preprocessor::CancelChecker &cancelChecker) | ||||
| { | ||||
|     m_cancelChecker = cancelChecker; | ||||
| } | ||||
|  | ||||
| bool Preprocessor::expandFunctionlikeMacros() const | ||||
| { | ||||
|     return m_expandFunctionlikeMacros; | ||||
| @@ -1636,6 +1641,9 @@ void Preprocessor::handlePreprocessorDirective(PPToken *tk) | ||||
|  | ||||
| void Preprocessor::handleIncludeDirective(PPToken *tk, bool includeNext) | ||||
| { | ||||
|     if (m_cancelChecker && m_cancelChecker()) | ||||
|         return; | ||||
|  | ||||
|     m_state.m_lexer->setScanAngleStringLiteralTokens(true); | ||||
|     lex(tk); // consume "include" token | ||||
|     m_state.m_lexer->setScanAngleStringLiteralTokens(false); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user