/* * Copyright (c) 2006 Rogério Liesenfeld * This file is subject to the terms of the MIT license (see LICENSE.txt). */ package mockit.internal.injection; import javax.annotation.*; import mockit.*; import mockit.internal.state.*; import mockit.internal.util.*; final class TestedParameter extends TestedObject { @Nonnull private final TestMethod testMethod; @Nonnegative private final int parameterIndex; TestedParameter( @Nonnull InjectionState injectionState, @Nonnull TestMethod testMethod, @Nonnegative int parameterIndex, @Nonnull Tested metadata) { super( injectionState, metadata, ParameterNames.getName(testMethod, parameterIndex), testMethod.getParameterType(parameterIndex), testMethod.getParameterClass(parameterIndex)); this.testMethod = testMethod; this.parameterIndex = parameterIndex; } @Nullable @Override Object getExistingTestedInstanceIfApplicable(@Nonnull Object testClassInstance) { Object testedObject = null; if (!createAutomatically) { String providedValue = metadata.value(); if (!providedValue.isEmpty()) { Class<?> parameterClass = testMethod.getParameterClass(parameterIndex); testedObject = Utilities.convertFromString(parameterClass, providedValue); if (testedObject != null) { setInstance(testClassInstance, testedObject); } } createAutomatically = testedObject == null; } return testedObject; } @Override void setInstance(@Nonnull Object testClassInstance, @Nullable Object testedInstance) { testMethod.setParameterValue(parameterIndex, testedInstance); } }