Ok, I find the bug by debugging a while.
the code snippet
CCFileType CCFileTypeOf(const wxString& filename)
{
const wxString file = filename.AfterLast(wxFILE_SEP_PATH).Lower();
const int pos = file.Find(_T('.'), true);
wxString ext;
if (pos != wxNOT_FOUND)
ext = file.SubString(pos + 1, file.Len());
if ( ext.IsEmpty()
|| ext == _T("h")
|| ext == _T("hpp")
|| ext == _T("tcc")
|| ext == _T("xpm") )
{
return ccftHeader;
}
else if ( ext == _T("cpp")
|| ext == _T("cxx") )
{
return ccftCppSource;
}
else if (ext == _T("c"))
return ccftCSource;
else
return ccftOther;
}
You see, the "cc" is not recognized as a cpp source, simply add this can solve the problem.
Hope some devs can fix this.
I think this needs refactoring anyways. we have the file association manager for this purpose which should be queried accordingly. Setting up an own file extension handler for CC doesn't make any sense IMHO.
I do not agree, I have also noticed that, but that function was not satisfied with CC, because they treat like ".asm, .f.....“ files as source files.
see:
FileType FileTypeOf(const wxString& filename)
{
wxString ext = filename.AfterLast(_T('.')).Lower();
if (ext.IsSameAs(FileFilters::ASM_EXT) ||
ext.IsSameAs(FileFilters::C_EXT) ||
ext.IsSameAs(FileFilters::CC_EXT) ||
ext.IsSameAs(FileFilters::CPP_EXT) ||
ext.IsSameAs(FileFilters::CXX_EXT) ||
ext.IsSameAs(FileFilters::S_EXT) ||
ext.IsSameAs(FileFilters::SS_EXT) ||
ext.IsSameAs(FileFilters::S62_EXT) ||
ext.IsSameAs(FileFilters::D_EXT) ||
ext.IsSameAs(FileFilters::F_EXT) ||
ext.IsSameAs(FileFilters::F77_EXT) ||
ext.IsSameAs(FileFilters::F90_EXT) ||
ext.IsSameAs(FileFilters::F95_EXT) ||
ext.IsSameAs(FileFilters::JAVA_EXT)
)
return ftSource;
else if (ext.IsSameAs(FileFilters::H_EXT) ||
ext.IsSameAs(FileFilters::HH_EXT) ||
ext.IsSameAs(FileFilters::HPP_EXT) ||
ext.IsSameAs(FileFilters::HXX_EXT) ||
ext.IsSameAs(FileFilters::INL_EXT)
)
return ftHeader;
else if (ext.IsSameAs(FileFilters::CODEBLOCKS_EXT))
return ftCodeBlocksProject;
else if (ext.IsSameAs(FileFilters::WORKSPACE_EXT))
return ftCodeBlocksWorkspace;
else if (ext.IsSameAs(FileFilters::DEVCPP_EXT))
return ftDevCppProject;
else if (ext.IsSameAs(FileFilters::MSVC6_EXT))
return ftMSVC6Project;
else if (ext.IsSameAs(FileFilters::MSVC7_EXT))
return ftMSVC7Project;
else if (ext.IsSameAs(FileFilters::MSVC6_WORKSPACE_EXT))
return ftMSVC6Workspace;
else if (ext.IsSameAs(FileFilters::MSVC7_WORKSPACE_EXT))
return ftMSVC7Workspace;
else if (ext.IsSameAs(FileFilters::XCODE1_EXT))
return ftXcode1Project; // Xcode 1.0+ (Mac OS X 10.3)
else if (ext.IsSameAs(FileFilters::XCODE2_EXT))
return ftXcode2Project; // Xcode 2.1+ (Mac OS X 10.4)
else if (ext.IsSameAs(FileFilters::OBJECT_EXT))
return ftObject;
else if (ext.IsSameAs(FileFilters::XRCRESOURCE_EXT))
return ftXRCResource;
else if (ext.IsSameAs(FileFilters::RESOURCE_EXT))
return ftResource;
else if (ext.IsSameAs(FileFilters::RESOURCEBIN_EXT))
return ftResourceBin;
else if (ext.IsSameAs(FileFilters::STATICLIB_EXT))
return ftStaticLib;
else if (ext.IsSameAs(FileFilters::DYNAMICLIB_EXT))
return ftDynamicLib;
else if (ext.IsSameAs(FileFilters::NATIVE_EXT))
return ftNative;
else if (ext.IsSameAs(FileFilters::EXECUTABLE_EXT))
return ftExecutable;
else if (ext.IsSameAs(FileFilters::XML_EXT))
return ftXMLDocument;
else if (ext.IsSameAs(FileFilters::SCRIPT_EXT))
return ftScript;
// DrewBoo: Before giving up, see if the ProjectManager
// considers this extension a source or header
// TODO (Morten#5#): Do what DrewBoo said: Try removing the above code
// TODO (Morten#3#): This code should actually be a method of filegrous and masks or alike. So we collect all extension specific things in one place. As of now this would break ABI compatibilty with 08.02 so this should happen later.
else
{
ProjectManager *prjMgr = Manager::Get()->GetProjectManager();
if ( prjMgr )
{
const FilesGroupsAndMasks* fgm = prjMgr->GetFilesGroupsAndMasks();
if (fgm)
{
for (unsigned int i = 0; i != fgm->GetGroupsCount(); ++i)
{
if (fgm->GetGroupName(i) == _T("Sources") && fgm->MatchesMask(ext, i))
return ftSource;
if (fgm->GetGroupName(i) == _T("Headers") && fgm->MatchesMask(ext, i))
return ftHeader;
}
}
}
}
return ftOther;
}