package org.checkerframework.eclipse.natures; import java.util.ArrayList; import java.util.List; import org.checkerframework.eclipse.builder.CheckerBuilder; import org.eclipse.core.resources.ICommand; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectDescription; import org.eclipse.core.resources.IProjectNature; import org.eclipse.core.runtime.CoreException; public class CheckerBuildNature implements IProjectNature { public static final String NATURE_ID = "checkers.eclipse.buildnature"; private IProject project; @Override public void configure() throws CoreException { IProjectDescription desc = project.getDescription(); ICommand[] buildSpec = desc.getBuildSpec(); for (ICommand command : buildSpec) { if (CheckerBuilder.BUILDER_ID.equals(command.getBuilderName())) { // already registered the builder for this project return; } } ICommand[] newSpec = new ICommand[buildSpec.length + 1]; System.arraycopy(buildSpec, 0, newSpec, 0, buildSpec.length); ICommand newBuilder = desc.newCommand(); newBuilder.setBuilderName(CheckerBuilder.BUILDER_ID); newSpec[newSpec.length - 1] = newBuilder; desc.setBuildSpec(newSpec); project.setDescription(desc, null); } @Override public void deconfigure() throws CoreException { IProjectDescription desc = project.getDescription(); ICommand[] buildSpec = desc.getBuildSpec(); List<ICommand> newSpec = new ArrayList<ICommand>(); for (ICommand command : buildSpec) { if (!CheckerBuilder.BUILDER_ID.equals(command.getBuilderName())) { newSpec.add(command); } } desc.setBuildSpec(newSpec.toArray(new ICommand[] {})); project.setDescription(desc, null); } @Override public IProject getProject() { return this.project; } @Override public void setProject(IProject project) { this.project = project; } }