Class NumberNode

  • All Implemented Interfaces:
    FromSourceLocation, ToNode

    public final class NumberNode
    extends Node
    Represents a number node. Number nodes contain a Number value.

    Number nodes contain a value. You can inspect its type by calling isNaturalNumber() or isFloatingPointNumber(). Natural numbers are positive, or negative numbers without a decimal part.

    • Constructor Detail

      • NumberNode

        public NumberNode​(java.lang.Number value,
                          SourceLocation sourceLocation)
    • Method Detail

      • getValue

        public java.lang.Number getValue()
        Gets the number value.
        Returns:
        Returns a number.
      • asBigDecimal

        public java.util.Optional<java.math.BigDecimal> asBigDecimal()
        Gets the number value as a BigDecimal if possible.

        NaN and infinite numbers will return an empty Optional.

        Returns:
        Returns the BigDecimal value of the wrapped number.
      • isNaturalNumber

        @Deprecated
        public boolean isNaturalNumber()
        Deprecated.
      • isNegative

        public boolean isNegative()
        Check the value is negative, including negative infinity.

        Any number >= 0, +Infinity, and NaN return false.

        Returns:
        Return true if negative.
      • isFloatingPointNumber

        public boolean isFloatingPointNumber()
        Returns true if the node contains a floating point number.
        Returns:
        Returns true if the node contains a floating point number.
      • isNaN

        public boolean isNaN()
        Returns true if the number is a floating point NaN.
        Returns:
        Return true if NaN.
      • isInfinite

        public boolean isInfinite()
        Returns true if the number is infinite.
        Returns:
        Return true if infinite.
      • getType

        public NodeType getType()
        Description copied from class: Node
        Gets the type of the node.
        Specified by:
        getType in class Node
        Returns:
        Returns the node type.
      • accept

        public <R> R accept​(NodeVisitor<R> visitor)
        Description copied from class: Node
        Accepts a visitor with the node.
        Specified by:
        accept in class Node
        Type Parameters:
        R - visitor return type.
        Parameters:
        visitor - Visitor to dispatch to.
        Returns:
        Returns the accepted result.
      • expectNumberNode

        public NumberNode expectNumberNode​(java.lang.String errorMessage)
        Description copied from class: Node
        Casts the current node to a NumberNode, throwing ExpectationNotMetException when the node is the wrong type.
        Overrides:
        expectNumberNode in class Node
        Parameters:
        errorMessage - Error message to use if the node is of the wrong type.
        Returns:
        Returns a number node.
      • expectNumberNode

        public NumberNode expectNumberNode​(java.util.function.Supplier<java.lang.String> errorMessage)
        Description copied from class: Node
        Casts the current node to a NumberNode, throwing ExpectationNotMetException when the node is the wrong type.
        Overrides:
        expectNumberNode in class Node
        Parameters:
        errorMessage - Error message supplier.
        Returns:
        Returns a number node.
      • asNumberNode

        public java.util.Optional<NumberNode> asNumberNode()
        Description copied from class: Node
        Gets the node as an NumberNode if it is an number.
        Overrides:
        asNumberNode in class Node
        Returns:
        Returns the optional NumberNode.
      • isZero

        public boolean isZero()
        Returns true if the value of the number contained in the number node is zero, accounting for float, double, bigInteger, bigDecimal, and other numeric types (e.g., 0, 0.0, etc).

        Note that -0 and +0 are considered 0. However, NaN is not considered zero. When unknown number types are encountered, this method will return true if the toString of the given number returns "0", or "0.0". Other kinds of unknown number types will be treated like a double.

        Double and float comparisons to zero are exact and use no rounding. The majority of values seen by this method come from models that use "0" or "0.0". However, we can improve this in the future with some kind of epsilon if the need arises.

        Returns:
        Returns true if set to zero.
      • equals

        public boolean equals​(java.lang.Object other)
        Overrides:
        equals in class java.lang.Object
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.lang.Object
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object