/*******************************************************************************
* Copyright (c) 2007, 2011 Intel 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:
* Intel Corporation - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.internal.dataprovider;
import org.eclipse.cdt.core.cdtvariables.ICdtVariable;
import org.eclipse.cdt.core.cdtvariables.ICdtVariableManager;
import org.eclipse.cdt.core.cdtvariables.ICdtVariablesContributor;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.managedbuilder.core.IBuilder;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
import org.eclipse.cdt.managedbuilder.core.IManagedProject;
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
import org.eclipse.cdt.managedbuilder.internal.core.Configuration;
import org.eclipse.cdt.managedbuilder.internal.macros.BuildMacroProvider;
import org.eclipse.cdt.managedbuilder.internal.macros.DefaultMacroContextInfo;
import org.eclipse.cdt.managedbuilder.internal.macros.MbsMacroSupplier;
import org.eclipse.cdt.managedbuilder.macros.IBuildMacroProvider;
import org.eclipse.cdt.utils.cdtvariables.ICdtVariableSupplier;
import org.eclipse.cdt.utils.cdtvariables.IVariableContextInfo;
import org.eclipse.cdt.utils.cdtvariables.SupplierBasedCdtVariableManager;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
public class BuildVariablesContributor implements ICdtVariablesContributor {
private BuildConfigurationData fCfgData;
private class ContributorMacroContextInfo extends DefaultMacroContextInfo {
ICdtVariableManager fMngr;
private ICConfigurationDescription fCfgDes;
public ContributorMacroContextInfo(ICdtVariableManager mngr, ICConfigurationDescription cfgDes,
int type, Object data) {
super(type, data);
fMngr = mngr;
fCfgDes = cfgDes;
}
@Override
protected ICdtVariableSupplier[] getSuppliers(int type, Object data) {
switch(type){
case IBuildMacroProvider.CONTEXT_CONFIGURATION:
return new ICdtVariableSupplier[]{
new ExternalExtensionMacroSupplier(fMngr, fCfgDes),
MbsMacroSupplier.getInstance()
};
case IBuildMacroProvider.CONTEXT_PROJECT:
return new ICdtVariableSupplier[]{
new ExternalExtensionMacroSupplier(fMngr, fCfgDes),
MbsMacroSupplier.getInstance()
};
case IBuildMacroProvider.CONTEXT_WORKSPACE:
return new ICdtVariableSupplier[]{
MbsMacroSupplier.getInstance()
};
}
return null;
}
@Override
public IVariableContextInfo getNext() {
switch(getContextType()){
case IBuildMacroProvider.CONTEXT_CONFIGURATION:{
Object data = getContextData();
IConfiguration configuration = null;
if(data instanceof IBuilder)
configuration = ((IBuilder)data).getParent().getParent();
else if(data instanceof IConfiguration)
configuration = (IConfiguration)data;
if(configuration != null){
IManagedProject managedProject = configuration.getManagedProject();
if(managedProject != null)
return new ContributorMacroContextInfo(
fMngr,
fCfgDes,
IBuildMacroProvider.CONTEXT_PROJECT,
managedProject);
}
}
break;
case IBuildMacroProvider.CONTEXT_PROJECT:{
Object data = getContextData();
if(data instanceof IManagedProject){
IWorkspace wsp = ResourcesPlugin.getWorkspace();
if(wsp != null)
return new ContributorMacroContextInfo(
fMngr,
fCfgDes,
IBuildMacroProvider.CONTEXT_WORKSPACE,
wsp);
}
}
break;
case IBuildMacroProvider.CONTEXT_WORKSPACE:
if(getContextData() instanceof IWorkspace){
return new ContributorMacroContextInfo(
fMngr,
fCfgDes,
IBuildMacroProvider.CONTEXT_INSTALLATIONS,
null);
}
break;
}
return null;
}
}
BuildVariablesContributor(BuildConfigurationData data){
fCfgData = data;
}
@Override
public ICdtVariable getVariable(String name, ICdtVariableManager provider) {
ContributorMacroContextInfo info = createContextInfo(provider);
if(info != null)
return SupplierBasedCdtVariableManager.getVariable(name, info, true);
return null;
}
private ContributorMacroContextInfo createContextInfo(ICdtVariableManager mngr){
IConfiguration cfg = fCfgData.getConfiguration();
if(((Configuration)cfg).isPreference())
return null;
ICConfigurationDescription cfgDes = ManagedBuildManager.getDescriptionForConfiguration(cfg);
if(cfgDes != null){
return new ContributorMacroContextInfo(mngr,
cfgDes,
BuildMacroProvider.CONTEXT_CONFIGURATION,
cfg);
}
return null;
}
@Override
public ICdtVariable[] getVariables(ICdtVariableManager provider) {
ContributorMacroContextInfo info = createContextInfo(provider);
if(info != null)
return SupplierBasedCdtVariableManager.getVariables(info, true);
return null;
}
}