Class WideningCategories
 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.
- 
Nested Class SummaryNested ClassesModifier and TypeClassDescriptionstatic classThisClassNodespecialization is used when the lowest upper bound of two types cannot be represented by an existing type.
- 
Constructor SummaryConstructors
- 
Method SummaryModifier and TypeMethodDescriptionstatic booleanimplementsInterfaceOrSubclassOf(ClassNode source, ClassNode target) Determines if the source class implements an interface or subclasses the target type.static booleanisBigDecCategory(ClassNode type) Checks if type is a BigDecimal, BigInteger, long, int, byte, char or short.static booleanisBigIntCategory(ClassNode type) Checks if type is a BigInteger, long, int, byte, char or short.static booleanChecks if type is a double.static booleanisDoubleCategory(ClassNode type) Checks if type is a float, double or BigDecimal (category).static booleanChecks if type is a float.static booleanisFloatingCategory(ClassNode type) Checks if type is a float or double.static booleanChecks if type is an int.static booleanisIntCategory(ClassNode type) Checks if type is an int, byte, char or short.static booleanisLongCategory(ClassNode type) Checks if type is a long, int, byte, char or short.static booleanisNumberCategory(ClassNode type) Checks if type is a BigDecimal (category) or Number.static ClassNodelowestUpperBound(List<ClassNode> nodes) Given a list of types, returns the first common supertype.static ClassNodeGiven two types, returns the first common supertype, or the class itself if there are equal.
- 
Constructor Details- 
WideningCategoriespublic WideningCategories()
 
- 
- 
Method Details- 
isIntChecks if type is an int.- Since:
- 2.0.0
 
- 
isFloatChecks if type is a float.- Since:
- 2.0.0
 
- 
isDoubleChecks if type is a double.- Since:
- 2.0.0
 
- 
isIntCategoryChecks if type is an int, byte, char or short.- Since:
- 2.0.0
 
- 
isLongCategoryChecks if type is a long, int, byte, char or short.- Since:
- 2.0.0
 
- 
isBigIntCategoryChecks if type is a BigInteger, long, int, byte, char or short.- Since:
- 2.0.0
 
- 
isBigDecCategoryChecks if type is a BigDecimal, BigInteger, long, int, byte, char or short.- Since:
- 2.0.0
 
- 
isDoubleCategoryChecks if type is a float, double or BigDecimal (category).- Since:
- 2.0.0
 
- 
isFloatingCategoryChecks if type is a float or double.- Since:
- 2.0.0
 
- 
isNumberCategoryChecks if type is a BigDecimal (category) or Number.- Since:
- 2.0.0
 
- 
lowestUpperBoundGiven a list of types, returns the first common supertype. For example, Double and Float would return Number, while Set and String would return Object.- Since:
- 2.0.0
 
- 
lowestUpperBoundGiven two types, 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.This method is not guaranteed to return a class node which corresponds to a real type. For example, if two types have more than one interface in common and are not in the same hierarchy branch, then the returned type will be a virtual type implementing all those interfaces. Calls to this method are supposed to be made with resolved generics. This means that you can have wildcards, but no placeholder. - Since:
- 2.0.0
 
- 
implementsInterfaceOrSubclassOfDetermines if the source class implements an interface or subclasses the target type. This method takes thelowest upper bound class nodetype into account, allowing removal of unnecessary casts.- Since:
- 2.3.0
 
 
-