Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [cdt-dev] ConcurrentModification Exception

I didn't explain everything in my previous email... I need to know the following things about projects:
- makefile
- executable
- static library
- non-CDT (e.g. Java etc)

Can I do all these with natures?

Also, I'm not looking to update any resource, just find out what it's 'type' is. So is there a non-modifying way of getting this info?

Thanks,

Alex Chapiro wrote:
I'd just check project natures. It much more simple and does not update any resource.


Regards,
Alex


Subs wrote:
Hi,

In my plugin I am trying to determine if a project is a makefile project (if it is, I do some special processing). I am doing this during my plugins earlyStartup() method. When doing this, I am occasionally getting a ConcurrentModificationException. See trace below:

I have tried 2 different methods to detect a makefile project, but both result in the same problem.

Method 1:
ICProjectDescription projectDesc = CoreModel.getDefault().getProjectDescription(project, false);
if (projectDesc == null)
    return false;
IConfiguration cfg = ManagedBuildManager.
    getConfigurationForDescription(projectDesc
        .getDefaultSettingConfiguration());
if (cfg == null)
    return false;
return (!cfg.getBuilder().isManagedBuildOn());

Method 2:
    private static boolean isProjectType(IProject project, String type) {
IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(project);
        if (info != null) {
            IManagedProject managedProject = info.getManagedProject();
            if (managedProject != null) {
IProjectType projectType = managedProject.getProjectType();
                IBuildPropertyValue property = null;
                if (projectType != null) {
                    property = projectType.getBuildArtefactType();
                    if (property != null) {
                        String artifactName = property.getId();
                        if (type != null)
                            return type.equals(artifactName);
                    }
                } else {
                    if (type == null)
                        return true;
                }
            }
        }
        return false;
    }

Is there a way I can do this without getting the Exception?

null:
java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
      at java.util.AbstractList$Itr.next(Unknown Source)
