Hello cdt developers,
I am investigating an issue that randomly occurs on our side on eclipse for linux, with CDT 9.4.3.
I am trying to reproduce it on windows, latest cdt, but I have a bit different behavior. Could it be a cdt bug ? a race condition maybe.
We are generating programmatically some cdt projects based on existing templates, including the .settings/language.settings.xml files, and leave the project closed after creation.
Then, when a project is open, our custom language settings are not always applied, and sometimes even removed.
I investigated the problem and I found that
it happens because it sometimes checks too early if .settings/language.settings.xml file exists, maybe before some refresh jobs finishes, and the file is not accessible as a resource, so
isStoreInProjectAreaExist=false, and it loads defaults configuration for language settings.
The loadLanguageSettings() is called
And it checks
loadLanguageSettings () {
IFile storeInPrjArea = getStoreInProjectArea(project);
boolean isStoreInProjectAreaExist = storeInPrjArea.exists();
// and based on result it loads default language settigns or custom from existing .settings/language.settings file
if (isStoreInProjectAreaExist) {
System.out.println(" >>> Load from xml file"); . . .
} else {
System.out.println(" >>> Load default"); . . .
}
}
That is a sample of jobs/processes that are running:
A bad sample, when our language settings is not applied:
|
A good sample when our custom language settings is applied:
It goes well when the job ‘Discover compiler build-in language settings’ is executed and in Project properties -> C/C++ General -> Preprocessor Include Paths, macros Page we can see configuration from our custom language.setttings.xml
|
I am not sure yet what process it depends on, but if I wait a bit and re-request value for
boolean isStoreInProjectAreaExist = storeInPrjArea.exists();,
it returns desired true value.
Could you please help me with this?
I will try to reproduce it in eclipse oxygen, with cdt 9.4.3 on windows.
Thank you
Kind Regards
Lidia