blob: c5f278b23dfe4405747cbf7454fd3bd38a1d04b6 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2017 xored software, Inc. and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* xored software, Inc. - initial API and Implementation (Alex Panchenko)
*******************************************************************************/
package org.eclipse.dltk.validators.core;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.dltk.core.ISourceModule;
import org.eclipse.dltk.validators.internal.core.ValidatorsCore;
/**
* @deprecated use ResourceValidatorWorker and/or SourceModuleValidatorWorker
*/
@Deprecated
public abstract class AbstractExternalValidator {
protected abstract String getMarkerType();
public void clean(ISourceModule[] modules) {
clean(toResources(modules));
}
public void clean(IResource[] resources) {
final String markerType = getMarkerType();
// TODO execute single operation via IWorkspaceRunnable ?
for (int i = 0; i < resources.length; ++i) {
final IResource resource = resources[i];
clean(resource, markerType);
}
}
protected void clean(final IResource resource, final String markerType) {
try {
resource.deleteMarkers(markerType, true, IResource.DEPTH_INFINITE);
} catch (CoreException e) {
ValidatorsCore.log(e.getStatus());
}
}
protected void clean(final IResource resource) {
clean(resource, getMarkerType());
}
protected IResource[] toResources(ISourceModule[] modules) {
final List<IResource> resources = new ArrayList<>(modules.length);
for (int i = 0; i < modules.length; ++i) {
final IResource resource = modules[i].getResource();
if (resource != null) {
resources.add(resource);
}
}
final IResource[] result = new IResource[resources.size()];
resources.toArray(result);
return result;
}
protected IMarker createMarker(IResource res, int line, int start, int end, String msg, int severity, int priority,
Map attributes) throws CoreException {
final IMarker m = res.createMarker(getMarkerType());
m.setAttribute(IMarker.LINE_NUMBER, line);
m.setAttribute(IMarker.MESSAGE, msg);
m.setAttribute(IMarker.SEVERITY, severity);
m.setAttribute(IMarker.PRIORITY, priority);
m.setAttribute(IMarker.CHAR_START, start);
m.setAttribute(IMarker.CHAR_END, end);
if (attributes != null && !attributes.isEmpty()) {
for (Iterator i = attributes.entrySet().iterator(); i.hasNext();) {
final Map.Entry entry = (Map.Entry) i.next();
m.setAttribute((String) entry.getKey(), entry.getValue());
}
}
return m;
}
protected IMarker reportWarning(IResource res, int line, int start, int end, String msg) throws CoreException {
return reportWarning(res, line, start, end, msg, null);
}
protected IMarker reportWarning(IResource res, int line, int start, int end, String msg, Map attributes)
throws CoreException {
return createMarker(res, line, start, end, msg, IMarker.SEVERITY_WARNING, IMarker.PRIORITY_NORMAL, attributes);
}
protected IMarker reportError(IResource res, int line, int start, int end, String msg) throws CoreException {
return reportError(res, line, start, end, msg, null);
}
protected IMarker reportError(IResource res, int line, int start, int end, String msg, Map attributes)
throws CoreException {
return createMarker(res, line, start, end, msg, IMarker.SEVERITY_ERROR, IMarker.PRIORITY_NORMAL, attributes);
}
}