IDEA-171459 fix type cast for int literals used as byte / short in decompiled code
This commit is contained in:
committed by
Egor.Ushakov
parent
4beda48cf8
commit
cd1acfa266
@@ -876,7 +876,7 @@ public class ExprProcessor implements CodeConstants {
|
|||||||
castAlways ||
|
castAlways ||
|
||||||
(!leftType.isSuperset(rightType) && (rightType.equals(VarType.VARTYPE_OBJECT) || leftType.type != CodeConstants.TYPE_OBJECT)) ||
|
(!leftType.isSuperset(rightType) && (rightType.equals(VarType.VARTYPE_OBJECT) || leftType.type != CodeConstants.TYPE_OBJECT)) ||
|
||||||
(castNull && rightType.type == CodeConstants.TYPE_NULL && !UNDEFINED_TYPE_STRING.equals(getTypeName(leftType))) ||
|
(castNull && rightType.type == CodeConstants.TYPE_NULL && !UNDEFINED_TYPE_STRING.equals(getTypeName(leftType))) ||
|
||||||
(isIntConstant(exprent) && rightType.isStrictSuperset(leftType));
|
(isIntConstant(exprent) && VarType.VARTYPE_INT.isStrictSuperset(leftType));
|
||||||
|
|
||||||
boolean quote = cast && exprent.getPrecedence() >= FunctionExprent.getPrecedence(FunctionExprent.FUNCTION_CAST);
|
boolean quote = cast && exprent.getPrecedence() >= FunctionExprent.getPrecedence(FunctionExprent.FUNCTION_CAST);
|
||||||
|
|
||||||
|
|||||||
@@ -101,6 +101,7 @@ public class SingleClassesTest {
|
|||||||
@Test public void testAnonymousParams() { doTest("pkg/TestAnonymousParams"); }
|
@Test public void testAnonymousParams() { doTest("pkg/TestAnonymousParams"); }
|
||||||
@Test public void testAccessReplace() { doTest("pkg/TestAccessReplace"); }
|
@Test public void testAccessReplace() { doTest("pkg/TestAccessReplace"); }
|
||||||
@Test public void testStringLiterals() { doTest("pkg/TestStringLiterals"); }
|
@Test public void testStringLiterals() { doTest("pkg/TestStringLiterals"); }
|
||||||
|
@Test public void testPrimitives() { doTest("pkg/TestPrimitives"); }
|
||||||
|
|
||||||
private void doTest(String testFile, String... companionFiles) {
|
private void doTest(String testFile, String... companionFiles) {
|
||||||
ConsoleDecompiler decompiler = fixture.getDecompiler();
|
ConsoleDecompiler decompiler = fixture.getDecompiler();
|
||||||
|
|||||||
BIN
testData/classes/pkg/TestPrimitives.class
Normal file
BIN
testData/classes/pkg/TestPrimitives.class
Normal file
Binary file not shown.
@@ -33,11 +33,11 @@ public @interface MoreAnnotations {
|
|||||||
String annotatedWithEmptyArrays = "";
|
String annotatedWithEmptyArrays = "";
|
||||||
@MoreAnnotations(
|
@MoreAnnotations(
|
||||||
intArray = {1, 0, 2147483647, -2147483648},
|
intArray = {1, 0, 2147483647, -2147483648},
|
||||||
byteArray = {1, 0, 127, -128, -1},
|
byteArray = {(byte)1, (byte)0, (byte)127, (byte)-128, (byte)-1},
|
||||||
floatArray = {1.0F, 0.0F, 3.4028235E38F, 1.4E-45F, 0.0F / 0.0, 1.0F / 0.0, -1.0F / 0.0},
|
floatArray = {1.0F, 0.0F, 3.4028235E38F, 1.4E-45F, 0.0F / 0.0, 1.0F / 0.0, -1.0F / 0.0},
|
||||||
doubleArray = {1.0D, 0.0D, 1.7976931348623157E308D, 4.9E-324D, 0.0D / 0.0, 1.0D / 0.0, -1.0D / 0.0},
|
doubleArray = {1.0D, 0.0D, 1.7976931348623157E308D, 4.9E-324D, 0.0D / 0.0, 1.0D / 0.0, -1.0D / 0.0},
|
||||||
booleanArray = {true, false},
|
booleanArray = {true, false},
|
||||||
shortArray = {1, 0, 32767, -32768, -1},
|
shortArray = {(short)1, (short)0, (short)32767, (short)-32768, (short)-1},
|
||||||
longArray = {1L, 0L, 9223372036854775807L, -9223372036854775808L},
|
longArray = {1L, 0L, 9223372036854775807L, -9223372036854775808L},
|
||||||
charArray = {'a', '\n', '\u0001', '\u0000', '\uffff', '\u0000'},
|
charArray = {'a', '\n', '\u0001', '\u0000', '\uffff', '\u0000'},
|
||||||
enumArray = {MoreAnnotations.TestEnum.FirstValue, MoreAnnotations.TestEnum.SecondValue},
|
enumArray = {MoreAnnotations.TestEnum.FirstValue, MoreAnnotations.TestEnum.SecondValue},
|
||||||
@@ -73,7 +73,7 @@ public @interface MoreAnnotations {
|
|||||||
|
|
||||||
int[] intArray() default {1, 0, 2147483647, -2147483648};
|
int[] intArray() default {1, 0, 2147483647, -2147483648};
|
||||||
|
|
||||||
byte[] byteArray() default {1, 0, 127, -128, -1};
|
byte[] byteArray() default {(byte)1, (byte)0, (byte)127, (byte)-128, (byte)-1};
|
||||||
|
|
||||||
float[] floatArray() default {1.0F, 0.0F, 3.4028235E38F, 1.4E-45F, 0.0F / 0.0, 1.0F / 0.0, -1.0F / 0.0};
|
float[] floatArray() default {1.0F, 0.0F, 3.4028235E38F, 1.4E-45F, 0.0F / 0.0, 1.0F / 0.0, -1.0F / 0.0};
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@ public @interface MoreAnnotations {
|
|||||||
|
|
||||||
boolean[] booleanArray() default {true, false};
|
boolean[] booleanArray() default {true, false};
|
||||||
|
|
||||||
short[] shortArray() default {1, 0, 32767, -32768, -1};
|
short[] shortArray() default {(short)1, (short)0, (short)32767, (short)-32768, (short)-1};
|
||||||
|
|
||||||
long[] longArray() default {1L, 0L, 9223372036854775807L, -9223372036854775808L};
|
long[] longArray() default {1L, 0L, 9223372036854775807L, -9223372036854775808L};
|
||||||
|
|
||||||
|
|||||||
221
testData/results/TestPrimitives.dec
Normal file
221
testData/results/TestPrimitives.dec
Normal file
@@ -0,0 +1,221 @@
|
|||||||
|
package pkg;
|
||||||
|
|
||||||
|
public class TestPrimitives {
|
||||||
|
public void printAll() {
|
||||||
|
this.printBoolean(true);// 6
|
||||||
|
this.printByte((byte)123);// 7
|
||||||
|
this.printShort((short)257);// 8
|
||||||
|
this.printInt(123);// 9
|
||||||
|
this.printLong(123L);// 10
|
||||||
|
this.printFloat(1.23F);// 11
|
||||||
|
this.printDouble(1.23D);// 12
|
||||||
|
this.printChar('Z');// 13
|
||||||
|
System.out.println(String.format("%b, %d, %d, %d", new Object[]{Boolean.valueOf(this.getBoolean()), Byte.valueOf(this.getByte()), Short.valueOf(this.getShort()), Integer.valueOf(this.getInt())}));// 15
|
||||||
|
}// 16
|
||||||
|
|
||||||
|
public void printBoolean(boolean b) {
|
||||||
|
System.out.println(String.format("%b", new Object[]{Boolean.valueOf(b)}));// 19
|
||||||
|
}// 20
|
||||||
|
|
||||||
|
public void printByte(byte b) {
|
||||||
|
System.out.println(String.format("%d", new Object[]{Byte.valueOf(b)}));// 23
|
||||||
|
}// 24
|
||||||
|
|
||||||
|
public void printShort(short s) {
|
||||||
|
System.out.println(String.format("%d", new Object[]{Short.valueOf(s)}));// 27
|
||||||
|
}// 28
|
||||||
|
|
||||||
|
public void printInt(int i) {
|
||||||
|
System.out.println(String.format("%d", new Object[]{Integer.valueOf(i)}));// 31
|
||||||
|
}// 32
|
||||||
|
|
||||||
|
public void printLong(long l) {
|
||||||
|
System.out.println(String.format("%d", new Object[]{Long.valueOf(l)}));// 35
|
||||||
|
}// 36
|
||||||
|
|
||||||
|
public void printFloat(float f) {
|
||||||
|
System.out.println(String.format("%f", new Object[]{Float.valueOf(f)}));// 39
|
||||||
|
}// 40
|
||||||
|
|
||||||
|
public void printDouble(double d) {
|
||||||
|
System.out.println(String.format("%f", new Object[]{Double.valueOf(d)}));// 43
|
||||||
|
}// 44
|
||||||
|
|
||||||
|
public void printChar(char c) {
|
||||||
|
System.out.println(String.format("%c", new Object[]{Character.valueOf(c)}));// 47
|
||||||
|
}// 48
|
||||||
|
|
||||||
|
public boolean getBoolean() {
|
||||||
|
return false;// 52
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte getByte() {
|
||||||
|
return (byte)-128;// 56
|
||||||
|
}
|
||||||
|
|
||||||
|
public short getShort() {
|
||||||
|
return (short)-32768;// 60
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getInt() {
|
||||||
|
return 42;// 64
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class 'pkg/TestPrimitives' {
|
||||||
|
method 'printAll ()V' {
|
||||||
|
1 4
|
||||||
|
2 4
|
||||||
|
6 5
|
||||||
|
8 5
|
||||||
|
c 6
|
||||||
|
f 6
|
||||||
|
13 7
|
||||||
|
15 7
|
||||||
|
19 8
|
||||||
|
1c 8
|
||||||
|
20 9
|
||||||
|
22 9
|
||||||
|
26 10
|
||||||
|
29 10
|
||||||
|
2d 11
|
||||||
|
2f 11
|
||||||
|
32 12
|
||||||
|
35 12
|
||||||
|
3e 12
|
||||||
|
41 12
|
||||||
|
48 12
|
||||||
|
4b 12
|
||||||
|
52 12
|
||||||
|
55 12
|
||||||
|
5c 12
|
||||||
|
5f 12
|
||||||
|
63 12
|
||||||
|
66 12
|
||||||
|
69 13
|
||||||
|
}
|
||||||
|
|
||||||
|
method 'printBoolean (Z)V' {
|
||||||
|
0 16
|
||||||
|
3 16
|
||||||
|
c 16
|
||||||
|
10 16
|
||||||
|
13 16
|
||||||
|
16 17
|
||||||
|
}
|
||||||
|
|
||||||
|
method 'printByte (B)V' {
|
||||||
|
0 20
|
||||||
|
3 20
|
||||||
|
c 20
|
||||||
|
10 20
|
||||||
|
13 20
|
||||||
|
16 21
|
||||||
|
}
|
||||||
|
|
||||||
|
method 'printShort (S)V' {
|
||||||
|
0 24
|
||||||
|
3 24
|
||||||
|
c 24
|
||||||
|
10 24
|
||||||
|
13 24
|
||||||
|
16 25
|
||||||
|
}
|
||||||
|
|
||||||
|
method 'printInt (I)V' {
|
||||||
|
0 28
|
||||||
|
3 28
|
||||||
|
c 28
|
||||||
|
10 28
|
||||||
|
13 28
|
||||||
|
16 29
|
||||||
|
}
|
||||||
|
|
||||||
|
method 'printLong (J)V' {
|
||||||
|
0 32
|
||||||
|
3 32
|
||||||
|
c 32
|
||||||
|
10 32
|
||||||
|
13 32
|
||||||
|
16 33
|
||||||
|
}
|
||||||
|
|
||||||
|
method 'printFloat (F)V' {
|
||||||
|
0 36
|
||||||
|
3 36
|
||||||
|
c 36
|
||||||
|
10 36
|
||||||
|
13 36
|
||||||
|
16 37
|
||||||
|
}
|
||||||
|
|
||||||
|
method 'printDouble (D)V' {
|
||||||
|
0 40
|
||||||
|
3 40
|
||||||
|
c 40
|
||||||
|
10 40
|
||||||
|
13 40
|
||||||
|
16 41
|
||||||
|
}
|
||||||
|
|
||||||
|
method 'printChar (C)V' {
|
||||||
|
0 44
|
||||||
|
3 44
|
||||||
|
c 44
|
||||||
|
10 44
|
||||||
|
13 44
|
||||||
|
16 45
|
||||||
|
}
|
||||||
|
|
||||||
|
method 'getBoolean ()Z' {
|
||||||
|
0 48
|
||||||
|
1 48
|
||||||
|
}
|
||||||
|
|
||||||
|
method 'getByte ()B' {
|
||||||
|
0 52
|
||||||
|
2 52
|
||||||
|
}
|
||||||
|
|
||||||
|
method 'getShort ()S' {
|
||||||
|
0 56
|
||||||
|
3 56
|
||||||
|
}
|
||||||
|
|
||||||
|
method 'getInt ()I' {
|
||||||
|
0 60
|
||||||
|
2 60
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Lines mapping:
|
||||||
|
6 <-> 5
|
||||||
|
7 <-> 6
|
||||||
|
8 <-> 7
|
||||||
|
9 <-> 8
|
||||||
|
10 <-> 9
|
||||||
|
11 <-> 10
|
||||||
|
12 <-> 11
|
||||||
|
13 <-> 12
|
||||||
|
15 <-> 13
|
||||||
|
16 <-> 14
|
||||||
|
19 <-> 17
|
||||||
|
20 <-> 18
|
||||||
|
23 <-> 21
|
||||||
|
24 <-> 22
|
||||||
|
27 <-> 25
|
||||||
|
28 <-> 26
|
||||||
|
31 <-> 29
|
||||||
|
32 <-> 30
|
||||||
|
35 <-> 33
|
||||||
|
36 <-> 34
|
||||||
|
39 <-> 37
|
||||||
|
40 <-> 38
|
||||||
|
43 <-> 41
|
||||||
|
44 <-> 42
|
||||||
|
47 <-> 45
|
||||||
|
48 <-> 46
|
||||||
|
52 <-> 49
|
||||||
|
56 <-> 53
|
||||||
|
60 <-> 57
|
||||||
|
64 <-> 61
|
||||||
66
testData/src/pkg/TestPrimitives.java
Normal file
66
testData/src/pkg/TestPrimitives.java
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
package pkg;
|
||||||
|
|
||||||
|
public class TestPrimitives {
|
||||||
|
|
||||||
|
public void printAll() {
|
||||||
|
printBoolean(true);
|
||||||
|
printByte((byte) 123);
|
||||||
|
printShort((short) 257);
|
||||||
|
printInt(123);
|
||||||
|
printLong(123L);
|
||||||
|
printFloat(1.23F);
|
||||||
|
printDouble(1.23);
|
||||||
|
printChar('Z');
|
||||||
|
|
||||||
|
System.out.println(String.format("%b, %d, %d, %d", getBoolean(), getByte(), getShort(), getInt()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void printBoolean(boolean b) {
|
||||||
|
System.out.println(String.format("%b", b));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void printByte(byte b) {
|
||||||
|
System.out.println(String.format("%d", b));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void printShort(short s) {
|
||||||
|
System.out.println(String.format("%d", s));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void printInt(int i) {
|
||||||
|
System.out.println(String.format("%d", i));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void printLong(long l) {
|
||||||
|
System.out.println(String.format("%d", l));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void printFloat(float f) {
|
||||||
|
System.out.println(String.format("%f", f));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void printDouble(double d) {
|
||||||
|
System.out.println(String.format("%f", d));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void printChar(char c) {
|
||||||
|
System.out.println(String.format("%c", c));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean getBoolean() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte getByte() {
|
||||||
|
return (byte) 128;
|
||||||
|
}
|
||||||
|
|
||||||
|
public short getShort() {
|
||||||
|
return (short) 32768;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getInt() {
|
||||||
|
return 42;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user