Package org.codehaus.groovy.ast.tools
Class WideningCategories
java.lang.Object
org.codehaus.groovy.ast.tools.WideningCategories
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
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.
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.
- Author:
- Jochen "blackdrag" Theodorou
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic ClassNode
firstCommonSuperType
(List<ClassNode> nodes) Given a list of class nodes, returns the first common supertype.static ClassNode
Given two class nodes, returns the first common supertype, or the class itself if there are equal.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.static boolean
isIntCategory
(ClassNode type) It is of an int category, if the provided type is a byte, char, short, int.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)
-
Constructor Details
-
WideningCategories
public WideningCategories()
-
-
Method Details
-
isIntCategory
It is of an int category, if the provided type is a byte, char, short, int. -
isLongCategory
It is of a long category, if the provided type is a long, its wrapper or if it is a long category. -
isBigIntCategory
It is of a BigInteger category, if the provided type is a long category or a BigInteger. -
isBigDecCategory
It is of a BigDecimal category, if the provided type is a BigInteger category or a BigDecimal. -
isDoubleCategory
It is of a double category, if the provided type is a BigDecimal, a float, double. C(type)=double -
isNumberCategory
-
firstCommonSuperType
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 nodeb
- second class node- Returns:
- first common supertype
-
firstCommonSuperType
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
-