| /* |
| * Copyright (C) 2012 The Android Open Source Project |
| * |
| * Licensed under the Eclipse Public License, Version 1.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.eclipse.org/org/documents/epl-v10.php |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.ide.eclipse.adt.internal.project; |
| |
| import com.android.ide.eclipse.adt.AdtPlugin; |
| |
| import org.eclipse.core.resources.IMarker; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.IResource; |
| import org.eclipse.core.resources.ResourcesPlugin; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.core.runtime.jobs.Job; |
| import org.eclipse.jdt.core.ClasspathContainerInitializer; |
| |
| /** |
| * Base CPC initializer providing support to all our initializer. |
| * |
| */ |
| abstract class BaseClasspathContainerInitializer extends ClasspathContainerInitializer { |
| |
| |
| /** |
| * Adds an error to a project, or remove all markers if error message is null |
| * @param project the project to modify |
| * @param errorMessage the errorMessage or null to remove errors. |
| * @param markerType the marker type to be used. |
| * @param outputToConsole whether to output to the console. |
| */ |
| protected static void processError(final IProject project, final String errorMessage, |
| final String markerType, boolean outputToConsole) { |
| if (errorMessage != null) { |
| // log the error and put the marker on the project if we can. |
| if (outputToConsole) { |
| AdtPlugin.printErrorToConsole(project, errorMessage); |
| } |
| |
| // Use a job to prevent requiring a workspace lock in this thread. |
| final String fmessage = errorMessage; |
| Job markerJob = new Job("Android SDK: Resolving error markers") { |
| @Override |
| protected IStatus run(IProgressMonitor monitor) { |
| try { |
| BaseProjectHelper.markProject(project, |
| markerType, |
| fmessage, IMarker.SEVERITY_ERROR, |
| IMarker.PRIORITY_HIGH); |
| } catch (CoreException e2) { |
| AdtPlugin.log(e2, null); |
| // Don't return e2.getStatus(); the job control will then produce |
| // a popup with this error, which isn't very interesting for the |
| // user. |
| } |
| |
| return Status.OK_STATUS; |
| } |
| }; |
| |
| // build jobs are run after other interactive jobs |
| markerJob.setPriority(Job.BUILD); |
| markerJob.setRule(ResourcesPlugin.getWorkspace().getRoot()); |
| markerJob.schedule(); |
| } else { |
| // Use a job to prevent requiring a workspace lock in this thread. |
| Job markerJob = new Job("Android SDK: Resolving error markers") { |
| @Override |
| protected IStatus run(IProgressMonitor monitor) { |
| try { |
| if (project.isAccessible()) { |
| project.deleteMarkers(markerType, true, |
| IResource.DEPTH_INFINITE); |
| } |
| } catch (CoreException e2) { |
| AdtPlugin.log(e2, null); |
| } |
| |
| return Status.OK_STATUS; |
| } |
| }; |
| |
| // build jobs are run after other interactive jobs |
| markerJob.setPriority(Job.BUILD); |
| markerJob.setRule(ResourcesPlugin.getWorkspace().getRoot()); |
| markerJob.schedule(); |
| } |
| } |
| } |