aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Cochran <Eric@NightlyNexus.com>2018-03-04 04:25:01 -0800
committerJesse Wilson <jesse@swank.ca>2018-03-04 07:25:01 -0500
commitadced314c48865463594bf58022f509090eef7af (patch)
tree05358ae2abd6945c95ee4dc2541a1fd5522d599f
parentee82208f4bc086e0b1334445f600789879fc7a78 (diff)
downloadjavapoet-adced314c48865463594bf58022f509090eef7af.tar.gz
Use contextual type parameters for throws types. (#625)
-rw-r--r--src/main/java/com/squareup/javapoet/MethodSpec.java5
-rw-r--r--src/test/java/com/squareup/javapoet/MethodSpecTest.java13
2 files changed, 17 insertions, 1 deletions
diff --git a/src/main/java/com/squareup/javapoet/MethodSpec.java b/src/main/java/com/squareup/javapoet/MethodSpec.java
index 67a7fb2..453d64d 100644
--- a/src/main/java/com/squareup/javapoet/MethodSpec.java
+++ b/src/main/java/com/squareup/javapoet/MethodSpec.java
@@ -243,6 +243,7 @@ public final class MethodSpec {
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);
@@ -252,6 +253,10 @@ public final class MethodSpec {
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;
}
diff --git a/src/test/java/com/squareup/javapoet/MethodSpecTest.java b/src/test/java/com/squareup/javapoet/MethodSpecTest.java
index 334a6ae..8b09cc1 100644
--- a/src/test/java/com/squareup/javapoet/MethodSpecTest.java
+++ b/src/test/java/com/squareup/javapoet/MethodSpecTest.java
@@ -117,7 +117,12 @@ public final class MethodSpecTest {
@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> {
@@ -180,6 +185,12 @@ public final class MethodSpecTest {
+ "@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() {