Skip to content

Commit e1c54f0

Browse files
author
jantje
committed
#1268 better error handling
1 parent 43d329d commit e1c54f0

File tree

4 files changed

+65
-32
lines changed

4 files changed

+65
-32
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ private static void registerListeners() {
182182
CCorePlugin.getIndexManager().addIndexerStateListener(myindexerListener);
183183
CoreModel singCoreModel = CoreModel.getDefault();
184184
singCoreModel.addCProjectDescriptionListener(new ConfigurationChangeListener(),
185-
CProjectDescriptionEvent.ABOUT_TO_APPLY);
185+
CProjectDescriptionEvent.ALL);
186186
}
187187

188188
private static void initializeImportantVariables() {

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

+17-2
Original file line numberDiff line numberDiff line change
@@ -452,11 +452,23 @@ private static void setEnvVars(ICConfigurationDescription confDesc, Map<String,
452452

453453
/**
454454
* get the Arduino project description based on a project description
455+
* Convenience method for getSloeberProject(project, false);
455456
*
456457
* @param project
457458
* @return
458459
*/
459460
public static synchronized SloeberProject getSloeberProject(IProject project) {
461+
return getSloeberProject(project, false);
462+
}
463+
464+
/**
465+
* get the Arduino project description based on a project description
466+
*
467+
* @param project
468+
* @param allowNull set true if a null response is ok
469+
* @return
470+
*/
471+
public static synchronized SloeberProject getSloeberProject(IProject project,boolean allowNull) {
460472

461473
if (project.isOpen() && project.getLocation().toFile().exists()) {
462474
if (Sketch.isSketch(project)) {
@@ -471,9 +483,10 @@ public static synchronized SloeberProject getSloeberProject(IProject project) {
471483
// TODO Auto-generated catch block
472484
e.printStackTrace();
473485
}
474-
486+
if(!allowNull) {
475487
SloeberProject ret = new SloeberProject(project, false);
476488
return ret;
489+
}
477490
}
478491
}
479492
return null;
@@ -554,7 +567,9 @@ public OtherDescription getOtherDescription(ICConfigurationDescription confDesc)
554567
}
555568

556569
public String getDecoratedText(ICConfigurationDescription confDesc, String text) {
557-
BoardDescription boardDescriptor = getBoardDescription(confDesc);
570+
// do not use getBoardDescriptor below as this will cause a infinite loop at
571+
// project creation
572+
BoardDescription boardDescriptor = myBoardDescriptions.get(confDesc.getId());
558573
if (boardDescriptor == null) {
559574
return text + " Project not configured"; //$NON-NLS-1$
560575
}

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

+46-28
Original file line numberDiff line numberDiff line change
@@ -18,46 +18,64 @@ public class ConfigurationChangeListener implements ICProjectDescriptionListener
1818

1919
@Override
2020
public void handleEvent(CProjectDescriptionEvent event) {
21-
if (event.getEventType() != CProjectDescriptionEvent.ABOUT_TO_APPLY) {
22-
return;
23-
}
2421

2522
IProject activeProject = event.getProject();
26-
// only handle arduino nature projects
27-
try {
28-
if (!activeProject.hasNature(Const.ARDUINO_NATURE_ID)) {
29-
return;
30-
}
31-
} catch (Exception e) {
32-
// don't care don't update
23+
SloeberProject sloebberProject = SloeberProject.getSloeberProject(activeProject, true);
24+
if (sloebberProject == null) {
25+
// this is not a sloeber project so ignore
3326
return;
3427
}
28+
// don't do stuff during project creation
3529
if (IndexerController.isPosponed(activeProject)) {
3630
Common.log(new Status(Const.SLOEBER_STATUS_DEBUG, Activator.getId(),
3731
"Ignoring configuration change during project creation " + activeProject.getName())); //$NON-NLS-1$
3832
return;
3933
}
40-
ICDescriptionDelta projectDelta = event.getProjectDelta();
41-
if (projectDelta != null) {
42-
int projectChangeFlags = projectDelta.getChangeFlags();
43-
int projectDeltaKind = projectDelta.getDeltaKind();
34+
35+
switch (event.getEventType()) {
36+
case CProjectDescriptionEvent.ABOUT_TO_APPLY: {
37+
ICProjectDescription newProjDesc = event.getNewCProjectDescription();
38+
ICConfigurationDescription newConf = newProjDesc.getActiveConfiguration();
39+
BoardDescription newBoardDescriptor = sloebberProject.getBoardDescription(newConf);
40+
sloebberProject.setBoardDescription(newConf, newBoardDescriptor);
41+
break;
42+
}
43+
case CProjectDescriptionEvent.COPY_CREATED: {
44+
ICDescriptionDelta projectDelta = event.getProjectDelta();
45+
if (projectDelta != null) {
46+
int projectChangeFlags = projectDelta.getChangeFlags();
47+
int projectDeltaKind = projectDelta.getDeltaKind();
48+
}
49+
ICDescriptionDelta cfgDelta = event.getActiveCfgDelta();
50+
if (cfgDelta != null) {
51+
int cfgChangeFlags = cfgDelta.getChangeFlags();
52+
int cfgDeltaKind = cfgDelta.getDeltaKind();
53+
}
54+
ICDescriptionDelta defaultDelta = event.getDefaultSettingCfgDelta();
55+
if (defaultDelta != null) {
56+
int changeFlags = defaultDelta.getChangeFlags();
57+
int deltaKind = defaultDelta.getDeltaKind();
58+
}
59+
break;
4460
}
45-
ICDescriptionDelta cfgDelta = event.getActiveCfgDelta();
46-
if (cfgDelta != null) {
47-
int cfgChangeFlags = cfgDelta.getChangeFlags();
48-
int cfgDeltaKind = cfgDelta.getDeltaKind();
61+
default: {
62+
ICDescriptionDelta projectDelta = event.getProjectDelta();
63+
if (projectDelta != null) {
64+
int projectChangeFlags = projectDelta.getChangeFlags();
65+
int projectDeltaKind = projectDelta.getDeltaKind();
66+
}
67+
ICDescriptionDelta cfgDelta = event.getActiveCfgDelta();
68+
if (cfgDelta != null) {
69+
int cfgChangeFlags = cfgDelta.getChangeFlags();
70+
int cfgDeltaKind = cfgDelta.getDeltaKind();
71+
}
72+
ICDescriptionDelta defaultDelta = event.getDefaultSettingCfgDelta();
73+
if (defaultDelta != null) {
74+
int changeFlags = defaultDelta.getChangeFlags();
75+
int deltaKind = defaultDelta.getDeltaKind();
76+
}
4977
}
50-
ICDescriptionDelta defaultDelta = event.getDefaultSettingCfgDelta();
51-
if (defaultDelta != null) {
52-
int changeFlags = defaultDelta.getChangeFlags();
53-
int deltaKind = defaultDelta.getDeltaKind();
5478
}
55-
SloeberProject sloebberProject = SloeberProject.getSloeberProject(activeProject);
56-
57-
ICProjectDescription newProjDesc = event.getNewCProjectDescription();
58-
ICConfigurationDescription newConf = newProjDesc.getActiveConfiguration();
59-
BoardDescription newBoardDescriptor = sloebberProject.getBoardDescription(newConf);
60-
sloebberProject.setBoardDescription(newConf, newBoardDescriptor);
6179
}
6280

6381
}

io.sloeber.ui/src/io/sloeber/ui/ExplorerLabelDecorator.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public String decorateText(String text, Object element) {
4949
ICConfigurationDescription confDesc = prjDesc.getActiveConfiguration();
5050
if (confDesc != null) {
5151
SloeberProject arduinoProject = SloeberProject
52-
.getSloeberProject(proj);
52+
.getSloeberProject(proj, true);
5353
if (arduinoProject != null) {
5454
return arduinoProject.getDecoratedText(confDesc, text);
5555
}

0 commit comments

Comments
 (0)