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