Skip to content

Commit e5a7cde

Browse files
committed
Added "Show as hex" action for debugger data - 6
1 parent 750c160 commit e5a7cde

6 files changed

Lines changed: 51 additions & 31 deletions

File tree

src/org/exbin/deltahex/intellij/debug/ByteArrayPageProvider.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,7 @@
1515
*/
1616
package org.exbin.deltahex.intellij.debug;
1717

18-
import com.sun.jdi.ArrayReference;
19-
import com.sun.jdi.ByteValue;
20-
import com.sun.jdi.Value;
18+
import com.sun.jdi.*;
2119
import org.exbin.deltahex.intellij.DebugViewDataSource;
2220

2321
import java.util.List;
@@ -26,7 +24,7 @@
2624
* Byte array data source for debugger view.
2725
*
2826
* @author ExBin Project (http://exbin.org)
29-
* @version 0.1.6 2018/03/01
27+
* @version 0.1.6 2018/03/04
3028
*/
3129
public class ByteArrayPageProvider implements DebugViewDataSource.PageProvider {
3230

@@ -46,7 +44,18 @@ public byte[] getPage(long pageIndex) {
4644
final List<Value> values = arrayRef.getValues(startPos, length);
4745
byte[] result = new byte[length];
4846
for (int i = 0; i < values.size(); i++) {
49-
result[i] = ((ByteValue) values.get(i)).value();
47+
Value rawValue = values.get(i);
48+
byte value = 0;
49+
if (rawValue instanceof ByteValue) {
50+
value = ((ByteValue) rawValue).value();
51+
} else {
52+
if (rawValue instanceof ObjectReference) {
53+
ReferenceType referenceType = ((ObjectReference) rawValue).referenceType();
54+
// Value refValue = referenceType.getValue(referenceType.visibleFields().get(3));
55+
}
56+
}
57+
58+
result[i] = value;
5059
}
5160

5261
return result;

src/org/exbin/deltahex/intellij/debug/DoubleArrayPageProvider.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import java.util.List;
2525

2626
/**
27-
* Short array data source for debugger view.
27+
* Double array data source for debugger view.
2828
*
2929
* @author ExBin Project (http://exbin.org)
3030
* @version 0.1.6 2018/03/03
@@ -42,15 +42,17 @@ public DoubleArrayPageProvider(ArrayReference arrayRef) {
4242

4343
@Override
4444
public byte[] getPage(long pageIndex) {
45-
int startPos = (int) (pageIndex * DebugViewDataSource.PAGE_SIZE / 8);
46-
int length = DebugViewDataSource.PAGE_SIZE / 4;
47-
if (arrayRef.length() - startPos < DebugViewDataSource.PAGE_SIZE / 8) {
45+
int pageSize = DebugViewDataSource.PAGE_SIZE / 8;
46+
int startPos = (int) (pageIndex * pageSize);
47+
int length = pageSize;
48+
if (arrayRef.length() - startPos < pageSize) {
4849
length = arrayRef.length() - startPos;
4950
}
5051
final List<Value> values = arrayRef.getValues(startPos, length);
51-
byte[] result = new byte[length];
52+
byte[] result = new byte[length * 8];
5253
for (int i = 0; i < values.size(); i++) {
53-
double value = ((DoubleValue) values.get(i)).value();
54+
Value rawValue = values.get(i);
55+
double value = rawValue instanceof DoubleValue ? ((DoubleValue) rawValue).value() : 0;
5456

5557
byteBuffer.rewind();
5658
byteBuffer.putDouble(value);

src/org/exbin/deltahex/intellij/debug/FloatArrayPageProvider.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import java.util.List;
2525

2626
/**
27-
* Short array data source for debugger view.
27+
* Float array data source for debugger view.
2828
*
2929
* @author ExBin Project (http://exbin.org)
3030
* @version 0.1.6 2018/03/03
@@ -42,15 +42,17 @@ public FloatArrayPageProvider(ArrayReference arrayRef) {
4242

4343
@Override
4444
public byte[] getPage(long pageIndex) {
45-
int startPos = (int) (pageIndex * DebugViewDataSource.PAGE_SIZE / 4);
46-
int length = DebugViewDataSource.PAGE_SIZE / 4;
47-
if (arrayRef.length() - startPos < DebugViewDataSource.PAGE_SIZE / 4) {
45+
int pageSize = DebugViewDataSource.PAGE_SIZE / 4;
46+
int startPos = (int) (pageIndex * pageSize);
47+
int length = pageSize;
48+
if (arrayRef.length() - startPos < pageSize) {
4849
length = arrayRef.length() - startPos;
4950
}
5051
final List<Value> values = arrayRef.getValues(startPos, length);
51-
byte[] result = new byte[length];
52+
byte[] result = new byte[length * 4];
5253
for (int i = 0; i < values.size(); i++) {
53-
float value = ((FloatValue) values.get(i)).value();
54+
Value rawValue = values.get(i);
55+
float value = rawValue instanceof FloatValue ? ((FloatValue) rawValue).value() : 0;
5456

5557
byteBuffer.rewind();
5658
byteBuffer.putFloat(value);

src/org/exbin/deltahex/intellij/debug/IntegerArrayPageProvider.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,18 @@ public IntegerArrayPageProvider(ArrayReference arrayRef) {
3838

3939
@Override
4040
public byte[] getPage(long pageIndex) {
41-
int startPos = (int) (pageIndex * DebugViewDataSource.PAGE_SIZE / 4);
42-
int length = DebugViewDataSource.PAGE_SIZE / 4;
43-
if (arrayRef.length() - startPos < DebugViewDataSource.PAGE_SIZE / 4) {
41+
int pageSize = DebugViewDataSource.PAGE_SIZE / 4;
42+
int startPos = (int) (pageIndex * pageSize);
43+
int length = pageSize;
44+
if (arrayRef.length() - startPos < pageSize) {
4445
length = arrayRef.length() - startPos;
4546
}
4647
final List<Value> values = arrayRef.getValues(startPos, length);
47-
byte[] result = new byte[length];
48+
byte[] result = new byte[length * 4];
4849
for (int i = 0; i < values.size(); i++) {
49-
int value = ((IntegerValue) values.get(i)).value();
50+
Value rawValue = values.get(i);
51+
int value = rawValue instanceof IntegerValue ? ((IntegerValue) rawValue).value() : 0;
52+
5053
result[i * 4] = (byte) (value >> 24);
5154
result[i * 4 + 1] = (byte) ((value >> 16) & 0xff);
5255
result[i * 4 + 2] = (byte) ((value >> 8) & 0xff);

src/org/exbin/deltahex/intellij/debug/LongArrayPageProvider.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import java.util.List;
2626

2727
/**
28-
* Integer array data source for debugger view.
28+
* Long array data source for debugger view.
2929
*
3030
* @author ExBin Project (http://exbin.org)
3131
* @version 0.1.6 2018/03/03
@@ -40,19 +40,22 @@ public LongArrayPageProvider(ArrayReference arrayRef) {
4040

4141
@Override
4242
public byte[] getPage(long pageIndex) {
43-
int startPos = (int) (pageIndex * DebugViewDataSource.PAGE_SIZE / 8);
44-
int length = DebugViewDataSource.PAGE_SIZE / 8;
45-
if (arrayRef.length() - startPos < DebugViewDataSource.PAGE_SIZE / 8) {
43+
int pageSize = DebugViewDataSource.PAGE_SIZE / 8;
44+
int startPos = (int) (pageIndex * pageSize);
45+
int length = pageSize;
46+
if (arrayRef.length() - startPos < pageSize) {
4647
length = arrayRef.length() - startPos;
4748
}
4849
final List<Value> values = arrayRef.getValues(startPos, length);
49-
byte[] result = new byte[length];
50+
byte[] result = new byte[length * 8];
5051
for (int i = 0; i < values.size(); i++) {
51-
long value = ((LongValue) values.get(i)).value();
52+
Value rawValue = values.get(i);
53+
long value = rawValue instanceof LongValue ? ((LongValue) rawValue).value() : 0;
54+
5255
BigInteger bigInteger = BigInteger.valueOf(value);
5356
for (int bit = 0; bit < 7; bit++) {
5457
BigInteger nextByte = bigInteger.and(ValuesPanel.BIG_INTEGER_BYTE_MASK);
55-
result[i * 8 + bit] = nextByte.byteValue();
58+
result[i * 8 + 7 - bit] = nextByte.byteValue();
5659
bigInteger = bigInteger.shiftRight(8);
5760
}
5861
}

src/org/exbin/deltahex/intellij/debug/ShortArrayPageProvider.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,9 @@ public byte[] getPage(long pageIndex) {
4646
}
4747
final List<Value> values = arrayRef.getValues(startPos, length);
4848
byte[] result = new byte[length * 2];
49-
for (int i = 0; i < length; i++) {
50-
short value = ((ShortValue) values.get(i)).value();
49+
for (int i = 0; i < values.size(); i++) {
50+
Value rawValue = values.get(i);
51+
short value = rawValue instanceof ShortValue ? ((ShortValue) rawValue).value() : 0;
5152
result[i * 2] = (byte) (value >> 8);
5253
result[i * 2 + 1] = (byte) (value & 0xff);
5354
}

0 commit comments

Comments
 (0)