From 4b240469ca7c7665b7cbc29c77d7ccde2ec1edfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Bl=C3=A4sing?= Date: Wed, 13 May 2020 20:53:01 +0200 Subject: [PATCH] toString(): Use reflection to fetch value of ByReference object --- .../src/com/sun/jna/platform/unix/X11.java | 10 ---- .../com/sun/jna/platform/win32/BaseTSD.java | 5 -- .../HighLevelMonitorConfigurationAPI.java | 10 ---- .../LowLevelMonitorConfigurationAPI.java | 5 -- .../src/com/sun/jna/platform/win32/OaIdl.java | 20 ------- .../com/sun/jna/platform/win32/WTypes.java | 10 ---- .../com/sun/jna/platform/win32/WinDef.java | 55 ------------------- .../src/com/sun/jna/platform/win32/WinNT.java | 15 ----- .../com/sun/jna/platform/win32/WinReg.java | 5 -- src/com/sun/jna/ptr/ByReference.java | 29 +++++----- src/com/sun/jna/ptr/PointerByReference.java | 4 -- 11 files changed, 16 insertions(+), 152 deletions(-) diff --git a/contrib/platform/src/com/sun/jna/platform/unix/X11.java b/contrib/platform/src/com/sun/jna/platform/unix/X11.java index 212583e5b9..f07f7b5a71 100644 --- a/contrib/platform/src/com/sun/jna/platform/unix/X11.java +++ b/contrib/platform/src/com/sun/jna/platform/unix/X11.java @@ -172,11 +172,6 @@ public Atom getValue() { NativeLong value = getPointer().getNativeLong(0); return (Atom)new Atom().fromNative(value, null); } - - @Override - public String toString() { - return super.toString(getValue()); - } } class Colormap extends XID { private static final long serialVersionUID = 1L; @@ -256,11 +251,6 @@ public Window getValue() { NativeLong value = getPointer().getNativeLong(0); return value.longValue() == X11.None ? Window.None : new Window(value.longValue()); } - - @Override - public String toString() { - return super.toString(getValue()); - } } class Pixmap extends Drawable { private static final long serialVersionUID = 1L; diff --git a/contrib/platform/src/com/sun/jna/platform/win32/BaseTSD.java b/contrib/platform/src/com/sun/jna/platform/win32/BaseTSD.java index d754215c2b..011c617074 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/BaseTSD.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/BaseTSD.java @@ -107,11 +107,6 @@ public ULONG_PTR getValue() { ? getPointer().getInt(0) : getPointer().getLong(0)); } - - @Override - public String toString() { - return super.toString(getValue()); - } } diff --git a/contrib/platform/src/com/sun/jna/platform/win32/HighLevelMonitorConfigurationAPI.java b/contrib/platform/src/com/sun/jna/platform/win32/HighLevelMonitorConfigurationAPI.java index 322afcb974..e519a42ec8 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/HighLevelMonitorConfigurationAPI.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/HighLevelMonitorConfigurationAPI.java @@ -274,11 +274,6 @@ public void setValue(MC_DISPLAY_TECHNOLOGY_TYPE value) { public MC_DISPLAY_TECHNOLOGY_TYPE getValue() { return EnumUtils.fromInteger(getPointer().getInt(0), MC_DISPLAY_TECHNOLOGY_TYPE.class); } - - @Override - public String toString() { - return super.toString(getValue()); - } } } @@ -445,11 +440,6 @@ public void setValue(MC_COLOR_TEMPERATURE value) { public MC_COLOR_TEMPERATURE getValue() { return EnumUtils.fromInteger(getPointer().getInt(0), MC_COLOR_TEMPERATURE.class); } - - @Override - public String toString() { - return super.toString(getValue()); - } } } } diff --git a/contrib/platform/src/com/sun/jna/platform/win32/LowLevelMonitorConfigurationAPI.java b/contrib/platform/src/com/sun/jna/platform/win32/LowLevelMonitorConfigurationAPI.java index 2122aa2a6f..a091340c89 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/LowLevelMonitorConfigurationAPI.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/LowLevelMonitorConfigurationAPI.java @@ -111,11 +111,6 @@ public void setValue(MC_VCP_CODE_TYPE value) { public MC_VCP_CODE_TYPE getValue() { return EnumUtils.fromInteger(getPointer().getInt(0), MC_VCP_CODE_TYPE.class); } - - @Override - public String toString() { - return super.toString(getValue()); - } } } } diff --git a/contrib/platform/src/com/sun/jna/platform/win32/OaIdl.java b/contrib/platform/src/com/sun/jna/platform/win32/OaIdl.java index 0f4ed6e898..4556d9eb8c 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/OaIdl.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/OaIdl.java @@ -200,11 +200,6 @@ public void setValue(VARIANT_BOOL value) { public VARIANT_BOOL getValue() { return new VARIANT_BOOL(getPointer().getShort(0)); } - - @Override - public String toString() { - return super.toString(getValue()); - } } public static class _VARIANT_BOOLByReference extends ByReference { @@ -224,11 +219,6 @@ public void setValue(VARIANT_BOOL value) { public VARIANT_BOOL getValue() { return new VARIANT_BOOL(getPointer().getShort(0)); } - - @Override - public String toString() { - return super.toString(getValue()); - } } @FieldOrder({"date"}) @@ -321,11 +311,6 @@ public void setValue(DISPID value) { public DISPID getValue() { return new DISPID(getPointer().getInt(0)); } - - @Override - public String toString() { - return super.toString(getValue()); - } } public static class MEMBERID extends DISPID { @@ -357,11 +342,6 @@ public void setValue(MEMBERID value) { public MEMBERID getValue() { return new MEMBERID(getPointer().getInt(0)); } - - @Override - public String toString() { - return super.toString(getValue()); - } } // The Collect property. You use this property if the method you are calling diff --git a/contrib/platform/src/com/sun/jna/platform/win32/WTypes.java b/contrib/platform/src/com/sun/jna/platform/win32/WTypes.java index 137256d1db..e8664a8feb 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/WTypes.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/WTypes.java @@ -171,11 +171,6 @@ public BSTR getValue() { public String getString() { return this.getValue().getValue(); } - - @Override - public String toString() { - return super.toString(getValue()); - } } public static class LPSTR extends PointerType { @@ -323,10 +318,5 @@ public void setValue(VARTYPE value) { public VARTYPE getValue() { return new VARTYPE(getPointer().getShort(0)); } - - @Override - public String toString() { - return super.toString(getValue()); - } } } diff --git a/contrib/platform/src/com/sun/jna/platform/win32/WinDef.java b/contrib/platform/src/com/sun/jna/platform/win32/WinDef.java index 42e55ec163..220f6126b1 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/WinDef.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/WinDef.java @@ -117,11 +117,6 @@ public void setValue(WORD value) { public WORD getValue() { return new WORD(getPointer().getShort(0)); } - - @Override - public String toString() { - return super.toString(getValue()); - } } /** @@ -212,11 +207,6 @@ public void setValue(DWORD value) { public DWORD getValue() { return new DWORD(getPointer().getInt(0)); } - - @Override - public String toString() { - return super.toString(getValue()); - } } /** @@ -288,11 +278,6 @@ public void setValue(LONG value) { public LONG getValue() { return new LONG(getPointer().getInt(0)); } - - @Override - public String toString() { - return super.toString(getValue()); - } } /** @@ -364,11 +349,6 @@ public void setValue(LONGLONG value) { public LONGLONG getValue() { return new LONGLONG(getPointer().getLong(0)); } - - @Override - public String toString() { - return super.toString(getValue()); - } } /** @@ -926,11 +906,6 @@ public void setValue(ULONG value) { public ULONG getValue() { return new ULONG(getPointer().getInt(0)); } - - @Override - public String toString() { - return super.toString(getValue()); - } } /** @@ -1002,11 +977,6 @@ public void setValue(ULONGLONG value) { public ULONGLONG getValue() { return new ULONGLONG(getPointer().getLong(0)); } - - @Override - public String toString() { - return super.toString(getValue()); - } } /** @@ -1284,11 +1254,6 @@ public void setValue(USHORT value) { public USHORT getValue() { return new USHORT(getPointer().getShort(0)); } - - @Override - public String toString() { - return super.toString(getValue()); - } } /** @@ -1392,11 +1357,6 @@ public void setValue(UINT value) { public UINT getValue() { return new UINT(getPointer().getInt(0)); } - - @Override - public String toString() { - return super.toString(getValue()); - } } /** @@ -1461,11 +1421,6 @@ public void setValue(SCODE value) { public SCODE getValue() { return new SCODE(getPointer().getInt(0)); } - - @Override - public String toString() { - return super.toString(getValue()); - } } /** @@ -1637,11 +1592,6 @@ public void setValue(BOOL value) { public BOOL getValue() { return new BOOL(getPointer().getInt(0)); } - - @Override - public String toString() { - return super.toString(getValue()); - } } /** @@ -1778,11 +1728,6 @@ public void setValue(CHAR value) { public CHAR getValue() { return new CHAR(getPointer().getByte(0)); } - - @Override - public String toString() { - return super.toString(getValue()); - } } /** diff --git a/contrib/platform/src/com/sun/jna/platform/win32/WinNT.java b/contrib/platform/src/com/sun/jna/platform/win32/WinNT.java index 8755be1f47..25b611a182 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/WinNT.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/WinNT.java @@ -398,11 +398,6 @@ public PSID getValue() { return new PSID(p); } } - - @Override - public String toString() { - return super.toString(getValue()); - } } /** @@ -1367,11 +1362,6 @@ public HANDLE getValue() { h.setPointer(p); return h; } - - @Override - public String toString() { - return super.toString(getValue()); - } } /** @@ -2572,11 +2562,6 @@ public ACL getValue() { return new ACL(p); } } - - @Override - public String toString() { - return super.toString(getValue()); - } } @FieldOrder({"Revision", "Sbz1", "Control", "Owner", "Group", "Sacl", "Dacl"}) diff --git a/contrib/platform/src/com/sun/jna/platform/win32/WinReg.java b/contrib/platform/src/com/sun/jna/platform/win32/WinReg.java index bb8758ebdd..5dc2da513b 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/WinReg.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/WinReg.java @@ -67,11 +67,6 @@ public HKEY getValue() { h.setPointer(p); return h; } - - @Override - public String toString() { - return super.toString(getValue()); - } } HKEY HKEY_CLASSES_ROOT = new HKEY(0x80000000); diff --git a/src/com/sun/jna/ptr/ByReference.java b/src/com/sun/jna/ptr/ByReference.java index c9a711a5cf..64b0cddb78 100644 --- a/src/com/sun/jna/ptr/ByReference.java +++ b/src/com/sun/jna/ptr/ByReference.java @@ -26,6 +26,7 @@ import com.sun.jna.Memory; import com.sun.jna.Pointer; import com.sun.jna.PointerType; +import java.lang.reflect.Method; /** Provides generic "pointer to type" functionality, often used in C * code to return values to the caller in addition to a function result. @@ -43,19 +44,21 @@ protected ByReference(int dataSize) { setPointer(new Memory(dataSize)); } - /** - * Express this reference and the value it points to. - * - * @param value - * The value to display. Callers should pass the result of - * {@code getValue()}. - * @return A formatted string containing the object type, reference address, and - * value - */ - protected String toString(Object value) { - if (value == null) { - return String.format("null@0x%x", Pointer.nativeValue(getPointer())); + @Override + public String toString() { + try { + Method getValue = getClass().getMethod("getValue"); + Object value = getValue.invoke(this); + if (value == null) { + return String.format("null@0x%x", Pointer.nativeValue(getPointer())); + } + return String.format("%s@0x%x=%s", value.getClass().getSimpleName(), Pointer.nativeValue(getPointer()), value); + } catch (Exception ex) { + return String.format( + "ByReference Contract violated - %s#getValue raised exception: %s", + getClass().getName(), + ex.getMessage() + ); } - return String.format("%s@0x%x=%s", value.getClass().getSimpleName(), Pointer.nativeValue(getPointer()), value); } } diff --git a/src/com/sun/jna/ptr/PointerByReference.java b/src/com/sun/jna/ptr/PointerByReference.java index 22a9565fab..341351a313 100644 --- a/src/com/sun/jna/ptr/PointerByReference.java +++ b/src/com/sun/jna/ptr/PointerByReference.java @@ -49,8 +49,4 @@ public Pointer getValue() { return getPointer().getPointer(0); } - @Override - public String toString() { - return super.toString(getValue()); - } }