diff options
author | Eric Cochran <Eric@NightlyNexus.com> | 2018-03-04 04:22:03 -0800 |
---|---|---|
committer | Jesse Wilson <jesse@swank.ca> | 2018-03-04 07:22:03 -0500 |
commit | ee82208f4bc086e0b1334445f600789879fc7a78 (patch) | |
tree | ae7c5c5ae85321235a725c90517ce4555fb7a7b4 | |
parent | b314337267eb36462c3bf67a87494e614c9c8b40 (diff) | |
download | platform_external_javapoet-ee82208f4bc086e0b1334445f600789879fc7a78.tar.gz platform_external_javapoet-ee82208f4bc086e0b1334445f600789879fc7a78.tar.bz2 platform_external_javapoet-ee82208f4bc086e0b1334445f600789879fc7a78.zip |
Disable overriding methods in final classes. (#626)
-rw-r--r-- | src/main/java/com/squareup/javapoet/MethodSpec.java | 6 | ||||
-rw-r--r-- | src/test/java/com/squareup/javapoet/MethodSpecTest.java | 17 |
2 files changed, 23 insertions, 0 deletions
diff --git a/src/main/java/com/squareup/javapoet/MethodSpec.java b/src/main/java/com/squareup/javapoet/MethodSpec.java index eff5410..67a7fb2 100644 --- a/src/main/java/com/squareup/javapoet/MethodSpec.java +++ b/src/main/java/com/squareup/javapoet/MethodSpec.java @@ -25,6 +25,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import javax.lang.model.SourceVersion; +import javax.lang.model.element.Element; import javax.lang.model.element.ExecutableElement; import javax.lang.model.element.Modifier; import javax.lang.model.element.TypeParameterElement; @@ -188,6 +189,11 @@ public final class MethodSpec { public static Builder overriding(ExecutableElement method) { checkNotNull(method, "method == null"); + Element enclosingClass = method.getEnclosingElement(); + if (enclosingClass.getModifiers().contains(Modifier.FINAL)) { + throw new IllegalArgumentException("Cannot override method on final class " + enclosingClass); + } + Set<Modifier> modifiers = method.getModifiers(); if (modifiers.contains(Modifier.PRIVATE) || modifiers.contains(Modifier.FINAL) diff --git a/src/test/java/com/squareup/javapoet/MethodSpecTest.java b/src/test/java/com/squareup/javapoet/MethodSpecTest.java index 96923eb..334a6ae 100644 --- a/src/test/java/com/squareup/javapoet/MethodSpecTest.java +++ b/src/test/java/com/squareup/javapoet/MethodSpecTest.java @@ -123,6 +123,11 @@ public final class MethodSpecTest { interface ExtendsIterableWithDefaultMethods extends Iterable<Object> { } + final class FinalClass { + void method() { + } + } + @Test public void overrideEverything() { TypeElement classElement = getElement(Everything.class); ExecutableElement methodElement = getOnlyElement(methodsIn(classElement.getEnclosedElements())); @@ -177,6 +182,18 @@ public final class MethodSpecTest { + "}\n"); } + @Test public void overrideFinalClassMethod() { + TypeElement classElement = getElement(FinalClass.class); + List<ExecutableElement> methods = methodsIn(elements.getAllMembers(classElement)); + try { + MethodSpec.overriding(findFirst(methods, "method")); + fail(); + } catch (IllegalArgumentException expected) { + assertThat(expected).hasMessageThat().isEqualTo( + "Cannot override method on final class com.squareup.javapoet.MethodSpecTest.FinalClass"); + } + } + @Test public void overrideInvalidModifiers() { ExecutableElement method = mock(ExecutableElement.class); when(method.getModifiers()).thenReturn(ImmutableSet.of(Modifier.FINAL)); |