Groovy 1.8.5

org.codehaus.groovy.ast.tools
[Java] Class WideningCategories

java.lang.Object
  org.codehaus.groovy.ast.tools.WideningCategories

public class WideningCategories
extends Object

This class provides helper methods to determine the type from a widening operation for example for a plus operation.
To determine the resulting type of for example a=exp1+exp2 we look at the conditions isIntCategory(ClassNode), isLongCategory(ClassNode), isBigIntCategory(ClassNode), isDoubleCategory(ClassNode) and isBigDecCategory(ClassNode) in that order. The first case applying to exp1 and exp2 is defining the result type of the expression.
If for example you look at x = 1 + 2l we have the first category applying to the number 1 being int, since the 1 is an int. The 2l is a long, therefore the int category will not apply and the result type can't be int. The next category in the list is long, and since both apply to long, the result type is a long.

Authors:
Jochen "blackdrag" Theodorou


Method Summary
static ClassNode firstCommonSuperType(ClassNode a, ClassNode b)

Given two class nodes, returns the first common supertype, or the class itself if there are equal.

static ClassNode firstCommonSuperType(List nodes)

Given a list of class nodes, returns the first common supertype.

static boolean isBigDecCategory(ClassNode type)

It is of a BigDecimal category, if the provided type is a BigInteger category or a BigDecimal.

static boolean isBigIntCategory(ClassNode type)

It is of a BigInteger category, if the provided type is a long category or a BigInteger.

static boolean isDoubleCategory(ClassNode type)

It is of a double category, if the provided type is a BigDecimal, a float, double or a wrapper of those.

static boolean isIntCategory(ClassNode type)

It is of an int category, if the provided type is a byte, char, short, int or any of the wrapper.

static boolean isLongCategory(ClassNode type)

It is of a long category, if the provided type is a long, its wrapper or if it is a long category.

static boolean isNumberCategory(ClassNode type)

 
Methods inherited from class Object
wait, wait, wait, equals, toString, hashCode, getClass, notify, notifyAll
 

Method Detail

firstCommonSuperType

public static ClassNode firstCommonSuperType(ClassNode a, ClassNode b)
Given two class nodes, returns the first common supertype, or the class itself if there are equal. For example, Double and Float would return Number, while Set and String would return Object.
Parameters:
a - first class node
b - second class node
Returns:
first common supertype


firstCommonSuperType

public static ClassNode firstCommonSuperType(List nodes)
Given a list of class nodes, returns the first common supertype. For example, Double and Float would return Number, while Set and String would return Object.
Parameters:
nodes - the list of nodes for which to find the first common super type.
Returns:
first common supertype


isBigDecCategory

public static boolean isBigDecCategory(ClassNode type)
It is of a BigDecimal category, if the provided type is a BigInteger category or a BigDecimal.


isBigIntCategory

public static boolean isBigIntCategory(ClassNode type)
It is of a BigInteger category, if the provided type is a long category or a BigInteger.


isDoubleCategory

public static boolean isDoubleCategory(ClassNode type)
It is of a double category, if the provided type is a BigDecimal, a float, double or a wrapper of those. C(type)=double


isIntCategory

public static boolean isIntCategory(ClassNode type)
It is of an int category, if the provided type is a byte, char, short, int or any of the wrapper.


isLongCategory

public static boolean isLongCategory(ClassNode type)
It is of a long category, if the provided type is a long, its wrapper or if it is a long category.


isNumberCategory

public static boolean isNumberCategory(ClassNode type)


 

Copyright © 2003-2011 The Codehaus. All rights reserved.