This is an automated email from the ASF dual-hosted git repository.

jlmonteiro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openwebbeans.git


The following commit(s) were added to refs/heads/master by this push:
     new 925be66  Revert Unsafe logic for defineClass for j8+ to avoid warnings 
in j11+ and failures in j17+
925be66 is described below

commit 925be660aa8b10f60fe5705f9f14d0b635dda428
Author: Jean-Louis Monteiro <[email protected]>
AuthorDate: Thu Oct 7 08:53:49 2021 +0200

    Revert Unsafe logic for defineClass for j8+ to avoid warnings in j11+ and 
failures in j17+
---
 .../java/org/apache/webbeans/proxy/Unsafe.java     | 42 +++++++++++-----------
 1 file changed, 21 insertions(+), 21 deletions(-)

diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/proxy/Unsafe.java 
b/webbeans-impl/src/main/java/org/apache/webbeans/proxy/Unsafe.java
index 724002e..68f0433 100644
--- a/webbeans-impl/src/main/java/org/apache/webbeans/proxy/Unsafe.java
+++ b/webbeans-impl/src/main/java/org/apache/webbeans/proxy/Unsafe.java
@@ -102,33 +102,33 @@ public class Unsafe
                 }
             });
 
-            try
+            try // some j>8, since we have unsafe let's use it
             {
                 final Class<?> rootLoaderClass = 
Class.forName("java.lang.ClassLoader");
-                rootLoaderClass.getDeclaredMethod(
-                    "defineClass", new Class[] { String.class, byte[].class, 
int.class, int.class })
-                    .setAccessible(true);
-                rootLoaderClass.getDeclaredMethod(
-                    "defineClass", new Class[] {
-                            String.class, byte[].class, int.class, int.class, 
ProtectionDomain.class })
-                    .setAccessible(true);
+                final Method objectFieldOffset = 
unsafe.getClass().getDeclaredMethod("objectFieldOffset", Field.class);
+                final Method putBoolean = 
unsafe.getClass().getDeclaredMethod("putBoolean", Object.class, long.class, 
boolean.class);
+                objectFieldOffset.setAccessible(true);
+                final long accOffset = 
Long.class.cast(objectFieldOffset.invoke(unsafe, 
AccessibleObject.class.getDeclaredField("override")));
+                putBoolean.invoke(unsafe, 
rootLoaderClass.getDeclaredMethod("defineClass",
+                        new Class[]{String.class, byte[].class, int.class, 
int.class}),
+                        accOffset, true);
+                putBoolean.invoke(unsafe, rootLoaderClass
+                                .getDeclaredMethod("defineClass", new 
Class[]{String.class, byte[].class,
+                                        int.class, int.class, 
ProtectionDomain.class}),
+                        accOffset, true);
             }
             catch (final Exception e)
             {
-                try // some j>8, since we have unsafe let's use it
+                try
                 {
                     final Class<?> rootLoaderClass = 
Class.forName("java.lang.ClassLoader");
-                    final Method objectFieldOffset = 
unsafe.getClass().getDeclaredMethod("objectFieldOffset", Field.class);
-                    final Method putBoolean = 
unsafe.getClass().getDeclaredMethod("putBoolean", Object.class, long.class, 
boolean.class);
-                    objectFieldOffset.setAccessible(true);
-                    final long accOffset = 
Long.class.cast(objectFieldOffset.invoke(unsafe, 
AccessibleObject.class.getDeclaredField("override")));
-                    putBoolean.invoke(unsafe, 
rootLoaderClass.getDeclaredMethod("defineClass",
-                            new Class[]{String.class, byte[].class, int.class, 
int.class}),
-                            accOffset, true);
-                    putBoolean.invoke(unsafe, rootLoaderClass
-                                    .getDeclaredMethod("defineClass", new 
Class[]{String.class, byte[].class,
-                                            int.class, int.class, 
ProtectionDomain.class}),
-                            accOffset, true);
+                    rootLoaderClass.getDeclaredMethod(
+                        "defineClass", new Class[] { String.class, 
byte[].class, int.class, int.class })
+                        .setAccessible(true);
+                    rootLoaderClass.getDeclaredMethod(
+                        "defineClass", new Class[] {
+                                String.class, byte[].class, int.class, 
int.class, ProtectionDomain.class })
+                        .setAccessible(true); // this produces warning from 
11+ and fails on 17+
                 }
                 catch (final Exception ex)
                 {
@@ -265,7 +265,7 @@ public class Unsafe
                     }
                     break;
                 default:
-                    throw new IllegalAccessError("Unknown defineclass impl: " 
+ defineClassImpl);
+                    throw new IllegalAccessError("Unknown defineClass impl: " 
+ defineClassImpl);
             }
 
             // CHECKSTYLE:ON

Reply via email to