diff options
author | Eric Cochran <Eric@NightlyNexus.com> | 2018-03-04 04:25:01 -0800 |
---|---|---|
committer | Jesse Wilson <jesse@swank.ca> | 2018-03-04 07:25:01 -0500 |
commit | adced314c48865463594bf58022f509090eef7af (patch) | |
tree | 05358ae2abd6945c95ee4dc2541a1fd5522d599f | |
parent | ee82208f4bc086e0b1334445f600789879fc7a78 (diff) | |
download | javapoet-adced314c48865463594bf58022f509090eef7af.tar.gz |
Use contextual type parameters for throws types. (#625)
-rw-r--r-- | src/main/java/com/squareup/javapoet/MethodSpec.java | 5 | ||||
-rw-r--r-- | src/test/java/com/squareup/javapoet/MethodSpecTest.java | 13 |
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() { |