Skip to content

Commit ef24315

Browse files
author
jan
committed
#1299 reentrance partly fixed
works for my case when project refresh on open is on
1 parent 718823a commit ef24315

File tree

4 files changed

+24
-11
lines changed

4 files changed

+24
-11
lines changed

io.sloeber.core/src/io/sloeber/core/Activator.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.eclipse.cdt.core.CCorePlugin;
1111
import org.eclipse.cdt.core.model.CoreModel;
1212
import org.eclipse.cdt.core.settings.model.CProjectDescriptionEvent;
13+
import org.eclipse.core.resources.IResourceChangeEvent;
1314
import org.eclipse.core.resources.IResourceChangeListener;
1415
import org.eclipse.core.resources.ResourcesPlugin;
1516
import org.eclipse.core.runtime.CoreException;
@@ -187,7 +188,8 @@ private static void registerListeners() {
187188
singCoreModel.addCProjectDescriptionListener(new ConfigurationChangeListener(),
188189
CProjectDescriptionEvent.ABOUT_TO_APPLY);
189190

190-
ResourcesPlugin.getWorkspace().addResourceChangeListener(myResourceChangelistener);
191+
ResourcesPlugin.getWorkspace().addResourceChangeListener(myResourceChangelistener,IResourceChangeEvent.POST_CHANGE);
192+
191193

192194
}
193195

@@ -240,7 +242,7 @@ protected IStatus run(IProgressMonitor monitor) {
240242
if (InstancePreferences.useBonjour()) {
241243
SloeberNetworkDiscovery.start();
242244
}
243-
registerListeners();
245+
registerListeners();
244246
return Status.OK_STATUS;
245247
}
246248

io.sloeber.core/src/io/sloeber/core/api/SloeberProject.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package io.sloeber.core.api;
22

33
import java.io.ByteArrayInputStream;
4-
import java.io.File;
54
import java.io.IOException;
65
import java.net.URI;
76
import java.nio.file.Files;
@@ -580,6 +579,7 @@ private boolean readConfig(ICProjectDescription prjCDesc, boolean prjDescWritabl
580579
if (readConfigFromCDT(prjCDesc, prjDescWritable)) {
581580
myNeedToPersist = true;
582581
myNeedsClean = true;
582+
projDescNeedsWriting = true;
583583
}
584584
}
585585
isInMemory = true;
@@ -667,6 +667,13 @@ private void setEnvironmentVariables(Collection<String> configKeys) {
667667
*/
668668
private synchronized void createSloeberConfigFiles(Map<String, String> configs) {
669669

670+
final IWorkspace workspace = ResourcesPlugin.getWorkspace();
671+
if (workspace.isTreeLocked()) {
672+
// we cant save now do it later
673+
myNeedToPersist = true;
674+
return;
675+
}
676+
670677
Map<String, String> configVars = new TreeMap<>();
671678
Map<String, String> versionVars = new TreeMap<>();
672679

@@ -711,15 +718,17 @@ private synchronized void createSloeberConfigFiles(Map<String, String> configs)
711718
try {
712719
storeConfigurationFile(getConfigVersionFile(), versionVars);
713720
storeConfigurationFile(getConfigLocalFile(), configVars);
714-
} catch (CoreException e) {
721+
myNeedToPersist = false;
722+
} catch (Exception e) {
715723
Common.log(new Status(IStatus.ERROR, io.sloeber.core.Activator.getId(),
716724
"failed to save the sloeber config files", e)); //$NON-NLS-1$
725+
myNeedToPersist = true;
717726
}
718-
myNeedToPersist = false;
727+
719728

720729
}
721730

722-
private static void storeConfigurationFile(IFile file, Map<String, String> vars) throws CoreException {
731+
private static void storeConfigurationFile(IFile file, Map<String, String> vars) throws Exception {
723732
String content = EMPTY;
724733
for (Entry<String, String> curLine : vars.entrySet()) {
725734
content += curLine.getKey() + '=' + curLine.getValue() + '\n';

io.sloeber.core/src/io/sloeber/core/common/Common.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ public static String makeEnvironmentVar(String variableName) {
264264
*/
265265
static public String getOldWayEnvVar(ICConfigurationDescription confDesc, String envName) {
266266
return getBuildEnvironmentVariable(confDesc, envName,
267-
getBuildEnvironmentVariable(confDesc, envName.toUpperCase(), EMPTY, false), false);
267+
getBuildEnvironmentVariable(confDesc, envName.toUpperCase(), EMPTY, true), true);
268268
}
269269

270270

io.sloeber.core/src/io/sloeber/core/listeners/resourceChangeListener.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.sloeber.core.listeners;
22

3+
import static io.sloeber.core.common.Const.*;
4+
35
import java.util.ArrayList;
46

57
import org.eclipse.core.resources.IProject;
@@ -30,7 +32,7 @@ public void resourceChanged(IResourceChangeEvent event) {
3032
final ArrayList<IProject> changedSloeberCfgFiles = new ArrayList<>();
3133
IResourceDelta rootDelta = event.getDelta();
3234
for (IResourceDelta projectDelta : rootDelta.getAffectedChildren()) {
33-
IResourceDelta sloeberCfgDelta = projectDelta.findMember(new Path("sloeber.cfg"));
35+
IResourceDelta sloeberCfgDelta = projectDelta.findMember(new Path(SLOEBER_CFG));
3436
if (sloeberCfgDelta != null) {
3537
if (sloeberCfgDelta.getKind() != IResourceDelta.REMOVED) {
3638
IProject iProject = sloeberCfgDelta.getResource().getProject();
@@ -40,9 +42,9 @@ public void resourceChanged(IResourceChangeEvent event) {
4042
changedSloeberCfgFiles.add(iProject);
4143
}
4244
} else {
43-
// it is not a new type sloeber project check wether it is an old type sloeber
45+
// it is not a new type Sloeber project check whether it is an old type Sloeber
4446
// project
45-
IResourceDelta cProjectDelta = projectDelta.findMember(new Path(".cproject"));
47+
IResourceDelta cProjectDelta = projectDelta.findMember(new Path(".cproject")); //$NON-NLS-1$
4648
if (cProjectDelta != null)
4749
if (projectDelta.getFlags() == IResourceDelta.OPEN) {
4850
// as it is a open of a cdt project assume it is a sloeber project.
@@ -60,7 +62,7 @@ public void resourceChanged(IResourceChangeEvent event) {
6062
if (changedSloeberCfgFiles.size() == 0)
6163
return;
6264

63-
Job job = new Job("Sloeber.cfg modification processor") {
65+
Job job = new Job("Sloeber.cfg modification processor") { //$NON-NLS-1$
6466
@Override
6567
protected IStatus run(IProgressMonitor monitor) {
6668
final IWorkspace workspace = ResourcesPlugin.getWorkspace();

0 commit comments

Comments
 (0)