package org.junit.internal.management; import org.junit.internal.Classes; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Collections; import java.util.List; /** * Implementation of {@link RuntimeMXBean} using the JVM reflectively. */ final class ReflectiveRuntimeMXBean implements RuntimeMXBean { private final Object runtimeMxBean; private static final class Holder { private static final Method getInputArgumentsMethod; static { Method inputArguments = null; try { Class<?> threadMXBeanClass = Classes.getClass("java.lang.management.RuntimeMXBean"); inputArguments = threadMXBeanClass.getMethod("getInputArguments"); } catch (ClassNotFoundException e) { // do nothing, input arguments will be null on failure } catch (NoSuchMethodException e) { // do nothing, input arguments will be null on failure } catch (SecurityException e) { // do nothing, input arguments will be null on failure } getInputArgumentsMethod = inputArguments; } } ReflectiveRuntimeMXBean(Object runtimeMxBean) { super(); this.runtimeMxBean = runtimeMxBean; } /** * {@inheritDoc} */ @SuppressWarnings("unchecked") public List<String> getInputArguments() { if (Holder.getInputArgumentsMethod != null) { try { return (List<String>) Holder.getInputArgumentsMethod.invoke(runtimeMxBean); } catch (ClassCastException e) { // no multi-catch with source level 6 // fallthrough } catch (IllegalAccessException e) { // fallthrough } catch (IllegalArgumentException e) { // fallthrough } catch (InvocationTargetException e) { // fallthrough } } return Collections.emptyList(); } }