package net.bytebuddy.description.type;
import net.bytebuddy.dynamic.loading.ByteArrayClassLoader;
import net.bytebuddy.dynamic.loading.ClassLoadingStrategy;
import net.bytebuddy.dynamic.loading.PackageDefinitionStrategy;
import net.bytebuddy.matcher.ElementMatchers;
import net.bytebuddy.test.utility.ClassFileExtraction;
import org.junit.Ignore;
import org.junit.Test;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
public class TypeDescriptionForLoadedTypeTest extends AbstractTypeDescriptionTest {
@Override
protected TypeDescription describe(Class<?> type) {
return new TypeDescription.ForLoadedType(type);
}
@Override
protected TypeDescription.Generic describeType(Field field) {
return new TypeDescription.ForLoadedType(field.getDeclaringClass()).getDeclaredFields().filter(ElementMatchers.is(field)).getOnly().getType();
}
@Override
protected TypeDescription.Generic describeReturnType(Method method) {
return new TypeDescription.ForLoadedType(method.getDeclaringClass()).getDeclaredMethods().filter(ElementMatchers.is(method)).getOnly().getReturnType();
}
@Override
protected TypeDescription.Generic describeParameterType(Method method, int index) {
return new TypeDescription.ForLoadedType(method.getDeclaringClass()).getDeclaredMethods().filter(ElementMatchers.is(method)).getOnly().getParameters().get(index).getType();
}
@Override
protected TypeDescription.Generic describeExceptionType(Method method, int index) {
return new TypeDescription.ForLoadedType(method.getDeclaringClass()).getDeclaredMethods().filter(ElementMatchers.is(method)).getOnly().getExceptionTypes().get(index);
}
@Override
protected TypeDescription.Generic describeSuperClass(Class<?> type) {
return new TypeDescription.ForLoadedType(type).getSuperClass();
}
@Override
protected TypeDescription.Generic describeInterfaceType(Class<?> type, int index) {
return new TypeDescription.ForLoadedType(type).getInterfaces().get(index);
}
@Override
@Test
@Ignore("The Java reflection API suffers a bug that affects parsing of type variable bounds")
public void testTypeVariableU() throws Exception {
super.testTypeVariableU();
}
@Override
@Test
@Ignore("The Java reflection API suffers a bug that affects parsing of type variable bounds")
public void testTypeVariableV() throws Exception {
super.testTypeVariableV();
}
@Override
@Test
@Ignore("The Java reflection API suffers a bug that affects parsing of type variable bounds")
public void testTypeVariableW() throws Exception {
super.testTypeVariableW();
}
@Override
@Test
@Ignore("The Java reflection API suffers a bug that affects parsing of type variable bounds")
public void testTypeVariableX() throws Exception {
super.testTypeVariableX();
}
@Override
@Test
@Ignore("The Java reflection API does not currently support owner types")
public void testTypeAnnotationOwnerType() throws Exception {
super.testTypeAnnotationOwnerType();
}
@Override
@Test
@Ignore("The Java reflection API does not currently support generic receiver types")
public void testGenericTypeAnnotationReceiverTypeOnMethod() throws Exception {
super.testGenericTypeAnnotationReceiverTypeOnMethod();
}
@Override
@Test
@Ignore("The Java reflection API does not currently support generic receiver types")
public void testGenericNestedTypeAnnotationReceiverTypeOnMethod() throws Exception {
super.testGenericNestedTypeAnnotationReceiverTypeOnMethod();
}
@Override
@Test
@Ignore("The Java reflection API does not currently support generic receiver types")
public void testGenericNestedTypeAnnotationReceiverTypeOnConstructor() throws Exception {
super.testGenericNestedTypeAnnotationReceiverTypeOnConstructor();
}
@Override
@Test
@Ignore("The Java reflection API does not currently support generic receiver types")
public void testGenericInnerTypeAnnotationReceiverTypeOnConstructor() throws Exception {
super.testGenericInnerTypeAnnotationReceiverTypeOnConstructor();
}
@Override
@Test
@Ignore("The Java reflection API does not currently support generic receiver types")
public void testGenericInnerTypeAnnotationReceiverTypeOnMethod() throws Exception {
super.testGenericInnerTypeAnnotationReceiverTypeOnMethod();
}
@Override
@Test
@Ignore("The Java reflection API does not currently support nested non-generic types")
public void testTypeAnnotationNonGenericInnerType() throws Exception {
super.testTypeAnnotationNonGenericInnerType();
}
@Test
public void testNameEqualityNonAnonymous() throws Exception {
assertThat(TypeDescription.ForLoadedType.getName(Object.class), is(Object.class.getName()));
}
@Test
public void testLazyResolution() throws Exception {
ClassLoader classLoader = new ByteArrayClassLoader(ClassLoadingStrategy.BOOTSTRAP_LOADER, ClassFileExtraction.of(Foo.class));
new TypeDescription.ForLoadedType(classLoader.loadClass(Foo.class.getName()));
}
public static class Foo {
public Bar bar() {
return new Bar();
}
}
public static class Bar {
/* empty */
}
}