Home | History | Annotate | Download | only in expr
      1 /*
      2  * Copyright (C) 2007-2010 Jlio Vilmar Gesser.
      3  * Copyright (C) 2011, 2013-2016 The JavaParser Team.
      4  *
      5  * This file is part of JavaParser.
      6  *
      7  * JavaParser can be used either under the terms of
      8  * a) the GNU Lesser General Public License as published by
      9  *     the Free Software Foundation, either version 3 of the License, or
     10  *     (at your option) any later version.
     11  * b) the terms of the Apache License
     12  *
     13  * You should have received a copy of both licenses in LICENCE.LGPL and
     14  * LICENCE.APACHE. Please refer to those files for details.
     15  *
     16  * JavaParser is distributed in the hope that it will be useful,
     17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     19  * GNU Lesser General Public License for more details.
     20  */
     21 package com.github.javaparser.ast.expr;
     22 
     23 import com.github.javaparser.ast.AllFieldsConstructor;
     24 import com.github.javaparser.ast.Node;
     25 import com.github.javaparser.ast.visitor.CloneVisitor;
     26 import com.github.javaparser.ast.visitor.GenericVisitor;
     27 import com.github.javaparser.ast.visitor.VoidVisitor;
     28 import com.github.javaparser.metamodel.IntegerLiteralExprMetaModel;
     29 import com.github.javaparser.metamodel.JavaParserMetaModel;
     30 import javax.annotation.Generated;
     31 import com.github.javaparser.TokenRange;
     32 import java.util.function.Consumer;
     33 import java.util.Optional;
     34 
     35 /**
     36  * All ways to specify an int literal.
     37  * <br/><code>8934</code>
     38  * <br/><code>0x01</code>
     39  * <br/><code>022</code>
     40  * <br/><code>0B10101010</code>
     41  * <br/><code>99999999L</code>
     42  *
     43  * @author Julio Vilmar Gesser
     44  */
     45 public final class IntegerLiteralExpr extends LiteralStringValueExpr {
     46 
     47     public IntegerLiteralExpr() {
     48         this(null, "0");
     49     }
     50 
     51     @AllFieldsConstructor
     52     public IntegerLiteralExpr(final String value) {
     53         this(null, value);
     54     }
     55 
     56     /**
     57      * This constructor is used by the parser and is considered private.
     58      */
     59     @Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator")
     60     public IntegerLiteralExpr(TokenRange tokenRange, String value) {
     61         super(tokenRange, value);
     62         customInitialization();
     63     }
     64 
     65     public IntegerLiteralExpr(final int value) {
     66         this(null, String.valueOf(value));
     67     }
     68 
     69     @Override
     70     @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
     71     public <R, A> R accept(final GenericVisitor<R, A> v, final A arg) {
     72         return v.visit(this, arg);
     73     }
     74 
     75     @Override
     76     @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
     77     public <A> void accept(final VoidVisitor<A> v, final A arg) {
     78         v.visit(this, arg);
     79     }
     80 
     81     @Override
     82     @Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator")
     83     public boolean remove(Node node) {
     84         if (node == null)
     85             return false;
     86         return super.remove(node);
     87     }
     88 
     89     /**
     90      * @return the literal value as an integer while respecting different number representations
     91      */
     92     public int asInt() {
     93         String result = value.replaceAll("_", "");
     94         if (result.startsWith("0x") || result.startsWith("0X")) {
     95             return Integer.parseUnsignedInt(result.substring(2), 16);
     96         }
     97         if (result.startsWith("0b") || result.startsWith("0B")) {
     98             return Integer.parseUnsignedInt(result.substring(2), 2);
     99         }
    100         if (result.length() > 1 && result.startsWith("0")) {
    101             return Integer.parseUnsignedInt(result.substring(1), 8);
    102         }
    103         return Integer.parseInt(result);
    104     }
    105 
    106     public IntegerLiteralExpr setInt(int value) {
    107         this.value = String.valueOf(value);
    108         return this;
    109     }
    110 
    111     @Override
    112     @Generated("com.github.javaparser.generator.core.node.CloneGenerator")
    113     public IntegerLiteralExpr clone() {
    114         return (IntegerLiteralExpr) accept(new CloneVisitor(), null);
    115     }
    116 
    117     @Override
    118     @Generated("com.github.javaparser.generator.core.node.GetMetaModelGenerator")
    119     public IntegerLiteralExprMetaModel getMetaModel() {
    120         return JavaParserMetaModel.integerLiteralExprMetaModel;
    121     }
    122 
    123     @Override
    124     @Generated("com.github.javaparser.generator.core.node.ReplaceMethodGenerator")
    125     public boolean replace(Node node, Node replacementNode) {
    126         if (node == null)
    127             return false;
    128         return super.replace(node, replacementNode);
    129     }
    130 
    131     @Override
    132     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
    133     public boolean isIntegerLiteralExpr() {
    134         return true;
    135     }
    136 
    137     @Override
    138     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
    139     public IntegerLiteralExpr asIntegerLiteralExpr() {
    140         return this;
    141     }
    142 
    143     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
    144     public void ifIntegerLiteralExpr(Consumer<IntegerLiteralExpr> action) {
    145         action.accept(this);
    146     }
    147 
    148     @Override
    149     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
    150     public Optional<IntegerLiteralExpr> toIntegerLiteralExpr() {
    151         return Optional.of(this);
    152     }
    153 }
    154