/******************************************************************************* * Copyright (c) 2009 Scott Stanchfield * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html *******************************************************************************/ package com.javadude.derived.warning.cleaner.builder; import java.util.Map; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IMarker; 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.IResourceVisitor; import org.eclipse.core.resources.IncrementalProjectBuilder; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import com.javadude.derived.warning.cleaner.Activator; public class DerivedWarningCleanerBuilder extends IncrementalProjectBuilder { class SampleDeltaVisitor implements IResourceDeltaVisitor { public boolean visit(IResourceDelta delta) throws CoreException { IResource resource = delta.getResource(); switch (delta.getKind()) { case IResourceDelta.ADDED: deleteWarnings(resource); break; case IResourceDelta.REMOVED: break; case IResourceDelta.CHANGED: deleteWarnings(resource); break; } //return true to continue visiting children. return true; } } class SampleResourceVisitor implements IResourceVisitor { public boolean visit(IResource resource) { try { deleteWarnings(resource); } catch (CoreException e) { Activator.error(e); } return true; } } public static final String BUILDER_ID = "com.javadude.derived.warning.cleaner.derivedWarningCleanerBuilder"; @Override protected IProject[] build(int kind, Map<String, String> args, IProgressMonitor monitor) throws CoreException { try { if (kind == FULL_BUILD) { getProject().accept(new SampleResourceVisitor()); } else { IResourceDelta delta = getDelta(getProject()); if (delta == null) { getProject().accept(new SampleResourceVisitor()); } else { delta.accept(new SampleDeltaVisitor()); } } } catch (CoreException e) { Activator.error(e); } return null; } void deleteWarnings(IResource resource) throws CoreException { if (resource instanceof IFile) { IFile file = (IFile) resource; if (file.isDerived()) { IMarker[] markers = file.findMarkers("org.eclipse.core.resources.problemmarker", true, IFile.DEPTH_ZERO); for (IMarker marker : markers) { if (IMarker.SEVERITY_ERROR != ((Integer) marker.getAttribute(IMarker.SEVERITY)).intValue()) marker.delete(); } } } } }