logic: fixed warnings, tests and bugs

* fixed clang warnings
* fixed cxxparser tests
* added missing checks for valid location in ASTVisitor callbacks for templates
* removed warning when statusbar view is removed
* made font of activated classes bold
* fixed search box not responding to autocompletion tab or enter press
* fixed search box not updated when active token changes
This commit is contained in:
Eberhard Graether
2014-12-02 00:55:57 +01:00
parent 3b7b02ff8c
commit c54c405dd1
15 changed files with 158 additions and 113 deletions
+78 -66
View File
@@ -269,98 +269,110 @@ bool ASTVisitor::VisitEnumConstantDecl(clang::EnumConstantDecl* declaration)
bool ASTVisitor::VisitClassTemplateDecl(clang::ClassTemplateDecl* declaration)
{
std::vector<std::string> templateRecordNameHierarchy = utility::getDeclNameHierarchy(declaration);
clang::TemplateParameterList* parameterList = declaration->getTemplateParameters();
for (int i = 0; i < parameterList->size(); i++)
if (hasValidLocation(declaration))
{
clang::NamedDecl* namedDecl = parameterList->getParam(i);
std::vector<std::string> templateRecordNameHierarchy = utility::getDeclNameHierarchy(declaration);
if (hasValidLocation(namedDecl))
clang::TemplateParameterList* parameterList = declaration->getTemplateParameters();
for (size_t i = 0; i < parameterList->size(); i++)
{
std::string templateParameterTypeName = namedDecl->getNameAsString();
clang::NamedDecl* namedDecl = parameterList->getParam(i);
m_client->onTemplateRecordParameterTypeParsed(
getParseLocationForNamedDecl(namedDecl),
templateParameterTypeName,
templateRecordNameHierarchy
if (hasValidLocation(namedDecl))
{
std::string templateParameterTypeName = namedDecl->getNameAsString();
m_client->onTemplateRecordParameterTypeParsed(
getParseLocationForNamedDecl(namedDecl),
templateParameterTypeName,
templateRecordNameHierarchy
);
}
}
for (clang::ClassTemplateDecl::spec_iterator it = declaration->specializations().begin(); // template argument as parameter does not work
it != declaration->specializations().end(); it++
)
{
ParserClient::RecordType specializedRecordType = it->isStruct() ? ParserClient::RECORD_STRUCT : ParserClient::RECORD_CLASS;
std::vector<std::string> specializedRecordNameHierarchy = utility::getDeclNameHierarchy(*(it));
m_client->onTemplateRecordSpecializationParsed(
getParseLocationForNamedDecl(*it), specializedRecordNameHierarchy, specializedRecordType, templateRecordNameHierarchy
);
}
}
for (clang::ClassTemplateDecl::spec_iterator it = declaration->specializations().begin(); // template argument as parameter does not work
it != declaration->specializations().end(); it++
)
{
ParserClient::RecordType specializedRecordType = it->isStruct() ? ParserClient::RECORD_STRUCT : ParserClient::RECORD_CLASS;
std::vector<std::string> specializedRecordNameHierarchy = utility::getDeclNameHierarchy(*(it));
m_client->onTemplateRecordSpecializationParsed(
getParseLocationForNamedDecl(*it), specializedRecordNameHierarchy, specializedRecordType, templateRecordNameHierarchy
);
}
return true;
}
bool ASTVisitor::VisitClassTemplatePartialSpecializationDecl(clang::ClassTemplatePartialSpecializationDecl* declaration)
{
//std::vector<std::string> templateRecordNameHierarchy = utility::splitToVector(
// declaration->getQualifiedNameAsString(), "::"
//);
if (hasValidLocation(declaration))
{
//std::vector<std::string> templateRecordNameHierarchy = utility::splitToVector(
// declaration->getQualifiedNameAsString(), "::"
//);
//clang::ClassTemplateDecl* baseTemplateDecl = declaration->getSpecializedTemplate();
//clang::ClassTemplateDecl* baseTemplateDecl = declaration->getSpecializedTemplate();
//std::string specializedParameterNamePart = "<";
//const clang::TemplateArgumentList& templateArgumentList = declaration->getTemplateArgs();
//for (int i = 0; i < templateArgumentList.size(); i++)
//{
// DataType datatype = utility::qualTypeToDataType(templateArgumentList.get(i).getAsType());
// if (datatype.isTemplateParameterType())
// {
// specializedParameterNamePart += baseTemplateDecl->getTemplateParameters()->getParam(i)->getNameAsString();
// }
// else
// {
// specializedParameterNamePart += datatype.getFullTypeName();
// }
// specializedParameterNamePart += (i < templateArgumentList.size() - 1) ? ", " : "";
//}
//specializedParameterNamePart += ">";
//std::string specializedParameterNamePart = "<";
//const clang::TemplateArgumentList& templateArgumentList = declaration->getTemplateArgs();
//for (int i = 0; i < templateArgumentList.size(); i++)
//{
// DataType datatype = utility::qualTypeToDataType(templateArgumentList.get(i).getAsType());
// if (datatype.isTemplateParameterType())
// {
// specializedParameterNamePart += baseTemplateDecl->getTemplateParameters()->getParam(i)->getNameAsString();
// }
// else
// {
// specializedParameterNamePart += datatype.getFullTypeName();
// }
// specializedParameterNamePart += (i < templateArgumentList.size() - 1) ? ", " : "";
//}
//specializedParameterNamePart += ">";
//int foo = 0;
//int foo = 0;
}
return true;
}
bool ASTVisitor::VisitFunctionTemplateDecl(clang::FunctionTemplateDecl *declaration)
{
const ParseFunction templateFunction = getParseFunction(declaration->getTemplatedDecl());
for (clang::FunctionTemplateDecl::spec_iterator it = declaration->specializations().begin(); it != declaration->specializations().end(); it++)
if (hasValidLocation(declaration))
{
ParseLocation specializedFunctionLocation = getParseLocationForNamedDecl(*(it));
ParseFunction specializedFunction = getParseFunction(*(it));
m_client->onTemplateFunctionSpecializationParsed(
specializedFunctionLocation,
specializedFunction,
templateFunction);
m_client->onFunctionParsed(specializedFunctionLocation, specializedFunction, getParseLocationOfFunctionBody(*(it)));
}
clang::TemplateParameterList* parameterList = declaration->getTemplateParameters();
for (int i = 0; i < parameterList->size(); i++)
{
clang::NamedDecl* namedDecl = parameterList->getParam(i);
if (hasValidLocation(namedDecl))
const ParseFunction templateFunction = getParseFunction(declaration->getTemplatedDecl());
for (clang::FunctionTemplateDecl::spec_iterator it = declaration->specializations().begin(); it != declaration->specializations().end(); it++)
{
std::string templateParameterTypeName = namedDecl->getNameAsString();
ParseLocation specializedFunctionLocation = getParseLocationForNamedDecl(*(it));
ParseFunction specializedFunction = getParseFunction(*(it));
m_client->onTemplateFunctionSpecializationParsed(
specializedFunctionLocation,
specializedFunction,
templateFunction);
m_client->onTemplateFunctionParameterTypeParsed(
getParseLocationForNamedDecl(namedDecl),
templateParameterTypeName,
templateFunction
);
m_client->onFunctionParsed(specializedFunctionLocation, specializedFunction, getParseLocationOfFunctionBody(*(it)));
}
clang::TemplateParameterList* parameterList = declaration->getTemplateParameters();
for (size_t i = 0; i < parameterList->size(); i++)
{
clang::NamedDecl* namedDecl = parameterList->getParam(i);
if (hasValidLocation(namedDecl))
{
std::string templateParameterTypeName = namedDecl->getNameAsString();
m_client->onTemplateFunctionParameterTypeParsed(
getParseLocationForNamedDecl(namedDecl),
templateParameterTypeName,
templateFunction
);
}
}
}
return true;
}
@@ -600,7 +612,7 @@ std::vector<ParseTypeUsage> ASTVisitor::getParameters(clang::FunctionDecl* decla
ParseVariable ASTVisitor::getParseVariable(clang::DeclaratorDecl* declaration) const
{
bool isStatic;
bool isStatic = false;
std::vector<std::string> hameHierarchy = utility::getDeclNameHierarchy(declaration);
if (clang::isa<clang::VarDecl>(declaration))
{
+2 -2
View File
@@ -152,7 +152,7 @@ namespace utility
{
std::string specializedParameterNamePart = "<";
const clang::TemplateArgumentList& templateArgumentList = clang::dyn_cast<clang::ClassTemplateSpecializationDecl>(declaration)->getTemplateArgs();
for (int i = 0; i < templateArgumentList.size(); i++)
for (size_t i = 0; i < templateArgumentList.size(); i++)
{
DataType datatype = utility::qualTypeToDataType(templateArgumentList.get(i).getAsType());
specializedParameterNamePart += datatype.getFullTypeName();
@@ -166,7 +166,7 @@ namespace utility
{
std::string templateParameterNamePart = "<";
clang::TemplateParameterList* parameterList = clang::dyn_cast<clang::TemplateDecl>(declaration)->getTemplateParameters();
for (int i = 0; i < parameterList->size(); i++)
for (size_t i = 0; i < parameterList->size(); i++)
{
clang::NamedDecl* namedDecl = parameterList->getParam(i);