at org.eclipse.cdt.make.internal.core.scannerconfig2.ScannerConfigInfoFactory2$BuildProperty.load(ScannerConfigInfoFactory2.java:818) at org.eclipse.cdt.make.internal.core.scannerconfig2.ScannerConfigInfoFactory2$BuildProperty.<init>(ScannerConfigInfoFactory2.java:759) at org.eclipse.cdt.make.internal.core.scannerconfig2.ScannerConfigInfoFactory2$ScannerConfigInfoSet.load(ScannerConfigInfoFactory2.java:117) at org.eclipse.cdt.make.internal.core.scannerconfig2.ScannerConfigInfoFactory2$ScannerConfigInfoSet.<init>(ScannerConfigInfoFactory2.java:93) at org.eclipse.cdt.make.internal.core.scannerconfig2.ScannerConfigInfoFactory2.createInfoSet(ScannerConfigInfoFactory2.java:1332) at org.eclipse.cdt.make.internal.core.scannerconfig2.ScannerConfigProfileManager.createScannerConfigBuildInfo2Set(ScannerConfigProfileManager.java:219) at org.eclipse.cdt.build.internal.core.scannerconfig2.CfgScannerConfigInfoFactory2$CfgInfo.getContainer(CfgScannerConfigInfoFactory2.java:107) at org.eclipse.cdt.build.internal.core.scannerconfig2.CfgScannerConfigInfoFactory2$CfgInfo.createMap(CfgScannerConfigInfoFactory2.java:128) at org.eclipse.cdt.build.internal.core.scannerconfig2.CfgScannerConfigInfoFactory2$CfgInfo.getInfo(CfgScannerConfigInfoFactory2.java:75) at org.eclipse.cdt.build.internal.core.scannerconfig.CfgDiscoveredPathManager.getContextInfo(CfgDiscoveredPathManager.java:417) at org.eclipse.cdt.build.internal.core.scannerconfig.CfgDiscoveredPathManager.getContextInfo(CfgDiscoveredPathManager.java:402) at org.eclipse.cdt.build.internal.core.scannerconfig.CfgDiscoveredPathManager.getDiscoveredInfo(CfgDiscoveredPathManager.java:160) at org.eclipse.cdt.managedbuilder.internal.dataprovider.ProfileInfoProvider.getEntryValues(ProfileInfoProvider.java:65) at org.eclipse.cdt.managedbuilder.internal.dataprovider.BuildEntryStorage.getDiscoveredEntries(BuildEntryStorage.java:188) at org.eclipse.cdt.managedbuilder.internal.dataprovider.BuildEntryStorage.putEntriesToLevel(BuildEntryStorage.java:181) at org.eclipse.cdt.core.settings.model.util.AbstractEntryStorage.initCache(AbstractEntryStorage.java:71) at org.eclipse.cdt.core.settings.model.util.AbstractEntryStorage.getEntries(AbstractEntryStorage.java:34) at org.eclipse.cdt.managedbuilder.internal.dataprovider.BuildLanguageData.getEntries(BuildLanguageData.java:140) at org.eclipse.cdt.core.settings.model.extension.impl.CDefaultLanguageData.getEntriesToCopy(CDefaultLanguageData.java:97) at org.eclipse.cdt.core.settings.model.extension.impl.CDefaultLanguageData.createStore(CDefaultLanguageData.java:89) at org.eclipse.cdt.core.settings.model.extension.impl.CDefaultLanguageData.copySettingsFrom(CDefaultLanguageData.java:82) at org.eclipse.cdt.internal.core.settings.model.CLanguageSettingCache.copySettingsFrom(CLanguageSettingCache.java:47) at org.eclipse.cdt.internal.core.settings.model.CLanguageSettingCache.<init>(CLanguageSettingCache.java:37) at org.eclipse.cdt.internal.core.settings.model.CFolderDescriptionCache.copyLanguageData(CFolderDescriptionCache.java:71) at org.eclipse.cdt.core.settings.model.extension.impl.CDefaultFolderData.copyDataFrom(CDefaultFolderData.java:56) at org.eclipse.cdt.internal.core.settings.model.CFolderDescriptionCache.<init>(CFolderDescriptionCache.java:38) at org.eclipse.cdt.internal.core.settings.model.CConfigurationDescriptionCache.copyFolderData(CConfigurationDescriptionCache.java:190) at org.eclipse.cdt.core.settings.model.extension.impl.CDefaultConfigurationData.copySettingsFrom(CDefaultConfigurationData.java:113) at org.eclipse.cdt.internal.core.settings.model.CConfigurationDescriptionCache.loadData(CConfigurationDescriptionCache.java:99) at org.eclipse.cdt.internal.core.settings.model.CProjectDescription.loadDatas(CProjectDescription.java:194) at org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager.loadProjectDescription(CProjectDescriptionManager.java:1034) at org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager.getProjectDescription(CProjectDescriptionManager.java:540) at org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager.getProjectDescription(CProjectDescriptionManager.java:516) at org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager.getProjectDescription(CProjectDescriptionManager.java:508) at org.eclipse.cdt.core.model.CoreModel.getProjectDescription(CoreModel.java:1409) at com.crt.utils.general.ProjectUtils.isMakeProject(ProjectUtils.java:40) at com.crt.config.database.TargetConfig.loadTargetConfig(TargetConfig.java:453) at com.crt.config.database.TargetConfigManager.earlyStartup(TargetConfigManager.java:127) at org.eclipse.ui.internal.EarlyStartupRunnable.runEarlyStartup(EarlyStartupRunnable.java:87) at org.eclipse.ui.internal.EarlyStartupRunnable.run(EarlyStartupRunnable.java:66)
      at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
      at org.eclipse.ui.internal.Workbench$54.run(Workbench.java:2190)
      at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)




_______________________________________________
cdt-dev mailing list
cdt-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/cdt-dev



--
Subs


Back to the top