Skip to content

Commit

Permalink
Fixed minor bug in wildcard bound representation. Adapted toString.
Browse files Browse the repository at this point in the history
  • Loading branch information
Rafael Winterhalter committed May 28, 2015
1 parent 4484e36 commit b201098
Show file tree
Hide file tree
Showing 6 changed files with 127 additions and 8 deletions.
Expand Up @@ -155,7 +155,7 @@ public SignatureVisitor onTypeVariable(GenericTypeDescription genericTypeDescrip
@Override
public SignatureVisitor onRawType(TypeDescription typeDescription) {
if (typeDescription.isPrimitive()) {
signatureVisitor.visitBaseType(typeDescription.getDescriptor().charAt(ONLY_CHARACTER));
signatureVisitor.visitBaseType(typeDescription.getDescriptor().charAt(0));
} else {
signatureVisitor.visitClassType(typeDescription.getInternalName());
}
Expand Down Expand Up @@ -366,18 +366,18 @@ && getUpperBounds().equals(genericTypeDescription.getUpperBounds())
@Override
public String toString() {
StringBuilder stringBuilder = new StringBuilder(SYMBOL);
GenericTypeList bounds = getUpperBounds();
GenericTypeList bounds = getLowerBounds();
if (!bounds.isEmpty()) {
if (bounds.size() == 1 && bounds.get(0).equals(TypeDescription.OBJECT)) {
return SYMBOL;
}
stringBuilder.append(" extends ");
stringBuilder.append(" super ");
} else {
bounds = getLowerBounds();
bounds = getUpperBounds();
if (bounds.isEmpty()) {
return SYMBOL;
}
stringBuilder.append(" super ");
stringBuilder.append(" extends ");
}
boolean multiple = false;
for (GenericTypeDescription genericTypeDescription : bounds) {
Expand Down Expand Up @@ -412,15 +412,15 @@ public GenericTypeList getUpperBounds() {
public static class Latent extends ForWildcardType {

public static GenericTypeDescription unbounded() {
return new Latent(Collections.<GenericTypeDescription>emptyList(), Collections.<GenericTypeDescription>emptyList());
return new Latent(Collections.singletonList(TypeDescription.OBJECT), Collections.<GenericTypeDescription>emptyList());
}

public static GenericTypeDescription boundedAbove(GenericTypeDescription upperBound) {
return new Latent(Collections.singletonList(upperBound), Collections.<GenericTypeDescription>emptyList());
}

public static GenericTypeDescription boundedBelow(GenericTypeDescription lowerBound) {
return new Latent(Collections.<GenericTypeDescription>emptyList(), Collections.singletonList(lowerBound));
return new Latent(Collections.singletonList(TypeDescription.OBJECT), Collections.singletonList(lowerBound));
}

private final List<? extends GenericTypeDescription> upperBounds;
Expand Down
Expand Up @@ -3,6 +3,7 @@
import net.bytebuddy.description.annotation.AnnotationDescription;
import net.bytebuddy.description.annotation.AnnotationList;
import net.bytebuddy.description.method.MethodDescription;
import net.bytebuddy.description.type.generic.AbstractGenericTypeDescriptionTest;
import net.bytebuddy.dynamic.loading.ByteArrayClassLoader;
import net.bytebuddy.implementation.bytecode.StackSize;
import net.bytebuddy.test.utility.ClassFileExtraction;
Expand All @@ -26,7 +27,7 @@
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

public abstract class AbstractTypeDescriptionTest {
public abstract class AbstractTypeDescriptionTest extends AbstractGenericTypeDescriptionTest {

private static final String FOO = "foo", BAR = "bar";

Expand Down
@@ -1,7 +1,10 @@
package net.bytebuddy.description.type;

import net.bytebuddy.description.type.generic.GenericTypeDescription;
import org.junit.Test;

import java.lang.reflect.Field;

import static org.mockito.Mockito.mock;

public class TypeDescriptionArrayProjectionTest extends AbstractTypeDescriptionTest {
Expand All @@ -11,6 +14,11 @@ protected TypeDescription describe(Class<?> type) {
return TypeDescription.ArrayProjection.of(new TypeDescription.ForLoadedType(type), 0);
}

@Override
protected GenericTypeDescription describe(Field field) {
return GenericTypeDescription.ForGenericArray.Latent.of(GenericTypeDescription.Sort.describe(field.getGenericType()), 0);
}

@Test(expected = IllegalArgumentException.class)
public void testIllegalArity() throws Exception {
TypeDescription.ArrayProjection.of(mock(TypeDescription.class), -1);
Expand Down
@@ -1,9 +1,18 @@
package net.bytebuddy.description.type;

import net.bytebuddy.description.type.generic.GenericTypeDescription;

import java.lang.reflect.Field;

public class TypeDescriptionForLoadedTypeTest extends AbstractTypeDescriptionTest {

@Override
protected TypeDescription describe(Class<?> type) {
return new TypeDescription.ForLoadedType(type);
}

@Override
protected GenericTypeDescription describe(Field field) {
return GenericTypeDescription.Sort.describe(field.getGenericType());
}
}
@@ -0,0 +1,87 @@
package net.bytebuddy.description.type.generic;

import org.junit.Test;

import java.lang.reflect.Field;
import java.util.List;

import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.hamcrest.MatcherAssert.assertThat;

public abstract class AbstractGenericTypeDescriptionTest {

private static final String FOO = "foo";

protected abstract GenericTypeDescription describe(Field field);

@Test
public void testSimpleParameterizedType() throws Exception {
GenericTypeDescription genericTypeDescription = describe(SimpleParameterizedType.class.getDeclaredField(FOO));
assertThat(genericTypeDescription.getSort(), is(GenericTypeDescription.Sort.PARAMETERIZED));
assertThat(genericTypeDescription.getParameters().size(), is(1));
assertThat(genericTypeDescription.getParameters().getOnly().getSort(), is(GenericTypeDescription.Sort.RAW));
assertThat(genericTypeDescription.getParameters().getOnly().asRawType().represents(String.class), is(true));
assertThat(genericTypeDescription.getTypeName(), is(SimpleParameterizedType.class.getDeclaredField(FOO).getGenericType().toString()));
assertThat(genericTypeDescription.getComponentType(), nullValue(GenericTypeDescription.class));
assertThat(genericTypeDescription.getOwnerType(), nullValue(GenericTypeDescription.class));
assertThat(genericTypeDescription.getVariableSource(), nullValue(TypeVariableSource.class));
assertThat(genericTypeDescription.getSymbol(), nullValue(String.class));
assertThat(genericTypeDescription.getLowerBounds().size(), is(0));
assertThat(genericTypeDescription.getUpperBounds().size(), is(0));
}

@Test
public void testUpperBoundWildcardParameterizedType() throws Exception {
GenericTypeDescription genericTypeDescription = describe(UpperBoundWildcardParameterizedType.class.getDeclaredField(FOO));
assertThat(genericTypeDescription.getSort(), is(GenericTypeDescription.Sort.PARAMETERIZED));
assertThat(genericTypeDescription.getParameters().size(), is(1));
assertThat(genericTypeDescription.getParameters().getOnly().getSort(), is(GenericTypeDescription.Sort.WILDCARD));
assertThat(genericTypeDescription.getParameters().getOnly().asRawType().represents(String.class), is(true));
assertThat(genericTypeDescription.getParameters().getOnly().getUpperBounds().size(), is(1));
assertThat(genericTypeDescription.getParameters().getOnly().getUpperBounds().getOnly().getSort(), is(GenericTypeDescription.Sort.RAW));
assertThat(genericTypeDescription.getParameters().getOnly().getUpperBounds().getOnly().asRawType().represents(String.class), is(true));
assertThat(genericTypeDescription.getParameters().getOnly().getLowerBounds().size(), is(0));
assertThat(genericTypeDescription.getTypeName(), is(UpperBoundWildcardParameterizedType.class.getDeclaredField(FOO).getGenericType().toString()));
assertThat(genericTypeDescription.getComponentType(), nullValue(GenericTypeDescription.class));
assertThat(genericTypeDescription.getOwnerType(), nullValue(GenericTypeDescription.class));
assertThat(genericTypeDescription.getVariableSource(), nullValue(TypeVariableSource.class));
assertThat(genericTypeDescription.getSymbol(), nullValue(String.class));
assertThat(genericTypeDescription.getLowerBounds().size(), is(0));
assertThat(genericTypeDescription.getUpperBounds().size(), is(0));
}

@Test
public void testLowerBoundWildcardParameterizedType() throws Exception {
GenericTypeDescription genericTypeDescription = describe(LowerBoundWildcardParameterizedType.class.getDeclaredField(FOO));
assertThat(genericTypeDescription.getSort(), is(GenericTypeDescription.Sort.PARAMETERIZED));
assertThat(genericTypeDescription.getParameters().size(), is(1));
assertThat(genericTypeDescription.getParameters().getOnly().getSort(), is(GenericTypeDescription.Sort.WILDCARD));
assertThat(genericTypeDescription.getParameters().getOnly().asRawType().represents(Object.class), is(true));
assertThat(genericTypeDescription.getParameters().getOnly().getUpperBounds().size(), is(1));
assertThat(genericTypeDescription.getParameters().getOnly().getUpperBounds().getOnly().getSort(), is(GenericTypeDescription.Sort.RAW));
assertThat(genericTypeDescription.getParameters().getOnly().getUpperBounds().getOnly().asRawType().represents(Object.class), is(true));
assertThat(genericTypeDescription.getParameters().getOnly().getLowerBounds().size(), is(1));
assertThat(genericTypeDescription.getParameters().getOnly().getLowerBounds().getOnly().getSort(), is(GenericTypeDescription.Sort.RAW));
assertThat(genericTypeDescription.getParameters().getOnly().getLowerBounds().getOnly().asRawType().represents(String.class), is(true));
assertThat(genericTypeDescription.getTypeName(), is(LowerBoundWildcardParameterizedType.class.getDeclaredField(FOO).getGenericType().toString()));
assertThat(genericTypeDescription.getComponentType(), nullValue(GenericTypeDescription.class));
assertThat(genericTypeDescription.getOwnerType(), nullValue(GenericTypeDescription.class));
assertThat(genericTypeDescription.getVariableSource(), nullValue(TypeVariableSource.class));
assertThat(genericTypeDescription.getSymbol(), nullValue(String.class));
assertThat(genericTypeDescription.getLowerBounds().size(), is(0));
assertThat(genericTypeDescription.getUpperBounds().size(), is(0));
}

public static class SimpleParameterizedType {
List<String> foo;
}

public static class UpperBoundWildcardParameterizedType {
List<? extends String> foo;
}

public static class LowerBoundWildcardParameterizedType {
List<? super String> foo;
}
}
Expand Up @@ -2,9 +2,14 @@

import net.bytebuddy.description.type.AbstractTypeDescriptionTest;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.description.type.generic.GenericTypeDescription;
import org.junit.After;
import org.junit.Before;

import java.lang.reflect.Field;

import static net.bytebuddy.matcher.ElementMatchers.named;

public class TypePoolDefaultTypeDescriptionTest extends AbstractTypeDescriptionTest {

private TypePool typePool;
Expand All @@ -23,4 +28,13 @@ public void tearDown() throws Exception {
protected TypeDescription describe(Class<?> type) {
return typePool.describe(type.getName()).resolve();
}

@Override
protected GenericTypeDescription describe(Field field) {
return typePool.describe(field.getDeclaringClass().getName()).resolve()
.getDeclaredFields()
.filter(named(field.getName()))
.getOnly()
.getFieldTypeGen();
}
}

0 comments on commit b201098

Please sign in to comment.