Skip to content

Commit 6f96605

Browse files
author
jantje
committed
#1163 indexlistener is buggy and unreliable
It probably needs some synchronisation code as well but I lack the java experiance to do this confortably in a listener. So I assume that due to the nature of the calling events it is not nessesary
1 parent 0dba549 commit 6f96605

File tree

1 file changed

+52
-41
lines changed

1 file changed

+52
-41
lines changed

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

+52-41
Original file line numberDiff line numberDiff line change
@@ -26,55 +26,66 @@
2626
import io.sloeber.core.tools.Libraries;
2727

2828
public class IndexerListener implements IIndexChangeListener, IIndexerStateListener {
29-
protected Set<IProject> ChangedProjects = new HashSet<>();
30-
Job installLibJob = null;
29+
private static Set<IProject> ChangedProjects = new HashSet<>();
30+
private static Job installLibJob = null;
3131

32-
@Override
33-
public void indexChanged(IIndexChangeEvent event) {
34-
IProject project = event.getAffectedProject().getProject();
35-
try {
36-
if (project.hasNature(Const.ARDUINO_NATURE_ID)) {
37-
this.ChangedProjects.add(project);
38-
}
39-
} catch (CoreException e) {
40-
// ignore
41-
e.printStackTrace();
42-
}
32+
@Override
33+
public void indexChanged(IIndexChangeEvent event) {
34+
IProject project = event.getAffectedProject().getProject();
35+
try {
36+
if (project.hasNature(Const.ARDUINO_NATURE_ID)) {
37+
Common.log(new Status(Const.SLOEBER_STATUS_DEBUG, Activator.getId(),
38+
"Index of project changed :" + project.getName())); //$NON-NLS-1$
39+
ChangedProjects.add(project);
40+
}
41+
} catch (CoreException e) {
42+
// ignore
43+
e.printStackTrace();
44+
}
4345

44-
}
46+
}
4547

46-
@Override
47-
public void indexChanged(IIndexerStateEvent event) {
48+
@Override
49+
public void indexChanged(IIndexerStateEvent event) {
4850

49-
if (event.indexerIsIdle()) {
50-
if (InstancePreferences.getAutomaticallyImportLibraries()) {
51-
if ((this.installLibJob == null) || (this.installLibJob.getState() == Job.NONE)) {
52-
this.installLibJob = new Job("Adding Arduino libs...") { //$NON-NLS-1$
51+
if (event.indexerIsIdle()) {
52+
if (InstancePreferences.getAutomaticallyImportLibraries()) {
53+
if ((installLibJob == null) || (installLibJob.getState() == Job.NONE)) {
54+
if (!ChangedProjects.isEmpty()) {
55+
installLibJob = new Job("Adding Arduino libs...") { //$NON-NLS-1$
5356

54-
@Override
55-
protected IStatus run(IProgressMonitor monitor) {
56-
try {
57-
for (IProject curProject : IndexerListener.this.ChangedProjects) {
58-
Libraries.checkLibraries(curProject);
59-
}
60-
IndexerListener.this.ChangedProjects.clear();
61-
} catch (Exception e) {
62-
Common.log(new Status(IStatus.WARNING, Activator.getId(),
63-
Messages.Failed_To_Add_Libraries, e));
64-
}
65-
IndexerListener.this.installLibJob = null;
66-
return Status.OK_STATUS;
67-
}
57+
@Override
58+
protected IStatus run(IProgressMonitor monitor) {
59+
try {
60+
for (IProject curProject : ChangedProjects) {
61+
Common.log(new Status(Const.SLOEBER_STATUS_DEBUG, Activator.getId(),
62+
"Looking for libraries for project :" + curProject.getName())); //$NON-NLS-1$
63+
Libraries.checkLibraries(curProject);
64+
}
65+
ChangedProjects.clear();
66+
} catch (Exception e) {
67+
Common.log(new Status(IStatus.WARNING, Activator.getId(),
68+
Messages.Failed_To_Add_Libraries, e));
69+
}
70+
Common.log(new Status(Const.SLOEBER_STATUS_DEBUG, Activator.getId(),
71+
"Indexer all projects checked for libraries")); //$NON-NLS-1$
72+
installLibJob = null;
73+
return Status.OK_STATUS;
74+
}
6875

69-
};
76+
};
7077

71-
this.installLibJob.setPriority(Job.DECORATE);
72-
this.installLibJob.schedule();
73-
}
78+
installLibJob.setPriority(Job.DECORATE);
79+
installLibJob.schedule();
80+
}
81+
} else {
82+
Common.log(new Status(Const.SLOEBER_STATUS_DEBUG, Activator.getId(),
83+
"Ignoring indexer idle because install job still running!!!!!")); //$NON-NLS-1$
84+
}
7485

75-
}
86+
}
7687

77-
}
78-
}
88+
}
89+
}
7990

8091
}

0 commit comments

Comments
 (0)