/*
* 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 java.lang.annotation.*;
import java.lang.reflect.*;
import javax.annotation.*;
/**
* Provides type, name, and value(s) for an injection point, which is either a field to be injected or a parameter in
* the chosen constructor of a tested class.
*/
public abstract class InjectionPointProvider
{
public static final Object NULL = Void.class;
@Nonnull protected final Type declaredType;
@Nonnull protected final String name;
@Nullable public InjectionPointProvider parent;
protected InjectionPointProvider(@Nonnull Type declaredType, @Nonnull String name)
{
this.declaredType = declaredType;
this.name = name;
}
@Nonnull public final Type getDeclaredType() { return declaredType; }
@Nonnull public abstract Class<?> getClassOfDeclaredType();
@Nonnull public final String getName() { return name; }
@Nonnull public Annotation[] getAnnotations() { throw new UnsupportedOperationException("No annotations"); }
@Nullable public Object getValue(@Nullable Object owner) { return null; }
@Override
public String toString()
{
Class<?> type = getClassOfDeclaredType();
return '"' + type.getSimpleName() + ' ' + name + '"';
}
}