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