summaryrefslogtreecommitdiff
path: root/asm-test/src/main/java/org/objectweb/asm/test/Util.java
blob: 9ea0f25dd59e0d43a48cfd9d024d15ad433275b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package org.objectweb.asm.test;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
import java.util.StringTokenizer;

/**
 * Provides utility methods for the asm.test package.
 *
 * @author Eric Bruneton
 */
final class Util {

  private Util() {}

  static int getMajorJavaVersion() {
    String javaVersion = System.getProperty("java.version");
    StringTokenizer tokenizer = new StringTokenizer(javaVersion, "._");
    String javaMajorVersionText = tokenizer.nextToken();
    int majorVersion = Integer.parseInt(javaMajorVersionText);
    if (majorVersion != 1) {
      return majorVersion;
    }
    javaMajorVersionText = tokenizer.nextToken();
    return Integer.parseInt(javaMajorVersionText);
  }

  static boolean previewFeatureEnabled() {
    try {
      Class<?> managementFactoryClass = Class.forName("java.lang.management.ManagementFactory");
      Method getRuntimeMxBean = managementFactoryClass.getMethod("getRuntimeMXBean");
      Object runtimeMxBean = getRuntimeMxBean.invoke(null);
      Class<?> runtimeMxBeanClass = Class.forName("java.lang.management.RuntimeMXBean");
      Method getInputArguments = runtimeMxBeanClass.getMethod("getInputArguments");
      List<?> argumentList = (List<?>) getInputArguments.invoke(runtimeMxBean);
      return argumentList.contains("--enable-preview");
    } catch (ClassNotFoundException e) { // JMX may be not available
      return false;
    } catch (NoSuchMethodException | IllegalAccessException e) {
      throw new AssertionError(e);
    } catch (InvocationTargetException e) {
      Throwable cause = e.getCause();
      if (cause instanceof RuntimeException) {
        throw (RuntimeException) cause;
      }
      if (cause instanceof Error) {
        throw (Error) cause;
      }
      throw new AssertionError(cause); // NOPMD
    }
  }
}