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