blob: 246552e457d3e9720ae74b7966e6b0f6d5bb48c0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2015 Broadcom 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
*
* Contributors:
* Broadcom Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.core.tests.internal.builders;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.jobs.ISchedulingRule;
/**
* A builder used that stores the context information passed to it.
*/
public class ContextBuilder extends TestBuilder {
public static final String BUILDER_NAME = "org.eclipse.core.tests.resources.contextbuilder";
/** Stores IBuildConfiguration -> ContextBuilder */
private static HashMap<IBuildConfiguration, ContextBuilder> builders = new HashMap<>();
/** The context information for the last run of this builder */
IBuildContext contextForLastBuild = null;
/** The trigger for the last run of this builder */
int triggerForLastBuild = 0;
private boolean getRuleCalledForLastBuild = false;
private IBuildContext contextForLastBuildInGetRule = null;
private IBuildConfiguration buildConfigurationForLastBuild = null;
private IBuildConfiguration buildConfigurationForLastBuildInGetRule = null;
public ContextBuilder() {
}
public static ContextBuilder getBuilder(IBuildConfiguration variant) {
return builders.get(variant);
}
public static IBuildContext getContext(IBuildConfiguration variant) {
if (!builders.containsKey(variant)) {
return null;
}
return getBuilder(variant).contextForLastBuild;
}
public static boolean checkValid() {
for (ContextBuilder builder : builders.values()) {
if (builder.getRuleCalledForLastBuild && !builder.contextForLastBuild.equals(builder.contextForLastBuildInGetRule)) {
return false;
}
if (builder.getRuleCalledForLastBuild && !builder.buildConfigurationForLastBuild.equals(builder.buildConfigurationForLastBuildInGetRule)) {
return false;
}
}
return true;
}
public static void clearStats() {
for (ContextBuilder builder : builders.values()) {
builder.contextForLastBuild = null;
builder.contextForLastBuildInGetRule = null;
builder.buildConfigurationForLastBuild = null;
builder.buildConfigurationForLastBuildInGetRule = null;
builder.getRuleCalledForLastBuild = false;
builder.triggerForLastBuild = 0;
}
}
@Override
protected void startupOnInitialize() {
builders.put(getBuildConfig(), this);
}
@Override
protected IProject[] build(int kind, Map<String, String> args, IProgressMonitor monitor) throws CoreException {
contextForLastBuild = getContext();
triggerForLastBuild = kind;
buildConfigurationForLastBuild = getBuildConfig();
return super.build(kind, args, monitor);
}
@Override
protected void clean(IProgressMonitor monitor) throws CoreException {
super.clean(monitor);
contextForLastBuild = getContext();
triggerForLastBuild = IncrementalProjectBuilder.CLEAN_BUILD;
buildConfigurationForLastBuild = getBuildConfig();
}
@Override
public ISchedulingRule getRule(int kind, Map<String, String> args) {
getRuleCalledForLastBuild = true;
contextForLastBuildInGetRule = getContext();
buildConfigurationForLastBuildInGetRule = getBuildConfig();
return super.getRule(kind, args);
}
}