/******************************************************************************* * Copyright (c) 2006 Oracle Corporation. * 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: * Cameron Bateman/Oracle - initial API and implementation * ********************************************************************************/ package org.eclipse.jst.jsf.common.internal.types; /** * Common super-type for Float and Integer literals * @author cbateman * */ public abstract class NumericTypeLiteral extends LiteralType { /** * @param signature */ protected NumericTypeLiteral(String signature) { super(signature); } /** * @return the boxed form of the numeric literal value */ protected abstract Number getBoxedValue(); public Number coerceToNumber(Class T) throws TypeCoercionException { Number boxedLiteralValue = getBoxedValue(); if (T == Double.class || T == Double.TYPE) { return new Double(boxedLiteralValue.doubleValue()); } else if (T == Float.class || T == Float.TYPE) { return new Float(boxedLiteralValue.floatValue()); } else if (T == Long.class || T == Long.TYPE) { return boxedLiteralValue; } else if (T == Integer.class || T == Integer.TYPE) { return Integer.valueOf(boxedLiteralValue.intValue()); } else if (T == Short.class || T == Short.TYPE) { return Short.valueOf(boxedLiteralValue.shortValue()); } else if (T == Byte.class || T == Byte.TYPE) { return Byte.valueOf(boxedLiteralValue.byteValue()); } else { return null; } } public String getLiteralValue() { return getBoxedValue().toString(); } public Object getLiteralValueRaw() { return getBoxedValue(); } /* (non-Javadoc) * @see org.eclipse.jst.jsf.core.internal.types.LiteralType#coerceToBoolean() */ public Boolean coerceToBoolean() throws TypeCoercionException { // JSP.2.8.5 does not provide for number -> boolean coercion throw new TypeCoercionException("Cannot coerce number to boolean"); //$NON-NLS-1$ } }