Skip to content

Commit

Permalink
refactor(ast): Improves generic parameter type of setActualTypeRefere…
Browse files Browse the repository at this point in the history
…nces. (Closes INRIA#823)
  • Loading branch information
GerardPaligot authored and sjd78 committed Nov 3, 2016
1 parent 852d3ad commit e4e090c
Show file tree
Hide file tree
Showing 10 changed files with 20 additions and 9 deletions.
2 changes: 1 addition & 1 deletion src/main/java/spoon/reflect/code/CtConstructorCall.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public interface CtConstructorCall<T> extends CtTargetedExpression<T, CtExpressi
* @see CtExecutableReference#getActualTypeArguments()
*/
@Override
<T extends CtActualTypeContainer> T setActualTypeArguments(List<CtTypeReference<?>> actualTypeArguments);
<T extends CtActualTypeContainer> T setActualTypeArguments(List<? extends CtTypeReference<?>> actualTypeArguments);

/**
* Delegate to the executable reference of the constructor call.
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/spoon/reflect/code/CtInvocation.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public interface CtInvocation<T> extends CtAbstractInvocation<T>, CtStatement, C
* @see CtExecutableReference#getActualTypeArguments()
*/
@Override
<T extends CtActualTypeContainer> T setActualTypeArguments(List<CtTypeReference<?>> actualTypeArguments);
<T extends CtActualTypeContainer> T setActualTypeArguments(List<? extends CtTypeReference<?>> actualTypeArguments);

/**
* Delegate to the executable reference of the invocation.
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/spoon/reflect/code/CtNewClass.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public interface CtNewClass<T> extends CtConstructorCall<T> {
* @see CtExecutableReference#getActualTypeArguments()
*/
@Override
<T extends CtActualTypeContainer> T setActualTypeArguments(List<CtTypeReference<?>> actualTypeArguments);
<T extends CtActualTypeContainer> T setActualTypeArguments(List<? extends CtTypeReference<?>> actualTypeArguments);

/**
* Delegate to the executable reference of the new class.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public interface CtActualTypeContainer {
/**
* Sets the type arguments.
*/
<T extends CtActualTypeContainer> T setActualTypeArguments(List<CtTypeReference<?>> actualTypeArguments);
<T extends CtActualTypeContainer> T setActualTypeArguments(List<? extends CtTypeReference<?>> actualTypeArguments);

/**
* Adds a type argument.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ public List<CtTypeReference<?>> getActualTypeArguments() {
}

@Override
public <T extends CtActualTypeContainer> T setActualTypeArguments(List<CtTypeReference<?>> actualTypeArguments) {
public <T extends CtActualTypeContainer> T setActualTypeArguments(List<? extends CtTypeReference<?>> actualTypeArguments) {
if (getExecutable() != null) {
getExecutable().setActualTypeArguments(actualTypeArguments);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ public List<CtTypeReference<?>> getActualTypeArguments() {
}

@Override
public <T extends CtActualTypeContainer> T setActualTypeArguments(List<CtTypeReference<?>> actualTypeArguments) {
public <T extends CtActualTypeContainer> T setActualTypeArguments(List<? extends CtTypeReference<?>> actualTypeArguments) {
if (getExecutable() != null) {
getExecutable().setActualTypeArguments(actualTypeArguments);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ public boolean isOverriding(CtExecutableReference<?> executable) {
}

@Override
public <C extends CtActualTypeContainer> C setActualTypeArguments(List<CtTypeReference<?>> actualTypeArguments) {
public <C extends CtActualTypeContainer> C setActualTypeArguments(List<? extends CtTypeReference<?>> actualTypeArguments) {
if (actualTypeArguments == null || actualTypeArguments.isEmpty()) {
this.actualTypeArguments = CtElementImpl.emptyList();
return (C) this;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ public Class<Object> getActualClass() {
}

@Override
public <C extends CtActualTypeContainer> C setActualTypeArguments(List<CtTypeReference<?>> actualTypeArguments) {
public <C extends CtActualTypeContainer> C setActualTypeArguments(List<? extends CtTypeReference<?>> actualTypeArguments) {
throw new UnsupportedOperationException("Type parameter can't have an actual type argument");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,7 @@ public boolean isSubtypeOf(CtTypeReference<?> type) {
}

@Override
public <C extends CtActualTypeContainer> C setActualTypeArguments(List<CtTypeReference<?>> actualTypeArguments) {
public <C extends CtActualTypeContainer> C setActualTypeArguments(List<? extends CtTypeReference<?>> actualTypeArguments) {
if (actualTypeArguments == null || actualTypeArguments.isEmpty()) {
this.actualTypeArguments = CtElementImpl.emptyList();
return (C) this;
Expand Down
11 changes: 11 additions & 0 deletions src/test/java/spoon/test/reference/TypeReferenceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -535,4 +535,15 @@ public void testCorrectEnumParent() {
CtTypeReference correctParent = launcher.getFactory().Type().createReference(java.lang.Enum.class);
assertEquals(correctParent, e.getReference().getSuperclass());
}

@Test
public void testImproveAPIActualTypeReference() throws Exception {
final Factory factory = createFactory();
List<CtTypeParameterReference> typeParameterReferences = new ArrayList<>();
typeParameterReferences.add(factory.Type().createTypeParameterReference("Foo"));
final CtTypeReference<Object> typeReference = factory.Core().createTypeReference();
typeReference.setActualTypeArguments(typeParameterReferences);

assertEquals(1, typeReference.getActualTypeArguments().size());
}
}

0 comments on commit e4e090c

Please sign in to comment.