| /******************************************************************************* |
| * 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); |
| } |
| } |