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 RuntimeMXBean using the JVM reflectively.
/** * 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}
/** * {@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(); } }