Skip to content

Commit

Permalink
Use contextual type parameters for throws types. (square#625)
Browse files Browse the repository at this point in the history
  • Loading branch information
NightlyNexus authored and swankjesse committed Mar 4, 2018
1 parent ee82208 commit adced31
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 1 deletion.
5 changes: 5 additions & 0 deletions src/main/java/com/squareup/javapoet/MethodSpec.java
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,7 @@ public static Builder overriding(
ExecutableElement method, DeclaredType enclosing, Types types) {
ExecutableType executableType = (ExecutableType) types.asMemberOf(enclosing, method);
List<? extends TypeMirror> resolvedParameterTypes = executableType.getParameterTypes();
List<? extends TypeMirror> resolvedThrownTypes = executableType.getThrownTypes();
TypeMirror resolvedReturnType = executableType.getReturnType();

Builder builder = overriding(method);
Expand All @@ -252,6 +253,10 @@ public static Builder overriding(
TypeName type = TypeName.get(resolvedParameterTypes.get(i));
builder.parameters.set(i, parameter.toBuilder(type, parameter.name).build());
}
builder.exceptions.clear();
for (int i = 0, size = resolvedThrownTypes.size(); i < size; i++) {
builder.addException(TypeName.get(resolvedThrownTypes.get(i)));
}

return builder;
}
Expand Down
13 changes: 12 additions & 1 deletion src/test/java/com/squareup/javapoet/MethodSpecTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,12 @@ abstract static class HasAnnotation {
@Override public abstract String toString();
}

interface ExtendsOthers extends Callable<Integer>, Comparable<ExtendsOthers> {
interface Throws<R extends RuntimeException> {
void fail() throws R;
}

interface ExtendsOthers extends Callable<Integer>, Comparable<ExtendsOthers>,
Throws<IllegalStateException> {
}

interface ExtendsIterableWithDefaultMethods extends Iterable<Object> {
Expand Down Expand Up @@ -180,6 +185,12 @@ void method() {
+ "@java.lang.Override\n"
+ "public int compareTo(" + ExtendsOthers.class.getCanonicalName() + " arg0) {\n"
+ "}\n");
exec = findFirst(methods, "fail");
method = MethodSpec.overriding(exec, classType, types).build();
assertThat(method.toString()).isEqualTo(""
+ "@java.lang.Override\n"
+ "public void fail() throws java.lang.IllegalStateException {\n"
+ "}\n");
}

@Test public void overrideFinalClassMethod() {
Expand Down

0 comments on commit adced31

Please sign in to comment.