From dc96be8fcc0c0bbe0921d51ed80165a3518deab7 Mon Sep 17 00:00:00 2001 From: Mikhail Sennikovsky Date: Fri, 14 Sep 2007 10:40:09 +0000 Subject: [PATCH] Core fix for [Bug 203160] no warning message for unsupported configuration - Configuration status info (tool-chain support) exposed to the core --- .../dataprovider/BuildConfigurationData.java | 16 ++++++ .../DataProviderMessages.properties | 1 + .../index/tests/IndexProviderManagerTest.java | 5 ++ .../settings/model/CConfigurationStatus.java | 55 +++++++++++++++++++ .../model/ICConfigurationDescription.java | 2 + .../model/extension/CConfigurationData.java | 5 ++ .../impl/CDefaultConfigurationData.java | 9 +++ .../model/CConfigurationDescription.java | 7 +++ .../model/CConfigurationDescriptionCache.java | 7 +++ .../settings/model/ResourceChangeHandler.java | 10 +++- .../model/SettingsModelMessages.properties | 1 + 11 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/CConfigurationStatus.java diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/BuildConfigurationData.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/BuildConfigurationData.java index 1508dd55ae2..c3be9d83b16 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/BuildConfigurationData.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/BuildConfigurationData.java @@ -11,6 +11,7 @@ package org.eclipse.cdt.managedbuilder.internal.dataprovider; import org.eclipse.cdt.core.cdtvariables.ICdtVariablesContributor; +import org.eclipse.cdt.core.settings.model.CConfigurationStatus; import org.eclipse.cdt.core.settings.model.ICSettingBase; import org.eclipse.cdt.core.settings.model.ICSourceEntry; import org.eclipse.cdt.core.settings.model.extension.CBuildData; @@ -26,6 +27,7 @@ import org.eclipse.cdt.managedbuilder.core.IFolderInfo; import org.eclipse.cdt.managedbuilder.core.IResourceInfo; import org.eclipse.cdt.managedbuilder.core.ITool; import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; +import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin; import org.eclipse.cdt.managedbuilder.internal.core.Configuration; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; @@ -151,4 +153,18 @@ public class BuildConfigurationData extends CConfigurationData { } } } + + public CConfigurationStatus getStatus() { + int flags = 0; + String msg = null; + if(!fCfg.isSupported()){ + flags |= CConfigurationStatus.TOOLCHAIN_NOT_SUPPORTED; + msg = DataProviderMessages.getString("BuildConfigurationData.0"); //$NON-NLS-1$ + } + + if(flags != 0) + return new CConfigurationStatus(ManagedBuilderCorePlugin.getUniqueIdentifier(), flags, msg, null); + + return CConfigurationStatus.CFG_STATUS_OK; + } } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/DataProviderMessages.properties b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/DataProviderMessages.properties index ff0865bd055..4d54116ef12 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/DataProviderMessages.properties +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/dataprovider/DataProviderMessages.properties @@ -22,3 +22,4 @@ ProjectConverter.6=the project conversion failed ProjectConverter.7=targets conversion ProjectConverter.8=the project conversion failed due to unknown reason ProjectConverter.9=the given project is not a valid CDT project +BuildConfigurationData.0=The configuration support is not installed on the system diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexProviderManagerTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexProviderManagerTest.java index 8d2df68f928..dd56b76b1d9 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexProviderManagerTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexProviderManagerTest.java @@ -28,6 +28,7 @@ import org.eclipse.cdt.core.internal.index.provider.test.Providers; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.parser.util.ArrayUtil; +import org.eclipse.cdt.core.settings.model.CConfigurationStatus; import org.eclipse.cdt.core.settings.model.ICBuildSetting; import org.eclipse.cdt.core.settings.model.ICConfigExtensionReference; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; @@ -683,6 +684,10 @@ class MockConfig implements ICConfigurationDescription { public ICSourceEntry[] getResolvedSourceEntries() { return null; } + + public CConfigurationStatus getConfigurationStatus() { + return CConfigurationStatus.CFG_STATUS_OK; + } } /* diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/CConfigurationStatus.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/CConfigurationStatus.java new file mode 100644 index 00000000000..59f2959c593 --- /dev/null +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/CConfigurationStatus.java @@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (c) 2007 Intel Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Intel Corporation - Initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.core.settings.model; + +import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.internal.core.settings.model.SettingsModelMessages; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; + +public final class CConfigurationStatus extends Status { +// public static final int WRONG_TARGET_ARCH = 1; +// public static final int WRONG_TARGET_OS = 1 << 1; + public static final int TOOLCHAIN_NOT_SUPPORTED = 1 << 2; + public static final int SETTINGS_INVALID = 1 << 3; + + public static final CConfigurationStatus CFG_STATUS_OK = new CConfigurationStatus(0, ""); //$NON-NLS-1$ + + public static final CConfigurationStatus CFG_STATUS_ERROR = new CConfigurationStatus(SETTINGS_INVALID, SettingsModelMessages.getString("CConfigurationStatus.1")); //$NON-NLS-1$ + + + public CConfigurationStatus(String pluginId, int code, + String message, Throwable exception) { + super(calcSeverity(code), pluginId, code, message, exception); + } + + public CConfigurationStatus(int code, String message, + Throwable exception) { + this(CCorePlugin.PLUGIN_ID, code, message, exception); + } + + public CConfigurationStatus(int code, String message) { + this(CCorePlugin.PLUGIN_ID, code, message, null); + } + + private static boolean checkFlags(int flags, int value){ + return (flags & value) == value; + } + + private static int calcSeverity(int flags){ + if(checkFlags(flags, SETTINGS_INVALID)) + return IStatus.ERROR; + else if(flags != 0) + return IStatus.WARNING; + return IStatus.OK; + } + +} diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICConfigurationDescription.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICConfigurationDescription.java index 2e0fa641c53..f12bd614501 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICConfigurationDescription.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICConfigurationDescription.java @@ -387,4 +387,6 @@ public interface ICConfigurationDescription extends ICSettingContainer, ICSettin * @see ICProjectDescriptionManager#updateExternalSettingsProviders(String[]) */ void updateExternalSettingsProviders(String[] ids) throws WriteAccessException; + + CConfigurationStatus getConfigurationStatus(); } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/extension/CConfigurationData.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/extension/CConfigurationData.java index 14f01dc0a2b..e5083dbabf7 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/extension/CConfigurationData.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/extension/CConfigurationData.java @@ -11,6 +11,7 @@ package org.eclipse.cdt.core.settings.model.extension; import org.eclipse.cdt.core.cdtvariables.ICdtVariablesContributor; +import org.eclipse.cdt.core.settings.model.CConfigurationStatus; import org.eclipse.cdt.core.settings.model.ICSourceEntry; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; @@ -58,4 +59,8 @@ public abstract class CConfigurationData extends CDataObject { public abstract ICdtVariablesContributor getBuildVariablesContributor(); public abstract void setName(String name); + + public CConfigurationStatus getStatus(){ + return CConfigurationStatus.CFG_STATUS_OK; + } } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/extension/impl/CDefaultConfigurationData.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/extension/impl/CDefaultConfigurationData.java index d51b62d5bd9..5ba364d4020 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/extension/impl/CDefaultConfigurationData.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/extension/impl/CDefaultConfigurationData.java @@ -14,6 +14,7 @@ import java.util.Arrays; import java.util.HashMap; import org.eclipse.cdt.core.cdtvariables.ICdtVariablesContributor; +import org.eclipse.cdt.core.settings.model.CConfigurationStatus; import org.eclipse.cdt.core.settings.model.ICSettingBase; import org.eclipse.cdt.core.settings.model.ICSourceEntry; import org.eclipse.cdt.core.settings.model.extension.CBuildData; @@ -39,6 +40,7 @@ public class CDefaultConfigurationData extends CConfigurationData { protected ICSourceEntry[] fSourceEntries; private CDataFacroty fFactory; protected boolean fIsModified; + private CConfigurationStatus fStatus = CConfigurationStatus.CFG_STATUS_OK; protected CDefaultConfigurationData(CDataFacroty factory){ if(factory == null) @@ -103,6 +105,10 @@ public class CDefaultConfigurationData extends CConfigurationData { fSourceEntries = base.getSourceEntries(); fBuildData = copyBuildData(base.getBuildData(), clone); + fStatus = base.getStatus(); + if(fStatus == null) + fStatus = CConfigurationStatus.CFG_STATUS_OK; + CFolderData baseRootFolderData = base.getRootFolderData(); fRootFolderData = copyFolderData(baseRootFolderData.getPath(), baseRootFolderData, clone); addRcData(fRootFolderData); @@ -304,6 +310,9 @@ public class CDefaultConfigurationData extends CConfigurationData { fFactory.setModified(rcDatas[i], false); } } + } + public CConfigurationStatus getStatus() { + return fStatus; } } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationDescription.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationDescription.java index c01b5fa8043..8bcb70b19b8 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationDescription.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationDescription.java @@ -17,6 +17,7 @@ import java.util.Map; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.cdtvariables.ICdtVariablesContributor; +import org.eclipse.cdt.core.settings.model.CConfigurationStatus; import org.eclipse.cdt.core.settings.model.ICBuildSetting; import org.eclipse.cdt.core.settings.model.ICConfigExtensionReference; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; @@ -746,4 +747,10 @@ public class CConfigurationDescription extends CDataProxyContainer implements IC ICSourceEntry[] entries = getSourceEntries(); return CDataUtil.resolveEntries(entries, this); } + + public CConfigurationStatus getConfigurationStatus() { + CConfigurationData data = getConfigurationData(false); + CConfigurationStatus status = data.getStatus(); + return status != null ? status : CConfigurationStatus.CFG_STATUS_OK; + } } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationDescriptionCache.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationDescriptionCache.java index b8ea3a5f061..b2a534e2454 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationDescriptionCache.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationDescriptionCache.java @@ -16,6 +16,7 @@ import java.util.Map; import org.eclipse.cdt.core.cdtvariables.ICdtVariable; import org.eclipse.cdt.core.cdtvariables.ICdtVariablesContributor; +import org.eclipse.cdt.core.settings.model.CConfigurationStatus; import org.eclipse.cdt.core.settings.model.ICBuildSetting; import org.eclipse.cdt.core.settings.model.ICConfigExtensionReference; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; @@ -507,4 +508,10 @@ public class CConfigurationDescriptionCache extends CDefaultConfigurationData } return fResolvedSourceEntries; } + + public CConfigurationStatus getConfigurationStatus() { + CConfigurationStatus status = getStatus(); + return status != null ? status : CConfigurationStatus.CFG_STATUS_OK; + } + } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/ResourceChangeHandler.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/ResourceChangeHandler.java index 1cecf635ec1..a7b36011cf3 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/ResourceChangeHandler.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/ResourceChangeHandler.java @@ -337,7 +337,10 @@ public class ResourceChangeHandler extends ResourceChangeHandlerBase implements IResourceDelta projDelta = projs[i]; if(!shouldVisit((IProject)projDelta.getResource())) continue; - + + if((projDelta.getFlags() & IResourceDelta.REMOVED) == IResourceDelta.REMOVED) + continue; + IResourceDelta children[] = projDelta.getAffectedChildren(); for(int k = 0; k < children.length; k++){ IResourceDelta child = children[k]; @@ -349,6 +352,11 @@ public class ResourceChangeHandler extends ResourceChangeHandlerBase implements continue; //the .cproject file is changed + if((child.getFlags() & IResourceDelta.REMOVED) == IResourceDelta.REMOVED){ + //project file does not exist or corrupted, remove + ((RcMoveHandler)handler).setProjectDescription(rc.getProject(), null); + } + try { CProjectDescription des = CProjectDescriptionManager.getInstance().checkExternalProjectFileModification(rc); if(des != null){ diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/SettingsModelMessages.properties b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/SettingsModelMessages.properties index 890256e3495..fccea1efdf2 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/SettingsModelMessages.properties +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/SettingsModelMessages.properties @@ -15,6 +15,7 @@ CConfigurationDescription.0=data was not created CConfigurationDescription.1=expected proxy of type ICFileDescription, but was CConfigurationDescription.2=data was not created CConfigurationDescription.3=expected proxy of type ICFolderDescription, but was +CConfigurationStatus.1=configurations settings invalid CConfigurationDescriptionCache.0=description is read only CProjectConverterDesciptor.0=illegal provider implementation CProjectConverterDesciptor.1=no provider defined