Skip to content

Commit e3c7baa

Browse files
[#529] fix UnaryExpr not taken when parsing negative numbers
1 parent 112eb0f commit e3c7baa

File tree

9 files changed

+66
-20
lines changed

9 files changed

+66
-20
lines changed

jaxb-annox-parent/jaxb-annox/src/main/java/org/jvnet/jaxb/annox/parser/java/visitor/DoubleExpressionVisitor.java

+10
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.jvnet.jaxb.annox.parser.java.visitor;
22

3+
import com.github.javaparser.ast.expr.DoubleLiteralExpr;
4+
import com.github.javaparser.ast.expr.UnaryExpr;
35
import org.jvnet.jaxb.annox.model.annotation.value.XAnnotationValue;
46
import org.jvnet.jaxb.annox.model.annotation.value.XDoubleAnnotationValue;
57

@@ -15,4 +17,12 @@ public DoubleExpressionVisitor(Class<?> targetClass) {
1517
public XAnnotationValue<Double> visitDefault(StringLiteralExpr n, Void arg) {
1618
return new XDoubleAnnotationValue(Double.valueOf(n.getValue()));
1719
}
20+
21+
@Override
22+
public XAnnotationValue<Double> visit(UnaryExpr n, Void arg) {
23+
if (n.getExpr() instanceof StringLiteralExpr && n.getOperator() == UnaryExpr.Operator.negative) {
24+
return visit(new DoubleLiteralExpr("-" + ((StringLiteralExpr) n.getExpr()).getValue()), arg);
25+
}
26+
return super.visit(n, arg);
27+
}
1828
}

jaxb-annox-parent/jaxb-annox/src/main/java/org/jvnet/jaxb/annox/parser/java/visitor/FloatExpressionVisitor.java

+9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.jvnet.jaxb.annox.parser.java.visitor;
22

3+
import com.github.javaparser.ast.expr.UnaryExpr;
34
import org.jvnet.jaxb.annox.model.annotation.value.XAnnotationValue;
45
import org.jvnet.jaxb.annox.model.annotation.value.XFloatAnnotationValue;
56

@@ -15,4 +16,12 @@ public FloatExpressionVisitor(Class<?> targetClass) {
1516
public XAnnotationValue<Float> visitDefault(StringLiteralExpr n, Void arg) {
1617
return new XFloatAnnotationValue(Float.valueOf(n.getValue()));
1718
}
19+
20+
@Override
21+
public XAnnotationValue<Float> visit(UnaryExpr n, Void arg) {
22+
if (n.getExpr() instanceof StringLiteralExpr && n.getOperator() == UnaryExpr.Operator.negative) {
23+
return visit(new StringLiteralExpr("-" + ((StringLiteralExpr) n.getExpr()).getValue()), arg);
24+
}
25+
return super.visit(n, arg);
26+
}
1827
}

jaxb-annox-parent/jaxb-annox/src/main/java/org/jvnet/jaxb/annox/parser/java/visitor/IntegerExpressionVisitor.java

+9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.jvnet.jaxb.annox.parser.java.visitor;
22

3+
import com.github.javaparser.ast.expr.UnaryExpr;
34
import org.jvnet.jaxb.annox.model.annotation.value.XAnnotationValue;
45
import org.jvnet.jaxb.annox.model.annotation.value.XIntAnnotationValue;
56

@@ -15,4 +16,12 @@ public IntegerExpressionVisitor(Class<?> targetClass) {
1516
public XAnnotationValue<Integer> visitDefault(StringLiteralExpr n, Void arg) {
1617
return new XIntAnnotationValue(Integer.valueOf(n.getValue()));
1718
}
19+
20+
@Override
21+
public XAnnotationValue<Integer> visit(UnaryExpr n, Void arg) {
22+
if (n.getExpr() instanceof StringLiteralExpr && n.getOperator() == UnaryExpr.Operator.negative) {
23+
return visit(new StringLiteralExpr("-" + ((StringLiteralExpr) n.getExpr()).getValue()), arg);
24+
}
25+
return super.visit(n, arg);
26+
}
1827
}

jaxb-annox-parent/jaxb-annox/src/main/java/org/jvnet/jaxb/annox/parser/java/visitor/LongExpressionVisitor.java

+9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.jvnet.jaxb.annox.parser.java.visitor;
22

3+
import com.github.javaparser.ast.expr.UnaryExpr;
34
import org.jvnet.jaxb.annox.model.annotation.value.XAnnotationValue;
45
import org.jvnet.jaxb.annox.model.annotation.value.XLongAnnotationValue;
56

@@ -18,6 +19,14 @@ public XAnnotationValue<Long> visitDefault(StringLiteralExpr n, Void arg) {
1819
return new XLongAnnotationValue(Long.valueOf(n.getValue()));
1920
}
2021

22+
@Override
23+
public XAnnotationValue<Long> visit(UnaryExpr n, Void arg) {
24+
if (n.getExpr() instanceof StringLiteralExpr && n.getOperator() == UnaryExpr.Operator.negative) {
25+
return visit(new LongLiteralExpr("-" + ((StringLiteralExpr) n.getExpr()).getValue()), arg);
26+
}
27+
return super.visit(n, arg);
28+
}
29+
2130
@Override
2231
public XAnnotationValue<Long> visit(LongLiteralMinValueExpr n, Void arg) {
2332
return new XLongAnnotationValue(Long.MIN_VALUE);

jaxb-annox-parent/jaxb-annox/src/main/java/org/jvnet/jaxb/annox/parser/java/visitor/ShortExpressionVisitor.java

+9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.jvnet.jaxb.annox.parser.java.visitor;
22

3+
import com.github.javaparser.ast.expr.UnaryExpr;
34
import org.jvnet.jaxb.annox.model.annotation.value.XAnnotationValue;
45
import org.jvnet.jaxb.annox.model.annotation.value.XShortAnnotationValue;
56

@@ -15,4 +16,12 @@ public ShortExpressionVisitor(Class<?> targetClass) {
1516
public XAnnotationValue<Short> visitDefault(StringLiteralExpr n, Void arg) {
1617
return new XShortAnnotationValue(Short.valueOf(n.getValue()));
1718
}
19+
20+
@Override
21+
public XAnnotationValue<Short> visit(UnaryExpr n, Void arg) {
22+
if (n.getExpr() instanceof StringLiteralExpr && n.getOperator() == UnaryExpr.Operator.negative) {
23+
return visit(new StringLiteralExpr("-" + ((StringLiteralExpr) n.getExpr()).getValue()), arg);
24+
}
25+
return super.visit(n, arg);
26+
}
1827
}

jaxb-annox-parent/jaxb-annox/src/test/java/org/jvnet/jaxb/annox/parser/tests/One.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@
1616
byteArrayField = { 0, 1 },
1717
charArrayField = { 'a', 'b' },
1818
classArrayField = { String.class, Boolean.class },
19-
doubleArrayField = { 2, 3 },
19+
doubleArrayField = { 2, 3, -3 },
2020
enumArrayField = { E.ONE, E.TWO },
21-
floatArrayField = { 4.5f, 6.7f },
22-
intArrayField = { 8, 9 },
23-
longArrayField = { 10, -9223372036854775808L },
24-
shortArrayField = { 12, 13 },
21+
floatArrayField = { 4.5f, -6.7f },
22+
intArrayField = { 8, -9 },
23+
longArrayField = { 10, -10, -9223372036854775808L },
24+
shortArrayField = { 12, -13 },
2525
stringArrayField = { "14", "15", "16", "17" },
2626
annotationArrayField = { @B.C, @B.C }))
2727
public class One {

jaxb-annox-parent/jaxb-annox/src/test/java/org/jvnet/jaxb/annox/parser/tests/Two.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@
1818
byteArrayField = {0, 1 },
1919
charArrayField = { 'a', 'b' },
2020
classArrayField = {String.class, Boolean.class },
21-
doubleArrayField = { 2, 3 },
21+
doubleArrayField = { 2, 3, -3 },
2222
enumArrayField = { E.ONE, E.TWO },
23-
floatArrayField = { 4.5f, 6.7f },
24-
intArrayField = { 8, 9 },
25-
longArrayField = { 10, -9223372036854775808L },
26-
shortArrayField = { 12, 13 },
23+
floatArrayField = { 4.5f, -6.7f },
24+
intArrayField = { 8, -9 },
25+
longArrayField = { 10, -10, -9223372036854775808L },
26+
shortArrayField = { 12, -13 },
2727
stringArrayField = { "14", "15", "16", "17" }))
2828
public class Two {
2929

jaxb-annox-parent/jaxb-annox/src/test/resources/org/jvnet/jaxb/annox/parser/tests/one.txt

+5-5
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@
1515
byteArrayField = { 0, 1 },
1616
charArrayField = { 'a', 'b' },
1717
classArrayField = { java.lang.String.class, java.lang.Boolean.class },
18-
doubleArrayField = { 2, 3d },
18+
doubleArrayField = { 2, 3d, -3d },
1919
enumArrayField = { org.jvnet.jaxb.annox.parser.tests.E.ONE, org.jvnet.jaxb.annox.parser.tests.E.TWO },
20-
floatArrayField = { 4.5f, 6.7f },
21-
intArrayField = { 8, 9 },
22-
longArrayField = { 10L, -9223372036854775808L },
23-
shortArrayField = { 12, 13 },
20+
floatArrayField = { 4.5f, -6.7f },
21+
intArrayField = { 8, -9 },
22+
longArrayField = { 10L, -10L, -9223372036854775808L },
23+
shortArrayField = { 12, -13 },
2424
stringArrayField = { "14", "15", "16", "17" },
2525
annotationArrayField = { @org.jvnet.jaxb.annox.parser.tests.B.C, @org.jvnet.jaxb.annox.parser.tests.B.C }))

jaxb-annox-parent/jaxb-annox/src/test/resources/org/jvnet/jaxb/annox/parser/tests/one.xml

+5-5
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@
1717
byteArrayField="0 1"
1818
charArrayField="a b"
1919
classArrayField="java.lang.String java.lang.Boolean"
20-
doubleArrayField="2 3"
20+
doubleArrayField="2 3 -3"
2121
enumArrayField="ONE TWO"
22-
floatArrayField="4.5 6.7"
23-
intArrayField="8 9"
24-
longArrayField="10 -9223372036854775808"
25-
shortArrayField="12 13"
22+
floatArrayField="4.5 -6.7"
23+
intArrayField="8 -9"
24+
longArrayField="10 -10 -9223372036854775808"
25+
shortArrayField="12 -13"
2626
stringArrayField="14 15">
2727
<stringArrayField>16</stringArrayField>
2828
<stringArrayField>17</stringArrayField>

0 commit comments

Comments
 (0)