/******************************************************************************* * Copyright (c) 2005, 2010 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.macros; import org.eclipse.cdt.core.cdtvariables.CdtVariableException; import org.eclipse.core.runtime.IStatus; /** * This exception is thrown in the case of some build macros-related operation failure * The exception typically contains one or more IBuildMacroStatus statuses * * @since 3.0 * @noextend This class is not intended to be subclassed by clients. */ public class BuildMacroException extends CdtVariableException { /** * All serializable objects should have a stable serialVersionUID */ private static final long serialVersionUID = 3976741380246681395L; /** * Creates a new exception with the given status object. * * @param status the status object to be associated with this exception. * Typically this is either the IBuildMacroStatus or the MultiStatus that holds * the list of the IBuildMacroStatus statuses */ public BuildMacroException(IStatus status) { super(status); } // /** // * Creates an exception containing a single IBuildMacroStatus status with the IStatus.ERROR severity // * // * @param code one of the IBuildMacroStatus.TYPE_xxx statusses // * @param message message, can be null. In this case the default message will // * be generated base upon the other status info // * @param exception a low-level exception, or <code>null</code> if not // * applicable // * @param macroName the name of the build macro whose resolution caused this status creation or null if none // * @param expression the string whose resolutinon caused caused this status creation or null if none // * @param referencedName the macro name referenced in the resolution string that caused this this status creation or null if none // * @param contextType the context type used in the operation // * @param contextData the context data used in the operation // */ // public BuildMacroException(int code, // String message, // Throwable exception, // String macroName, // String expression, // String referencedName, // int contextType, // Object contextData) { // super(new BuildMacroStatus(code, message, exception, macroName, expression, referencedName, contextType, contextData)); // } // /** // * Creates an exception containing a single IBuildMacroStatus status with the IStatus.ERROR severity and with the default message // * // * @param code one of the IBuildMacroStatus.TYPE_xxx statusses // * @param exception a low-level exception, or <code>null</code> if not // * applicable // * @param macroName the name of the build macro whose resolution caused this status creation or null if none // * @param expression the string whose resolutinon caused caused this status creation or null if none // * @param referencedName the macro name referenced in the resolution string that caused this this status creation or null if none // * @param contextType the context type used in the operation // * @param contextData the context data used in the operation // */ // public BuildMacroException(int code, // String macroName, // String expression, // String referencedName, // int contextType, // Object contextData) { // super(new BuildMacroStatus(code, macroName, expression, referencedName, contextType, contextData)); // } public BuildMacroException(CdtVariableException e){ super(e.getStatus()); } /** * Returns an array of the IBuildMacroStatus statuses this exception holds * * @return IBuildMacroStatus[] */ public IBuildMacroStatus[] getMacroStatuses(){ IStatus status = getStatus(); if(status instanceof IBuildMacroStatus) return new IBuildMacroStatus[]{(IBuildMacroStatus)status}; else if(status.isMultiStatus()){ IStatus children[] = status.getChildren(); IBuildMacroStatus result[] = new IBuildMacroStatus[children.length]; int num = 0; for(int i = 0; i < children.length; i++){ if(children[i] instanceof IBuildMacroStatus) result[num++]=(IBuildMacroStatus)children[i]; } if(num != children.length){ IBuildMacroStatus tmp[] = new IBuildMacroStatus[num]; for(int i = 0; i < num; i++) tmp[i] = result[i]; result = tmp; } return result; } return new IBuildMacroStatus[0]; } }