/******************************************************************************* * Copyright (c) 2000, 2007 IBM Corporation and others. * 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 org.eclipse.dltk.internal.core; import org.eclipse.core.resources.IProject; import org.eclipse.dltk.core.DLTKCore; import org.eclipse.dltk.core.IBuildpathEntry; import org.eclipse.dltk.core.IModelStatus; import org.eclipse.dltk.core.IModelStatusConstants; import org.eclipse.dltk.core.ModelException; /* * Validates the raw buildpath format and the resolved buildpath of this project, * updating markers if necessary. */ public class BuildpathValidation { private ScriptProject project; public BuildpathValidation(ScriptProject project) { this.project = project; } public void validate() { ModelManager.PerProjectInfo perProjectInfo; try { perProjectInfo = this.project.getPerProjectInfo(); } catch (ModelException e) { // project doesn't exist IProject resource = this.project.getProject(); if (resource.isAccessible()) { this.project.flushBuildpathProblemMarkers(true/*flush cycle markers*/, true/*flush buildpath format markers*/); // remove problems and tasks created by the builder if (DLTKCore.DEBUG) { System.err.println("TODO: BuildpathValidation.java remove problems and tasks created by the builder"); //$NON-NLS-1$ } //ScriptBuilder.removeProblemsAndTasksFor(resource); } return; } // use synchronized block to ensure consistency IBuildpathEntry[] rawBuildpath; IModelStatus status; synchronized (perProjectInfo) { rawBuildpath = perProjectInfo.rawBuildpath; status = perProjectInfo.rawBuildpathStatus; // status has been set during POST_CHANGE } // update buildpath format problems this.project.flushBuildpathProblemMarkers(false/*cycle*/, true/*format*/); if (status != null && !status.isOK()) this.project.createBuildpathProblemMarker(status); // update resolved buildpath problems this.project.flushBuildpathProblemMarkers(false/*cycle*/, false/*format*/); if (rawBuildpath != ScriptProject.INVALID_BUILDPATH && rawBuildpath != null) { for (int i = 0; i < rawBuildpath.length; i++) { status = BuildpathEntry.validateBuildpathEntry(this.project, rawBuildpath[i], true /*recurse in container*/); if (!status.isOK()) { if (status.getCode() == IModelStatusConstants.INVALID_BUILDPATH && ((BuildpathEntry) rawBuildpath[i]).isOptional() ) continue; // ignore this entry this.project.createBuildpathProblemMarker(status); } } status = BuildpathEntry.validateBuildpath(this.project, rawBuildpath); if (!status.isOK()) this.project.createBuildpathProblemMarker(status); } } }