Skip to main content

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





Can I do all these with natures?

No, sorry. You can detect C, C++ or Java project using natures, but you cannot use them to collect other information. If project is already built, you can check its type(lib/exec/static lib) using binary parser. Of course this is bad method. CProjectDescription should do this work but this "extra feature" - workspace modification I'd consider as a bug. Besides that I think that a bad factor is the fact that CProjectDescriptionManager has 3600 lines of java code! (In this case it is not a workspace modification problem. Actually, the problem is that they use ScannerConfigProfileManager.getInstance().getProfileIds(context) return without any synchronization - bug) Try to use any synchronization method to avoid collision. startup doesn't seem to me the best place for that. Would it be possible to
do it after plugin initialization, it'd be better.
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







Back to the top