package net.sf.eclipsefp.haskell.core.partitioned.alex; import net.sf.eclipsefp.haskell.core.HaskellCorePlugin; import net.sf.eclipsefp.haskell.core.partitioned.runner.AlexRunner; import net.sf.eclipsefp.haskell.core.partitioned.runner.ProcessorError; import net.sf.eclipsefp.haskell.util.FileUtil; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceDelta; import org.eclipse.core.resources.IResourceDeltaVisitor; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.NullProgressMonitor; /** * Performs an incremental build of the resources. * * @author Alejandro Serrano */ public class DeltaVisitor implements IResourceDeltaVisitor { @Override public boolean visit( final IResourceDelta delta ) throws CoreException { IResource resource = delta.getResource(); if( AlexBuilder.mustBeVisited( resource ) ) { // We have to clean the previous markers resource.deleteMarkers( HaskellCorePlugin.ID_ALEX_MARKER, true, IResource.DEPTH_ZERO ); // And add the new ones if( delta.getKind() == IResourceDelta.ADDED || delta.getKind() == IResourceDelta.CHANGED ) { AlexRunner runner = new AlexRunner(); for( ProcessorError s: runner.run( resource.getLocation() ) ) { AlexBuilder.createMarker( resource, s ); } // Set derived file as derived resource.getProject().refreshLocal( IResource.DEPTH_INFINITE, null ); IPath derivedPath = resource.getProjectRelativePath().removeFileExtension().addFileExtension( FileUtil.EXTENSION_HS ); IFile f=resource.getProject().getFile( derivedPath ); if (f.isAccessible() && !f.isDerived()){ f.setDerived( true,new NullProgressMonitor() ); } } } return true; } }