xref: /aosp_15_r20/external/ow2-asm/asm-test/src/main/java/org/objectweb/asm/test/Util.java (revision 2835e6bb194a25e32dae2cc0628d8f988b82bfc0)
1 package org.objectweb.asm.test;
2 
3 import java.lang.reflect.InvocationTargetException;
4 import java.lang.reflect.Method;
5 import java.util.List;
6 import java.util.StringTokenizer;
7 
8 /**
9  * Provides utility methods for the asm.test package.
10  *
11  * @author Eric Bruneton
12  */
13 final class Util {
14 
Util()15   private Util() {}
16 
getMajorJavaVersion()17   static int getMajorJavaVersion() {
18     String javaVersion = System.getProperty("java.version");
19     StringTokenizer tokenizer = new StringTokenizer(javaVersion, "._");
20     String javaMajorVersionText = tokenizer.nextToken();
21     int majorVersion = Integer.parseInt(javaMajorVersionText);
22     if (majorVersion != 1) {
23       return majorVersion;
24     }
25     javaMajorVersionText = tokenizer.nextToken();
26     return Integer.parseInt(javaMajorVersionText);
27   }
28 
previewFeatureEnabled()29   static boolean previewFeatureEnabled() {
30     try {
31       Class<?> managementFactoryClass = Class.forName("java.lang.management.ManagementFactory");
32       Method getRuntimeMxBean = managementFactoryClass.getMethod("getRuntimeMXBean");
33       Object runtimeMxBean = getRuntimeMxBean.invoke(null);
34       Class<?> runtimeMxBeanClass = Class.forName("java.lang.management.RuntimeMXBean");
35       Method getInputArguments = runtimeMxBeanClass.getMethod("getInputArguments");
36       List<?> argumentList = (List<?>) getInputArguments.invoke(runtimeMxBean);
37       return argumentList.contains("--enable-preview");
38     } catch (ClassNotFoundException e) { // JMX may be not available
39       return false;
40     } catch (NoSuchMethodException | IllegalAccessException e) {
41       throw new AssertionError(e);
42     } catch (InvocationTargetException e) {
43       Throwable cause = e.getCause();
44       if (cause instanceof RuntimeException) {
45         throw (RuntimeException) cause;
46       }
47       if (cause instanceof Error) {
48         throw (Error) cause;
49       }
50       throw new AssertionError(cause); // NOPMD
51     }
52   }
53 }
54