forked from phoedos/pmd
[ecmascript] InnaccurateNumericLiteral false positive with hex literals
Fixes #861
This commit is contained in:
@ -6,7 +6,6 @@ package net.sourceforge.pmd.lang.ecmascript.ast;
|
||||
|
||||
import org.mozilla.javascript.ast.NumberLiteral;
|
||||
|
||||
// TODO The Rhino node does not tell us whether this was specified via decimal, octal or hexidecimal.
|
||||
public class ASTNumberLiteral extends AbstractEcmascriptNode<NumberLiteral> {
|
||||
public ASTNumberLiteral(NumberLiteral numberLiteral) {
|
||||
super(numberLiteral);
|
||||
@ -21,8 +20,20 @@ public class ASTNumberLiteral extends AbstractEcmascriptNode<NumberLiteral> {
|
||||
}
|
||||
|
||||
public String getNormalizedImage() {
|
||||
// TODO Implement
|
||||
return super.getImage();
|
||||
String image = getImage();
|
||||
image = normalizeHexIntegerLiteral(image);
|
||||
image = image.replace('e', 'E');
|
||||
if (image.indexOf('.') == -1 && image.indexOf('E') == -1) {
|
||||
image = image + ".0";
|
||||
}
|
||||
return image;
|
||||
}
|
||||
|
||||
private String normalizeHexIntegerLiteral(String image) {
|
||||
if (image.startsWith("0x") || image.startsWith("0X")) {
|
||||
return String.valueOf(Integer.parseInt(image.substring(2), 16));
|
||||
}
|
||||
return image;
|
||||
}
|
||||
|
||||
public double getNumber() {
|
||||
|
@ -107,11 +107,7 @@ precision in a floating point number. This may result in numeric calculations b
|
||||
<property name="xpath">
|
||||
<value>
|
||||
<![CDATA[
|
||||
//NumberLiteral[
|
||||
@Image != @Number
|
||||
and translate(@Image, "e", "E") != @Number
|
||||
and concat(@Image, ".0") != @Number
|
||||
and @Image != substring-before(translate(@Number, ".", ""), "E")]
|
||||
//NumberLiteral[@NormalizedImage != @Number]
|
||||
]]>
|
||||
</value>
|
||||
</property>
|
||||
|
@ -63,4 +63,14 @@ var x = 1.12345678901234567e-4;
|
||||
]]></code>
|
||||
<source-type>ecmascript 3</source-type>
|
||||
</test-code>
|
||||
|
||||
<test-code>
|
||||
<description>#861 [ecmascript] InnaccurateNumericLiteral false positive</description>
|
||||
<expected-problems>0</expected-problems>
|
||||
<code><![CDATA[
|
||||
var hex1 = 0x20;
|
||||
var hex2 = 0X20;
|
||||
]]></code>
|
||||
<source-type>ecmascript 3</source-type>
|
||||
</test-code>
|
||||
</test-data>
|
||||
|
Reference in New Issue
Block a user