aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/expr/IntegerLiteralExpr.java12
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/expr/LongLiteralExpr.java16
-rw-r--r--javaparser-testing/src/test/java/com/github/javaparser/ast/expr/LiteralStringValueExprTest.java38
3 files changed, 58 insertions, 8 deletions
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/expr/IntegerLiteralExpr.java b/javaparser-core/src/main/java/com/github/javaparser/ast/expr/IntegerLiteralExpr.java
index b26106c9e..58fd20392 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/expr/IntegerLiteralExpr.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/expr/IntegerLiteralExpr.java
@@ -76,7 +76,17 @@ public class IntegerLiteralExpr extends LiteralStringValueExpr {
}
public int asInt() {
- return Integer.parseInt(value);
+ String result = value.replaceAll("_", "");
+ if (result.startsWith("0x")) {
+ return Integer.parseUnsignedInt(result.substring(2), 16);
+ }
+ if (result.startsWith("0b")) {
+ return Integer.parseUnsignedInt(result.substring(2), 2);
+ }
+ if (result.startsWith("0")) {
+ return Integer.parseUnsignedInt(result.substring(1), 8);
+ }
+ return Integer.parseInt(result);
}
public IntegerLiteralExpr setInt(int value) {
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/expr/LongLiteralExpr.java b/javaparser-core/src/main/java/com/github/javaparser/ast/expr/LongLiteralExpr.java
index af11154d3..0db0b9b12 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/expr/LongLiteralExpr.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/expr/LongLiteralExpr.java
@@ -76,7 +76,21 @@ public class LongLiteralExpr extends LiteralStringValueExpr {
}
public long asLong() {
- return Long.parseLong(value);
+ String result = value.replaceAll("_", "");
+ char lastChar = result.charAt(result.length() - 1);
+ if (lastChar == 'l' || lastChar == 'L') {
+ result = result.substring(0, result.length() - 1);
+ }
+ if (result.startsWith("0x")) {
+ return Long.parseUnsignedLong(result.substring(2), 16);
+ }
+ if (result.startsWith("0b")) {
+ return Long.parseUnsignedLong(result.substring(2), 2);
+ }
+ if (result.startsWith("0")) {
+ return Long.parseUnsignedLong(result.substring(1), 8);
+ }
+ return Long.parseLong(result);
}
public LongLiteralExpr setLong(long value) {
diff --git a/javaparser-testing/src/test/java/com/github/javaparser/ast/expr/LiteralStringValueExprTest.java b/javaparser-testing/src/test/java/com/github/javaparser/ast/expr/LiteralStringValueExprTest.java
index 3b2e7fba3..164b398f3 100644
--- a/javaparser-testing/src/test/java/com/github/javaparser/ast/expr/LiteralStringValueExprTest.java
+++ b/javaparser-testing/src/test/java/com/github/javaparser/ast/expr/LiteralStringValueExprTest.java
@@ -20,6 +20,7 @@
*/
package com.github.javaparser.ast.expr;
+import com.github.javaparser.JavaParser;
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
@@ -28,23 +29,48 @@ public class LiteralStringValueExprTest {
@Test
public void longLiteralsAreConverted() {
- LongLiteralExpr literalExpr = new LongLiteralExpr(25L);
+ LongLiteralExpr dec = JavaParser.parseExpression("9223372036854775807L");
+ LongLiteralExpr posOct = JavaParser.parseExpression("07_7777_7777_7777_7777_7777L");
+ LongLiteralExpr negOct = JavaParser.parseExpression("010_0000_0000_0000_0000_0000L");
+ LongLiteralExpr posHex = JavaParser.parseExpression("0x7fff_ffff_ffff_ffffL");
+ LongLiteralExpr negHex = JavaParser.parseExpression("0xffff_ffff_ffff_ffffL");
+ LongLiteralExpr posBin = JavaParser.parseExpression("0b0111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111L");
+ LongLiteralExpr negBin = JavaParser.parseExpression("0b1000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000L");
- assertThat(literalExpr.asLong()).isEqualTo(25L);
+ assertThat(dec.asLong()).isEqualTo(9223372036854775807L);
+ assertThat(posOct.asLong()).isEqualTo(9223372036854775807L); // 07_7777_7777_7777_7777_7777L
+ assertThat(negOct.asLong()).isEqualTo(-9223372036854775808L); // 010_0000_0000_0000_0000_0000L
+ assertThat(posHex.asLong()).isEqualTo(0x7fff_ffff_ffff_ffffL);
+ assertThat(negHex.asLong()).isEqualTo(0xffff_ffff_ffff_ffffL);
+ assertThat(posBin.asLong()).isEqualTo(0b0111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111L);
+ assertThat(negBin.asLong()).isEqualTo(0b1000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000L);
}
@Test
public void integerLiteralsAreConverted() {
- IntegerLiteralExpr literalExpr = new IntegerLiteralExpr(25);
+ IntegerLiteralExpr dec = JavaParser.parseExpression("2147483647");
+ IntegerLiteralExpr posOct = JavaParser.parseExpression("0177_7777_7777");
+ IntegerLiteralExpr negOct = JavaParser.parseExpression("0377_7777_7777");
+ IntegerLiteralExpr posHex = JavaParser.parseExpression("0x7fff_ffff");
+ IntegerLiteralExpr negHex = JavaParser.parseExpression("0xffff_ffff");
+ IntegerLiteralExpr posBin = JavaParser.parseExpression("0b0111_1111_1111_1111_1111_1111_1111_1111");
+ IntegerLiteralExpr negBin = JavaParser.parseExpression("0b1000_0000_0000_0000_0000_0000_0000_0000");
- assertThat(literalExpr.asInt()).isEqualTo(25);
+ assertThat(dec.asInt()).isEqualTo(2147483647);
+ assertThat(posOct.asInt()).isEqualTo(2147483647); // 0177_7777_7777
+ assertThat(negOct.asInt()).isEqualTo(-1); // 0377_7777_7777
+ assertThat(posHex.asInt()).isEqualTo(0x7fff_ffff);
+ assertThat(negHex.asInt()).isEqualTo(0xffff_ffff);
+ assertThat(posBin.asInt()).isEqualTo(0b0111_1111_1111_1111_1111_1111_1111_1111);
+ assertThat(negBin.asInt()).isEqualTo(0b1000_0000_0000_0000_0000_0000_0000_0000);
}
@Test
public void charLiteralsAreConverted() {
- CharLiteralExpr literalExpr = new CharLiteralExpr('\t');
+ Expression expr = JavaParser.parseExpression("'\\n'");
- assertThat(literalExpr.asChar()).isEqualTo('\t');
+ assertThat(expr).isInstanceOf(CharLiteralExpr.class);
+ assertThat(((CharLiteralExpr) expr).asChar()).isEqualTo('\\');
}
@Test