Skip to main content
summaryrefslogtreecommitdiffstats
path: root/build
diff options
context:
space:
mode:
authorMikhail Sennikovsky2006-04-24 22:05:17 +0000
committerMikhail Sennikovsky2006-04-24 22:05:17 +0000
commit93c96e04527fa1f317c5c5fe47e54e507d9aa74e (patch)
tree13d04be2f513a1b7eeb375256c0847dcb4c98f6c /build
parent45152faccdcad20533c3ff1d791c4f643bc17d96 (diff)
downloadorg.eclipse.cdt-93c96e04527fa1f317c5c5fe47e54e507d9aa74e.tar.gz
org.eclipse.cdt-93c96e04527fa1f317c5c5fe47e54e507d9aa74e.tar.xz
org.eclipse.cdt-93c96e04527fa1f317c5c5fe47e54e507d9aa74e.zip
Project remove handling fixes
Property manager fixes
Diffstat (limited to 'build')
-rw-r--r--build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java60
-rw-r--r--build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/PropertyManager.java26
-rw-r--r--build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ResourceChangeHandler.java44
3 files changed, 104 insertions, 26 deletions
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java
index d684f36f703..a8d532d9571 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java
@@ -35,6 +35,7 @@ import org.eclipse.cdt.managedbuilder.core.IResourceConfiguration;
import org.eclipse.cdt.managedbuilder.core.ITool;
import org.eclipse.cdt.managedbuilder.core.IToolChain;
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
+import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin;
import org.eclipse.cdt.managedbuilder.envvar.IConfigurationEnvironmentVariableSupplier;
import org.eclipse.cdt.managedbuilder.internal.envvar.EnvironmentVariableProvider;
import org.eclipse.cdt.managedbuilder.internal.envvar.UserDefinedEnvironmentSupplier;
@@ -45,9 +46,12 @@ import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.ProjectScope;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.PluginVersionIdentifier;
+import org.osgi.service.prefs.BackingStoreException;
+import org.osgi.service.prefs.Preferences;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
@@ -109,10 +113,11 @@ public class Configuration extends BuildObject implements IConfiguration {
//as a special Builder object of the tool-chain and implement the internal
//builder enabling/disabling as the Builder substitution functionality
//
- //property that holds the Internal Builder enable state
- private static final String INTERNAL_BUILDER_ENABLED = "internalBuilderOn"; //$NON-NLS-1$
- //property that holds the internal builder mode
- private static final String INTERNAL_BUILDER_IGNORE_ERR = "internalBuilderIgnoreErr"; //$NON-NLS-1$
+ private static final String INTERNAL_BUILDER = "internalBuilder";
+ //preference key that holds the Internal Builder enable state
+ private static final String INTERNAL_BUILDER_ENABLED = "enabled"; //$NON-NLS-1$
+ //preference key that holds the internal builder mode
+ private static final String INTERNAL_BUILDER_IGNORE_ERR = "ignoreErr"; //$NON-NLS-1$
//Internal Builder enable state
private boolean internalBuilderEnabled;
//Internal Builder mode
@@ -270,11 +275,12 @@ public class Configuration extends BuildObject implements IConfiguration {
}
}
- internalBuilderEnabled = Boolean.valueOf(
- mngr.getProperty(this, INTERNAL_BUILDER_ENABLED)).booleanValue();
- String tmp = mngr.getProperty(this, INTERNAL_BUILDER_IGNORE_ERR);
- if(tmp == null || Boolean.valueOf(tmp).booleanValue())
- internalBuilderIgnoreErr = true;
+ Preferences prefs = getPreferences(INTERNAL_BUILDER);
+
+ internalBuilderEnabled = prefs != null ?
+ prefs.getBoolean(INTERNAL_BUILDER_ENABLED, false) : false;
+ internalBuilderIgnoreErr = prefs != null ?
+ prefs.getBoolean(INTERNAL_BUILDER_IGNORE_ERR, true) : true;
}
/**
@@ -1722,7 +1728,14 @@ public class Configuration extends BuildObject implements IConfiguration {
public void enableInternalBuilder(boolean enable){
if(internalBuilderEnabled != enable){
internalBuilderEnabled = enable;
- PropertyManager.getInstance().setProperty(this, INTERNAL_BUILDER_ENABLED, Boolean.toString(internalBuilderEnabled));
+ Preferences prefs = getPreferences(INTERNAL_BUILDER);
+ if(prefs != null){
+ prefs.putBoolean(INTERNAL_BUILDER_ENABLED, internalBuilderEnabled);
+ try {
+ prefs.flush();
+ } catch (BackingStoreException e) {
+ }
+ }
}
}
@@ -1746,7 +1759,14 @@ public class Configuration extends BuildObject implements IConfiguration {
public void setInternalBuilderIgnoreErr(boolean ignore){
if(internalBuilderIgnoreErr != ignore){
internalBuilderIgnoreErr = ignore;
- PropertyManager.getInstance().setProperty(this, INTERNAL_BUILDER_IGNORE_ERR, Boolean.toString(internalBuilderIgnoreErr));
+ Preferences prefs = getPreferences(INTERNAL_BUILDER);
+ if(prefs != null){
+ prefs.putBoolean(INTERNAL_BUILDER_IGNORE_ERR, internalBuilderIgnoreErr);
+ try {
+ prefs.flush();
+ } catch (BackingStoreException e) {
+ }
+ }
}
}
@@ -1760,4 +1780,22 @@ public class Configuration extends BuildObject implements IConfiguration {
public boolean getInternalBuilderIgnoreErr(){
return internalBuilderIgnoreErr;
}
+
+ private Preferences getPreferences(String name){
+ if(isTemporary)
+ return null;
+
+ IProject project = (IProject)getOwner();
+
+ if(project == null || !project.exists() || !project.isOpen())
+ return null;
+
+ Preferences prefs = new ProjectScope(project).getNode(ManagedBuilderCorePlugin.getUniqueIdentifier());
+ if(prefs != null){
+ prefs = prefs.node(getId());
+ if(prefs != null && name != null)
+ prefs = prefs.node(name);
+ }
+ return prefs;
+ }
}
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/PropertyManager.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/PropertyManager.java
index ebfffd6031e..60322f4b53e 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/PropertyManager.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/PropertyManager.java
@@ -40,7 +40,6 @@ import org.osgi.service.prefs.Preferences;
/**
* This class allows specifying BuildObject-specific persisted properties
- * The properties are stored as project preferences for now
*
*/
public class PropertyManager {
@@ -64,7 +63,6 @@ public class PropertyManager {
Properties props = getProperties(cfg, bo);
if(props != null){
props.setProperty(prop, value);
- serialize(cfg);
}
}
@@ -231,9 +229,8 @@ public class PropertyManager {
}
protected Preferences getNode(IManagedProject mProject){
- //TODO: should we store the data as the workspaces preferences?
- return getProjNode(mProject);
-// return getInstNode(mProject);
+// return getProjNode(mProject);
+ return getInstNode(mProject);
}
protected Preferences getProjNode(IManagedProject mProject){
@@ -342,7 +339,24 @@ public class PropertyManager {
public String getProperty(IBuilder builder, String key){
return getProperty(getConfiguration(builder), builder, key);
}
-
+
+ public void clearProperties(IManagedProject mProject){
+ IConfiguration cfgs[] = mProject.getConfigurations();
+ for(int i = 0; i < cfgs.length; i++)
+ clearLoaddedData(cfgs[i]);
+
+ Preferences prefs = getNode(mProject);
+ if(prefs != null){
+ try {
+ Preferences parent = prefs.parent();
+ prefs.removeNode();
+ if(parent != null)
+ parent.flush();
+ } catch (BackingStoreException e) {
+ }
+ }
+ }
+
public void clearProperties(IConfiguration cfg){
clearLoaddedData(cfg);
storeData(cfg, null);
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ResourceChangeHandler.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ResourceChangeHandler.java
index 6c0a0f99fb2..977cf282fd6 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ResourceChangeHandler.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ResourceChangeHandler.java
@@ -13,6 +13,7 @@ package org.eclipse.cdt.managedbuilder.internal.core;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Map;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
@@ -48,6 +49,8 @@ import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.core.runtime.jobs.MultiRule;
public class ResourceChangeHandler implements IResourceChangeListener, ISaveParticipant {
+
+ private Map fRmProjectToBuildInfoMap = new HashMap();
private class ResourceConfigurationChecker implements IResourceDeltaVisitor{
private IResourceDelta fRootDelta;
@@ -73,9 +76,16 @@ public class ResourceChangeHandler implements IResourceChangeListener, ISavePart
IResource rcToCheck = null;
switch (delta.getKind()) {
case IResourceDelta.REMOVED :
- if ((delta.getFlags() & IResourceDelta.MOVED_TO) == 0 && rcType == IResource.PROJECT) {
- sendClose((IProject)dResource);
- break;
+ if (rcType == IResource.PROJECT){
+ IManagedBuildInfo info = (IManagedBuildInfo)fRmProjectToBuildInfoMap.remove(dResource);
+
+ if((delta.getFlags() & IResourceDelta.MOVED_TO) == 0) {
+ if(info != null){
+ sendClose(info);
+ PropertyManager.getInstance().clearProperties(info.getManagedProject());
+ }
+ break;
+ }
}
case IResourceDelta.CHANGED :
if ((delta.getFlags() & IResourceDelta.MOVED_TO) != 0) {
@@ -279,9 +289,12 @@ public class ResourceChangeHandler implements IResourceChangeListener, ISavePart
return makeGen;
}
}
-
+
public void sendClose(IProject project){
- IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(project,false);
+ sendClose(ManagedBuildManager.getBuildInfo(project,false));
+ }
+
+ private void sendClose(IManagedBuildInfo info){
if(info != null){
IManagedProject managedProj = info.getManagedProject();
if (managedProj != null) {
@@ -292,7 +305,7 @@ public class ResourceChangeHandler implements IResourceChangeListener, ISavePart
}
}
}
-
+
/*
* I R e s o u r c e C h a n g e L i s t e n e r
*/
@@ -313,9 +326,21 @@ public class ResourceChangeHandler implements IResourceChangeListener, ISavePart
if(proj instanceof IProject)
sendClose((IProject)proj);
break;
+ case IResourceChangeEvent.PRE_DELETE :
+ IResource rc = event.getResource();
+ if(rc instanceof IProject){
+ IProject project = (IProject)rc;
+ try {
+ if (project.hasNature(ManagedCProjectNature.MNG_NATURE_ID)) {
+ IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(project);
+ if(info != null)
+ fRmProjectToBuildInfoMap.put(project, info);
+ }
+ } catch (CoreException e) {
+ }
+ }
case IResourceChangeEvent.POST_CHANGE :
case IResourceChangeEvent.POST_BUILD :
- case IResourceChangeEvent.PRE_DELETE :
IResourceDelta resDelta = event.getDelta();
if (resDelta == null) {
break;
@@ -433,8 +458,9 @@ public class ResourceChangeHandler implements IResourceChangeListener, ISavePart
* @see org.eclipse.core.resources.ISaveParticipant#saving(org.eclipse.core.resources.ISaveContext)
*/
public void saving(ISaveContext context) throws CoreException {
- // No state to be saved by the plug-in, but request a
- // resource delta to be used on next activation.
+ PropertyManager.getInstance().serialize();
+
+ //Request a resource delta to be used on next activation.
context.needDelta();
}

Back to the top