package io.sloeber.core.builder;
import java.util.Map;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.IResourceDeltaVisitor;
import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import io.sloeber.core.tools.PdePreprocessor;
public class inoToCpp extends IncrementalProjectBuilder {
class SampleDeltaVisitor implements IResourceDeltaVisitor {
/*
* (non-Javadoc)
*
* @see org.eclipse.core.resources.IResourceDeltaVisitor#visit(org.eclipse. core.resources.IResourceDelta)
*/
@Override
public boolean visit(IResourceDelta delta) throws CoreException {
IResource resource = delta.getResource();
if (resource.getFileExtension() != null) {
if (resource.getFileExtension().equalsIgnoreCase("ino") //$NON-NLS-1$
|| resource.getFileExtension().equalsIgnoreCase("pde")) { //$NON-NLS-1$
try {
PdePreprocessor.processProject(getProject());
} catch (CoreException e) {
e.printStackTrace();
}
return false;
}
}
return true;
}
}
/*
* (non-Javadoc)
*
* @see org.eclipse.core.internal.events.InternalBuilder#build(int, java.util.Map, org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
protected IProject[] build(int kind, @SuppressWarnings("rawtypes") Map args, IProgressMonitor monitor) throws CoreException {
if (kind == FULL_BUILD) {
fullBuild(monitor);
} else {
IResourceDelta delta = getDelta(getProject());
if (delta == null) {
fullBuild(monitor);
} else {
incrementalBuild(delta, monitor);
}
}
return null;
}
@Override
protected void clean(IProgressMonitor monitor) throws CoreException {
// delete markers set and files created
}
protected void fullBuild(final IProgressMonitor monitor) {
try {
PdePreprocessor.processProject(getProject());
} catch (CoreException e) {
e.printStackTrace();
}
}
protected void incrementalBuild(IResourceDelta delta, IProgressMonitor monitor) throws CoreException {
// the visitor does the work.
delta.accept(new SampleDeltaVisitor());
}
}