blob: 9a1d35a1d4e4e65f8965223e3459e96bf675d562 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2017, 2019 Willink Transformations and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* E.D.Willink - Initial API and implementation based on org.eclipse.xtext.builder.nature.XtextNature
*******************************************************************************/
package org.eclipse.ocl.pivot.ui.builder;
import java.util.Map;
import org.apache.log4j.Logger;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.ocl.xtext.base.ui.BaseUiModule;
import org.eclipse.ocl.xtext.base.ui.OCLProjectHelper;
import org.eclipse.ocl.xtext.base.ui.builder.AbstractBuildSelector;
import org.eclipse.ocl.xtext.base.ui.builder.AbstractValidatingBuilder;
/**
* Builder for OCL contributions. Currently this involves identifying OCL files subject to
* extension filtering defined by the excludeExtension/includeExtensions comma-separated file extensionlist
* and path filtering defined by excludePaths/includepaths comma-separated classpath-style regexes.
* Default values are supplied as part of the .project buildCommand when the OCL nature is added.
*
* The identified files are passed to a separate MultiValidationJob for concurrent non-blocking validation.
*/
public class OCLBuilder extends AbstractValidatingBuilder
{
protected static class OCLBuildSelector extends AbstractBuildSelector
{
public OCLBuildSelector(@NonNull IProject project, @NonNull BuildType buildType, @Nullable Map<String, String> args, @NonNull IProgressMonitor monitor) {
super(project, buildType, args, monitor);
}
@Override
protected @NonNull String getMarkerId(@NonNull IFile iFile) {
String fileExtension = iFile.getFileExtension();
if ("ocl".equals(fileExtension)) {
return "org.eclipse.ocl.xtext.completeocl.ui.Marker"; //CompleteOCLUiModule.MARKER_ID;
}
else if ("oclinecore".equals(fileExtension)) {
return "org.eclipse.ocl.xtext.oclinecore.ui.Marker"; //OCLinEcoreUiModule.MARKER_ID;
}
else if ("oclstdlib".equals(fileExtension)) {
return "org.eclipse.ocl.xtext.oclstdlib.ui.Marker"; //OCLstdlibUiModule.MARKER_ID;
}
return super.getMarkerId(iFile);
}
}
private static final Logger log = Logger.getLogger(OCLBuilder.class);
public static final String BUILDER_ID = OCLProjectHelper.BUILDER_ID;
public static void deleteMarkers(@NonNull IProject project, Map<String, String> arguments) throws CoreException {
AbstractBuildSelector buildSelector = new OCLBuildSelector(project, BuildType.CLEAN, arguments, new NullProgressMonitor());
buildSelector.selectResources(null);
buildSelector.deleteMarkers();
}
public OCLBuilder() {
// System.out.println(NameUtil.debugSimpleName(this) + " init");
}
@Override
protected @NonNull AbstractBuildSelector createBuildSelector(@NonNull IProject project, @NonNull BuildType buildType,
@Nullable Map<String, String> args, @NonNull IProgressMonitor monitor) {
return new OCLBuildSelector(project, buildType, args, monitor);
}
@Override
protected @NonNull String getBuilderName() {
return "OCL";
}
@Override
protected Logger getLog() {
return log;
}
@Override
protected @NonNull String getMarkerId() {
return BaseUiModule.MARKER_ID;
}
}