TestMultipleLevelGenericInheritance.java
package com.thoughtworks.qdox;
import com.thoughtworks.qdox.model.JavaClass;
import com.thoughtworks.qdox.model.JavaMethod;
import com.thoughtworks.qdox.model.JavaType;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.io.Reader;
import java.io.StringReader;
import java.util.List;
public class TestMultipleLevelGenericInheritance
{
private JavaProjectBuilder builder;
@BeforeEach
public void setUp()
{
builder = createBuilder();
}
@Test
public void testMethodParametersOfIheritedMethodsAreCorrect()
{
final JavaClass clazz = builder.getClassByName( "HelloService" );
final List<JavaMethod> methods = clazz.getMethods( true );
JavaMethod method;
method = methods.get( 0 );
Assertions.assertEquals("get", method.getName());
method = methods.get( 1 );
Assertions.assertEquals("set", method.getName());
assertFirstParameterIs( "Dto", method );
method = methods.get( 2 );
Assertions.assertEquals("validate", method.getName());
assertFirstParameterIs( "Dto", method );
}
private void assertFirstParameterIs( final String type, final JavaMethod method )
{
List<JavaType> parameterTypes;
parameterTypes = method.getParameterTypes( true );
Assertions.assertEquals(1, parameterTypes.size());
Assertions.assertEquals(type, parameterTypes.get( 0 ).getCanonicalName());
}
private JavaProjectBuilder createBuilder()
{
final JavaProjectBuilder builder = new JavaProjectBuilder();
builder.addSource( getDtoClass() );
builder.addSource( getGetterClass() );
builder.addSource( getSetterClass() );
builder.addSource( getValidatorClass() );
builder.addSource( getHelloService() );
return builder;
}
private Reader getDtoClass()
{
return new StringReader( "public class Dto {}" );
}
private Reader getGetterClass()
{
return new StringReader( "public interface Getter<T extends Object> { T get(); }" );
}
private Reader getValidatorClass()
{
return new StringReader( "public interface Validator<T extends Object> { void validate(T obj); }" );
}
private Reader getSetterClass()
{
return new StringReader( "public interface Setter<T extends Object> extends Validator<T> { void set(T obj); }" );
}
private Reader getHelloService()
{
return new StringReader( "public interface HelloService extends Getter<Dto>, Setter<Dto> {}" );
}
}