package io.sloeber.core.listeners;
/**
* this index listener makes it possible to detect missing libraries
* if configured to do so libraries are added automatically to the project
*/
import java.util.HashSet;
import java.util.Set;
import org.eclipse.cdt.core.index.IIndexChangeEvent;
import org.eclipse.cdt.core.index.IIndexChangeListener;
import org.eclipse.cdt.core.index.IIndexerStateEvent;
import org.eclipse.cdt.core.index.IIndexerStateListener;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import io.sloeber.core.common.Const;
import io.sloeber.core.common.InstancePreferences;
import io.sloeber.core.tools.Libraries;
public class IndexerListener implements IIndexChangeListener, IIndexerStateListener {
protected Set<IProject> ChangedProjects = new HashSet<>();
Job installLibJob = null;
@Override
public void indexChanged(IIndexChangeEvent event) {
IProject project = event.getAffectedProject().getProject();
try {
if (project.hasNature(Const.ARDUINO_NATURE_ID)) {
this.ChangedProjects.add(project);
}
} catch (CoreException e) {
// ignore
e.printStackTrace();
}
}
@Override
public void indexChanged(IIndexerStateEvent event) {
if (event.indexerIsIdle()) {
if (InstancePreferences.getAutomaticallyImportLibraries()) {
if (this.installLibJob == null) {
this.installLibJob = new Job("Adding Arduino libs...") { //$NON-NLS-1$
@Override
protected IStatus run(IProgressMonitor monitor) {
for (IProject curProject : IndexerListener.this.ChangedProjects) {
Libraries.checkLibraries(curProject);
}
IndexerListener.this.ChangedProjects.clear();
IndexerListener.this.installLibJob = null;
return Status.OK_STATUS;
}
};
this.installLibJob.setPriority(Job.DECORATE);
this.installLibJob.schedule();
}
}
}
}
}