Skip to content

Commit b874b0e

Browse files
author
jantje
committed
#1391 resourceChangeListener treated config changes = as project open
For a config change the build folder needs to be deleted to force a complete rebuild (including makefiles) where this is absolutely not wanted for project open. I did some cleanup on the CDT/sloeber synching as well as that is how I found the root cause of this issue
1 parent 636e89a commit b874b0e

File tree

15 files changed

+211
-190
lines changed

15 files changed

+211
-190
lines changed

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,6 @@ public static IStatus isUploadableProject(IProject project) {
3434
return Status.OK_STATUS;
3535
}
3636

37-
38-
3937
/**
4038
* Synchronous upload of the sketch returning the status.
4139
*
@@ -48,7 +46,7 @@ public static IStatus syncUpload(IProject project) {
4846
if (!ret.isOK()) {
4947
return ret;
5048
}
51-
SloeberProject sProject = SloeberProject.getSloeberProject(project, true);
49+
SloeberProject sProject = SloeberProject.getSloeberProject(project);
5250
return sProject.upload();
5351
}
5452

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

Lines changed: 126 additions & 127 deletions
Large diffs are not rendered by default.

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ public static String makeEnvironmentVar(String variableName) {
274274
*/
275275
static public String getOldWayEnvVar(ICConfigurationDescription confDesc, String envName) {
276276
return getBuildEnvironmentVariable(confDesc, envName,
277-
getBuildEnvironmentVariable(confDesc, envName.toUpperCase(), EMPTY, true), true);
277+
getBuildEnvironmentVariable(confDesc, envName.toUpperCase(), EMPTY, false), false);
278278
}
279279

