com.github.ruediste.salta.standard.InjectionPoint Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of salta-core Show documentation
Show all versions of salta-core Show documentation
Core of the Salta Framework. Provides most of the infrastructure, but no API
package com.github.ruediste.salta.standard;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Executable;
import java.lang.reflect.Member;
import java.lang.reflect.Parameter;
import java.util.Objects;
import com.github.ruediste.salta.core.CoreDependencyKey;
import com.google.common.reflect.TypeToken;
/**
* Provides access to metadata about an injection point.
*
* May represent an injected field or a parameter of a constructor or producer
* method.
*/
public class InjectionPoint extends CoreDependencyKey {
private final TypeToken type;
private final Member member;
private final AnnotatedElement annotated;
private final Integer parameterIndex;
private Class rawType;
private final int hashCode;
@SuppressWarnings("unchecked")
public InjectionPoint(TypeToken type, Member member, AnnotatedElement annotated, Integer parameterIndex) {
this.type = type;
this.rawType = (Class) type.getRawType();
this.member = member;
this.annotated = annotated;
this.parameterIndex = parameterIndex;
this.hashCode = Objects.hash(type, member, annotated, parameterIndex);
}
/**
* Obtain an instance of AnnotatedField or AnnotatedParameter, depending
* upon whether the injection point is an injected field or a
* constructor/method parameter.
*/
@Override
public AnnotatedElement getAnnotatedElement() {
return annotated;
}
/**
* Get the Field object in the case of field injection, the Method object in
* the case of method parameter injection or the Constructor object in the
* case of constructor parameter injection.
*/
public Member getMember() {
return member;
}
/**
* Returns the index of this dependency in the method or constructor's
* parameter list, or null if this dependency does not belong to a parameter
* list.
*/
public Integer getParameterIndex() {
return parameterIndex;
}
@Override
public String toString() {
if (member instanceof Executable && annotated instanceof Parameter) {
return "parameter " + annotated + " of " + member;
}
return member.toString();
}
@Override
public TypeToken getType() {
return type;
}
@Override
public int hashCode() {
return hashCode;
}
@Override
public boolean equals(Object obj) {
if (obj == this)
return true;
if (obj == null)
return false;
if (!Objects.equals(getClass(), obj.getClass()))
return false;
InjectionPoint> other = (InjectionPoint>) obj;
return Objects.equals(type, other.type) && Objects.equals(member, other.member)
&& Objects.equals(annotated, other.annotated) && Objects.equals(parameterIndex, other.parameterIndex);
}
@Override
public Class getRawType() {
return rawType;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy