/******************************************************************************* * Copyright (c) 2005, 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 * Miwako Tokugawa (Intel Corporation) - bug 222817 (OptionCategoryApplicability) *******************************************************************************/ package org.eclipse.cdt.managedbuilder.internal.macros; import org.eclipse.cdt.managedbuilder.core.IBuildObject; import org.eclipse.cdt.managedbuilder.core.IConfiguration; import org.eclipse.cdt.managedbuilder.core.IFileInfo; import org.eclipse.cdt.managedbuilder.core.IFolderInfo; import org.eclipse.cdt.managedbuilder.core.IHoldsOptions; import org.eclipse.cdt.managedbuilder.core.IOption; import org.eclipse.cdt.managedbuilder.core.IOptionCategory; import org.eclipse.cdt.managedbuilder.core.IResourceInfo; import org.eclipse.cdt.managedbuilder.core.ITool; import org.eclipse.cdt.managedbuilder.core.IToolChain; import org.eclipse.cdt.managedbuilder.macros.IOptionContextData; /** * This is a trivial implementation of the IOptionContextData used internally by the MBS * * @since 3.0 */ public class OptionContextData implements IOptionContextData { private IOption fOption; private IOptionCategory fCategory; private IBuildObject fParent; public OptionContextData(IOption option, IBuildObject parent){ fOption = option; fParent = parent; } /* * @since 8.0 */ public OptionContextData(IOptionCategory category, IBuildObject parent){ fCategory = category; fParent = parent; } /* (non-Javadoc) * @see org.eclipse.cdt.managedbuilder.macros.IOptionContextData#getOption() */ public IOption getOption() { return fOption; } /* (non-Javadoc) * @see org.eclipse.cdt.managedbuilder.macros.IOptionContextData#getOptionCategory() */ public IOptionCategory getOptionCategory() { return fCategory; } /* (non-Javadoc) * @see org.eclipse.cdt.managedbuilder.macros.IOptionContextData#getParent() */ public IBuildObject getParent() { return fParent; } public static IHoldsOptions getHolder(IOptionContextData data){ IBuildObject buildObj = data.getParent(); IToolChain tCh = null; IHoldsOptions ho = null; IResourceInfo rcInfo = null; IFileInfo fileInfo = null; IFolderInfo folderInfo = null; if(buildObj instanceof ITool) ho = (ITool)buildObj; else if(buildObj instanceof IToolChain) tCh = (IToolChain)buildObj; else if(buildObj instanceof IFileInfo){ fileInfo = (IFileInfo)buildObj; rcInfo = fileInfo; }else if(buildObj instanceof IConfiguration) tCh = ((IConfiguration)buildObj).getToolChain(); else if(buildObj instanceof IFolderInfo){ folderInfo = (IFolderInfo)buildObj; rcInfo = folderInfo; tCh = folderInfo.getToolChain(); } if(ho == null){ IOption option = data.getOption(); if(option == null) return null; IHoldsOptions tmp = option.getOptionHolder(); ITool tools[] = null; if(tCh != null){ for(IToolChain cur = tCh; cur != null; cur = cur.getSuperClass()){ if(cur == tmp) return tCh; } tools = tCh.getTools(); } else if(rcInfo != null){ tools = rcInfo.getTools(); } if(tools != null){ for(int i = 0; i < tools.length; i++){ for(ITool cur = tools[i]; cur != null; cur = cur.getSuperClass()){ if(cur == tmp){ ITool tool = tools[i]; if(!tool.isExtensionElement() && tool.getParent() != null){ ho = tools[i]; break; } } } } } if(ho == null && tmp != null){ if(tmp instanceof ITool){ ITool tool = (ITool)tmp; if(!tool.isExtensionElement() && tool.getParent() != null){ ho = tmp; } } else if (tmp instanceof IToolChain){ IToolChain tChain = (IToolChain)tmp; if(!tChain.isExtensionElement() && tChain.getParent() != null){ ho = tmp; } } } } return ho; } }