forked from qt-creator/qt-creator
		
	C++: Fix handling of Objective-C/C++
- Objective C/C++ was not enabled in highlighter. - QMake project part for Objective C/C++ did not have ObjectiveC extension enabled. - As languageFeatures.objCEnabled is a bitfield, it was actually always set to 0. - Highlight ObjC class & protocol declarations. - Highlight ObjC message passing. Change-Id: I64d12c9509058d05f7adce94598cb7ce91727ac8 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
This commit is contained in:
		@@ -568,6 +568,58 @@ bool CheckSymbols::visit(ElaboratedTypeSpecifierAST *ast)
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool CheckSymbols::visit(ObjCProtocolDeclarationAST *ast)
 | 
			
		||||
{
 | 
			
		||||
    accept(ast->attribute_list);
 | 
			
		||||
    accept(ast->name);
 | 
			
		||||
    accept(ast->protocol_refs);
 | 
			
		||||
    accept(ast->member_declaration_list);
 | 
			
		||||
    addUse(ast->name, SemanticHighlighter::TypeUse);
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool CheckSymbols::visit(ObjCProtocolForwardDeclarationAST *ast)
 | 
			
		||||
{
 | 
			
		||||
    accept(ast->attribute_list);
 | 
			
		||||
    accept(ast->identifier_list);
 | 
			
		||||
    for (NameListAST *i = ast->identifier_list; i; i = i->next)
 | 
			
		||||
        addUse(i->value, SemanticHighlighter::TypeUse);
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool CheckSymbols::visit(ObjCClassDeclarationAST *ast)
 | 
			
		||||
{
 | 
			
		||||
    accept(ast->attribute_list);
 | 
			
		||||
    accept(ast->class_name);
 | 
			
		||||
    accept(ast->category_name);
 | 
			
		||||
    accept(ast->superclass);
 | 
			
		||||
    accept(ast->protocol_refs);
 | 
			
		||||
    accept(ast->inst_vars_decl);
 | 
			
		||||
    accept(ast->member_declaration_list);
 | 
			
		||||
    addUse(ast->class_name, SemanticHighlighter::TypeUse);
 | 
			
		||||
    if (ast->superclass && maybeType(ast->superclass->name))
 | 
			
		||||
        addUse(ast->superclass, SemanticHighlighter::TypeUse);
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool CheckSymbols::visit(ObjCClassForwardDeclarationAST *ast)
 | 
			
		||||
{
 | 
			
		||||
    accept(ast->attribute_list);
 | 
			
		||||
    accept(ast->identifier_list);
 | 
			
		||||
    for (NameListAST *i = ast->identifier_list ; i != 0; i = i->next)
 | 
			
		||||
        addUse(i->value, SemanticHighlighter::TypeUse);
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool CheckSymbols::visit(ObjCProtocolRefsAST *ast)
 | 
			
		||||
{
 | 
			
		||||
    accept(ast->identifier_list);
 | 
			
		||||
    for (NameListAST *i = ast->identifier_list; i; i = i->next)
 | 
			
		||||
        if (maybeType(i->value->name))
 | 
			
		||||
            addUse(i->value, SemanticHighlighter::TypeUse);
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool CheckSymbols::visit(MemberAccessAST *ast)
 | 
			
		||||
{
 | 
			
		||||
    accept(ast->base_expression);
 | 
			
		||||
@@ -657,6 +709,12 @@ bool CheckSymbols::visit(CallAST *ast)
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool CheckSymbols::visit(ObjCSelectorArgumentAST *ast)
 | 
			
		||||
{
 | 
			
		||||
    addUse(ast->firstToken(), SemanticHighlighter::FunctionUse);
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool CheckSymbols::visit(NewExpressionAST *ast)
 | 
			
		||||
{
 | 
			
		||||
    accept(ast->new_placement);
 | 
			
		||||
 
 | 
			
		||||
@@ -154,6 +154,12 @@ protected:
 | 
			
		||||
 | 
			
		||||
    virtual bool visit(CPlusPlus::ElaboratedTypeSpecifierAST *ast);
 | 
			
		||||
 | 
			
		||||
    virtual bool visit(CPlusPlus::ObjCProtocolDeclarationAST *ast);
 | 
			
		||||
    virtual bool visit(CPlusPlus::ObjCProtocolForwardDeclarationAST *ast);
 | 
			
		||||
    virtual bool visit(CPlusPlus::ObjCClassDeclarationAST *ast);
 | 
			
		||||
    virtual bool visit(CPlusPlus::ObjCClassForwardDeclarationAST *ast);
 | 
			
		||||
    virtual bool visit(CPlusPlus::ObjCProtocolRefsAST *ast);
 | 
			
		||||
 | 
			
		||||
    virtual bool visit(CPlusPlus::SimpleNameAST *ast);
 | 
			
		||||
    virtual bool visit(CPlusPlus::DestructorNameAST *ast);
 | 
			
		||||
    virtual bool visit(CPlusPlus::QualifiedNameAST *ast);
 | 
			
		||||
@@ -161,6 +167,7 @@ protected:
 | 
			
		||||
 | 
			
		||||
    virtual bool visit(CPlusPlus::MemberAccessAST *ast);
 | 
			
		||||
    virtual bool visit(CPlusPlus::CallAST *ast);
 | 
			
		||||
    virtual bool visit(CPlusPlus::ObjCSelectorArgumentAST *ast);
 | 
			
		||||
    virtual bool visit(CPlusPlus::NewExpressionAST *ast);
 | 
			
		||||
 | 
			
		||||
    virtual bool visit(CPlusPlus::GotoStatementAST *ast);
 | 
			
		||||
 
 | 
			
		||||
@@ -48,7 +48,7 @@ void ProjectPart::updateLanguageFeatures()
 | 
			
		||||
    languageFeatures.cxx11Enabled = languageVersion >= CXX11;
 | 
			
		||||
    languageFeatures.cxxEnabled = languageVersion >= CXX98;
 | 
			
		||||
    languageFeatures.c99Enabled = languageVersion >= C99;
 | 
			
		||||
    languageFeatures.objCEnabled = languageExtensions & ObjectiveCExtensions;
 | 
			
		||||
    languageFeatures.objCEnabled = languageExtensions.testFlag(ObjectiveCExtensions);
 | 
			
		||||
    languageFeatures.qtEnabled = hasQt;
 | 
			
		||||
    languageFeatures.qtMocRunEnabled = hasQt;
 | 
			
		||||
    if (!hasQt) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user