280280
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public class ConfigurationChangeListener implements ICProjectDescriptionListener
1717
public void handleEvent(CProjectDescriptionEvent event) {
1818

1919
IProject activeProject = event.getProject();
20-
SloeberProject sloeberProject = SloeberProject.getSloeberProject(activeProject, true);
20+
SloeberProject sloeberProject = SloeberProject.getSloeberProject(activeProject);
2121
if (sloeberProject == null) {
2222
// this is not a sloeber project so ignore
2323
return;

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

Lines changed: 53 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -11,47 +11,62 @@
1111
import org.eclipse.core.runtime.Status;
1212

1313
import io.sloeber.core.Activator;
14+
import io.sloeber.core.api.SloeberProject;
1415
import io.sloeber.core.common.Common;
1516
import io.sloeber.core.common.Const;
1617

17-
public class IndexerController extends IndexerSetupParticipant {
18-
private static Set<IProject> fProjects = new HashSet<>();
19-
private static IndexerController theController=null;
20-
@Override
21-
public boolean postponeIndexerSetup(ICProject cProject) {
22-
IProject project=cProject.getProject();
23-
boolean ret= fProjects.contains(project);
24-
if(ret) {
25-
Common.log(new Status(Const.SLOEBER_STATUS_DEBUG, Activator.getId(),"pospone index "+project.getName())); //$NON-NLS-1$
26-
}
27-
else {
28-
Common.log(new Status(Const.SLOEBER_STATUS_DEBUG, Activator.getId(),"do not pospone index "+project.getName())); //$NON-NLS-1$
29-
}
30-
return ret;
31-
}
18+
public class IndexerController extends IndexerSetupParticipant {
19+
private static Set<IProject> doNotIndexProjects = new HashSet<>();
20+
private static Set<IProject> indexingPosponedProjects = new HashSet<>();
21+
private static IndexerController theController = null;
22+
23+
@Override
24+
public boolean postponeIndexerSetup(ICProject cProject) {
25+
IProject project = cProject.getProject();
26+
SloeberProject sloeberProject = SloeberProject.getSloeberProject(project);
27+
if (sloeberProject != null) {
28+
if (!sloeberProject.isInMemory()) {
29+
doNotIndexProjects.add(project);
30+
}
31+
}
32+
boolean ret = doNotIndexProjects.contains(project);
33+
if (ret) {
34+
Common.log(new Status(Const.SLOEBER_STATUS_DEBUG, Activator.getId(), "pospone index " + project.getName())); //$NON-NLS-1$
35+
indexingPosponedProjects.add(project);
36+
} else {
37+
Common.log(new Status(Const.SLOEBER_STATUS_DEBUG, Activator.getId(),
38+
"do not pospone index " + project.getName())); //$NON-NLS-1$
39+
}
40+
return ret;
41+
}
3242

3343
static public boolean isPosponed(IProject project) {
34-
return fProjects.contains(project);
35-
}
36-
public static void doNotIndex(IProject project) {
37-
Common.log(new Status(Const.SLOEBER_STATUS_DEBUG, Activator.getId(),"Do not index "+project.getName())); //$NON-NLS-1$
38-
fProjects.add(project);
39-
getIndexController();
40-
}
41-
public static void index(IProject project) {
42-
Common.log(new Status(Const.SLOEBER_STATUS_DEBUG, Activator.getId(),"index "+project.getName())); //$NON-NLS-1$
43-
fProjects.remove(project);
44-
ICProject cProject = CoreModel.getDefault().getCModel().getCProject(project.getName());
45-
getIndexController().notifyIndexerSetup(cProject);
46-
}
47-
48-
public static IndexerController getIndexController() {
49-
if (theController==null) {
50-
theController=new IndexerController();
51-
CCorePlugin.getIndexManager().addIndexerSetupParticipant(theController);
52-
}
53-
return theController;
54-
55-
}
56-
44+
return doNotIndexProjects.contains(project);
45+
}
46+
47+
public static void doNotIndex(IProject project) {
48+
Common.log(new Status(Const.SLOEBER_STATUS_DEBUG, Activator.getId(), "Do not index " + project.getName())); //$NON-NLS-1$
49+
doNotIndexProjects.add(project);
50+
getIndexController();
51+
}
52+
53+
public static void index(IProject project) {
54+
Common.log(new Status(Const.SLOEBER_STATUS_DEBUG, Activator.getId(), "index " + project.getName())); //$NON-NLS-1$
55+
doNotIndexProjects.remove(project);
56+
if (indexingPosponedProjects.contains(project)) {
57+
indexingPosponedProjects.remove(project);
58+
ICProject cProject = CoreModel.getDefault().getCModel().getCProject(project.getName());
59+
getIndexController().notifyIndexerSetup(cProject);
60+
}
61+
}
62+
63+
public static IndexerController getIndexController() {
64+
if (theController == null) {
65+
theController = new IndexerController();
66+
CCorePlugin.getIndexManager().addIndexerSetupParticipant(theController);
67+
}
68+
return theController;
69+
70+
}
71+
5772
}

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

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public void resourceChanged(IResourceChangeEvent event) {
3838
IProject iProject = sloeberCfgDelta.getResource().getProject();
3939
// stop the indexer
4040
IndexerController.doNotIndex(iProject);
41+
4142
// log to process later
4243
changedSloeberCfgFiles.add(iProject);
4344
}
@@ -50,10 +51,16 @@ public void resourceChanged(IResourceChangeEvent event) {
5051
// as it is a open of a cdt project assume it is a sloeber project.
5152
// We will find out later if not
5253
IProject iProject = cProjectDelta.getResource().getProject();
53-
// stop the indexer
54-
IndexerController.doNotIndex(iProject);
54+
SloeberProject curSloeberProject = SloeberProject.getSloeberProject(iProject);
55+
if (curSloeberProject != null) {
56+
if (!curSloeberProject.isInMemory()) {
57+
// stop the indexer
58+
IndexerController.doNotIndex(iProject);
59+
curSloeberProject.configure();
60+
}
61+
}
5562
// log to process later
56-
changedSloeberCfgFiles.add(iProject);
63+
//changedSloeberCfgFiles.add(iProject);
5764
}
5865
}
5966
}
@@ -73,12 +80,15 @@ protected IStatus run(IProgressMonitor monitor) {
7380
public void run(IProgressMonitor monitor) throws CoreException {
7481
for (IProject curProject : changedSloeberCfgFiles) {
7582
if (curProject.isOpen()) {
76-
SloeberProject curSloeberProject = SloeberProject.getSloeberProject(curProject, false);
83+
SloeberProject curSloeberProject = SloeberProject.getSloeberProject(curProject);
7784
if (curSloeberProject == null) {
7885
// this is not a sloeber project;
7986
// make it one?
8087
} else {
81-
curSloeberProject.sloeberCfgChanged();
88+
//no use updating the cfg if it wasn't read already
89+
if (curSloeberProject.isInMemory()) {
90+
curSloeberProject.sloeberCfgChanged();
91+
}
8292
}
8393
}
8494
IndexerController.index(curProject);

io.sloeber.core/src/io/sloeber/core/toolchain/SloeberBuildRunner.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public boolean invokeBuild(int kind, IProject project, IConfiguration configurat
4242

4343
List<String> stopSerialOnBuildTargets = List.of(Preferences.getDisconnectSerialTargetsList());
4444
if (stopSerialOnBuildTargets.contains(theBuildTarget)) {
45-
SloeberProject sloeberProject = SloeberProject.getSloeberProject(project, true);
45+
SloeberProject sloeberProject = SloeberProject.getSloeberProject(project);
4646
if (sloeberProject != null) {
4747
BoardDescription myBoardDescriptor = sloeberProject.getBoardDescription(configuration.getName(), true);
4848
if (myBoardDescriptor != null) {

io.sloeber.core/src/io/sloeber/core/toolchain/SloeberConfigurationVariableSupplier.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ private static SloeberProject getSloeberProject(IConfiguration configuration) {
2222
ICConfigurationDescription confDesc = ManagedBuildManager.getDescriptionForConfiguration(configuration);
2323
ICProjectDescription projDesc = confDesc.getProjectDescription();
2424
IProject project = projDesc.getProject();
25-
return SloeberProject.getSloeberProject(project, false);
25+
return SloeberProject.getSloeberProject(project);
2626
}
2727

2828
@Override

io.sloeber.core/src/io/sloeber/core/tools/Libraries.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ private static Map<String, IPath> findAllSubFolders(IPath ipath) {
114114
private static Map<String, IPath> findAllHarwareLibraries(ICConfigurationDescription confDesc) {
115115
Map<String, IPath> ret = new HashMap<>();
116116
IProject project = confDesc.getProjectDescription().getProject();
117-
SloeberProject sProject = SloeberProject.getSloeberProject(project, false);
117+
SloeberProject sProject = SloeberProject.getSloeberProject(project);
118118
BoardDescription boardDescriptor = sProject.getBoardDescription(confDesc.getName(), false);
119119
// first add the referenced
120120
IPath libPath = boardDescriptor.getReferencedCoreLibraryPath();

io.sloeber.tests/src/io/sloeber/core/RegressionTest.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ public void issue555() {
109109
e.printStackTrace();
110110
fail("Failed to compile the project:" + unoBoardid.getBoardName() + " as uno exception");
111111
}
112-
SloeberProject arduinoProject = SloeberProject.getSloeberProject(theTestProject, false);
112+
SloeberProject arduinoProject = SloeberProject.getSloeberProject(theTestProject);
113113
ICProjectDescription cProjectDescription = CCorePlugin.getDefault().getProjectDescription(theTestProject);
114114
arduinoProject.setBoardDescription(cProjectDescription.getActiveConfiguration().getName(), teensyBoardid, true);
115115

@@ -390,7 +390,7 @@ public void openAndClosePreservesSettings() throws Exception {
390390

391391
// Read the data we want to test
392392
Shared.waitForAllJobsToFinish(); // for the indexer
393-
SloeberProject sloeberDesc = SloeberProject.getSloeberProject(theTestProject, false);
393+
SloeberProject sloeberDesc = SloeberProject.getSloeberProject(theTestProject);
394394
ICProjectDescription projDesc = CoreModel.getDefault().getProjectDescription(theTestProject);
395395
ICConfigurationDescription confDesc = projDesc.getActiveConfiguration();
396396
BoardDescription createdBoardDesc = sloeberDesc.getBoardDescription(confDesc.getName(), false);
@@ -405,7 +405,7 @@ public void openAndClosePreservesSettings() throws Exception {
405405
Shared.waitForAllJobsToFinish();
406406

407407
// read the data we want to test
408-
sloeberDesc = SloeberProject.getSloeberProject(theTestProject, false);
408+
sloeberDesc = SloeberProject.getSloeberProject(theTestProject);
409409
projDesc = CoreModel.getDefault().getProjectDescription(theTestProject);
410410
confDesc = projDesc.getActiveConfiguration();
411411
BoardDescription reopenedBoardDesc = sloeberDesc.getBoardDescription(confDesc.getName(), false);
@@ -486,14 +486,14 @@ public void openAndCloseUsesSavedSettings() throws Exception {
486486

487487
// Read the data we want to test
488488
Shared.waitForAllJobsToFinish(); // for the indexer
489-
SloeberProject proj1SloeberDesc = SloeberProject.getSloeberProject(proj1, false);
489+
SloeberProject proj1SloeberDesc = SloeberProject.getSloeberProject(proj1);
490490
ICProjectDescription proj1Desc = CoreModel.getDefault().getProjectDescription(proj1);
491491
ICConfigurationDescription proj1ConfDesc = proj1Desc.getActiveConfiguration();
492492
BoardDescription proj1CreatedBoardDesc = proj1SloeberDesc.getBoardDescription(proj1ConfDesc.getName(), false);
493493
CompileDescription proj1CreatedCompileDesc = proj1SloeberDesc.getCompileDescription(proj1ConfDesc.getName(),
494494
false);
495495

496-
SloeberProject proj2SloeberDesc = SloeberProject.getSloeberProject(proj2, false);
496+
SloeberProject proj2SloeberDesc = SloeberProject.getSloeberProject(proj2);
497497
ICProjectDescription proj2Desc = CoreModel.getDefault().getProjectDescription(proj2);
498498
ICConfigurationDescription proj2ConfDesc = proj2Desc.getActiveConfiguration();
499499
BoardDescription proj2CreatedBoardDesc = proj2SloeberDesc.getBoardDescription(proj2ConfDesc.getName(), false);
@@ -522,7 +522,7 @@ public void openAndCloseUsesSavedSettings() throws Exception {
522522
Shared.waitForAllJobsToFinish();
523523

524524
// reread project 2
525-
proj2SloeberDesc = SloeberProject.getSloeberProject(proj2, false);
525+
proj2SloeberDesc = SloeberProject.getSloeberProject(proj2);
526526
proj2Desc = CoreModel.getDefault().getProjectDescription(proj2);
527527
proj2ConfDesc = proj2Desc.getActiveConfiguration();
528528
BoardDescription proj2OpenedBoardDesc = proj2SloeberDesc.getBoardDescription(proj2ConfDesc.getName(), false);

0 commit comments

Comments
 (0)