/******************************************************************************* * Copyright (c) 2007 IBM 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.managedbuilder.xlc.ui; import org.eclipse.cdt.core.cdtvariables.ICdtVariable; import org.eclipse.cdt.managedbuilder.core.IManagedProject; import org.eclipse.cdt.managedbuilder.internal.macros.BuildMacro; import org.eclipse.cdt.managedbuilder.macros.IBuildMacro; import org.eclipse.cdt.managedbuilder.macros.IBuildMacroProvider; import org.eclipse.cdt.managedbuilder.macros.IProjectBuildMacroSupplier; import org.eclipse.cdt.managedbuilder.xlc.ui.preferences.PreferenceConstants; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.QualifiedName; import org.eclipse.jface.preference.IPreferenceStore; /** * @author crecoskie * */ public class XLCProjectMacroSupplier implements IProjectBuildMacroSupplier { /* (non-Javadoc) * @see org.eclipse.cdt.managedbuilder.macros.IProjectBuildMacroSupplier#getMacro(java.lang.String, org.eclipse.cdt.managedbuilder.core.IManagedProject, org.eclipse.cdt.managedbuilder.macros.IBuildMacroProvider) */ public IBuildMacro getMacro(String macroName, IManagedProject project, IBuildMacroProvider provider) { if(macroName.equals(PreferenceConstants.P_XL_COMPILER_ROOT)) { String compilerPath = null; // figure out compiler path from properties and preferences // search for property first IProject theProject = (IProject) project.getOwner(); try { compilerPath = theProject.getPersistentProperty(new QualifiedName("", PreferenceConstants.P_XL_COMPILER_ROOT)); } catch (CoreException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(compilerPath == null) { // use the workbench preference IPreferenceStore prefStore = XLCUIPlugin.getDefault().getPreferenceStore(); compilerPath = prefStore.getString(PreferenceConstants.P_XL_COMPILER_ROOT); } BuildMacro macro = new BuildMacro(macroName, ICdtVariable.VALUE_PATH_DIR, compilerPath); return macro; } else return provider.getMacro(macroName, IBuildMacroProvider.CONTEXT_PROJECT, project, true); } /* (non-Javadoc) * @see org.eclipse.cdt.managedbuilder.macros.IProjectBuildMacroSupplier#getMacros(org.eclipse.cdt.managedbuilder.core.IManagedProject, org.eclipse.cdt.managedbuilder.macros.IBuildMacroProvider) */ public IBuildMacro[] getMacros(IManagedProject project, IBuildMacroProvider provider) { String macroName = PreferenceConstants.P_XL_COMPILER_ROOT; String compilerPath = null; // figure out compiler path from properties and preferences // search for property first IProject theProject = (IProject) project.getOwner(); try { compilerPath = theProject.getPersistentProperty(new QualifiedName("", PreferenceConstants.P_XL_COMPILER_ROOT)); } catch (CoreException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(compilerPath == null) { // use the workbench preference IPreferenceStore prefStore = XLCUIPlugin.getDefault().getPreferenceStore(); compilerPath = prefStore.getString(PreferenceConstants.P_XL_COMPILER_ROOT); } BuildMacro macro = new BuildMacro(macroName, ICdtVariable.VALUE_PATH_DIR, compilerPath); // our array consists of our macro, plus all the macros from our parent IBuildMacro[] parentMacros = provider.getMacros(IBuildMacroProvider.CONTEXT_PROJECT, project, true); int numMacros = parentMacros.length + 1; // +1 for our macro IBuildMacro[] macros = new IBuildMacro[numMacros]; macros[0] = macro; for(int k = 1; k < macros.length; k++) { macros[k] = parentMacros[k-1]; } return macros; } }