aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReinier Zwitserloot <r.zwitserloot@projectlombok.org>2019-04-24 00:40:44 +0200
committerReinier Zwitserloot <r.zwitserloot@projectlombok.org>2019-04-24 00:41:27 +0200
commit4cbe67361ba58f86e8847926f07a5172db1f6d2f (patch)
treef50f4ba0e362afdb984825269f71fbd373d0b8f8
parentad93bb07049e80a2063c1231f236cd12118ec784 (diff)
downloadlombok-4cbe67361ba58f86e8847926f07a5172db1f6d2f.tar.gz
lombok-4cbe67361ba58f86e8847926f07a5172db1f6d2f.tar.bz2
lombok-4cbe67361ba58f86e8847926f07a5172db1f6d2f.zip
[fixes #2085] JDK12 compatibility. Also acknowledging @nqzero for the permit-reflect library which is inspiring our shenanigans :)
-rw-r--r--src/utils/lombok/permit/Permit.java27
-rw-r--r--website/templates/credits.html2
2 files changed, 27 insertions, 2 deletions
diff --git a/src/utils/lombok/permit/Permit.java b/src/utils/lombok/permit/Permit.java
index 9f0434b8..b7c5f0d9 100644
--- a/src/utils/lombok/permit/Permit.java
+++ b/src/utils/lombok/permit/Permit.java
@@ -46,8 +46,7 @@ public class Permit {
Throwable ex;
try {
- f = AccessibleObject.class.getDeclaredField("override");
- g = UNSAFE.objectFieldOffset(f);
+ g = getOverrideFieldOffset();
ex = null;
} catch (Throwable t) {
f = null;
@@ -74,6 +73,30 @@ public class Permit {
return accessor;
}
+ private static long getOverrideFieldOffset() throws Throwable {
+ Field f = null;
+ Throwable saved = null;
+ try {
+ f = AccessibleObject.class.getDeclaredField("override");
+ } catch (Throwable t) {
+ saved = t;
+ }
+
+ if (f != null) {
+ return UNSAFE.objectFieldOffset(f);
+ }
+ // The below seems very risky, but for all AccessibleObjects in java today it does work, and starting with JDK12, making the field accessible is no longer possible.
+ try {
+ return UNSAFE.objectFieldOffset(Fake.class.getDeclaredField("override"));
+ } catch (Throwable t) {
+ throw saved;
+ }
+ }
+
+ static class Fake {
+ boolean override;
+ }
+
public static Method getMethod(Class<?> c, String mName, Class<?>... parameterTypes) throws NoSuchMethodException {
Method m = null;
Class<?> oc = c;
diff --git a/website/templates/credits.html b/website/templates/credits.html
index 3390d762..b5c033ad 100644
--- a/website/templates/credits.html
+++ b/website/templates/credits.html
@@ -29,6 +29,8 @@
</li><li>
<strong>Tor Norbye</strong>, <strong>Jan Lahoda</strong>, and <strong>Petr Jiricka</strong> for helping out with Netbeans internals and/or javac.
</li><li>
+ <strong>nqzero</strong> for the <a href="https://github.com/nqzero/permit-reflect">permit-reflect</a> library, whose ideas are also used in lombok.
+ </li><li>
All contributors who submitted patches or helped answering questions!</li>
</ul>